diff options
author | Jonas Heinrich | 2017-11-28 22:19:37 +0100 |
---|---|---|
committer | Jonas Heinrich | 2017-11-28 22:19:37 +0100 |
commit | be249aa85007b8d48a4eab7dfe38e2404f70034c (patch) | |
tree | 56dc099158b510b348ec5f734434eea8a2f74f90 | |
download | aur-electron-wayland.tar.gz |
first commit
30 files changed, 1316 insertions, 0 deletions
diff --git a/.SRCINFO b/.SRCINFO new file mode 100644 index 000000000000..681f33f144fe --- /dev/null +++ b/.SRCINFO @@ -0,0 +1,130 @@ +# Generated by mksrcinfo v8 +# Tue Nov 28 21:19:23 UTC 2017 +pkgbase = electron-wayland + pkgdesc = Build cross platform desktop apps with web technologies + pkgver = 1.6.15 + pkgrel = 1 + url = http://electron.atom.io/ + arch = x86_64 + license = MIT + license = custom + makedepends = clang + makedepends = gconf + makedepends = git + makedepends = gperf + makedepends = gtk2 + makedepends = harfbuzz-icu + makedepends = jsoncpp + makedepends = libexif + makedepends = libgnome-keyring + makedepends = libnotify + 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 = libvpx + depends = libxslt + depends = libxss + depends = minizip + depends = nss + depends = re2 + depends = snappy + optdepends = gvfs: file deletion support (gvfs-trash) + optdepends = kde-cli-tools: file deletion support (kioclient5) + optdepends = kdebase-runtime: file deletion support (kioclient) + optdepends = trash-cli: file deletion support (trash-put) + provides = electron + conflicts = electron + noextract = chromium-56.0.2924.87.tar.xz + source = git+https://github.com/electron/electron.git#tag=v1.6.15 + source = git+https://github.com/boto/boto.git + source = git+https://github.com/electron/brightray.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 = native_mate::git+https://github.com/zcbenz/native-mate.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/kennethreitz/requests.git + source = google-breakpad::git+https://chromium.googlesource.com/breakpad/breakpad/src + source = electron-chromium-56.0.2924.87.tar.xz::https://github.com/zcbenz/chromium-source-tarball/releases/download/56.0.2924.87/chromium-56.0.2924.87.tar.xz + source = electron.desktop + source = default_app-icon.patch + source = dont-bootstrap-libchromiumcontent.patch + source = dont-update-submodules.patch + source = dont-use-sysroot.patch + source = allow-i686.patch + source = gtk3-menu-bar.patch + source = gtk3-message-box.patch + source = gtk3-warnings.patch + source = use-system-clang.patch + source = use-system-libraries-in-node.patch + source = use-system-ninja.patch + source = use-system-ffmpeg.patch + source = breakpad-glibc2.26.patch + source = brightray-dont-update-submodules.patch + source = brightray-no-whole-archive.patch + source = brightray-use-system-ffmpeg.patch + source = gyp-no-rpath.patch + source = libchromiumcontent-settings.patch + source = libchromiumcontent-sort-filenames.patch + source = libchromiumcontent-static-library-only.patch + source = libchromiumcontent-use-system-tools.patch + source = chromium-gtk3.patch + source = chromium-include-functional.patch + source = chromium-unset-madv_free.patch + source = chromium-use-system-ffmpeg.patch + source = chromium-use-system-minizip.patch + source = chromium-use-system-re2.patch + sha256sums = SKIP + sha256sums = SKIP + sha256sums = SKIP + sha256sums = SKIP + sha256sums = SKIP + sha256sums = SKIP + sha256sums = SKIP + sha256sums = SKIP + sha256sums = SKIP + sha256sums = SKIP + sha256sums = SKIP + sha256sums = SKIP + sha256sums = 70876d8b1e91801af0af133f6de2992c1c8868e34b6354bb060e040958c604d7 + sha256sums = 5270db01f3f8aaa5137dec275a02caa832b7f2e37942e068cba8d28b3a29df39 + sha256sums = 84b4c5d9a27727b18e500db4fcc5c44dd52eaeb440eeec02cd8321d1f6bfcadf + sha256sums = 14dbd1eecb7034d9e19e1f0c61b0a36ed3b9c610db008ff2a6da2a540ade1221 + sha256sums = 2a2bc09a40415fd0d57cc8815a158bf32eb4cc2add3b655dddf568c7dc795ff3 + sha256sums = 182a2eeb784630e6aa3378a54c5709629658eac8e146764008cb2f2214cd5427 + sha256sums = c209475c16b506d8d888a54c8564718cf9775f450d1867e19e86a03d99a119be + sha256sums = e18b81d584684657bf0a1af000d22f3c0963250c77ec9d72a4c877eabf032cd2 + sha256sums = 473f740b2b73cad131a38bd56bfa84e7905378187ef4586ea5eff18342b2ba8a + sha256sums = ea2942e980328ffb989abb32e5aa0991363178b9c455b931ab726e1c3039ec96 + sha256sums = ce78850a2d2fe343febee597f0fce361ff99be63f6f720fa844d64efc7abb84e + sha256sums = 541d3c11ff4b540f37e066e695cdcc053d069ee09b64dfe170b0fa236b7a1eee + sha256sums = dc3286a1947240ab6ec562263af0b3c9971da2a4ab45970e3e664563e877280f + sha256sums = c697b9bafaa26014fb829001ec783dd74ef35cf1d188cb7729ebf42d73548488 + sha256sums = 21d9ea4d9bb62450ae1bd82839ec322e542b6b1a2d629f7668e066c94947d47d + sha256sums = 3bf045dc4ac1cb32491c4a20de313c3056824e75308f97b9e869fd5a2a166480 + sha256sums = cd8e21529ac47c42827c5c619309098c3046fe24106946313e0d0e89d39876fd + sha256sums = e627cbdfa3175d1cdf1bfe17de42bbce5c8086ea7cebf99e1aec251fb5bf8456 + sha256sums = 68977a78fb41a549eb449dd35f94e0168d647245516397f0ecdfa7a03a147045 + sha256sums = 6fd3ed318f76c37a0d31ea07c892354718a8c2300f81f1901690f90f8016a04b + sha256sums = 4de540ec76736ef3e14475090916a42c03692c542822b430f1ab3f6d36655511 + sha256sums = 88c924e39de283f698323c9ea5e2e9ce277f2d75b190500a5ad9d3bf81bafdae + sha256sums = a5af00380aa79bebdba5a140ec0ab8722e1c96040562862b033e66d09f2eefc2 + sha256sums = 8fbaa725f7e8ba3851d84d7b03f7837049f8ce2e976fa1ebc76231236678183b + sha256sums = 43116692892bb85646ebf34ce91d47233203e9c9fa887d6993ecbbb5033dcd27 + sha256sums = ccba3002243fb1f9a67c8a60af310706caa591d12aef45f1d0f4bda47626f3ab + sha256sums = ed9fdb6a66a6ff7e4726d273d9da68fa68117d8f6668781005ec1d621759a5be + sha256sums = 76fb05484a4e9faaad0763b65b6ad84224a9f74aff9227c7a3dc1c15eea324c4 + sha256sums = b9fcfa7f25f0b49dd44e13b86e5f160e1e73cef0af5227840a4c2d2329e092c9 + +pkgname = electron-wayland + diff --git a/PKGBUILD b/PKGBUILD new file mode 100644 index 000000000000..8bcc8209185c --- /dev/null +++ b/PKGBUILD @@ -0,0 +1,302 @@ +# $Id$ +# Maintainer: Jonas Heinrich <onny@project-insanity.org> +# Contributor: Jonas Heinrich <onny@project-insanity.org> +# Contributor: Nicola Squartini <tensor5@gmail.com> + +_chromiumver=56.0.2924.87 +pkgname=electron-wayland +pkgver=1.6.15 +pkgrel=1 +pkgdesc='Build cross platform desktop apps with web technologies' +arch=('x86_64') +url='http://electron.atom.io/' +license=('MIT' 'custom') +depends=('c-ares' 'ffmpeg' 'gtk3' 'http-parser' 'libevent' 'libvpx' 'libxslt' + 'libxss' 'minizip' 'nss' 're2' 'snappy') +makedepends=('clang' 'gconf' 'git' 'gperf' 'gtk2' 'harfbuzz-icu' 'jsoncpp' + 'libexif' 'libgnome-keyring' 'libnotify' 'ninja' 'npm' 'pciutils' + 'python2' 'wget' 'yasm') +optdepends=('gvfs: file deletion support (gvfs-trash)' + 'kde-cli-tools: file deletion support (kioclient5)' + 'kdebase-runtime: file deletion support (kioclient)' + 'trash-cli: file deletion support (trash-put)') +provides=('electron') +conflicts=('electron') +source=("git+https://github.com/electron/electron.git#tag=v${pkgver}" + 'git+https://github.com/boto/boto.git' + 'git+https://github.com/electron/brightray.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" + 'native_mate::git+https://github.com/zcbenz/native-mate.git' + 'git+https://github.com/electron/node.git' + 'pdf_viewer::git+https://github.com/electron/pdf-viewer.git' + 'git+https://github.com/kennethreitz/requests.git' + 'google-breakpad::git+https://chromium.googlesource.com/breakpad/breakpad/src' + "electron-chromium-${_chromiumver}.tar.xz::https://github.com/zcbenz/chromium-source-tarball/releases/download/${_chromiumver}/chromium-${_chromiumver}.tar.xz" + 'electron.desktop' + 'default_app-icon.patch' + 'dont-bootstrap-libchromiumcontent.patch' + 'dont-update-submodules.patch' + 'dont-use-sysroot.patch' + 'allow-i686.patch' + 'gtk3-menu-bar.patch' + 'gtk3-message-box.patch' + 'gtk3-warnings.patch' + 'use-system-clang.patch' + 'use-system-libraries-in-node.patch' + 'use-system-ninja.patch' + 'use-system-ffmpeg.patch' + 'breakpad-glibc2.26.patch' + 'brightray-dont-update-submodules.patch' + 'brightray-no-whole-archive.patch' + 'brightray-use-system-ffmpeg.patch' + 'gyp-no-rpath.patch' + 'libchromiumcontent-settings.patch' + 'libchromiumcontent-sort-filenames.patch' + 'libchromiumcontent-static-library-only.patch' + 'libchromiumcontent-use-system-tools.patch' + 'chromium-gtk3.patch' + 'chromium-include-functional.patch' + 'chromium-unset-madv_free.patch' + 'chromium-use-system-ffmpeg.patch' + 'chromium-use-system-minizip.patch' + 'chromium-use-system-re2.patch' + ) +noextract=("chromium-${_chromiumver}.tar.xz") +sha256sums=('SKIP' + 'SKIP' + 'SKIP' + 'SKIP' + 'SKIP' + 'SKIP' + 'SKIP' + 'SKIP' + 'SKIP' + 'SKIP' + 'SKIP' + 'SKIP' + '70876d8b1e91801af0af133f6de2992c1c8868e34b6354bb060e040958c604d7' + '5270db01f3f8aaa5137dec275a02caa832b7f2e37942e068cba8d28b3a29df39' + '84b4c5d9a27727b18e500db4fcc5c44dd52eaeb440eeec02cd8321d1f6bfcadf' + '14dbd1eecb7034d9e19e1f0c61b0a36ed3b9c610db008ff2a6da2a540ade1221' + '2a2bc09a40415fd0d57cc8815a158bf32eb4cc2add3b655dddf568c7dc795ff3' + '182a2eeb784630e6aa3378a54c5709629658eac8e146764008cb2f2214cd5427' + 'c209475c16b506d8d888a54c8564718cf9775f450d1867e19e86a03d99a119be' + 'e18b81d584684657bf0a1af000d22f3c0963250c77ec9d72a4c877eabf032cd2' + '473f740b2b73cad131a38bd56bfa84e7905378187ef4586ea5eff18342b2ba8a' + 'ea2942e980328ffb989abb32e5aa0991363178b9c455b931ab726e1c3039ec96' + 'ce78850a2d2fe343febee597f0fce361ff99be63f6f720fa844d64efc7abb84e' + '541d3c11ff4b540f37e066e695cdcc053d069ee09b64dfe170b0fa236b7a1eee' + 'dc3286a1947240ab6ec562263af0b3c9971da2a4ab45970e3e664563e877280f' + 'c697b9bafaa26014fb829001ec783dd74ef35cf1d188cb7729ebf42d73548488' + '21d9ea4d9bb62450ae1bd82839ec322e542b6b1a2d629f7668e066c94947d47d' + '3bf045dc4ac1cb32491c4a20de313c3056824e75308f97b9e869fd5a2a166480' + 'cd8e21529ac47c42827c5c619309098c3046fe24106946313e0d0e89d39876fd' + 'e627cbdfa3175d1cdf1bfe17de42bbce5c8086ea7cebf99e1aec251fb5bf8456' + '68977a78fb41a549eb449dd35f94e0168d647245516397f0ecdfa7a03a147045' + '6fd3ed318f76c37a0d31ea07c892354718a8c2300f81f1901690f90f8016a04b' + '4de540ec76736ef3e14475090916a42c03692c542822b430f1ab3f6d36655511' + '88c924e39de283f698323c9ea5e2e9ce277f2d75b190500a5ad9d3bf81bafdae' + 'a5af00380aa79bebdba5a140ec0ab8722e1c96040562862b033e66d09f2eefc2' + '8fbaa725f7e8ba3851d84d7b03f7837049f8ce2e976fa1ebc76231236678183b' + '43116692892bb85646ebf34ce91d47233203e9c9fa887d6993ecbbb5033dcd27' + 'ccba3002243fb1f9a67c8a60af310706caa591d12aef45f1d0f4bda47626f3ab' + 'ed9fdb6a66a6ff7e4726d273d9da68fa68117d8f6668781005ec1d621759a5be' + '76fb05484a4e9faaad0763b65b6ad84224a9f74aff9227c7a3dc1c15eea324c4' + 'b9fcfa7f25f0b49dd44e13b86e5f160e1e73cef0af5227840a4c2d2329e092c9' + ) + +_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}"/gtk3-menu-bar.patch + patch -Np1 -i "${srcdir}"/gtk3-message-box.patch + patch -Np1 -i "${srcdir}"/gtk3-warnings.patch + patch -Np1 -i "${srcdir}"/use-system-clang.patch + patch -Np1 -i "${srcdir}"/use-system-libraries-in-node.patch + patch -Np1 -i "${srcdir}"/use-system-ninja.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}"/allow-i686.patch + + mkdir -p "${srcdir}"/python2-path + ln -sf /usr/bin/python2 "${srcdir}/python2-path/python" + + for m in boto breakpad brightray native_mate 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/brightray + patch -Np1 -i "${srcdir}"/brightray-dont-update-submodules.patch + patch -Np1 -i "${srcdir}"/brightray-use-system-ffmpeg.patch + patch -Np1 -i "${srcdir}"/brightray-no-whole-archive.patch + for m in libchromiumcontent gyp; do + git submodule init vendor/${m} + git config submodule.vendor/${m}.url "${srcdir}/${m}" + done + git submodule update + # Add extra libraries for unbundling + sed -e "s/'-lexpat',/'-lexpat', '<\!@(pkg-config --libs-only-l libavcodec libavformat libavutil libevent flac harfbuzz-icu jsoncpp minizip libpng libpulse vpx libwebpdemux libxml-2.0 libxslt)', '-ljpeg', '-lre2', '-lsnappy', '-latomic',/" \ + -e 's/gtk+-2\.0/gtk+-3.0/' \ + -i brightray.gyp + + cd "${srcdir}"/electron/vendor/brightray/vendor/gyp + # Remove a useless $ORIGIN/lib/ rpath from the electron binary + patch -Np1 -i "${srcdir}"/gyp-no-rpath.patch + + cd "${srcdir}"/electron/vendor/brightray/vendor/libchromiumcontent + git checkout 19ca886975716c02d6de9fd41b8297a4e1774be2 + git submodule update --init vendor/python-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 patches/third_party/ffmpeg/build_gn.patch # Use system ffmpeg + ln -s "${srcdir}"/chromium-${_chromiumver} src + if [ ! -e src/.version ]; then + echo "${_chromiumver}" > src/.version + fi + cd src + patch -Np1 -i "${srcdir}"/chromium-gtk3.patch + patch -Np1 -i "${srcdir}"/chromium-include-functional.patch + patch -Np1 -i "${srcdir}"/chromium-unset-madv_free.patch # fixes crash with kernels < 4.5 + patch -Np1 -i "${srcdir}"/chromium-use-system-ffmpeg.patch + patch -Np1 -i "${srcdir}"/chromium-use-system-minizip.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/*" \ + \! -path "*base/third_party/libevent/*" \ + \! -regex '.*\.\(gn\|gni\|isolate\|py\)' \ + -delete + done + python2 build/linux/unbundle/replace_gn_files.py --system-libraries "${_system_libs[@]}" +} + +build() { + export PATH="${srcdir}/python2-path:${PATH}" + + if [ "${CARCH}" == 'x86_64' ]; then + _target=x64 + else + _target=ia32 + fi + + # Build GN + cd "${srcdir}/chromium-${_chromiumver}" + gn_flags=( + 'clang_base_path="/usr"' + 'clang_use_chrome_plugins=false' + 'treat_warnings_as_errors=false' + 'use_sysroot=false' + ) + python2 tools/gn/bootstrap/bootstrap.py --gn-gen-args "${gn_flags[*]}" + # libevent not needed anymore + find -type f -path "*base/third_party/libevent/*" \ + \! -regex '.*\.\(gn\|gni\|isolate\|py\)' \ + -delete + + cd "${srcdir}"/electron + LDFLAGS="${LDFLAGS} -Wl,-z,noexecstack" + script/bootstrap.py --verbose \ + --target_arch=${_target} \ + --clang_dir=/usr \ + --build_libchromiumcontent + script/build.py -c Release +} + +package() { + cd "${srcdir}"/electron + + _cc="${srcdir}"/electron/vendor/brightray/vendor/libchromiumcontent/dist/main + + install -d -m755 "${pkgdir}"/usr/share/licenses/electron + install -m644 LICENSE "${_cc}"/LICENSES.chromium.html \ + "${pkgdir}"/usr/share/licenses/electron + for lib in brightray native_mate node; do + install -m644 vendor/${lib}/LICENSE \ + "${pkgdir}"/usr/share/licenses/electron/LICENSE-${lib} + done + install -m644 vendor/brightray/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 \ + pdf_viewer_resources.pak \ + snapshot_blob.bin \ + ui_resources_200_percent.pak \ + 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/allow-i686.patch b/allow-i686.patch new file mode 100644 index 000000000000..154ab9bc8641 --- /dev/null +++ b/allow-i686.patch @@ -0,0 +1,14 @@ +--- a/script/update.py ++++ b/script/update.py +@@ -15,11 +15,6 @@ SOURCE_ROOT = os.path.abspath(os.path.dirname(os.path.dirname(__file__))) + + def main(): + os.chdir(SOURCE_ROOT) +- +- if PLATFORM != 'win32' and platform.architecture()[0] != '64bit': +- print 'Electron is required to be built on a 64bit machine' +- return 1 +- + update_external_binaries() + return update_gyp() + diff --git a/breakpad-glibc2.26.patch b/breakpad-glibc2.26.patch new file mode 100644 index 000000000000..0a0ca26e5092 --- /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 +@@ -416,7 +416,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 +@@ -1240,7 +1240,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/brightray-dont-update-submodules.patch b/brightray-dont-update-submodules.patch new file mode 100644 index 000000000000..99f50cec7749 --- /dev/null +++ b/brightray-dont-update-submodules.patch @@ -0,0 +1,11 @@ +--- a/script/bootstrap ++++ b/script/bootstrap +@@ -24,7 +24,7 @@ def main(): + print "Error: All options of libchromiumcontent are required OR let " \ + "brightray choose it" + sys.exit(0) +- update_submodules() ++ # update_submodules() + setup_libchromiumcontent(args.dev, args.commit, args.target_arch, args.url, + args.libcc_source_path, + args.libcc_shared_library_path, diff --git a/brightray-no-whole-archive.patch b/brightray-no-whole-archive.patch new file mode 100644 index 000000000000..ce4438269266 --- /dev/null +++ b/brightray-no-whole-archive.patch @@ -0,0 +1,22 @@ +--- a/brightray.gyp ++++ b/brightray.gyp +@@ -41,14 +41,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/brightray-use-system-ffmpeg.patch b/brightray-use-system-ffmpeg.patch new file mode 100644 index 000000000000..22a477b1b550 --- /dev/null +++ b/brightray-use-system-ffmpeg.patch @@ -0,0 +1,11 @@ +--- a/brightray.gyp ++++ b/brightray.gyp +@@ -130,8 +130,6 @@ + }, { + 'link_settings': { + 'libraries': [ +- # Link with ffmpeg. +- '<(libchromiumcontent_dir)/libffmpeg.so', + # Following libraries are required by libchromiumcontent: + '-lasound', + '-lcap', diff --git a/chromium-gtk3.patch b/chromium-gtk3.patch new file mode 100644 index 000000000000..a9ddb9452b3c --- /dev/null +++ b/chromium-gtk3.patch @@ -0,0 +1,13 @@ +--- a/chrome/browser/ui/libgtkui/gtk_ui.cc ++++ b/chrome/browser/ui/libgtkui/gtk_ui.cc +@@ -411,6 +411,10 @@ + } // namespace + + Gtk2UI::Gtk2UI() : middle_click_action_(GetDefaultMiddleClickAction()) { ++#if GTK_MAJOR_VERSION > 2 ++ g_setenv("GDK_SCALE", "1", FALSE); ++ gdk_set_allowed_backends("x11"); ++#endif + GtkInitFromCommandLine(*base::CommandLine::ForCurrentProcess()); + } + diff --git a/chromium-include-functional.patch b/chromium-include-functional.patch new file mode 100644 index 000000000000..12feabb3c4c6 --- /dev/null +++ b/chromium-include-functional.patch @@ -0,0 +1,10 @@ +--- a/third_party/WebKit/Source/platform/graphics/gpu/SharedGpuContext.h ++++ b/third_party/WebKit/Source/platform/graphics/gpu/SharedGpuContext.h +@@ -5,6 +5,7 @@ + #include "platform/PlatformExport.h" + #include "wtf/ThreadSpecific.h" + ++#include <functional> + #include <memory> + + namespace gpu { diff --git a/chromium-unset-madv_free.patch b/chromium-unset-madv_free.patch new file mode 100644 index 000000000000..33f5a30420be --- /dev/null +++ b/chromium-unset-madv_free.patch @@ -0,0 +1,14 @@ +--- a/third_party/WebKit/Source/wtf/allocator/PageAllocator.cpp ++++ b/third_party/WebKit/Source/wtf/allocator/PageAllocator.cpp +@@ -41,6 +41,11 @@ + #include <errno.h> + #include <sys/mman.h> + ++#if OS(LINUX) && defined(MADV_FREE) ++// Added in Linux 4.5, but it breaks the sandbox. ++#undef MADV_FREE ++#endif ++ + #ifndef MADV_FREE + #define MADV_FREE MADV_DONTNEED + #endif diff --git a/chromium-use-system-ffmpeg.patch b/chromium-use-system-ffmpeg.patch new file mode 100644 index 000000000000..3792ea5338a2 --- /dev/null +++ b/chromium-use-system-ffmpeg.patch @@ -0,0 +1,48 @@ +--- a/media/ffmpeg/ffmpeg_common.h ++++ b/media/ffmpeg/ffmpeg_common.h +@@ -22,10 +22,6 @@ + + // Include FFmpeg header files. + extern "C" { +-// Disable deprecated features which result in spammy compile warnings. This +-// list of defines must mirror those in the 'defines' section of FFmpeg's +-// BUILD.gn file or the headers below will generate different structures! +-#define FF_API_CONVERGENCE_DURATION 0 + // Upstream libavcodec/utils.c still uses the deprecated + // av_dup_packet(), causing deprecation warnings. + // The normal fix for such things is to disable the feature as below, +@@ -39,7 +35,6 @@ + MSVC_PUSH_DISABLE_WARNING(4244); + #include <libavcodec/avcodec.h> + #include <libavformat/avformat.h> +-#include <libavformat/internal.h> + #include <libavformat/avio.h> + #include <libavutil/avutil.h> + #include <libavutil/imgutils.h> +--- a/media/filters/ffmpeg_demuxer.cc ++++ b/media/filters/ffmpeg_demuxer.cc +@@ -1198,24 +1198,6 @@ + // If no estimate is found, the stream entry will be kInfiniteDuration. + std::vector<base::TimeDelta> start_time_estimates(format_context->nb_streams, + kInfiniteDuration); +- const AVFormatInternal* internal = format_context->internal; +- if (internal && internal->packet_buffer && +- format_context->start_time != static_cast<int64_t>(AV_NOPTS_VALUE)) { +- struct AVPacketList* packet_buffer = internal->packet_buffer; +- while (packet_buffer != internal->packet_buffer_end) { +- DCHECK_LT(static_cast<size_t>(packet_buffer->pkt.stream_index), +- start_time_estimates.size()); +- const AVStream* stream = +- format_context->streams[packet_buffer->pkt.stream_index]; +- if (packet_buffer->pkt.pts != static_cast<int64_t>(AV_NOPTS_VALUE)) { +- const base::TimeDelta packet_pts = +- ConvertFromTimeBase(stream->time_base, packet_buffer->pkt.pts); +- if (packet_pts < start_time_estimates[stream->index]) +- start_time_estimates[stream->index] = packet_pts; +- } +- packet_buffer = packet_buffer->next; +- } +- } + + std::unique_ptr<MediaTracks> media_tracks(new MediaTracks()); + diff --git a/chromium-use-system-minizip.patch b/chromium-use-system-minizip.patch new file mode 100644 index 000000000000..cc5c6aa95ad1 --- /dev/null +++ b/chromium-use-system-minizip.patch @@ -0,0 +1,14 @@ +--- a/third_party/zlib/google/zip_reader.cc ++++ b/third_party/zlib/google/zip_reader.cc +@@ -278,10 +278,9 @@ + + current_entry_info_.reset(); + reached_end_ = false; +- const int kDefaultCaseSensivityOfOS = 0; + const int result = unzLocateFile(zip_file_, + path_in_zip.AsUTF8Unsafe().c_str(), +- kDefaultCaseSensivityOfOS); ++ NULL); + if (result != UNZ_OK) + return false; + 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..5ae9ed904a31 --- /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 +@@ -85,7 +85,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..f82a31a7b519 --- /dev/null +++ b/dont-bootstrap-libchromiumcontent.patch @@ -0,0 +1,13 @@ +diff --git a/script/build-libchromiumcontent.py b/script/build-libchromiumcontent.py +index e0a95f6..1383e70 100755 +--- a/script/build-libchromiumcontent.py ++++ b/script/build-libchromiumcontent.py +@@ -28,7 +28,7 @@ def main(): + update = os.path.join(script_dir, 'update') + build = os.path.join(script_dir, 'build') + create_dist = os.path.join(script_dir, 'create-dist') +- execute_stdout([sys.executable, bootstrap]) ++ # execute_stdout([sys.executable, bootstrap]) + execute_stdout([sys.executable, update, '-t', args.target_arch, + '--defines', args.defines]) + execute_stdout([sys.executable, build, '-R', '-t', args.target_arch]) diff --git a/dont-update-submodules.patch b/dont-update-submodules.patch new file mode 100644 index 000000000000..2c011334a9c3 --- /dev/null +++ b/dont-update-submodules.patch @@ -0,0 +1,11 @@ +--- a/script/bootstrap.py ++++ b/script/bootstrap.py +@@ -31,7 +31,7 @@ def main(): + if sys.platform == 'cygwin': + update_win32_python() + +- 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..ae8b9915fabb --- /dev/null +++ b/dont-use-sysroot.patch @@ -0,0 +1,27 @@ +--- a/script/bootstrap.py ++++ b/script/bootstrap.py +@@ -57,9 +57,6 @@ + libcc_source_path, libcc_shared_library_path, + libcc_static_library_path) + +- if PLATFORM == 'linux': +- download_sysroot(args.target_arch) +- + create_chrome_version_h() + touch_config_gypi() + run_update(defines, args.msvs) +--- a/toolchain.gypi ++++ b/toolchain.gypi +@@ -53,10 +53,10 @@ + 'sysroot%': '<(source_root)/vendor/debian_wheezy_arm-sysroot', + }], + ['target_arch=="ia32"', { +- 'sysroot%': '<(source_root)/vendor/debian_wheezy_i386-sysroot', ++ 'sysroot%': '/', + }], + ['target_arch=="x64"', { +- 'sysroot%': '<(source_root)/vendor/debian_wheezy_amd64-sysroot', ++ 'sysroot%': '/', + }], + ], + }, diff --git a/electron.desktop b/electron.desktop new file mode 100644 index 000000000000..e29e4d6ce9a7 --- /dev/null +++ b/electron.desktop @@ -0,0 +1,7 @@ +[Desktop Entry] +Type=Application +Name=Electron +Icon=electron +Exec=electron %u +Categories=Development;GTK; +StartupNotify=true diff --git a/gtk3-menu-bar.patch b/gtk3-menu-bar.patch new file mode 100644 index 000000000000..8a51ecec3ae2 --- /dev/null +++ b/gtk3-menu-bar.patch @@ -0,0 +1,91 @@ +--- a/atom/browser/ui/views/menu_bar.cc ++++ b/atom/browser/ui/views/menu_bar.cc +@@ -16,8 +16,6 @@ + + #if defined(OS_WIN) + #include "ui/gfx/color_utils.h" +-#elif defined(USE_X11) +-#include "chrome/browser/ui/libgtkui/skia_utils_gtk.h" + #endif + + namespace atom { +@@ -30,18 +28,71 @@ const char kViewClassName[] = "ElectronMenuBar"; + const SkColor kDefaultColor = SkColorSetARGB(255, 233, 233, 233); + + #if defined(USE_X11) ++SkColor GdkRGBAToSkColor(GdkRGBA color) { ++ return SkColorSetARGB(round(color.alpha * 255), ++ round(color.red * 255), ++ round(color.green * 255), ++ round(color.blue * 255)); ++} ++ + void GetMenuBarColor(SkColor* enabled, SkColor* disabled, SkColor* highlight, + SkColor* hover, SkColor* background) { ++ GtkWidget* window = gtk_window_new(GTK_WINDOW_TOPLEVEL); + GtkWidget* menu_bar = gtk_menu_bar_new(); +- +- GtkStyle* style = gtk_rc_get_style(menu_bar); +- *enabled = libgtkui::GdkColorToSkColor(style->fg[GTK_STATE_NORMAL]); +- *disabled = libgtkui::GdkColorToSkColor(style->fg[GTK_STATE_INSENSITIVE]); +- *highlight = libgtkui::GdkColorToSkColor(style->fg[GTK_STATE_SELECTED]); +- *hover = libgtkui::GdkColorToSkColor(style->fg[GTK_STATE_PRELIGHT]); +- *background = libgtkui::GdkColorToSkColor(style->bg[GTK_STATE_NORMAL]); +- ++ GtkWidget* menu_item = gtk_menu_item_new_with_label(""); ++ GtkWidget* label = gtk_bin_get_child(GTK_BIN(menu_item)); ++ GtkStyleContext* window_style_ctx = gtk_widget_get_style_context(window); ++ GtkStyleContext* menu_bar_style_ctx = ++ gtk_widget_get_style_context(menu_bar); ++ GtkStyleContext* menu_item_style_ctx = ++ gtk_widget_get_style_context(menu_item); ++ GtkStyleContext* label_style_ctx = gtk_widget_get_style_context(label); ++ GdkRGBA normal_color; ++ GdkRGBA backdrop_color; ++ GdkRGBA prelight_color; ++ GdkRGBA* background_color_ptr; ++ ++ gtk_container_add(GTK_CONTAINER(window), menu_bar); ++ gtk_menu_shell_append(GTK_MENU_SHELL(menu_bar), menu_item); ++ ++ gtk_style_context_get(menu_bar_style_ctx, ++ GTK_STATE_FLAG_NORMAL, ++ "background-color", ++ &background_color_ptr, ++ NULL); ++ ++ if (background_color_ptr->alpha == 0.0) ++ gtk_style_context_get(window_style_ctx, ++ GTK_STATE_FLAG_NORMAL, ++ "background-color", ++ &background_color_ptr, ++ NULL); ++ ++ *background = GdkRGBAToSkColor(*background_color_ptr); ++ gdk_rgba_free(background_color_ptr); ++ ++ gtk_style_context_get_color(label_style_ctx, ++ GTK_STATE_FLAG_NORMAL, ++ &normal_color); ++ *enabled = GdkRGBAToSkColor(normal_color); ++ *hover = GdkRGBAToSkColor(normal_color); ++ ++ gtk_style_context_set_state(menu_item_style_ctx, GTK_STATE_FLAG_PRELIGHT); ++ gtk_style_context_get_color(label_style_ctx, ++ GTK_STATE_FLAG_NORMAL, ++ &prelight_color); ++ gtk_style_context_set_state(menu_item_style_ctx, GTK_STATE_FLAG_NORMAL); ++ *highlight = GdkRGBAToSkColor(prelight_color); ++ ++ ++ gtk_style_context_get_color(label_style_ctx, ++ GTK_STATE_FLAG_BACKDROP, ++ &backdrop_color); ++ *disabled = GdkRGBAToSkColor(backdrop_color); ++ ++ gtk_widget_destroy(menu_item); + gtk_widget_destroy(menu_bar); ++ gtk_widget_destroy(window); + } + #endif + diff --git a/gtk3-message-box.patch b/gtk3-message-box.patch new file mode 100644 index 000000000000..f31af24d454f --- /dev/null +++ b/gtk3-message-box.patch @@ -0,0 +1,11 @@ +--- a/atom/browser/ui/message_box_gtk.cc ++++ b/atom/browser/ui/message_box_gtk.cc +@@ -197,7 +197,7 @@ + } + + void GtkMessageBox::OnCheckboxToggled(GtkWidget* widget) { +- checkbox_checked_ = GTK_TOGGLE_BUTTON(widget)->active; ++ checkbox_checked_ = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)); + } + + } // namespace diff --git a/gtk3-warnings.patch b/gtk3-warnings.patch new file mode 100644 index 000000000000..073688d4eaca --- /dev/null +++ b/gtk3-warnings.patch @@ -0,0 +1,65 @@ +--- a/atom/browser/ui/file_dialog_gtk.cc ++++ b/atom/browser/ui/file_dialog_gtk.cc +@@ -2,6 +2,8 @@ + // Use of this source code is governed by the MIT license that can be + // found in the LICENSE file. + ++#include <glib/gi18n.h> ++ + #include "atom/browser/ui/file_dialog.h" + + #include "atom/browser/native_window_views.h" +@@ -39,20 +41,20 @@ class FileChooserDialog { + const DialogSettings& settings) + : parent_(static_cast<atom::NativeWindowViews*>(settings.parent_window)), + filters_(settings.filters) { +- const char* confirm_text = GTK_STOCK_OK; ++ const char* confirm_text = _("_OK"); + + if (!settings.button_label.empty()) + confirm_text = settings.button_label.c_str(); + else if (action == GTK_FILE_CHOOSER_ACTION_SAVE) +- confirm_text = GTK_STOCK_SAVE; ++ confirm_text = _("_Save"); + else if (action == GTK_FILE_CHOOSER_ACTION_OPEN) +- confirm_text = GTK_STOCK_OPEN; ++ confirm_text = _("_Open"); + + dialog_ = gtk_file_chooser_dialog_new( + settings.title.c_str(), + NULL, + action, +- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, ++ _("_Cancel"), GTK_RESPONSE_CANCEL, + confirm_text, GTK_RESPONSE_ACCEPT, + NULL); + if (parent_) { +--- a/atom/browser/ui/message_box_gtk.cc ++++ b/atom/browser/ui/message_box_gtk.cc +@@ -2,6 +2,8 @@ + // Use of this source code is governed by the MIT license that can be + // found in the LICENSE file. + ++#include <glib/gi18n.h> ++ + #include "atom/browser/ui/message_box.h" + + #include "atom/browser/browser.h" +@@ -126,13 +128,13 @@ class GtkMessageBox { + const char* TranslateToStock(int id, const std::string& text) { + std::string lower = base::ToLowerASCII(text); + if (lower == "cancel") +- return GTK_STOCK_CANCEL; ++ return _("_Cancel"); + else if (lower == "no") +- return GTK_STOCK_NO; ++ return _("_No"); + else if (lower == "ok") +- return GTK_STOCK_OK; ++ return _("_OK"); + else if (lower == "yes") +- return GTK_STOCK_YES; ++ return _("_Yes"); + else + return text.c_str(); + } diff --git a/gyp-no-rpath.patch b/gyp-no-rpath.patch new file mode 100644 index 000000000000..22c7b160e11d --- /dev/null +++ b/gyp-no-rpath.patch @@ -0,0 +1,12 @@ +--- a/pylib/gyp/generator/ninja.py ++++ b/pylib/gyp/generator/ninja.py +@@ -1221,9 +1221,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-settings.patch b/libchromiumcontent-settings.patch new file mode 100644 index 000000000000..e93c4f070847 --- /dev/null +++ b/libchromiumcontent-settings.patch @@ -0,0 +1,58 @@ +--- a/chromiumcontent/args/static_library.gn ++++ b/chromiumcontent/args/static_library.gn +@@ -2,10 +2,22 @@ + is_electron_build = true + is_component_build = false + is_debug = false +-symbol_level = 2 ++symbol_level = 0 + enable_nacl = false + enable_widevine = true + proprietary_codecs = true + is_component_ffmpeg = true + ffmpeg_branding = "Chrome" + use_gold = false ++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_gconf = false ++use_gtk3 = true ++use_sysroot = false +--- a/chromiumcontent/BUILD.gn ++++ b/chromiumcontent/BUILD.gn +@@ -32,7 +32,7 @@ + ] + + if (is_linux) { +- deps += [ "//chrome/browser/ui/libgtkui:libgtk2ui" ] ++ deps += [ "//chrome/browser/ui/libgtkui:libgtk3ui" ] + } + + if (is_component_build) { +@@ -154,13 +154,13 @@ + static_library("libgtkui") { + complete_static_lib = true + sources = [ +- "$root_out_dir/obj/chrome/browser/ui/libgtkui/libgtk2ui/app_indicator_icon.o", +- "$root_out_dir/obj/chrome/browser/ui/libgtkui/libgtk2ui/app_indicator_icon_menu.o", +- "$root_out_dir/obj/chrome/browser/ui/libgtkui/libgtk2ui/gtk_util.o", +- "$root_out_dir/obj/chrome/browser/ui/libgtkui/libgtk2ui/gtk_status_icon.o", +- "$root_out_dir/obj/chrome/browser/ui/libgtkui/libgtk2ui/menu_util.o", +- "$root_out_dir/obj/chrome/browser/ui/libgtkui/libgtk2ui/skia_utils_gtk.o", +- "$root_out_dir/obj/chrome/browser/ui/libgtkui/libgtk2ui/unity_service.o", ++ "$root_out_dir/obj/chrome/browser/ui/libgtkui/libgtk3ui/app_indicator_icon.o", ++ "$root_out_dir/obj/chrome/browser/ui/libgtkui/libgtk3ui/app_indicator_icon_menu.o", ++ "$root_out_dir/obj/chrome/browser/ui/libgtkui/libgtk3ui/gtk_util.o", ++ "$root_out_dir/obj/chrome/browser/ui/libgtkui/libgtk3ui/gtk_status_icon.o", ++ "$root_out_dir/obj/chrome/browser/ui/libgtkui/libgtk3ui/menu_util.o", ++ "$root_out_dir/obj/chrome/browser/ui/libgtkui/libgtk3ui/skia_utils_gtk.o", ++ "$root_out_dir/obj/chrome/browser/ui/libgtkui/libgtk3ui/unity_service.o", + ] + } + } diff --git a/libchromiumcontent-sort-filenames.patch b/libchromiumcontent-sort-filenames.patch new file mode 100644 index 000000000000..5007647db1dc --- /dev/null +++ b/libchromiumcontent-sort-filenames.patch @@ -0,0 +1,11 @@ +--- a/tools/generate_filenames_gypi.py ++++ b/tools/generate_filenames_gypi.py +@@ -98,7 +98,7 @@ + + + def searh_files(src, suffix, exclude): +- files = glob.glob(os.path.join(src, '*.' + suffix)) ++ files = sorted(glob.glob(os.path.join(src, '*.' + suffix))) + files = [f for f in files if os.path.basename(f) not in exclude] + return ([os.path.abspath(f) for f in files if not is_v8_library(f)], + [os.path.abspath(f) for f in files if is_v8_library(f)]) diff --git a/libchromiumcontent-static-library-only.patch b/libchromiumcontent-static-library-only.patch new file mode 100644 index 000000000000..e94de90b1960 --- /dev/null +++ b/libchromiumcontent-static-library-only.patch @@ -0,0 +1,54 @@ +--- a/script/build ++++ b/script/build +@@ -11,7 +11,7 @@ from lib.util import get_configuration, get_output_dir + SOURCE_ROOT = os.path.abspath(os.path.dirname(os.path.dirname(__file__))) + VENDOR_DIR = os.path.join(SOURCE_ROOT, 'vendor') + TARGETS = ['chromiumcontent_all'] +-COMPONENTS = ['static_library', 'shared_library', 'ffmpeg'] ++COMPONENTS = ['static_library'] + + NINJA = 'ninja' + if sys.platform == 'win32': +--- a/script/create-dist ++++ b/script/create-dist +@@ -59,7 +59,7 @@ + 'libffmpeg.dylib', + ], + 'linux': [ +- 'libffmpeg.so', ++ # 'libffmpeg.so', + ], + 'win32': [ + 'd3dcompiler_47.dll', +@@ -312,7 +312,7 @@ + copy_generated_sources(target_arch, component) + copy_locales(target_arch, component) + +- copy_ffmpeg(target_arch) ++ # copy_ffmpeg(target_arch) + copy_sources() + generate_licenses() + if not args.no_zip: +@@ -429,9 +429,9 @@ + elif target_arch == 'arm': + binaries = [ 'chromedriver', 'clang_x86_v8_arm/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: + shutil.copy2(os.path.join(ffmpeg_output_dir, binary), target_dir) + +--- a/script/update ++++ b/script/update +@@ -19,7 +19,7 @@ VENDOR_DIR = os.path.join(SOURCE_ROOT, 'vendor') + SRC_DIR = os.path.join(SOURCE_ROOT, 'src') + CHROMIUMCONTENT_SOURCE_DIR = os.path.join(SOURCE_ROOT, 'chromiumcontent') + CHROMIUMCONTENT_DESTINATION_DIR = os.path.join(SRC_DIR, 'chromiumcontent') +-COMPONENTS = ['static_library', 'shared_library', 'ffmpeg'] ++COMPONENTS = ['static_library'] + DEPOT_TOOLS = os.path.join(VENDOR_DIR, 'depot_tools') + + NINJA = os.path.join(DEPOT_TOOLS, 'ninja') diff --git a/libchromiumcontent-use-system-tools.patch b/libchromiumcontent-use-system-tools.patch new file mode 100644 index 000000000000..a70d1f926292 --- /dev/null +++ b/libchromiumcontent-use-system-tools.patch @@ -0,0 +1,43 @@ +--- a/script/build ++++ b/script/build +@@ -13,7 +13,7 @@ VENDOR_DIR = os.path.join(SOURCE_ROOT, 'vendor') + TARGETS = ['chromiumcontent_all'] + COMPONENTS = ['static_library', 'shared_library', 'ffmpeg'] + +-NINJA = os.path.join(VENDOR_DIR, 'depot_tools', 'ninja') ++NINJA = 'ninja' + if sys.platform == 'win32': + NINJA = '{0}.exe'.format(NINJA) + +--- a/script/update ++++ b/script/update +@@ -39,16 +39,14 @@ def main(): + else: + print "Skipping Chromium Source Tarball Download" + +- if sys.platform == 'linux2': +- install_sysroot() +- elif sys.platform in ['win32', 'cygwin']: +- update_toolchain_json() ++ # if sys.platform == 'linux2': ++ # install_sysroot() ++ # elif sys.platform in ['win32', 'cygwin']: ++ # update_toolchain_json() + + target_arch = args.target_arch + return (apply_patches() or + copy_chromiumcontent_files() or +- update_clang() or +- update_gn() or + run_gn(target_arch, args.defines)) + + +@@ -192,7 +190,7 @@ + if sys.platform in ['win32', 'cygwin']: + gn = os.path.join(SRC_DIR, 'buildtools', 'win', 'gn.exe') + elif sys.platform == 'linux2': +- gn = os.path.join(SRC_DIR, 'buildtools', 'linux64', 'gn') ++ gn = os.path.join(SRC_DIR, 'out', 'Release', 'gn') + elif sys.platform == 'darwin': + gn = os.path.join(SRC_DIR, 'buildtools', 'mac', 'gn') + diff --git a/use-system-clang.patch b/use-system-clang.patch new file mode 100644 index 000000000000..ec13b0ba75d2 --- /dev/null +++ b/use-system-clang.patch @@ -0,0 +1,13 @@ +--- a/script/bootstrap.py ++++ b/script/bootstrap.py +@@ -165,8 +165,8 @@ def update_node_modules(dirname, env=None): + if env is None: + env = os.environ.copy() + if PLATFORM == 'linux': +- # Use prebuilt clang for building native modules. +- set_clang_env(env) ++ env['CC'] = 'clang' ++ env['CXX'] = 'clang++' + env['npm_config_clang'] = '1' + with scoped_cwd(dirname): + args = [NPM, 'install'] diff --git a/use-system-ffmpeg.patch b/use-system-ffmpeg.patch new file mode 100644 index 000000000000..12a06c34fd4e --- /dev/null +++ b/use-system-ffmpeg.patch @@ -0,0 +1,10 @@ +--- a/electron.gyp ++++ b/electron.gyp +@@ -191,7 +191,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..d9d6905626c1 --- /dev/null +++ b/use-system-libraries-in-node.patch @@ -0,0 +1,50 @@ +--- a/common.gypi ++++ b/common.gypi +@@ -22,12 +22,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', +@@ -109,18 +109,6 @@ + 'conditions': [ + ['OS=="linux"', { + 'cflags': [ +- '-Wno-parentheses-equality', +- '-Wno-unused-function', +- '-Wno-sometimes-uninitialized', +- '-Wno-pointer-sign', +- '-Wno-string-plus-int', +- '-Wno-unused-variable', +- '-Wno-unused-value', +- '-Wno-deprecated-declarations', +- '-Wno-return-type', +- '-Wno-shift-negative-value', +- '-Wno-format', +- '-Wno-varargs', # https://git.io/v6Olj + # Required when building as shared library. + '-fPIC', + ], +@@ -160,6 +148,12 @@ + ], + }], + ['OS=="linux" and libchromiumcontent_component==0', { ++ 'libraries': [ ++ '-lcares', ++ '-lcrypto', ++ '-lhttp_parser', ++ '-lz', ++ ], + # Prevent the linker from stripping symbols. + 'ldflags': [ + '-Wl,--whole-archive', diff --git a/use-system-ninja.patch b/use-system-ninja.patch new file mode 100644 index 000000000000..b9d6021b2738 --- /dev/null +++ b/use-system-ninja.patch @@ -0,0 +1,11 @@ +--- a/script/build.py ++++ b/script/build.py +@@ -19,7 +19,7 @@ + # Update the VS build env. + import_vs_env(get_target_arch()) + +- ninja = os.path.join('vendor', 'depot_tools', 'ninja') ++ ninja = 'ninja' + if sys.platform == 'win32': + ninja += '.exe' + |