HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //snap/chromium/current/snap/snapcraft.yaml
name: chromium
adopt-info: chromium
summary: Chromium web browser, open-source version of Chrome
source-code: https://code.launchpad.net/~chromium-team/chromium-browser/+git/snap-from-source/+ref/stable
description: |
 An open-source browser project that aims to build a safer, faster, and more
 stable way for all Internet users to experience the web.
confinement: strict
base: core22
assumes:
  - snapd2.55 # >=2.55 needed for the cups interface
compression: lzo

apps:
  chromium:
    extensions: [gnome]
    command: bin/chromium.launcher
    desktop: bin/chromium.desktop
    common-id: chromium-browser.desktop
    environment:
      CHROME_DESKTOP: chromium.desktop
      CHROME_CONFIG_HOME: $SNAP_USER_COMMON
      GTK_USE_PORTAL: 1
    plugs:
      - audio-playback
      - audio-record
      - bluez # for Web Bluetooth (https://launchpad.net/bugs/1887201)
      - camera
      - cups
      - hardware-observe
      - hidraw
      - home
      - joystick
      - kerberos-tickets
      - mount-observe
      - network
      - network-manager
      - password-manager-service
      - pcscd
      - raw-usb # for WebUSB (https://launchpad.net/bugs/1780678)
      - removable-media
      - screen-inhibit-control
      - serial-port
      - system-packages-doc
      - u2f-devices
      - unity7 # required for xdg-open to work
      - upower-observe
    slots:
      - mpris
  chromedriver:
    extensions: [gnome]
    command: usr/lib/chromium-browser/chromedriver
    plugs:
      - network-bind
      # + all the plugs required by chromium, so that when chromedriver
      # executes chromium it inherits the correct set of permissions
      - audio-playback
      - audio-record
      - bluez
      - camera
      - cups
      - hardware-observe
      - hidraw
      - home
      - joystick
      - kerberos-tickets
      - mount-observe
      - network
      - network-manager
      - password-manager-service
      - pcscd
      - raw-usb
      - removable-media
      - screen-inhibit-control
      - serial-port
      - system-packages-doc
      - u2f-devices
      - unity7
      - upower-observe
    slots:
      - mpris
  daemon:
    extensions: [gnome]
    daemon: simple
    command: bin/chromium.launcher
    command-chain:
      - bin/daemon.wrapper
      - snap/command-chain/desktop-launch
    desktop: bin/daemon.desktop
    restart-delay: 3s
    install-mode: disable
    environment:
      CHROME_CONFIG_HOME: $SNAP_USER_COMMON
      PIPEWIRE_CONFIG_NAME: $SNAP/usr/share/pipewire/pipewire.conf
      PIPEWIRE_MODULE_DIR: $SNAP/usr/lib/$SNAPCRAFT_ARCH_TRIPLET/pipewire-0.3
      SPA_PLUGIN_DIR: $SNAP/usr/lib/$SNAPCRAFT_ARCH_TRIPLET/spa-0.2
    plugs:
      - audio-playback
      - audio-record
      - bluez # for Web Bluetooth (https://launchpad.net/bugs/1887201)
      - camera
      - cups
      - home
      - joystick
      - mount-observe
      - network
      - network-manager
      - password-manager-service
      - pulseaudio # remove once snapd 2.41 is available everywhere
      - raw-usb # for WebUSB (https://launchpad.net/bugs/1780678)
      - removable-media
      - screen-inhibit-control
      - system-packages-doc
      - u2f-devices
      - unity7 # required for xdg-open to work
      - upower-observe

plugs:
  # This is not used or needed for anything other than to trigger automatic
  # installation of the cups snap via "default-provider: cups"
  install-cups-runtime-dependency:
    interface: content
    content: foo
    default-provider: cups
    target: $SNAP_DATA/foo
  browser-sandbox:
    interface: browser-support
    allow-sandbox: true
  dot-local-share-applications:
    interface: personal-files
    write: [$HOME/.local/share/applications]
  dot-local-share-icons:
    interface: personal-files
    write: [$HOME/.local/share/icons]
  chromium-config:
    interface: personal-files
    read: [$HOME/.config/chromium, $HOME/.chromium-browser.init]
  etc-chromium-browser-policies:
    interface: system-files
    read: [/etc/chromium-browser/policies]

