summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorpat-s2019-07-01 07:38:30 +0200
committerpat-s2019-07-01 07:38:30 +0200
commitec58921e79c054037b688b658b13c3a851a9b596 (patch)
tree6dc74093ff10516c955d2a44569d45ac0286424d
downloadaur-ec58921e79c054037b688b658b13c3a851a9b596.tar.gz
v3.1.11
-rw-r--r--.SRCINFO100
-rw-r--r--PKGBUILD254
-rw-r--r--breakpad-glibc2.26.patch208
-rw-r--r--chromium-use-system-ffmpeg.patch22
-rw-r--r--chromium-use-system-re2.patch10
-rw-r--r--default_app-icon.patch22
-rw-r--r--dont-bootstrap-libchromiumcontent.patch11
-rw-r--r--dont-update-submodules.patch11
-rw-r--r--dont-use-sysroot.patch27
-rw-r--r--electron.desktop7
-rw-r--r--gyp-no-rpath.patch12
-rw-r--r--libchromiumcontent-remove-useless-patches.patch518
-rw-r--r--libchromiumcontent-settings.patch44
-rw-r--r--libchromiumcontent-sort-filenames.patch32
-rw-r--r--libchromiumcontent-static-library-only.patch43
-rw-r--r--libchromiumcontent-use-system-tools.patch34
-rw-r--r--no-clang-plugins.patch38
-rw-r--r--no-whole-archive.patch22
-rw-r--r--use-system-ffmpeg.patch21
-rw-r--r--use-system-libraries-in-node.patch31
20 files changed, 1467 insertions, 0 deletions
diff --git a/.SRCINFO b/.SRCINFO
new file mode 100644
index 000000000000..5c0dd69942f4
--- /dev/null
+++ b/.SRCINFO
@@ -0,0 +1,100 @@
+pkgbase = electron3
+ pkgdesc = Build cross platform desktop apps with web technologies
+ pkgver = 3.1.11
+ pkgrel = 1
+ url = https://electronjs.org/
+ arch = x86_64
+ license = MIT
+ license = custom
+ makedepends = clang
+ makedepends = git
+ makedepends = gn
+ makedepends = gperf
+ makedepends = harfbuzz-icu
+ makedepends = jsoncpp
+ makedepends = libnotify
+ makedepends = lld
+ makedepends = llvm
+ makedepends = ninja
+ makedepends = npm
+ makedepends = pciutils
+ makedepends = python2
+ makedepends = wget
+ makedepends = yasm
+ depends = c-ares
+ depends = ffmpeg
+ depends = gtk3
+ depends = http-parser
+ depends = libevent
+ depends = libxslt
+ depends = libxss
+ depends = minizip
+ depends = nss
+ depends = snappy
+ optdepends = kde-cli-tools: file deletion support (kioclient5)
+ optdepends = trash-cli: file deletion support (trash-put)
+ optdepends = xdg-utils: open URLs with desktop's default (xdg-email, xdg-open)
+ noextract = electron-chromium-66.0.3359.181.tar.bz2
+ source = git+https://github.com/electron/electron.git#tag=v3.1.11
+ source = git+https://github.com/boto/boto.git
+ source = breakpad::git+https://github.com/electron/chromium-breakpad.git
+ source = git+https://chromium.googlesource.com/chromium/src/tools/grit.git
+ source = git+https://github.com/electron/gyp.git
+ source = git+https://github.com/electron/libchromiumcontent.git
+ source = git+https://github.com/electron/node.git
+ source = pdf_viewer::git+https://github.com/electron/pdf-viewer.git
+ source = git+https://github.com/yaml/pyyaml.git
+ source = git+https://github.com/kennethreitz/requests.git
+ source = google-breakpad::git+https://chromium.googlesource.com/breakpad/breakpad/src
+ source = electron-chromium-66.0.3359.181.tar.bz2::https://s3.amazonaws.com/github-janky-artifacts/libchromiumcontent/linux/src/66.0.3359.181/src.tar.bz2
+ source = electron.desktop
+ source = default_app-icon.patch
+ source = dont-bootstrap-libchromiumcontent.patch
+ source = dont-update-submodules.patch
+ source = dont-use-sysroot.patch
+ source = no-clang-plugins.patch
+ source = no-whole-archive.patch
+ source = use-system-libraries-in-node.patch
+ source = use-system-ffmpeg.patch
+ source = breakpad-glibc2.26.patch
+ source = gyp-no-rpath.patch
+ source = libchromiumcontent-remove-useless-patches.patch
+ source = libchromiumcontent-settings.patch
+ source = libchromiumcontent-sort-filenames.patch
+ source = libchromiumcontent-static-library-only.patch
+ source = libchromiumcontent-use-system-tools.patch
+ source = chromium-use-system-ffmpeg.patch
+ source = chromium-use-system-re2.patch
+ sha512sums = SKIP
+ sha512sums = SKIP
+ sha512sums = SKIP
+ sha512sums = SKIP
+ sha512sums = SKIP
+ sha512sums = SKIP
+ sha512sums = SKIP
+ sha512sums = SKIP
+ sha512sums = SKIP
+ sha512sums = SKIP
+ sha512sums = SKIP
+ sha512sums = 64e3c617aba3af71213e8e36af38a39934f1f5c7eea53b2c09d9d9ac189397d8f3e95196f47552fbde83d9e062fb38f5ca48b6791caf5db42663b8a969cb7394
+ sha512sums = 418b9f1c796bb8b9276afc44975988ae8ebc8a31420a08303c9fcf0fa9628f1bafa128542c07c39274346f7391acad9d2e167be043eca742ce8b07c01b0f4e66
+ sha512sums = 7644e4cb173cb66d83cfc121b6eb9696d4b60ea119230e767aa17bb438c35a94b2d8fddd1369ebe052905c8c85765e927adb540a5c2310b4a2e9bb546597c4e6
+ sha512sums = 144bc8f7ad1ec1c99d59f4a8db375d786f3e4d042d295e860397c76b80e0deaeb4a931fb0e19f30ee1fe192f597f046e7716af6f7795320d5573a7b30c461d3d
+ sha512sums = b660afcc9a61527e6f532d12905ed65175c226ff46b23bc3fdb79b37f73c6961722887042c01ccddebefb0ec249206979506e12e78bbe468fd648b9d34094db9
+ sha512sums = e18f210dc4c225038c8093685bc9eb5cb957f7c1fd38998bd475ed15a771595738d72183adecc6434896b410b0692e6cadda0dbd5e99b6123e92443341bcb042
+ sha512sums = b1884d78d37b4c2690546c681a1b485539b2b9af928e8177192c08bf5985c08481ca4d75a4f2f5e8f0a6b73776df851835e32913bd77a2dcc2586a9efb1f8d63
+ sha512sums = 7f48da3c06155bd15bc938ce4ae8f95185dc8b51d924602d8b905db25083aba3fe1d095c087eeff11a274aa21874a0c986add52bcac7a5c0c40b62c91c60bdfa
+ sha512sums = 9b2d16d51d092901db8738ad4a520a6a06b42326201866069dcd2ae5b7a393cc7097d0eef752866a11072c61ab7a1dc60c175e8c60aa600d88088dff6f8e29f1
+ sha512sums = 4e77ccd0aefe8bb0885cea88ceb5ef362e7838677c622427510027cd9866180345b7aa55be7dcacf61a28ba5b609cccb5c5fc3ca407f6ebf7ac21f5d43027575
+ sha512sums = 2dd594a07f8ce62a7706a0365d764ab3ee3cc2d050d6ae4460db3152269e84f43516438a4f48f47fc54fe758a70c462baed6b7defa8b2bd277e67cb1bae8da12
+ sha512sums = d77a2045f03c1327eb78517028c083e8965297a41d5a81df8c7dac5a8500aa242faa644a38be5d12914b68ba3a0b944c1bfe6dbfd7b88b1a0aeeec1d87a1619a
+ sha512sums = 3941928af296d14e82232824aebb2a3eaddba4211c4d383f2c98d2394500ddd5847e2efd4044c1d4bdbb44d145d55aab5d5b111381305398bbf356bdfc9ee10c
+ sha512sums = 9e1eea0ae01852a32ff3c391156da04fe8abba632890a3a5599471f415c84ac7d8ffdc5cf1317dcd7a17c043d4658267a9c9504dcd9f27168b1239a69c659995
+ sha512sums = 5e14b4bff2746b7aaf6c6f53fb69949e51d999402c47b6f957cc87466b06867aef10471ad28e750401f1882c9225b8d42c61d57c71b536e215e9db69a52207d5
+ sha512sums = cde43f9479cbb572abf6214ed448b0074feb3b0f8ba69c12ab929d1ac81ccd192cb7b9878d14fa65cebdc2d63bceecd4369678dbd27ee3ca557f6b8c2b1f2af7
+ sha512sums = 16418d54549e605cc55dbcc0efab4dbe01c62f85604c552a641dd83de961d42d7843c72831e29f98f3f5fb173c73a6feee5300dcb8a19388d71a481167d3f4a9
+ sha512sums = c186d1e76f68f412779b8ccac2a6ea84614b73e51d27cfdfcba6e0be04cb009a9f4e04e1dca03a0c5a5aa34656e52c980288f4985a4cacefc874ab27e55f62c3
+ sha512sums = 5552e8918462f6c3a4e1baef3c22b57d70c732766945ea0b39f63df7d7b8fca9646f1f9b28b0528fa586799842c949298fc97e1041875da0ca1aacff046f6c9b
+
+pkgname = electron3
+
diff --git a/PKGBUILD b/PKGBUILD
new file mode 100644
index 000000000000..df0c5a3304d9
--- /dev/null
+++ b/PKGBUILD
@@ -0,0 +1,254 @@
+# Maintainer: Patrick Schratz <patrick.schratz@gmail.com>
+# adapted from last v3 build of community/electron
+
+_chromiumver=66.0.3359.181
+pkgname=electron3
+pkgver=3.1.11
+pkgrel=1
+pkgdesc='Build cross platform desktop apps with web technologies'
+arch=('x86_64')
+url='https://electronjs.org/'
+license=('MIT' 'custom')
+depends=('c-ares' 'ffmpeg' 'gtk3' 'http-parser' 'libevent' 'libxslt' 'libxss'
+ 'minizip' 'nss' 'snappy')
+makedepends=('clang' 'git' 'gn' 'gperf' 'harfbuzz-icu' 'jsoncpp' 'libnotify'
+ 'lld' 'llvm' 'ninja' 'npm' 'pciutils' 'python2' 'wget' 'yasm')
+optdepends=('kde-cli-tools: file deletion support (kioclient5)'
+ 'trash-cli: file deletion support (trash-put)'
+ "xdg-utils: open URLs with desktop's default (xdg-email, xdg-open)")
+source=("git+https://github.com/electron/electron.git#tag=v${pkgver}"
+ 'git+https://github.com/boto/boto.git'
+ 'breakpad::git+https://github.com/electron/chromium-breakpad.git'
+ 'git+https://chromium.googlesource.com/chromium/src/tools/grit.git'
+ 'git+https://github.com/electron/gyp.git'
+ "git+https://github.com/electron/libchromiumcontent.git"
+ 'git+https://github.com/electron/node.git'
+ 'pdf_viewer::git+https://github.com/electron/pdf-viewer.git'
+ 'git+https://github.com/yaml/pyyaml.git'
+ 'git+https://github.com/kennethreitz/requests.git'
+ 'google-breakpad::git+https://chromium.googlesource.com/breakpad/breakpad/src'
+ "electron-chromium-${_chromiumver}.tar.bz2::https://s3.amazonaws.com/github-janky-artifacts/libchromiumcontent/linux/src/${_chromiumver}/src.tar.bz2"
+ 'electron.desktop'
+ 'default_app-icon.patch'
+ 'dont-bootstrap-libchromiumcontent.patch'
+ 'dont-update-submodules.patch'
+ 'dont-use-sysroot.patch'
+ 'no-clang-plugins.patch'
+ 'no-whole-archive.patch'
+ 'use-system-libraries-in-node.patch'
+ 'use-system-ffmpeg.patch'
+ 'breakpad-glibc2.26.patch'
+ 'gyp-no-rpath.patch'
+ 'libchromiumcontent-remove-useless-patches.patch'
+ 'libchromiumcontent-settings.patch'
+ 'libchromiumcontent-sort-filenames.patch'
+ 'libchromiumcontent-static-library-only.patch'
+ 'libchromiumcontent-use-system-tools.patch'
+ 'chromium-use-system-ffmpeg.patch'
+ 'chromium-use-system-re2.patch'
+ )
+noextract=("electron-chromium-${_chromiumver}.tar.bz2")
+sha512sums=('SKIP'
+ 'SKIP'
+ 'SKIP'
+ 'SKIP'
+ 'SKIP'
+ 'SKIP'
+ 'SKIP'
+ 'SKIP'
+ 'SKIP'
+ 'SKIP'
+ 'SKIP'
+ '64e3c617aba3af71213e8e36af38a39934f1f5c7eea53b2c09d9d9ac189397d8f3e95196f47552fbde83d9e062fb38f5ca48b6791caf5db42663b8a969cb7394'
+ '418b9f1c796bb8b9276afc44975988ae8ebc8a31420a08303c9fcf0fa9628f1bafa128542c07c39274346f7391acad9d2e167be043eca742ce8b07c01b0f4e66'
+ '7644e4cb173cb66d83cfc121b6eb9696d4b60ea119230e767aa17bb438c35a94b2d8fddd1369ebe052905c8c85765e927adb540a5c2310b4a2e9bb546597c4e6'
+ '144bc8f7ad1ec1c99d59f4a8db375d786f3e4d042d295e860397c76b80e0deaeb4a931fb0e19f30ee1fe192f597f046e7716af6f7795320d5573a7b30c461d3d'
+ 'b660afcc9a61527e6f532d12905ed65175c226ff46b23bc3fdb79b37f73c6961722887042c01ccddebefb0ec249206979506e12e78bbe468fd648b9d34094db9'
+ 'e18f210dc4c225038c8093685bc9eb5cb957f7c1fd38998bd475ed15a771595738d72183adecc6434896b410b0692e6cadda0dbd5e99b6123e92443341bcb042'
+ 'b1884d78d37b4c2690546c681a1b485539b2b9af928e8177192c08bf5985c08481ca4d75a4f2f5e8f0a6b73776df851835e32913bd77a2dcc2586a9efb1f8d63'
+ '7f48da3c06155bd15bc938ce4ae8f95185dc8b51d924602d8b905db25083aba3fe1d095c087eeff11a274aa21874a0c986add52bcac7a5c0c40b62c91c60bdfa'
+ '9b2d16d51d092901db8738ad4a520a6a06b42326201866069dcd2ae5b7a393cc7097d0eef752866a11072c61ab7a1dc60c175e8c60aa600d88088dff6f8e29f1'
+ '4e77ccd0aefe8bb0885cea88ceb5ef362e7838677c622427510027cd9866180345b7aa55be7dcacf61a28ba5b609cccb5c5fc3ca407f6ebf7ac21f5d43027575'
+ '2dd594a07f8ce62a7706a0365d764ab3ee3cc2d050d6ae4460db3152269e84f43516438a4f48f47fc54fe758a70c462baed6b7defa8b2bd277e67cb1bae8da12'
+ 'd77a2045f03c1327eb78517028c083e8965297a41d5a81df8c7dac5a8500aa242faa644a38be5d12914b68ba3a0b944c1bfe6dbfd7b88b1a0aeeec1d87a1619a'
+ '3941928af296d14e82232824aebb2a3eaddba4211c4d383f2c98d2394500ddd5847e2efd4044c1d4bdbb44d145d55aab5d5b111381305398bbf356bdfc9ee10c'
+ '9e1eea0ae01852a32ff3c391156da04fe8abba632890a3a5599471f415c84ac7d8ffdc5cf1317dcd7a17c043d4658267a9c9504dcd9f27168b1239a69c659995'
+ '5e14b4bff2746b7aaf6c6f53fb69949e51d999402c47b6f957cc87466b06867aef10471ad28e750401f1882c9225b8d42c61d57c71b536e215e9db69a52207d5'
+ 'cde43f9479cbb572abf6214ed448b0074feb3b0f8ba69c12ab929d1ac81ccd192cb7b9878d14fa65cebdc2d63bceecd4369678dbd27ee3ca557f6b8c2b1f2af7'
+ '16418d54549e605cc55dbcc0efab4dbe01c62f85604c552a641dd83de961d42d7843c72831e29f98f3f5fb173c73a6feee5300dcb8a19388d71a481167d3f4a9'
+ 'c186d1e76f68f412779b8ccac2a6ea84614b73e51d27cfdfcba6e0be04cb009a9f4e04e1dca03a0c5a5aa34656e52c980288f4985a4cacefc874ab27e55f62c3'
+ '5552e8918462f6c3a4e1baef3c22b57d70c732766945ea0b39f63df7d7b8fca9646f1f9b28b0528fa586799842c949298fc97e1041875da0ca1aacff046f6c9b')
+
+_system_libs=('ffmpeg'
+ 'flac'
+ 'harfbuzz-ng'
+# 'icu'
+ 'libevent'
+ 'libjpeg'
+# 'libpng'
+# 'libvpx'
+ 'libwebp'
+ 'libxml'
+ 'libxslt'
+# 're2'
+ 'snappy'
+ 'yasm'
+ 'zlib'
+ )
+
+prepare() {
+ cd "${srcdir}"/electron
+
+ patch -Np1 -i "${srcdir}"/default_app-icon.patch # Icon from .desktop file
+ patch -Np1 -i "${srcdir}"/use-system-libraries-in-node.patch
+ patch -Np1 -i "${srcdir}"/use-system-ffmpeg.patch
+ patch -Np1 -i "${srcdir}"/dont-update-submodules.patch
+ patch -Np1 -i "${srcdir}"/dont-use-sysroot.patch
+ patch -Np1 -i "${srcdir}"/dont-bootstrap-libchromiumcontent.patch
+ patch -Np1 -i "${srcdir}"/no-clang-plugins.patch
+ patch -Np1 -i "${srcdir}"/no-whole-archive.patch
+
+ # Add extra libraries for unbundling, remove unneeded libraries
+ sed -e "s/'-lexpat',/'-lexpat', '<\!@(pkg-config --libs-only-l libavcodec libavformat libavutil libevent flac harfbuzz-icu libjpeg jsoncpp minizip libpulse snappy libwebpdemux libwebpmux libxml-2.0 libxslt zlib)', '-latomic',/" \
+ -e 's/ gconf-2.0//' \
+ -i brightray/brightray.gyp
+
+ mkdir -p "${srcdir}"/python2-path
+ ln -sf /usr/bin/python2 "${srcdir}/python2-path/python"
+
+ for m in boto breakpad gyp libchromiumcontent node pdf_viewer requests; do
+ git submodule init vendor/${m}
+ git config submodule.vendor/${m}.url "${srcdir}/${m}"
+ done
+ git submodule update
+
+ cd "${srcdir}"/electron/vendor/pdf_viewer
+ git submodule init vendor/grit
+ git config submodule.vendor/grit.url "${srcdir}/grit"
+ git submodule update
+
+ cd "${srcdir}"/electron/vendor/breakpad
+ git submodule init src
+ git config submodule.src.url "${srcdir}"/google-breakpad
+ git submodule update
+ patch -Np1 -i "${srcdir}"/breakpad-glibc2.26.patch
+
+ cd "${srcdir}"/electron/vendor/gyp
+ # Remove a useless $ORIGIN/lib/ rpath from the electron binary
+ patch -Np1 -i "${srcdir}"/gyp-no-rpath.patch
+
+ cd "${srcdir}"/electron/vendor/libchromiumcontent
+ for m in pyyaml; do
+ git submodule init vendor/${m}
+ git config submodule.vendor/${m}.url "${srcdir}/${m}"
+ done
+ git submodule update
+ patch -Np1 -i "${srcdir}"/libchromiumcontent-remove-useless-patches.patch
+ patch -Np1 -i "${srcdir}"/libchromiumcontent-settings.patch
+ patch -Np1 -i "${srcdir}"/libchromiumcontent-sort-filenames.patch # deterministic build
+ patch -Np1 -i "${srcdir}"/libchromiumcontent-use-system-tools.patch
+ patch -Np1 -i "${srcdir}"/libchromiumcontent-static-library-only.patch
+ rm -r patches/common/ffmpeg # Use system FFmpeg
+ echo 'Extracting chromium source...'
+ tar -xf "${srcdir}"/electron-chromium-${_chromiumver}.tar.bz2
+ cd src
+ patch -Np1 -i "${srcdir}"/chromium-use-system-ffmpeg.patch
+ patch -Np1 -i "${srcdir}"/chromium-use-system-re2.patch
+
+ for lib in "${_system_libs[@]}" libjpeg_turbo; do
+ find -type f -path "*third_party/${lib}/*" \
+ \! -path "*third_party/${lib}/chromium/*" \
+ \! -path "*third_party/${lib}/google/*" \
+ \! -path "*base/third_party/icu/*" \
+ \! -regex '.*\.\(gn\|gni\|isolate\|py\)' \
+ -delete
+ done
+ python2 build/linux/unbundle/replace_gn_files.py --system-libraries "${_system_libs[@]}"
+
+ # Create sysmlink to system Node.js
+ mkdir -p third_party/node/linux/node-linux-x64/bin
+ ln -sf /usr/bin/node third_party/node/linux/node-linux-x64/bin
+}
+
+build() {
+ export PATH="${srcdir}/python2-path:${PATH}"
+ export CC=clang
+ export CXX=clang++
+ export AR=ar
+ export NM=nm
+
+ cd "${srcdir}/electron/vendor/libchromiumcontent"
+ script/update -t x64 --skip_gclient
+ script/build -t x64 -c static_library
+ script/create-dist -c static_library --no_zip -t x64
+
+ cd "${srcdir}"/electron
+ LDFLAGS="${LDFLAGS} -Wl,-z,noexecstack"
+ distdir="${srcdir}/electron/vendor/libchromiumcontent/dist/main"
+ script/bootstrap.py --verbose \
+ --clang_dir=/usr \
+ --libcc_source_path="${distdir}/src" \
+ --libcc_shared_library_path="${distdir}/shared_library" \
+ --libcc_static_library_path="${distdir}/static_library"
+ script/build.py -c Release --ninja-path=ninja
+}
+
+package() {
+ cd "${srcdir}"/electron
+
+ _cc="${srcdir}"/electron/vendor/libchromiumcontent/dist/main
+
+ install -d -m755 "${pkgdir}"/usr/share/licenses/electron
+ install -m644 LICENSE "${pkgdir}"/usr/share/licenses/electron
+ install -m644 LICENSE "${_cc}"/LICENSES.chromium.html \
+ "${pkgdir}"/usr/share/licenses/electron
+ install -m644 native_mate/LICENSE.chromium \
+ "${pkgdir}"/usr/share/licenses/electron/LICENSE-native_mate
+ install -m644 vendor/node/LICENSE \
+ "${pkgdir}"/usr/share/licenses/electron/LICENSE-node
+ install -m644 vendor/libchromiumcontent/LICENSE.txt \
+ "${pkgdir}"/usr/share/licenses/electron/LICENSE-libchromiumcontent
+ install -m644 vendor/libchromiumcontent/src/LICENSE \
+ "${pkgdir}"/usr/share/licenses/electron/LICENSE-chromium
+
+ cd out/R
+ install -d -m755 "${pkgdir}"/usr/lib/electron
+ install -m644 blink_image_resources_200_percent.pak \
+ content_resources_200_percent.pak content_shell.pak icudtl.dat \
+ natives_blob.bin \
+ ui_resources_200_percent.pak \
+ v8_context_snapshot.bin \
+ views_resources_200_percent.pak \
+ "${pkgdir}"/usr/lib/electron
+ install -m755 electron "${pkgdir}"/usr/lib/electron
+ install -dm755 "${pkgdir}"/usr/bin
+ ln -s ../lib/electron/electron "${pkgdir}"/usr/bin
+ # namcap warning: Referenced library 'libnode.so' is an uninstalled dependency
+ # Fixable by moving libnode.so to /usr/lib
+ install -m644 libnode.so "${pkgdir}"/usr/lib/electron
+ cp -r locales resources "${pkgdir}"/usr/lib/electron
+ cd ../..
+
+ echo -n "v${pkgver}" > "${pkgdir}"/usr/lib/electron/version
+
+ # Install .desktop and icon file
+ install -Dm644 "${srcdir}"/electron.desktop \
+ "${pkgdir}"/usr/share/applications/electron.desktop
+ install -Dm644 default_app/icon.png \
+ "${pkgdir}"/usr/share/pixmaps/electron.png # hicolor has no 1024x1024
+
+ # Install Node headers
+ _headers_dest="${pkgdir}/usr/lib/electron/node"
+ install -d -m755 "${_headers_dest}"
+ cd "${srcdir}"/electron/vendor/node
+ find src deps/http_parser deps/zlib deps/uv deps/npm \
+ -name "*.gypi" \
+ -exec install -D -m644 '{}' "${_headers_dest}/{}" \; \
+ -or -name "*.h" \
+ -exec install -D -m644 '{}' "${_headers_dest}/{}" \;
+ install -m644 {common,config}.gypi "${_headers_dest}"
+ cd "${_cc}"/src
+ find v8 -name "*.h" \
+ -exec install -D -m644 '{}' "${_headers_dest}/deps/{}" \;
+ # echo '9' > "${_headers_dest}/installVersion"
+}
diff --git a/breakpad-glibc2.26.patch b/breakpad-glibc2.26.patch
new file mode 100644
index 000000000000..116fd4b204ef
--- /dev/null
+++ b/breakpad-glibc2.26.patch
@@ -0,0 +1,208 @@
+--- a/src/client/linux/dump_writer_common/ucontext_reader.cc
++++ b/src/client/linux/dump_writer_common/ucontext_reader.cc
+@@ -36,19 +36,19 @@ namespace google_breakpad {
+
+ // Minidump defines register structures which are different from the raw
+ // structures which we get from the kernel. These are platform specific
+-// functions to juggle the ucontext and user structures into minidump format.
++// functions to juggle the ucontext_t and user structures into minidump format.
+
+ #if defined(__i386__)
+
+-uintptr_t UContextReader::GetStackPointer(const struct ucontext* uc) {
++uintptr_t UContextReader::GetStackPointer(const ucontext_t* uc) {
+ return uc->uc_mcontext.gregs[REG_ESP];
+ }
+
+-uintptr_t UContextReader::GetInstructionPointer(const struct ucontext* uc) {
++uintptr_t UContextReader::GetInstructionPointer(const ucontext_t* uc) {
+ return uc->uc_mcontext.gregs[REG_EIP];
+ }
+
+-void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc,
++void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext_t *uc,
+ const struct _libc_fpstate* fp) {
+ const greg_t* regs = uc->uc_mcontext.gregs;
+
+@@ -88,15 +88,15 @@ void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc,
+
+ #elif defined(__x86_64)
+
+-uintptr_t UContextReader::GetStackPointer(const struct ucontext* uc) {
++uintptr_t UContextReader::GetStackPointer(const ucontext_t* uc) {
+ return uc->uc_mcontext.gregs[REG_RSP];
+ }
+
+-uintptr_t UContextReader::GetInstructionPointer(const struct ucontext* uc) {
++uintptr_t UContextReader::GetInstructionPointer(const ucontext_t* uc) {
+ return uc->uc_mcontext.gregs[REG_RIP];
+ }
+
+-void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc,
++void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext_t *uc,
+ const struct _libc_fpstate* fpregs) {
+ const greg_t* regs = uc->uc_mcontext.gregs;
+
+@@ -145,15 +145,15 @@ void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc,
+
+ #elif defined(__ARM_EABI__)
+
+-uintptr_t UContextReader::GetStackPointer(const struct ucontext* uc) {
++uintptr_t UContextReader::GetStackPointer(const ucontext_t* uc) {
+ return uc->uc_mcontext.arm_sp;
+ }
+
+-uintptr_t UContextReader::GetInstructionPointer(const struct ucontext* uc) {
++uintptr_t UContextReader::GetInstructionPointer(const ucontext_t* uc) {
+ return uc->uc_mcontext.arm_pc;
+ }
+
+-void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc) {
++void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext_t *uc) {
+ out->context_flags = MD_CONTEXT_ARM_FULL;
+
+ out->iregs[0] = uc->uc_mcontext.arm_r0;
+@@ -184,15 +184,15 @@ void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc) {
+
+ #elif defined(__aarch64__)
+
+-uintptr_t UContextReader::GetStackPointer(const struct ucontext* uc) {
++uintptr_t UContextReader::GetStackPointer(const ucontext_t* uc) {
+ return uc->uc_mcontext.sp;
+ }
+
+-uintptr_t UContextReader::GetInstructionPointer(const struct ucontext* uc) {
++uintptr_t UContextReader::GetInstructionPointer(const ucontext_t* uc) {
+ return uc->uc_mcontext.pc;
+ }
+
+-void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc,
++void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext_t *uc,
+ const struct fpsimd_context* fpregs) {
+ out->context_flags = MD_CONTEXT_ARM64_FULL;
+
+@@ -210,15 +210,15 @@ void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc,
+
+ #elif defined(__mips__)
+
+-uintptr_t UContextReader::GetStackPointer(const struct ucontext* uc) {
++uintptr_t UContextReader::GetStackPointer(const ucontext_t* uc) {
+ return uc->uc_mcontext.gregs[MD_CONTEXT_MIPS_REG_SP];
+ }
+
+-uintptr_t UContextReader::GetInstructionPointer(const struct ucontext* uc) {
++uintptr_t UContextReader::GetInstructionPointer(const ucontext_t* uc) {
+ return uc->uc_mcontext.pc;
+ }
+
+-void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc) {
++void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext_t *uc) {
+ #if _MIPS_SIM == _ABI64
+ out->context_flags = MD_CONTEXT_MIPS64_FULL;
+ #elif _MIPS_SIM == _ABIO32
+--- a/src/client/linux/dump_writer_common/ucontext_reader.h
++++ b/src/client/linux/dump_writer_common/ucontext_reader.h
+@@ -39,23 +39,23 @@
+
+ namespace google_breakpad {
+
+-// Wraps platform-dependent implementations of accessors to ucontext structs.
++// Wraps platform-dependent implementations of accessors to ucontext_t structs.
+ struct UContextReader {
+- static uintptr_t GetStackPointer(const struct ucontext* uc);
++ static uintptr_t GetStackPointer(const ucontext_t* uc);
+
+- static uintptr_t GetInstructionPointer(const struct ucontext* uc);
++ static uintptr_t GetInstructionPointer(const ucontext_t* uc);
+
+- // Juggle a arch-specific ucontext into a minidump format
++ // Juggle a arch-specific ucontext_t into a minidump format
+ // out: the minidump structure
+ // info: the collection of register structures.
+ #if defined(__i386__) || defined(__x86_64)
+- static void FillCPUContext(RawContextCPU *out, const ucontext *uc,
++ static void FillCPUContext(RawContextCPU *out, const ucontext_t *uc,
+ const struct _libc_fpstate* fp);
+ #elif defined(__aarch64__)
+- static void FillCPUContext(RawContextCPU *out, const ucontext *uc,
++ static void FillCPUContext(RawContextCPU *out, const ucontext_t *uc,
+ const struct fpsimd_context* fpregs);
+ #else
+- static void FillCPUContext(RawContextCPU *out, const ucontext *uc);
++ static void FillCPUContext(RawContextCPU *out, const ucontext_t *uc);
+ #endif
+ };
+
+--- a/src/client/linux/handler/exception_handler.cc
++++ b/src/client/linux/handler/exception_handler.cc
+@@ -439,9 +439,9 @@ bool ExceptionHandler::HandleSignal(int /*sig*/, siginfo_t* info, void* uc) {
+ // Fill in all the holes in the struct to make Valgrind happy.
+ memset(&g_crash_context_, 0, sizeof(g_crash_context_));
+ memcpy(&g_crash_context_.siginfo, info, sizeof(siginfo_t));
+- memcpy(&g_crash_context_.context, uc, sizeof(struct ucontext));
++ memcpy(&g_crash_context_.context, uc, sizeof(ucontext_t));
+ #if defined(__aarch64__)
+- struct ucontext* uc_ptr = (struct ucontext*)uc;
++ ucontext_t* uc_ptr = (ucontext_t*)uc;
+ struct fpsimd_context* fp_ptr =
+ (struct fpsimd_context*)&uc_ptr->uc_mcontext.__reserved;
+ if (fp_ptr->head.magic == FPSIMD_MAGIC) {
+@@ -450,9 +450,9 @@ bool ExceptionHandler::HandleSignal(int /*sig*/, siginfo_t* info, void* uc) {
+ }
+ #elif !defined(__ARM_EABI__) && !defined(__mips__)
+ // FP state is not part of user ABI on ARM Linux.
+- // In case of MIPS Linux FP state is already part of struct ucontext
++ // In case of MIPS Linux FP state is already part of ucontext_t
+ // and 'float_state' is not a member of CrashContext.
+- struct ucontext* uc_ptr = (struct ucontext*)uc;
++ ucontext_t* uc_ptr = (ucontext_t*)uc;
+ if (uc_ptr->uc_mcontext.fpregs) {
+ memcpy(&g_crash_context_.float_state, uc_ptr->uc_mcontext.fpregs,
+ sizeof(g_crash_context_.float_state));
+@@ -476,7 +476,7 @@ bool ExceptionHandler::SimulateSignalDelivery(int sig) {
+ // ExceptionHandler::HandleSignal().
+ siginfo.si_code = SI_USER;
+ siginfo.si_pid = getpid();
+- struct ucontext context;
++ ucontext_t context;
+ getcontext(&context);
+ return HandleSignal(sig, &siginfo, &context);
+ }
+--- a/src/client/linux/handler/exception_handler.h
++++ b/src/client/linux/handler/exception_handler.h
+@@ -191,11 +191,11 @@ class ExceptionHandler {
+ struct CrashContext {
+ siginfo_t siginfo;
+ pid_t tid; // the crashing thread.
+- struct ucontext context;
++ ucontext_t context;
+ #if !defined(__ARM_EABI__) && !defined(__mips__)
+ // #ifdef this out because FP state is not part of user ABI for Linux ARM.
+ // In case of MIPS Linux FP state is already part of struct
+- // ucontext so 'float_state' is not required.
++ // ucontext_t so 'float_state' is not required.
+ fpstate_t float_state;
+ #endif
+ };
+--- a/src/client/linux/microdump_writer/microdump_writer.cc
++++ b/src/client/linux/microdump_writer/microdump_writer.cc
+@@ -560,7 +560,7 @@ class MicrodumpWriter {
+
+ void* Alloc(unsigned bytes) { return dumper_->allocator()->Alloc(bytes); }
+
+- const struct ucontext* const ucontext_;
++ const ucontext_t* const ucontext_;
+ #if !defined(__ARM_EABI__) && !defined(__mips__)
+ const google_breakpad::fpstate_t* const float_state_;
+ #endif
+--- a/src/client/linux/minidump_writer/minidump_writer.cc
++++ b/src/client/linux/minidump_writer/minidump_writer.cc
+@@ -1248,7 +1248,7 @@ class MinidumpWriter {
+ const int fd_; // File descriptor where the minidum should be written.
+ const char* path_; // Path to the file where the minidum should be written.
+
+- const struct ucontext* const ucontext_; // also from the signal handler
++ const ucontext_t* const ucontext_; // also from the signal handler
+ #if !defined(__ARM_EABI__) && !defined(__mips__)
+ const google_breakpad::fpstate_t* const float_state_; // ditto
+ #endif
diff --git a/chromium-use-system-ffmpeg.patch b/chromium-use-system-ffmpeg.patch
new file mode 100644
index 000000000000..e40bdb308002
--- /dev/null
+++ b/chromium-use-system-ffmpeg.patch
@@ -0,0 +1,22 @@
+--- a/build/linux/unbundle/ffmpeg.gn
++++ b/build/linux/unbundle/ffmpeg.gn
+@@ -14,8 +14,8 @@
+ ]
+ }
+
+-buildflag_header("ffmpeg_buildflags") {
+- header = "ffmpeg_buildflags.h"
++buildflag_header("ffmpeg_features") {
++ header = "ffmpeg_features.h"
+ flags = [ "USE_SYSTEM_FFMPEG=true" ]
+ }
+
+@@ -30,7 +30,7 @@
+
+ source_set("ffmpeg") {
+ deps = [
+- ":ffmpeg_buildflags",
++ ":ffmpeg_features",
+ ":ffmpeg_shim",
+ ]
+ public_configs = [ ":system_ffmpeg" ]
diff --git a/chromium-use-system-re2.patch b/chromium-use-system-re2.patch
new file mode 100644
index 000000000000..e8237b5c2d6c
--- /dev/null
+++ b/chromium-use-system-re2.patch
@@ -0,0 +1,10 @@
+--- a/build/linux/unbundle/re2.gn
++++ b/build/linux/unbundle/re2.gn
+@@ -11,7 +11,6 @@
+ "re2/re2.h",
+ "re2/set.h",
+ "re2/stringpiece.h",
+- "re2/variadic_function.h",
+ ]
+ }
+
diff --git a/default_app-icon.patch b/default_app-icon.patch
new file mode 100644
index 000000000000..a6c53aa5a9aa
--- /dev/null
+++ b/default_app-icon.patch
@@ -0,0 +1,22 @@
+--- a/default_app/default_app.js
++++ b/default_app/default_app.js
+@@ -20,9 +20,6 @@ exports.load = (appUrl) => {
+ },
+ useContentSize: true
+ }
+- if (process.platform === 'linux') {
+- options.icon = path.join(__dirname, 'icon.png')
+- }
+
+ mainWindow = new BrowserWindow(options)
+ mainWindow.loadURL(appUrl)
+--- a/filenames.gypi
++++ b/filenames.gypi
+@@ -93,7 +93,6 @@
+ ],
+ 'default_app_sources': [
+ 'default_app/default_app.js',
+- 'default_app/icon.png',
+ 'default_app/index.html',
+ 'default_app/main.js',
+ 'default_app/package.json',
diff --git a/dont-bootstrap-libchromiumcontent.patch b/dont-bootstrap-libchromiumcontent.patch
new file mode 100644
index 000000000000..e6971e848467
--- /dev/null
+++ b/dont-bootstrap-libchromiumcontent.patch
@@ -0,0 +1,11 @@
+--- a/script/build-libchromiumcontent.py
++++ b/script/build-libchromiumcontent.py
+@@ -44,7 +44,7 @@ def main():
+ build = os.path.join(script_dir, 'build')
+ create_dist = os.path.join(script_dir, 'create-dist')
+ if args.force_update or libchromiumcontent_outdated():
+- execute_stdout([sys.executable, bootstrap])
++ # execute_stdout([sys.executable, bootstrap])
+ execute_stdout([sys.executable, update, '-t', args.target_arch])
+ update_gclient_done_marker()
+ if args.debug:
diff --git a/dont-update-submodules.patch b/dont-update-submodules.patch
new file mode 100644
index 000000000000..9d4419d3e5d4
--- /dev/null
+++ b/dont-update-submodules.patch
@@ -0,0 +1,11 @@
+--- a/script/bootstrap.py
++++ b/script/bootstrap.py
+@@ -33,7 +33,7 @@ def main():
+
+ check_tls(args.verbose)
+
+- update_submodules()
++ # update_submodules()
+
+ libcc_source_path = args.libcc_source_path
+ libcc_shared_library_path = args.libcc_shared_library_path
diff --git a/dont-use-sysroot.patch b/dont-use-sysroot.patch
new file mode 100644
index 000000000000..6e23b81e3279
--- /dev/null
+++ b/dont-use-sysroot.patch
@@ -0,0 +1,27 @@
+--- a/script/bootstrap.py
++++ b/script/bootstrap.py
+@@ -65,9 +65,6 @@ def main():
+ libcc_source_path, libcc_shared_library_path,
+ libcc_static_library_path)
+
+- if PLATFORM == 'linux' and args.target_arch != 'mips64el':
+- download_sysroot(args.target_arch)
+-
+ create_chrome_version_h()
+ touch_config_gypi()
+ run_update(defines, args.msvs)
+--- a/toolchain.gypi
++++ b/toolchain.gypi
+@@ -62,10 +62,10 @@
+ 'sysroot%': '<(source_root)/vendor/debian_stretch_arm64-sysroot',
+ }],
+ ['target_arch=="ia32"', {
+- 'sysroot%': '<(source_root)/vendor/debian_stretch_i386-sysroot',
++ 'sysroot%': '/',
+ }],
+ ['target_arch=="x64"', {
+- 'sysroot%': '<(source_root)/vendor/debian_stretch_amd64-sysroot',
++ 'sysroot%': '/',
+ }],
+ ['target_arch=="mips64el"', {
+ 'sysroot%': '<(source_root)/vendor/debian_jessie_mips64-sysroot',
diff --git a/electron.desktop b/electron.desktop
new file mode 100644
index 000000000000..792ecb1635ca
--- /dev/null
+++ b/electron.desktop
@@ -0,0 +1,7 @@
+[Desktop Entry]
+Type=Application
+Name=Electron3
+Icon=electron
+Exec=electron3 %u
+Categories=Development;GTK;
+StartupNotify=true
diff --git a/gyp-no-rpath.patch b/gyp-no-rpath.patch
new file mode 100644
index 000000000000..2843e98fc1a6
--- /dev/null
+++ b/gyp-no-rpath.patch
@@ -0,0 +1,12 @@
+--- a/pylib/gyp/generator/ninja.py
++++ b/pylib/gyp/generator/ninja.py
+@@ -1231,9 +1231,6 @@
+ rpath = 'lib/'
+ if self.toolset != 'target':
+ rpath += self.toolset
+- ldflags.append(r'-Wl,-rpath=\$$ORIGIN/%s' % rpath)
+- else:
+- ldflags.append('-Wl,-rpath=%s' % self.target_rpath)
+ ldflags.append('-Wl,-rpath-link=%s' % rpath)
+ self.WriteVariableList(ninja_file, 'ldflags',
+ map(self.ExpandSpecial, ldflags))
diff --git a/libchromiumcontent-remove-useless-patches.patch b/libchromiumcontent-remove-useless-patches.patch
new file mode 100644
index 000000000000..4a7f3b2ebe20
--- /dev/null
+++ b/libchromiumcontent-remove-useless-patches.patch
@@ -0,0 +1,518 @@
+--- a/patches/common/v8/.patches.yaml
++++ b/patches/common/v8/.patches.yaml
+@@ -22,11 +22,6 @@
+ file: dcheck.patch
+ description: null
+ -
+- owners: nitsakh
+- file: disable-warning-win.patch
+- description:
+- Disable unit test windows build warning
+--
+ owners: alexeykuzmin
+ file: backport_b767cde1e7.patch
+ description: Node 10.0.0 needs it.
+--- a/patches/common/v8/backport_23652c5f.patch
++++ b/patches/common/v8/backport_23652c5f.patch
+@@ -55,107 +55,3 @@
+ ~JSONTraceWriter();
+ void AppendTraceEvent(TraceObject* trace_event) override;
+ void Flush() override;
+-diff --git a/test/cctest/libplatform/test-tracing.cc b/test/cctest/libplatform/test-tracing.cc
+-index da202057de..b949785bcf 100644
+---- a/test/cctest/libplatform/test-tracing.cc
+-+++ b/test/cctest/libplatform/test-tracing.cc
+-@@ -128,44 +128,42 @@ TEST(TestTraceBufferRingBuffer) {
+- delete ring_buffer;
+- }
+-
+--TEST(TestJSONTraceWriter) {
+-- std::ostringstream stream;
+-- // Create a scope for the tracing controller to terminate the trace writer.
+-- {
+-- v8::Platform* old_platform = i::V8::GetCurrentPlatform();
+-- std::unique_ptr<v8::Platform> default_platform(
+-- v8::platform::NewDefaultPlatform());
+-- i::V8::SetPlatformForTesting(default_platform.get());
+-- auto tracing =
+-- base::make_unique<v8::platform::tracing::TracingController>();
+-- v8::platform::tracing::TracingController* tracing_controller =
+-- tracing.get();
+-- static_cast<v8::platform::DefaultPlatform*>(default_platform.get())
+-- ->SetTracingController(std::move(tracing));
+-- TraceWriter* writer = TraceWriter::CreateJSONTraceWriter(stream);
+-+void PopulateJSONWriter(TraceWriter* writer) {
+-+ v8::Platform* old_platform = i::V8::GetCurrentPlatform();
+-+ std::unique_ptr<v8::Platform> default_platform(
+-+ v8::platform::NewDefaultPlatform());
+-+ i::V8::SetPlatformForTesting(default_platform.get());
+-+ auto tracing = base::make_unique<v8::platform::tracing::TracingController>();
+-+ v8::platform::tracing::TracingController* tracing_controller = tracing.get();
+-+ static_cast<v8::platform::DefaultPlatform*>(default_platform.get())
+-+ ->SetTracingController(std::move(tracing));
+-
+-- TraceBuffer* ring_buffer =
+-- TraceBuffer::CreateTraceBufferRingBuffer(1, writer);
+-- tracing_controller->Initialize(ring_buffer);
+-- TraceConfig* trace_config = new TraceConfig();
+-- trace_config->AddIncludedCategory("v8-cat");
+-- tracing_controller->StartTracing(trace_config);
+-+ TraceBuffer* ring_buffer =
+-+ TraceBuffer::CreateTraceBufferRingBuffer(1, writer);
+-+ tracing_controller->Initialize(ring_buffer);
+-+ TraceConfig* trace_config = new TraceConfig();
+-+ trace_config->AddIncludedCategory("v8-cat");
+-+ tracing_controller->StartTracing(trace_config);
+-
+-- TraceObject trace_object;
+-- trace_object.InitializeForTesting(
+-- 'X', tracing_controller->GetCategoryGroupEnabled("v8-cat"), "Test0",
+-- v8::internal::tracing::kGlobalScope, 42, 123, 0, nullptr, nullptr,
+-- nullptr, nullptr, TRACE_EVENT_FLAG_HAS_ID, 11, 22, 100, 50, 33, 44);
+-- writer->AppendTraceEvent(&trace_object);
+-- trace_object.InitializeForTesting(
+-- 'Y', tracing_controller->GetCategoryGroupEnabled("v8-cat"), "Test1",
+-- v8::internal::tracing::kGlobalScope, 43, 456, 0, nullptr, nullptr,
+-- nullptr, nullptr, 0, 55, 66, 110, 55, 77, 88);
+-- writer->AppendTraceEvent(&trace_object);
+-- tracing_controller->StopTracing();
+-- i::V8::SetPlatformForTesting(old_platform);
+-- }
+-+ TraceObject trace_object;
+-+ trace_object.InitializeForTesting(
+-+ 'X', tracing_controller->GetCategoryGroupEnabled("v8-cat"), "Test0",
+-+ v8::internal::tracing::kGlobalScope, 42, 123, 0, nullptr, nullptr,
+-+ nullptr, nullptr, TRACE_EVENT_FLAG_HAS_ID, 11, 22, 100, 50, 33, 44);
+-+ writer->AppendTraceEvent(&trace_object);
+-+ trace_object.InitializeForTesting(
+-+ 'Y', tracing_controller->GetCategoryGroupEnabled("v8-cat"), "Test1",
+-+ v8::internal::tracing::kGlobalScope, 43, 456, 0, nullptr, nullptr,
+-+ nullptr, nullptr, 0, 55, 66, 110, 55, 77, 88);
+-+ writer->AppendTraceEvent(&trace_object);
+-+ tracing_controller->StopTracing();
+-+ i::V8::SetPlatformForTesting(old_platform);
+-+}
+-
+-+TEST(TestJSONTraceWriter) {
+-+ std::ostringstream stream;
+-+ TraceWriter* writer = TraceWriter::CreateJSONTraceWriter(stream);
+-+ PopulateJSONWriter(writer);
+- std::string trace_str = stream.str();
+- std::string expected_trace_str =
+- "{\"traceEvents\":[{\"pid\":11,\"tid\":22,\"ts\":100,\"tts\":50,"
+-@@ -177,6 +175,21 @@ TEST(TestJSONTraceWriter) {
+- CHECK_EQ(expected_trace_str, trace_str);
+- }
+-
+-+TEST(TestJSONTraceWriterWithCustomtag) {
+-+ std::ostringstream stream;
+-+ TraceWriter* writer = TraceWriter::CreateJSONTraceWriter(stream, "customTag");
+-+ PopulateJSONWriter(writer);
+-+ std::string trace_str = stream.str();
+-+ std::string expected_trace_str =
+-+ "{\"customTag\":[{\"pid\":11,\"tid\":22,\"ts\":100,\"tts\":50,"
+-+ "\"ph\":\"X\",\"cat\":\"v8-cat\",\"name\":\"Test0\",\"dur\":33,"
+-+ "\"tdur\":44,\"id\":\"0x2a\",\"args\":{}},{\"pid\":55,\"tid\":66,"
+-+ "\"ts\":110,\"tts\":55,\"ph\":\"Y\",\"cat\":\"v8-cat\",\"name\":"
+-+ "\"Test1\",\"dur\":77,\"tdur\":88,\"args\":{}}]}";
+-+
+-+ CHECK_EQ(expected_trace_str, trace_str);
+-+}
+-+
+- TEST(TestTracingController) {
+- v8::Platform* old_platform = i::V8::GetCurrentPlatform();
+- std::unique_ptr<v8::Platform> default_platform(
+--- a/patches/common/v8/backport_2eb23a17.patch
++++ b/patches/common/v8/backport_2eb23a17.patch
+@@ -709,300 +709,3 @@
+ F(SystemBreak, 0, 1) \
+ F(TraceEnter, 0, 1) \
+ F(TraceExit, 1, 1) \
+-diff --git a/test/cctest/test-typedarrays.cc b/test/cctest/test-typedarrays.cc
+-index 7ec9197b65..bab6e0f2f6 100644
+---- a/test/cctest/test-typedarrays.cc
+-+++ b/test/cctest/test-typedarrays.cc
+-@@ -117,12 +117,12 @@ void TestSpeciesProtector(char* code,
+-
+- v8::internal::Isolate* i_isolate =
+- reinterpret_cast<v8::internal::Isolate*>(isolate);
+-- CHECK(i_isolate->IsSpeciesLookupChainIntact());
+-+ CHECK(i_isolate->IsTypedArraySpeciesLookupChainIntact());
+- CompileRun(code);
+- if (invalidates_species_protector) {
+-- CHECK(!i_isolate->IsSpeciesLookupChainIntact());
+-+ CHECK(!i_isolate->IsTypedArraySpeciesLookupChainIntact());
+- } else {
+-- CHECK(i_isolate->IsSpeciesLookupChainIntact());
+-+ CHECK(i_isolate->IsTypedArraySpeciesLookupChainIntact());
+- }
+-
+- v8::Local<v8::Value> my_typed_array = CompileRun("MyTypedArray");
+-diff --git a/test/mjsunit/es6/array-species-constructor-accessor.js b/test/mjsunit/es6/array-species-constructor-accessor.js
+-index 7ebf328a8a..7185d98b58 100644
+---- a/test/mjsunit/es6/array-species-constructor-accessor.js
+-+++ b/test/mjsunit/es6/array-species-constructor-accessor.js
+-@@ -18,7 +18,7 @@ assertEquals(1, x.concat([1])[0]);
+- class MyArray extends Array { }
+-
+- Object.defineProperty(x, 'constructor', {get() { return MyArray; }});
+--assertFalse(%SpeciesProtector());
+-+assertFalse(%ArraySpeciesProtector());
+-
+- assertEquals(MyArray, x.map(()=>{}).constructor);
+- assertEquals(MyArray, x.filter(()=>{}).constructor);
+-diff --git a/test/mjsunit/es6/array-species-constructor-delete.js b/test/mjsunit/es6/array-species-constructor-delete.js
+-index fff22a2a8c..3b85d52565 100644
+---- a/test/mjsunit/es6/array-species-constructor-delete.js
+-+++ b/test/mjsunit/es6/array-species-constructor-delete.js
+-@@ -19,7 +19,7 @@ class MyArray extends Array { }
+-
+- Object.prototype.constructor = MyArray;
+- delete Array.prototype.constructor;
+--assertFalse(%SpeciesProtector());
+-+assertFalse(%ArraySpeciesProtector());
+-
+- assertEquals(MyArray, x.map(()=>{}).constructor);
+- assertEquals(MyArray, x.filter(()=>{}).constructor);
+-diff --git a/test/mjsunit/es6/array-species-constructor.js b/test/mjsunit/es6/array-species-constructor.js
+-index 0d888f46ee..07e897d458 100644
+---- a/test/mjsunit/es6/array-species-constructor.js
+-+++ b/test/mjsunit/es6/array-species-constructor.js
+-@@ -18,7 +18,7 @@ assertEquals(1, x.concat([1])[0]);
+- class MyArray extends Array { }
+-
+- x.constructor = MyArray;
+--assertFalse(%SpeciesProtector());
+-+assertFalse(%ArraySpeciesProtector());
+-
+- assertEquals(MyArray, x.map(()=>{}).constructor);
+- assertEquals(MyArray, x.filter(()=>{}).constructor);
+-diff --git a/test/mjsunit/es6/array-species-delete.js b/test/mjsunit/es6/array-species-delete.js
+-index 16a2fa26f9..2f0f50a1b2 100644
+---- a/test/mjsunit/es6/array-species-delete.js
+-+++ b/test/mjsunit/es6/array-species-delete.js
+-@@ -19,7 +19,7 @@ class MyArray extends Array { }
+-
+- Object.prototype[Symbol.species] = MyArray;
+- delete Array[Symbol.species];
+--assertFalse(%SpeciesProtector());
+-+assertFalse(%ArraySpeciesProtector());
+-
+- assertEquals(MyArray, x.map(()=>{}).constructor);
+- assertEquals(MyArray, x.filter(()=>{}).constructor);
+-diff --git a/test/mjsunit/es6/array-species-modified.js b/test/mjsunit/es6/array-species-modified.js
+-index 58feb31669..d5a707997a 100644
+---- a/test/mjsunit/es6/array-species-modified.js
+-+++ b/test/mjsunit/es6/array-species-modified.js
+-@@ -18,7 +18,7 @@ assertEquals(1, x.concat([1])[0]);
+- class MyArray extends Array { }
+-
+- Object.defineProperty(Array, Symbol.species, {value: MyArray});
+--assertFalse(%SpeciesProtector());
+-+assertFalse(%ArraySpeciesProtector());
+-
+- assertEquals(MyArray, x.map(()=>{}).constructor);
+- assertEquals(MyArray, x.filter(()=>{}).constructor);
+-diff --git a/test/mjsunit/es6/array-species-parent-constructor.js b/test/mjsunit/es6/array-species-parent-constructor.js
+-index b4fb1d56e3..8a861fb05d 100644
+---- a/test/mjsunit/es6/array-species-parent-constructor.js
+-+++ b/test/mjsunit/es6/array-species-parent-constructor.js
+-@@ -18,7 +18,7 @@ assertEquals(1, x.concat([1])[0]);
+- class MyArray extends Array { }
+-
+- Array.prototype.constructor = MyArray;
+--assertFalse(%SpeciesProtector());
+-+assertFalse(%ArraySpeciesProtector());
+-
+- assertEquals(MyArray, x.map(()=>{}).constructor);
+- assertEquals(MyArray, x.filter(()=>{}).constructor);
+-diff --git a/test/mjsunit/es6/array-species-proto.js b/test/mjsunit/es6/array-species-proto.js
+-index 6b55881cd6..d8e2ae5ddd 100644
+---- a/test/mjsunit/es6/array-species-proto.js
+-+++ b/test/mjsunit/es6/array-species-proto.js
+-@@ -18,7 +18,7 @@ assertEquals(1, x.concat([1])[0]);
+- class MyArray extends Array { }
+-
+- x.__proto__ = MyArray.prototype;
+--assertTrue(%SpeciesProtector());
+-+assertTrue(%ArraySpeciesProtector());
+-
+- assertEquals(MyArray, x.map(()=>{}).constructor);
+- assertEquals(MyArray, x.filter(()=>{}).constructor);
+-diff --git a/test/mjsunit/harmony/regexp-named-captures.js b/test/mjsunit/harmony/regexp-named-captures.js
+-index 72041b99bf..aab8393392 100644
+---- a/test/mjsunit/harmony/regexp-named-captures.js
+-+++ b/test/mjsunit/harmony/regexp-named-captures.js
+-@@ -425,7 +425,7 @@ function toSlowMode(re) {
+- {
+- const re = /./;
+- const result = re.exec("a");
+-- assertTrue(%SpeciesProtector());
+-+ assertTrue(%ArraySpeciesProtector());
+- assertEquals(result.__proto__, Array.prototype);
+- assertTrue(result.hasOwnProperty('groups'));
+- assertArrayEquals(["a"], result);
+-@@ -433,7 +433,7 @@ function toSlowMode(re) {
+- assertEquals(undefined, result.groups);
+-
+- Array.prototype.groups = { a: "b" };
+-- assertTrue(%SpeciesProtector());
+-+ assertTrue(%ArraySpeciesProtector());
+- assertEquals("$<a>", "a".replace(re, "$<a>"));
+- Array.prototype.groups = undefined;
+- }
+-@@ -441,7 +441,7 @@ function toSlowMode(re) {
+- {
+- const re = toSlowMode(/./);
+- const result = re.exec("a");
+-- assertTrue(%SpeciesProtector());
+-+ assertTrue(%ArraySpeciesProtector());
+- assertEquals(result.__proto__, Array.prototype);
+- assertTrue(result.hasOwnProperty('groups'));
+- assertArrayEquals(["a"], result);
+-@@ -449,7 +449,7 @@ function toSlowMode(re) {
+- assertEquals(undefined, result.groups);
+-
+- Array.prototype.groups = { a: "b" };
+-- assertTrue(%SpeciesProtector());
+-+ assertTrue(%ArraySpeciesProtector());
+- assertEquals("$<a>", "a".replace(re, "$<a>"));
+- Array.prototype.groups = undefined;
+- }
+-@@ -457,7 +457,7 @@ function toSlowMode(re) {
+- {
+- const re = /(?<a>a).|(?<x>x)/;
+- const result = re.exec("ab");
+-- assertTrue(%SpeciesProtector());
+-+ assertTrue(%ArraySpeciesProtector());
+- assertEquals(result.__proto__, Array.prototype);
+- assertTrue(result.hasOwnProperty('groups'));
+- assertArrayEquals(["ab", "a", undefined], result);
+-@@ -467,7 +467,7 @@ function toSlowMode(re) {
+- // a is a matched named capture, b is an unmatched named capture, and z
+- // is not a named capture.
+- Array.prototype.groups = { a: "b", x: "y", z: "z" };
+-- assertTrue(%SpeciesProtector());
+-+ assertTrue(%ArraySpeciesProtector());
+- assertEquals("a", "ab".replace(re, "$<a>"));
+- assertEquals("", "ab".replace(re, "$<x>"));
+- assertEquals("", "ab".replace(re, "$<z>"));
+-@@ -477,7 +477,7 @@ function toSlowMode(re) {
+- {
+- const re = toSlowMode(/(?<a>a).|(?<x>x)/);
+- const result = re.exec("ab");
+-- assertTrue(%SpeciesProtector());
+-+ assertTrue(%ArraySpeciesProtector());
+- assertEquals(result.__proto__, Array.prototype);
+- assertTrue(result.hasOwnProperty('groups'));
+- assertArrayEquals(["ab", "a", undefined], result);
+-@@ -487,7 +487,7 @@ function toSlowMode(re) {
+- // a is a matched named capture, b is an unmatched named capture, and z
+- // is not a named capture.
+- Array.prototype.groups = { a: "b", x: "y", z: "z" };
+-- assertTrue(%SpeciesProtector());
+-+ assertTrue(%ArraySpeciesProtector());
+- assertEquals("a", "ab".replace(re, "$<a>"));
+- assertEquals("", "ab".replace(re, "$<x>"));
+- assertEquals("", "ab".replace(re, "$<z>"));
+-@@ -506,13 +506,13 @@ function toSlowMode(re) {
+-
+- const re = new FakeRegExp();
+- const result = re.exec("ab");
+-- assertTrue(%SpeciesProtector());
+-+ assertTrue(%ArraySpeciesProtector());
+- assertEquals(result.__proto__, Array.prototype);
+- assertFalse(result.hasOwnProperty('groups'));
+-
+- Array.prototype.groups = { a: "b" };
+- Array.prototype.groups.__proto__.b = "c";
+-- assertTrue(%SpeciesProtector());
+-+ assertTrue(%ArraySpeciesProtector());
+- assertEquals("b", "ab".replace(re, "$<a>"));
+- assertEquals("c", "ab".replace(re, "$<b>"));
+- Array.prototype.groups = undefined;
+-@@ -531,7 +531,7 @@ function toSlowMode(re) {
+-
+- const re = new FakeRegExp();
+- const result = re.exec("ab");
+-- assertTrue(%SpeciesProtector());
+-+ assertTrue(%ArraySpeciesProtector());
+- assertEquals(result.__proto__, Array.prototype);
+- assertTrue(result.hasOwnProperty('groups'));
+- assertEquals({ a: "b" }, result.groups);
+-diff --git a/test/mjsunit/keyed-store-generic.js b/test/mjsunit/keyed-store-generic.js
+-index c2c48dd96d..e5d6ab41f2 100644
+---- a/test/mjsunit/keyed-store-generic.js
+-+++ b/test/mjsunit/keyed-store-generic.js
+-@@ -16,7 +16,7 @@ f("make it generic", 0, 0);
+-
+- (function TestSpeciesProtector() {
+- function MyArray() {}
+-- assertTrue(%SpeciesProtector());
+-+ assertTrue(%ArraySpeciesProtector());
+- f(Array.prototype, "constructor", MyArray);
+-- assertFalse(%SpeciesProtector());
+-+ assertFalse(%ArraySpeciesProtector());
+- })();
+-diff --git a/tools/v8heapconst.py b/tools/v8heapconst.py
+-index 5659cdd03c..b4a98dcc11 100644
+---- a/tools/v8heapconst.py
+-+++ b/tools/v8heapconst.py
+-@@ -322,34 +322,35 @@ KNOWN_OBJECTS = {
+- ("OLD_SPACE", 0x02519): "TerminationException",
+- ("OLD_SPACE", 0x02579): "OptimizedOut",
+- ("OLD_SPACE", 0x025d1): "StaleRegister",
+-- ("OLD_SPACE", 0x02651): "EmptyByteArray",
+-- ("OLD_SPACE", 0x02661): "EmptyFixedUint8Array",
+-- ("OLD_SPACE", 0x02681): "EmptyFixedInt8Array",
+-- ("OLD_SPACE", 0x026a1): "EmptyFixedUint16Array",
+-- ("OLD_SPACE", 0x026c1): "EmptyFixedInt16Array",
+-- ("OLD_SPACE", 0x026e1): "EmptyFixedUint32Array",
+-- ("OLD_SPACE", 0x02701): "EmptyFixedInt32Array",
+-- ("OLD_SPACE", 0x02721): "EmptyFixedFloat32Array",
+-- ("OLD_SPACE", 0x02741): "EmptyFixedFloat64Array",
+-- ("OLD_SPACE", 0x02761): "EmptyFixedUint8ClampedArray",
+-- ("OLD_SPACE", 0x027c1): "EmptyScript",
+-- ("OLD_SPACE", 0x02849): "ManyClosuresCell",
+-- ("OLD_SPACE", 0x02859): "EmptySloppyArgumentsElements",
+-- ("OLD_SPACE", 0x02879): "EmptySlowElementDictionary",
+-- ("OLD_SPACE", 0x028c1): "EmptyOrderedHashMap",
+-- ("OLD_SPACE", 0x028e9): "EmptyOrderedHashSet",
+-- ("OLD_SPACE", 0x02911): "EmptyPropertyCell",
+-- ("OLD_SPACE", 0x02939): "EmptyWeakCell",
+-- ("OLD_SPACE", 0x029a9): "NoElementsProtector",
+-- ("OLD_SPACE", 0x029d1): "IsConcatSpreadableProtector",
+-- ("OLD_SPACE", 0x029e1): "SpeciesProtector",
+-- ("OLD_SPACE", 0x02a09): "StringLengthProtector",
+-- ("OLD_SPACE", 0x02a19): "FastArrayIterationProtector",
+-- ("OLD_SPACE", 0x02a29): "ArrayIteratorProtector",
+-- ("OLD_SPACE", 0x02a51): "ArrayBufferNeuteringProtector",
+-- ("OLD_SPACE", 0x02ac9): "InfinityValue",
+-- ("OLD_SPACE", 0x02ad9): "MinusZeroValue",
+-- ("OLD_SPACE", 0x02ae9): "MinusInfinityValue",
+-+ ("OLD_SPACE", 0x02661): "EmptyByteArray",
+-+ ("OLD_SPACE", 0x02681): "EmptyFixedUint8Array",
+-+ ("OLD_SPACE", 0x026a1): "EmptyFixedInt8Array",
+-+ ("OLD_SPACE", 0x026c1): "EmptyFixedUint16Array",
+-+ ("OLD_SPACE", 0x026e1): "EmptyFixedInt16Array",
+-+ ("OLD_SPACE", 0x02701): "EmptyFixedUint32Array",
+-+ ("OLD_SPACE", 0x02721): "EmptyFixedInt32Array",
+-+ ("OLD_SPACE", 0x02741): "EmptyFixedFloat32Array",
+-+ ("OLD_SPACE", 0x02761): "EmptyFixedFloat64Array",
+-+ ("OLD_SPACE", 0x02781): "EmptyFixedUint8ClampedArray",
+-+ ("OLD_SPACE", 0x027e1): "EmptyScript",
+-+ ("OLD_SPACE", 0x02879): "ManyClosuresCell",
+-+ ("OLD_SPACE", 0x02889): "EmptySloppyArgumentsElements",
+-+ ("OLD_SPACE", 0x028a9): "EmptySlowElementDictionary",
+-+ ("OLD_SPACE", 0x028f1): "EmptyOrderedHashMap",
+-+ ("OLD_SPACE", 0x02919): "EmptyOrderedHashSet",
+-+ ("OLD_SPACE", 0x02951): "EmptyPropertyCell",
+-+ ("OLD_SPACE", 0x02979): "EmptyWeakCell",
+-+ ("OLD_SPACE", 0x029e9): "NoElementsProtector",
+-+ ("OLD_SPACE", 0x02a11): "IsConcatSpreadableProtector",
+-+ ("OLD_SPACE", 0x02a21): "ArraySpeciesProtector",
+-+ ("OLD_SPACE", 0x02a49): "TypedArraySpeciesProtector",
+-+ ("OLD_SPACE", 0x02a71): "PromiseSpeciesProtector",
+-+ ("OLD_SPACE", 0x02a99): "StringLengthProtector",
+-+ ("OLD_SPACE", 0x02aa9): "ArrayIteratorProtector",
+-+ ("OLD_SPACE", 0x02ad1): "ArrayBufferNeuteringProtector",
+-+ ("OLD_SPACE", 0x02b59): "InfinityValue",
+-+ ("OLD_SPACE", 0x02b69): "MinusZeroValue",
+-+ ("OLD_SPACE", 0x02b79): "MinusInfinityValue",
+- }
+-
+- # List of known V8 Frame Markers.
+---
+-2.11.0 (Apple Git-81)
+-
+--- a/patches/common/v8/backport_39d546a.patch
++++ b/patches/common/v8/backport_39d546a.patch
+@@ -42,43 +42,3 @@
+ MaybeLocal<String> Value::ToString(Local<Context> context) const {
+ auto obj = Utils::OpenHandle(this);
+ if (obj->IsString()) return ToApiHandle<String>(obj);
+-diff --git a/test/cctest/test-api.cc b/test/cctest/test-api.cc
+-index 54afc61f4c..b7483a7c5e 100644
+---- a/test/cctest/test-api.cc
+-+++ b/test/cctest/test-api.cc
+-@@ -27239,6 +27239,35 @@ TEST(ImportMeta) {
+- CHECK(result->StrictEquals(Local<v8::Value>::Cast(v8::Utils::ToLocal(meta))));
+- }
+-
+-+TEST(GetModuleNamespace) {
+-+ LocalContext context;
+-+ v8::Isolate* isolate = context->GetIsolate();
+-+ v8::HandleScope scope(isolate);
+-+
+-+ Local<String> url = v8_str("www.google.com");
+-+ Local<String> source_text = v8_str("export default 5; export const a = 10;");
+-+ v8::ScriptOrigin origin(url, Local<v8::Integer>(), Local<v8::Integer>(),
+-+ Local<v8::Boolean>(), Local<v8::Integer>(),
+-+ Local<v8::Value>(), Local<v8::Boolean>(),
+-+ Local<v8::Boolean>(), True(isolate));
+-+ v8::ScriptCompiler::Source source(source_text, origin);
+-+ Local<Module> module =
+-+ v8::ScriptCompiler::CompileModule(isolate, &source).ToLocalChecked();
+-+ module->InstantiateModule(context.local(), UnexpectedModuleResolveCallback)
+-+ .ToChecked();
+-+ module->Evaluate(context.local()).ToLocalChecked();
+-+
+-+ Local<Value> ns_val = module->GetModuleNamespace();
+-+ CHECK(ns_val->IsModuleNamespaceObject());
+-+ Local<Object> ns = ns_val.As<Object>();
+-+ CHECK(ns->Get(context.local(), v8_str("default"))
+-+ .ToLocalChecked()
+-+ ->StrictEquals(v8::Number::New(isolate, 5)));
+-+ CHECK(ns->Get(context.local(), v8_str("a"))
+-+ .ToLocalChecked()
+-+ ->StrictEquals(v8::Number::New(isolate, 10)));
+-+}
+-+
+- TEST(GlobalTemplateWithDoubleProperty) {
+- v8::Isolate* isolate = CcTest::isolate();
+- v8::HandleScope handle_scope(isolate);
+--- a/patches/common/v8/backport_9fb02b526.patch
++++ b/patches/common/v8/backport_9fb02b526.patch
+@@ -73,42 +73,3 @@
+ }
+
+ raw_holder = GetCompatibleReceiver(isolate, *fun_data, *js_receiver);
+-diff --git a/test/cctest/test-api.cc b/test/cctest/test-api.cc
+-index 7887cbfa75..0605f439e5 100644
+---- a/test/cctest/test-api.cc
+-+++ b/test/cctest/test-api.cc
+-@@ -1088,6 +1088,34 @@ THREADED_PROFILED_TEST(FunctionTemplate) {
+- TestFunctionTemplateAccessor(construct_callback, Return239Callback);
+- }
+-
+-+static void FunctionCallbackForProxyTest(
+-+ const v8::FunctionCallbackInfo<Value>& info) {
+-+ info.GetReturnValue().Set(info.This());
+-+}
+-+
+-+THREADED_TEST(FunctionTemplateWithProxy) {
+-+ LocalContext env;
+-+ v8::Isolate* isolate = env->GetIsolate();
+-+ v8::HandleScope scope(isolate);
+-+
+-+ v8::Local<v8::FunctionTemplate> function_template =
+-+ v8::FunctionTemplate::New(isolate, FunctionCallbackForProxyTest);
+-+ v8::Local<v8::Function> function =
+-+ function_template->GetFunction(env.local()).ToLocalChecked();
+-+ CHECK((*env)->Global()->Set(env.local(), v8_str("f"), function).FromJust());
+-+ v8::Local<v8::Value> proxy =
+-+ CompileRun("var proxy = new Proxy({}, {}); proxy");
+-+ CHECK(proxy->IsProxy());
+-+
+-+ v8::Local<v8::Value> result = CompileRun("f(proxy)");
+-+ CHECK(result->Equals(env.local(), (*env)->Global()).FromJust());
+-+
+-+ result = CompileRun("f.call(proxy)");
+-+ CHECK(result->Equals(env.local(), proxy).FromJust());
+-+
+-+ result = CompileRun("Reflect.apply(f, proxy, [1])");
+-+ CHECK(result->Equals(env.local(), proxy).FromJust());
+-+}
+-
+- static void SimpleCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
+- ApiTestFuzzer::Fuzz();
diff --git a/libchromiumcontent-settings.patch b/libchromiumcontent-settings.patch
new file mode 100644
index 000000000000..65091f68353d
--- /dev/null
+++ b/libchromiumcontent-settings.patch
@@ -0,0 +1,44 @@
+--- a/chromiumcontent/args/native_mksnapshot.gn
++++ b/chromiumcontent/args/native_mksnapshot.gn
+@@ -11,3 +11,10 @@
+ if (target_cpu == "arm64") {
+ v8_snapshot_toolchain="//build/toolchain/linux:clang_arm64"
+ }
++clang_base_path = "/usr"
++clang_use_chrome_plugins = false
++treat_warnings_as_errors = false
++use_custom_libcxx = false
++use_sysroot = false
++use_gconf = false
++use_gnome_keyring = false
+--- a/chromiumcontent/args/static_library.gn
++++ b/chromiumcontent/args/static_library.gn
+@@ -1,13 +1,26 @@
+ root_extra_deps = [ "//libchromiumcontent/chromiumcontent" ]
+ is_electron_build = true
+ is_component_build = false
+-is_official_build = true
+-symbol_level = 2
++is_debug = false
++symbol_level = 0
+ enable_nacl = false
+ enable_widevine = true
+ proprietary_codecs = true
+ is_component_ffmpeg = true
+ ffmpeg_branding = "Chrome"
++custom_toolchain="//build/toolchain/linux/unbundle:default"
++host_toolchain="//build/toolchain/linux/unbundle:default"
++clang_base_path = "/usr"
++clang_use_chrome_plugins = false
++fatal_linker_warnings = false
++treat_warnings_as_errors = false
++fieldtrial_testing_like_official_build = true
++remove_webcore_debug_symbols = true
++link_pulseaudio = true
++linux_use_bundled_binutils = false
++use_cups = true
++use_sysroot = false
++use_gnome_keyring = false
+
+ # This may be guarded behind is_chrome_branded alongside
+ # proprietary_codecs https://webrtc-review.googlesource.com/c/src/+/36321,
diff --git a/libchromiumcontent-sort-filenames.patch b/libchromiumcontent-sort-filenames.patch
new file mode 100644
index 000000000000..54322772c495
--- /dev/null
+++ b/libchromiumcontent-sort-filenames.patch
@@ -0,0 +1,32 @@
+--- a/chromiumcontent/build_libs.py
++++ b/chromiumcontent/build_libs.py
+@@ -22,7 +22,8 @@ def gen_list(out, name, obj_dirs):
+ for base_dir in obj_dirs:
+ base_path = os.path.join('obj', base_dir)
+ for dir, subdirs, files in walk_dir(base_path, exclude_dirs):
+- for f in files:
++ subdirs.sort()
++ for f in sorted(files):
+ if f.endswith('.obj') or f.endswith('.o'):
+ out.write('"' + os.path.abspath(os.path.join(dir, f)) + '",\n')
+ out.write("]\n")
+--- a/tools/generate_filenames_gypi.py
++++ b/tools/generate_filenames_gypi.py
+@@ -99,7 +99,7 @@ def main(target_file, code_dir, shared_dir, static_dir):
+
+
+ def find_libraries(dirpath, library_suffix, list_of_excludes):
+- libraries = glob.glob(os.path.join(dirpath, '*.' + library_suffix))
++ libraries = sorted(glob.glob(os.path.join(dirpath, '*.' + library_suffix)))
+ if (library_suffix == 'so'):
+ # Handle "libname.so.123"
+ libraries += find_files_by_regex(dirpath, re.compile('.*\.so\.[0-9]+'))
+@@ -132,7 +132,7 @@ def find_files_by_regex(dirpath, regex):
+ if regex.match(file):
+ files_found.append(os.path.join(root, file))
+
+- return files_found
++ return sorted(files_found)
+
+
+ def is_v8_library(p):
diff --git a/libchromiumcontent-static-library-only.patch b/libchromiumcontent-static-library-only.patch
new file mode 100644
index 000000000000..df9ea8ff6150
--- /dev/null
+++ b/libchromiumcontent-static-library-only.patch
@@ -0,0 +1,43 @@
+--- a/script/create-dist
++++ b/script/create-dist
+@@ -69,7 +69,7 @@ BINARIES = {
+ 'libffmpeg.dylib',
+ ],
+ 'linux': [
+- 'libffmpeg.so',
++ # 'libffmpeg.so',
+ ],
+ 'win32': [
+ 'd3dcompiler_47.dll',
+@@ -448,7 +448,7 @@ def generate_ninja(args, ninja):
+ copy_locales(target_arch, component, ninja)
+
+ if args.component != 'native_mksnapshot':
+- copy_ffmpeg(target_arch, ninja)
++ # copy_ffmpeg(target_arch, ninja)
+ copy_sources(ninja)
+ generate_licenses(ninja)
+
+@@ -576,9 +576,9 @@ def copy_binaries(target_arch, component, create_debug_archive,
+ elif target_arch == 'mips64el':
+ binaries = [ 'chromedriver', 'clang_x64_v8_mips64el/mksnapshot' ]
+ else:
+- binaries = [ 'chromedriver', 'mksnapshot' ]
++ binaries = [ 'mksnapshot' ]
+
+- ffmpeg_output_dir = get_output_dir(SOURCE_ROOT, target_arch, 'ffmpeg')
++ ffmpeg_output_dir = get_output_dir(SOURCE_ROOT, target_arch, 'static_library')
+ for binary in binaries:
+ ninja.copy(os.path.join(ffmpeg_output_dir, binary), target_dir)
+
+--- a/script/lib/config.py
++++ b/script/lib/config.py
+@@ -10,7 +10,7 @@
+ VENDOR_DIR = os.path.join(SOURCE_ROOT, 'vendor')
+ DEPOT_TOOLS_DIR = os.path.join(VENDOR_DIR, 'depot_tools')
+
+-COMPONENTS = ['static_library', 'shared_library', 'ffmpeg', 'tests', 'native_mksnapshot']
++COMPONENTS = ['static_library', 'native_mksnapshot']
+
+ # URL to the mips64el sysroot image.
+ MIPS64EL_SYSROOT = 'https://github.com/electron/debian-sysroot-image-creator/releases/download/v0.5.0/debian_jessie_mips64-sysroot.tar.bz2'
diff --git a/libchromiumcontent-use-system-tools.patch b/libchromiumcontent-use-system-tools.patch
new file mode 100644
index 000000000000..26aa1c66dfc9
--- /dev/null
+++ b/libchromiumcontent-use-system-tools.patch
@@ -0,0 +1,34 @@
+--- a/script/lib/ninja.py
++++ b/script/lib/ninja.py
+@@ -15,7 +15,7 @@
+
+
+ def run(directory, target=None, env=None):
+- ninja_binary = __get_binary_path()
++ ninja_binary = 'ninja'
+
+ args = [ninja_binary,
+ '-C', directory
+--- a/script/run-gn
++++ b/script/run-gn
+@@ -56,7 +56,7 @@
+ if sys.platform in ['win32', 'cygwin']:
+ env['DEPOT_TOOLS_WIN_TOOLCHAIN'] = '0'
+
+- gn.generate(build_dir, chromium_root_dir=SRC_DIR, depot_tools_dir=DEPOT_TOOLS_DIR, env=env)
++ gn.generate(build_dir, chromium_root_dir=SRC_DIR, depot_tools_dir=os.path.join('/usr', 'bin'), env=env)
+
+
+ def create_gn_config(component, build_dir, **gnargs):
+--- a/script/update
++++ b/script/update
+@@ -89,9 +89,7 @@
+ install_aarch64_bintools()
+
+ return ((apply_patches(target_arch) if args.apply_patches else 0) or
+- install_sysroot_if_needed(target_arch) or
+ copy_chromiumcontent_files() or
+- update_clang() or
+ setup_mips64el_toolchain(target_arch) or
+ run_gn(target_arch, args.cc_wrapper))
+
diff --git a/no-clang-plugins.patch b/no-clang-plugins.patch
new file mode 100644
index 000000000000..70cf3933a381
--- /dev/null
+++ b/no-clang-plugins.patch
@@ -0,0 +1,38 @@
+--- a/toolchain.gypi
++++ b/toolchain.gypi
+@@ -134,35 +134,6 @@
+ 'CLANG_CXX_LANGUAGE_STANDARD': 'c++14', # -std=c++14
+ },
+ 'target_conditions': [
+- ['_target_name in ["electron", "brightray"]', {
+- 'conditions': [
+- ['OS=="mac"', {
+- 'xcode_settings': {
+- 'OTHER_CFLAGS': [
+- "-Xclang",
+- "-load",
+- "-Xclang",
+- "<(source_root)/<(make_clang_dir)/lib/libFindBadConstructs.dylib",
+- "-Xclang",
+- "-add-plugin",
+- "-Xclang",
+- "find-bad-constructs",
+- ],
+- },
+- }, { # OS=="mac"
+- 'cflags_cc': [
+- "-Xclang",
+- "-load",
+- "-Xclang",
+- "<(source_root)/<(make_clang_dir)/lib/libFindBadConstructs.so",
+- "-Xclang",
+- "-add-plugin",
+- "-Xclang",
+- "find-bad-constructs",
+- ],
+- }],
+- ],
+- }],
+ ['OS=="mac" and _type in ["executable", "shared_library"]', {
+ 'xcode_settings': {
+ # On some machines setting CLANG_CXX_LIBRARY doesn't work for
diff --git a/no-whole-archive.patch b/no-whole-archive.patch
new file mode 100644
index 000000000000..3c7a63be740e
--- /dev/null
+++ b/no-whole-archive.patch
@@ -0,0 +1,22 @@
+--- a/brightray/brightray.gyp
++++ b/brightray/brightray.gyp
+@@ -55,14 +55,13 @@
+ 'conditions': [
+ # Link with libraries of libchromiumcontent.
+ ['OS=="linux" and libchromiumcontent_component==0', {
+- # On Linux we have to use "--whole-archive" to force executable
+- # to include all symbols, otherwise we will have plenty of
++ # On Linux we have to use "--start-group" or we will have plenty of
+ # unresolved symbols errors.
+- 'direct_dependent_settings': {
+- 'ldflags': [
+- '-Wl,--whole-archive',
++ 'link_settings': {
++ 'libraries': [
++ '-Wl,--start-group',
+ '<@(libchromiumcontent_libraries)',
+- '-Wl,--no-whole-archive',
++ '-Wl,--end-group'
+ ],
+ }
+ }, { # (Release build on Linux)
diff --git a/use-system-ffmpeg.patch b/use-system-ffmpeg.patch
new file mode 100644
index 000000000000..19efa524e06c
--- /dev/null
+++ b/use-system-ffmpeg.patch
@@ -0,0 +1,21 @@
+--- a/brightray/brightray.gyp
++++ b/brightray/brightray.gyp
+@@ -157,8 +157,6 @@
+ }, {
+ 'link_settings': {
+ 'libraries': [
+- # Link with ffmpeg.
+- '<(libchromiumcontent_dir)/libffmpeg.so',
+ # Following libraries are required by libchromiumcontent:
+ '-lasound',
+ '-lcap',
+--- a/electron.gyp
++++ b/electron.gyp
+@@ -233,7 +233,6 @@
+ }, {
+ 'copied_libraries': [
+ '<(PRODUCT_DIR)/lib/libnode.so',
+- '<(libchromiumcontent_dir)/libffmpeg.so',
+ ],
+ }],
+ ],
diff --git a/use-system-libraries-in-node.patch b/use-system-libraries-in-node.patch
new file mode 100644
index 000000000000..7767691ba50c
--- /dev/null
+++ b/use-system-libraries-in-node.patch
@@ -0,0 +1,31 @@
+--- a/common.gypi
++++ b/common.gypi
+@@ -27,12 +27,12 @@
+ 'node_install_npm': 'false',
+ 'node_prefix': '',
+ 'node_shared': 'true',
+- 'node_shared_cares': 'false',
+- 'node_shared_http_parser': 'false',
++ 'node_shared_cares': 'true',
++ 'node_shared_http_parser': 'true',
+ 'node_shared_libuv': 'false',
+ 'node_shared_openssl': 'false',
+ 'node_shared_v8': 'true',
+- 'node_shared_zlib': 'false',
++ 'node_shared_zlib': 'true',
+ 'node_tag': '',
+ 'node_use_dtrace': 'false',
+ 'node_use_etw': 'false',
+@@ -198,6 +198,12 @@
+ },
+ }],
+ ['OS=="linux" and libchromiumcontent_component==0', {
++ 'libraries': [
++ '-lcares',
++ '-lcrypto',
++ '-lhttp_parser',
++ '-lz',
++ ],
+ # Prevent the linker from stripping symbols.
+ 'ldflags': [
+ '-Wl,--whole-archive',