layout:
  /usr/lib/man-db:
    bind: $SNAP/usr/lib/man-db
  /usr/share/libdrm:
    bind: $SNAP/gnome-platform/usr/share/libdrm
  /usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/opensc-pkcs11.so:
    bind-file: $SNAP/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/opensc-pkcs11.so

parts:
  chromium:
    plugin: nil
    source: https://commondatastorage.googleapis.com/chromium-browser-official/chromium-140.0.7339.185.tar.xz
    source-checksum: sha512/7dc7f092ff0111740dbe0b16a256826e5ec95789705b45a26cb668478a4108c4fe15c3bccb8587848e2d116b77d960a35c3faf101e06d4fc4b1e5356cc96ffb4
    build-environment:
      - RUSTC_BOOTSTRAP: 1
      - CC:  /snap/llvm-chromium/current/bin/clang
      - CXX: /snap/llvm-chromium/current/bin/clang++
      - AR:  /snap/llvm-chromium/current/bin/llvm-ar
    after:
      - bindgen
      - launcher
      - manpage
      - pipewire
      - va-drivers
      - libva
    build-snaps: 
      - llvm-chromium/latest/stable/core22
    build-packages:
      - chrpath
      - cmake
      - default-jre-headless
      - elfutils
      - git
      - gperf
      - gzip
      - libasound2-dev
      - libcap-dev
      - libcups2-dev
      - libcurl4-openssl-dev
      - libevdev-dev
      - libffi-dev
      - libicu-dev
      - libkrb5-dev
      - libnss3-dev
      - libpam0g-dev
      - libpci-dev
      - libssl-dev
      - libsystemd-dev
      - libudev-dev
      - libxshmfence-dev
      - libxss-dev
      - lsb-release
      - make
      - mesa-common-dev
      - ninja-build
      - pkg-config
      - python3-pkg-resources
      - python3-xcbgen
      - quilt
      - qtbase5-dev
      - rustc-1.82
      - sed
      - wget
      - xcb-proto
      - yasm
    stage-packages:
      - libnss3
      - libpci3
      - libxss1
      - opensc-pkcs11
    override-pull: |
      set -eux
      craftctl default
      . chrome/VERSION
      craftctl set version="$MAJOR.$MINOR.$BUILD.$PATCH"
    override-build: |
      set -ex +u
      trap failed 0
      failed(){
        find / -name '*libadler*'
      }

      # Otherwise who really can claim to know what they contain?
      printf '%s\n'               \
        "$CRAFT_STAGE"            \
        "$CRAFT_PART_INSTALL"     \
        "$CRAFT_PART_BUILD"       \
        "$CRAFT_PART_SRC"         \
        "$CRAFT_PART_SRC_WORK"    \
        "$CRAFT_PART_BUILD_WORK"  \
        "$CRAFT_PROJECT_DIR"      \
        "$CRAFT_PRIME"
      set -u

      ln -sf /usr/bin/rustc-1.82          /usr/bin/rustc
      ln -sf /usr/bin/rust-1.82-clang     /usr/bin/rust-clang
      ln -sf /usr/bin/rust-1.82-lld       /usr/bin/rust-lld
      ln -sf /usr/bin/rust-1.82-llvm-dwp  /usr/bin/rust-llvm-dwp
      ln -sf /usr/bin/rustdoc-1.82        /usr/bin/rustdoc
      rustc --version

      # Pipewire must be a build-depends of one of those build-packages which is causing conflict.
      find $CRAFT_PART_SRC/.. -type d \( -name pipewire-0.3 -o -name spa-0.2 \) -exec rm -rf {} +

      # Find all patches that don't apply anymore before running Quilt, as it
      # stops at the 1st unappliable and doesn't tells us how the file looks.
      d=$CRAFT_PROJECT_DIR/patches
      while IFS= read -r p; do
        < "$d/$p" patch --dry-run -p1 -o "$d/$p.out" || cat "$d/$p.out"
      done < "$d/series"
      QUILT_PATCHES=$d quilt push -a

      # Get the Node.js binaries needed to build chromium's WebUI
      third_party/node/update_node_binaries

      # Build GN
      cp tools/gn/bootstrap/last_commit_position.h tools/gn/src/
      python3 tools/gn/bootstrap/bootstrap.py --skip-generate-buildfiles

      # Build chromium
      OUT=out/Release
      mkdir -p $OUT
      cp $CRAFT_PROJECT_DIR/args.gn $OUT/
      if [ $CRAFT_TARGET_ARCH = "armhf" ]; then
        # Do not build with ThinLTO either, because it requires lld
        echo "use_thin_lto = false" >> $OUT/args.gn
        # Do not build with NEON on armhf (https://launchpad.net/bugs/1884856)
        echo "arm_use_neon = false" >> $OUT/args.gn
      fi

      $OUT/gn gen $OUT
      # Add -v to see the exact command used for each build step.
      ninja -C $OUT chrome chrome_sandbox chromedriver

      # Strip debug symbols off the chrome binary
      eu-strip $OUT/chrome

      # Install to $CRAFT_PART_INSTALL
      mkdir -p $CRAFT_PART_INSTALL
      cp chrome/app/theme/chromium/linux/product_logo_256.png $CRAFT_PART_INSTALL/chromium.png
      T=$CRAFT_PART_INSTALL/usr/lib/chromium-browser
      mkdir -p $T
      cd $OUT
      cp chrome chromedriver chrome_crashpad_handler \
          chrome_*.pak resources.pak \
          icudtl.dat \
          libEGL.so libGLESv2.so libffmpeg.so \
          libvk_swiftshader.so libvulkan.so.1 vk_swiftshader_icd.json \
          v8_context_snapshot.bin \
          $T/
      cp chrome_sandbox $T/chrome-sandbox
      mkdir $T/locales
      cp locales/*.pak $T/locales/
      if [ -d swiftshader ]; then
        # not built on arm*
        mkdir $T/swiftshader
        cp swiftshader/*.so $T/swiftshader/
      fi

      # Fix setuid bits on the sandbox executable
      # (ref: https://forum.snapcraft.io/t/call-for-testing-chromium-snap/1714/16)
      chmod 4555 $CRAFT_PART_INSTALL/usr/lib/chromium-browser/chrome-sandbox

      # Generate and install the man page (see the "manpage" part)
      mkdir -p $CRAFT_PART_INSTALL/man1
      sed \
          -e "s/@@PACKAGE@@/chromium/g" \
          -e "s/@@MENUNAME@@/chromium/g" \
          -e "s:\$HOME/.config:\$SNAP_USER_DATA/.config:g" \
          -e "s:\$HOME/.cache:\$SNAP_USER_COMMON/.cache:g" \
          $CRAFT_PART_SRC/chrome/app/resources/manpage.1.in \
          > $CRAFT_PART_INSTALL/man1/chrome.1
      gzip -9n $CRAFT_PART_INSTALL/man1/chrome.1
    override-stage: |
      rm -rf $CRAFT_PART_INSTALL/usr/lib/*/libsecret-*
      # Workaround copied from Firefox for empty libdrm LP:2054887 LP:2055273
      # https://git.launchpad.net/~mozilla-snaps/firefox-snap/+git/firefox-snap/commit/?id=00059b6a9aea8e4ce5a239bd9e649f60736dd947
      mkdir $CRAFT_PART_INSTALL/gnome-platform
      craftctl default
    prime:
      - -etc/init.d
      - -etc/xdg
      - -usr/include
      - -usr/share/doc
      - -usr/share/lintian
      - -usr/share/man

  launcher:
    plugin: dump
    source: launcher
    organize:
      '*': bin/

  firstrun:
    plugin: dump
    source: firstrun
    organize:
      '*': firstrun/

  # Stage packages required for the "man" binary, which is invoked when
  # chromium is called with the "-h" (or "--help") argument
  # (see https://launchpad.net/bugs/1848083).
  manpage:
    plugin: nil
    stage-packages:
      - groff-base
      - libgdbm6
      - libpipeline1
      - man-db
    prime:
      - -etc
      - -usr/lib/tmpfiles.d
      - -usr/share/bug
      - -usr/share/calendar
      - -usr/share/doc
      - -usr/share/doc-base
      - -usr/share/lintian
      - -usr/share/man
      - -usr/share/man-db
      - -var

  # Create a symlink xdg-email -> xdg-open, as the latter is perfectly able to
  # handle mailto: URLs (see https://launchpad.net/bugs/1849774).
  # xdg-open is a wrapper provided by the core snap.
  xdg-email:
    plugin: nil
    override-pull: ""
    override-prime: |
      set -eux
      mkdir -p usr/bin
      cd usr/bin
      ln -s /usr/bin/xdg-open xdg-email

  # So that Chromium can install icons for progressive web applications.
  xdg-icon-resource:
    plugin: nil
    stage-packages: [xdg-utils]
    stage: [usr/bin/xdg-icon-resource]
    override-prime: |
      sed -i '/^xdg_user_dir="$XDG_DATA_HOME"$/s|".*"|$SNAP_REAL_HOME/.local/share|' /build/chromium/stage/usr/bin/xdg-icon-resource
      craftctl default

  libsecret:
    source: https://gitlab.gnome.org/GNOME/libsecret.git
    source-depth: 1
    source-tag: '0.20.5'
    plugin: meson
    meson-parameters:
      - --prefix=/usr
      - -Dgtk_doc=false
      - -Dmanpage=false
      - -Dgcrypt=false  # https://gitlab.gnome.org/GNOME/libsecret/-/issues/49
    stage:
      - usr/lib/*/libsecret-*

  # VA-API drivers for HW-accelerated video decoding
  va-drivers:
    plugin: nil
    stage-packages:
      - mesa-va-drivers
      - on amd64:
        - i965-va-driver
        - intel-media-va-driver
    stage:
      - usr/lib/*/dri/*_video.so

  # Newer PipeWire is needed to build Chromium; However, Chromium does not
  # actually need that newer version, 22.04's is good enough, and including
  # it in the snap would actually cause a crash!
  # https://launchpad.net/bugs/2074358
  pipewire:
    source: https://gitlab.freedesktop.org/pipewire/pipewire/-/archive/1.0.5/pipewire-1.0.5.tar.gz
    plugin: meson
    meson-parameters:
      - --prefix=/usr
      - --buildtype=release
      - --strip
      - -Dalsa=disabled
      - -Dpipewire-alsa=disabled
      - -Djack=disabled
      - -Dpipewire-jack=disabled
      - -Dselinux=disabled
      - -Dsession-managers=[]
    prime: ['-*']

  # https://git.launchpad.net/~liushuyu-011/+git/rust-bindgen-snap/tree/snapcraft.yaml
  bindgen:
    plugin: rust
    source: https://github.com/rust-lang/rust-bindgen/archive/refs/tags/v0.70.1.tar.gz
    rust-use-global-lto: true
    rust-path: ["bindgen-cli"]
    rust-no-default-features: true
    rust-features: ["logging"]
    build-snaps:
      - llvm-chromium
    build-packages:
      - libssl-dev
      - pkg-config
    build-attributes:
      - enable-patchelf
    build-environment:
      - CC:            /snap/llvm-chromium/current/bin/clang
      - CXX:           /snap/llvm-chromium/current/bin/clang++
      - LIBCLANG_PATH: /snap/llvm-chromium/current/lib
      - RUSTFLAGS: >
          -Clink-arg=-Wl,-rpath=/snap/llvm-chromium/current/lib

  libva:
    source: https://github.com/intel/libva/archive/refs/tags/2.22.0.tar.gz
    plugin: meson
    meson-parameters:
      - --prefix=/usr
    build-packages:
      - pkg-config
      - libdrm-dev
      - xorg-dev
      - libxcb-dri3-dev
      - libgl1-mesa-dev
      - libgl1-mesa-glx
      - libwayland-dev