# Maintainer: psykose pkgname=electron pkgver=21.3.3 pkgrel=3 _chromium=106.0.5249.199 _depot_tools=6fde0fbe9226ae3fc9f5c709adb93249924e5c49 pkgdesc="Electron cross-platform desktop toolkit" url="https://github.com/electron/electron" arch="aarch64 x86_64" # same as chromium license="MIT" depends="gtk+3.0 so:libudev.so.1 xdg-utils" makedepends=" alsa-lib-dev aom-dev bash brotli-dev bsd-compat-headers bzip2-dev c-ares-dev cairo-dev clang-dev clang-extra-tools compiler-rt cups-dev curl-dev dav1d-dev dbus-glib-dev eudev-dev ffmpeg-dev findutils flac-dev flex freetype-dev gperf gtk+3.0-dev gn gzip harfbuzz-dev hunspell-dev http-parser-dev hwids-usb java-jdk jpeg-dev jsoncpp-dev krb5-dev lcms2-dev libarchive-tools libavif-dev libbsd-dev libcap-dev libevent-dev libexif-dev libgcrypt-dev libjpeg-turbo-dev libnotify-dev libusb-dev libva-dev libwebp-dev libxcomposite-dev libxcursor-dev libxinerama-dev libxml2-dev libxrandr-dev libxscrnsaver-dev libxslt-dev linux-headers lld llvm mesa-dev minizip-dev nghttp2-dev nodejs npm nss-dev opus-dev pciutils-dev perl pipewire-dev pulseaudio-dev py3-httplib2 py3-parsing py3-six python3 re2-dev samurai snappy-dev speex-dev sqlite-dev woff2-dev xcb-proto yarn zlib-dev " subpackages="$pkgname-lang $pkgname-dev" # the lower patches are specific to electron, the top ones are from the equivalent chromium version source="https://dev.alpinelinux.org/archive/electron/electron-$pkgver.tar.xz angle-wayland-include.patch canonicalize-file-name.patch chromium-VirtualCursor-standard-layout.patch chromium-revert-drop-of-system-java.patch chromium-use-alpine-target.patch credentials-sys-types-header.patch default-pthread-stacksize.patch dns-resolver.patch fix-crashpad.patch fix-missing-cstdint-include-musl.patch fix-narrowing-cast.patch gdbinit.patch jsoncpp.patch memory-tagging-arm64.patch musl-sandbox.patch musl-tid-caching.patch musl-v8-monotonic-pthread-cont_timedwait.patch no-execinfo.patch no-glibc-version.patch no-mallinfo.patch no-res-ninit-nclose.patch no-stat-redefine.patch nullptr-t.patch partition-atfork.patch py3.11.patch quiche-arena-size.patch roll-src-third_party-ffmpeg-102.patch roll-src-third_party-ffmpeg-106.patch scoped-file-no-close.patch temp-failure-retry.patch wtf-stacksize.patch icon.patch python-jinja-3.10.patch system-node.patch vector-const.patch webpack-hash.patch default.conf electron.desktop electron-launcher.sh " options="!check suid" # clang uses much less memory (and this doesn't support gcc) export CC=clang export CXX=clang++ # required to find the tools export AR=llvm-ar export NM=llvm-nm export LD=clang++ # less log spam, reproducible export CFLAGS="${CFLAGS/-g/} -O2 -Wno-unknown-warning-option -Wno-builtin-macro-redefined" export CXXFLAGS="${CXXFLAGS/-g/} -O2 -Wno-unknown-warning-option -Wno-builtin-macro-redefined" export CPPFLAGS="$CPPFLAGS -D__DATE__= -D__TIME__= -D__TIMESTAMP__=" _gn_flags() { echo "$@" } # creates a dist tarball that does not need to git clone everything at build time. snapshot() { export CHROMIUM_BUILDTOOLS_PATH="$srcdir/src/buildtools" mkdir -p "$srcdir" cd "$srcdir" git clone --branch=$_chromium --depth=1 \ https://chromium.googlesource.com/chromium/src.git git clone https://github.com/electron/electron.git ( git clone --depth 1 -b main https://chromium.googlesource.com/chromium/tools/depot_tools.git cd depot_tools git fetch --depth 1 origin $_depot_tools git checkout $_depot_tools ) export PATH="$PATH:$srcdir/depot_tools" echo "solutions = [ { \"name\": \"src/electron\", \"url\": \"file://$srcdir/electron@v$pkgver\", \"deps_file\": \"DEPS\", \"managed\": False, \"custom_deps\": { \"src\": None, }, \"custom_vars\": {}, }, ]" > .gclient python3 depot_tools/gclient.py sync \ --with_branch_heads \ --with_tags \ --nohooks python3 src/build/landmines.py python3 src/build/util/lastchange.py -o src/build/util/LASTCHANGE python3 src/build/util/lastchange.py -s src/third_party/dawn \ --revision src/gpu/webgpu/DAWN_VERSION python3 src/build/util/lastchange.py -m GPU_LISTS_VERSION \ --revision-id-only --header src/gpu/config/gpu_lists_version.h python3 src/build/util/lastchange.py -m SKIA_COMMIT_HASH \ -s src/third_party/skia --header src/skia/ext/skia_commit_hash.h # why? cp -r electron/patches/ffmpeg src/electron/patches/ python3 electron/script/apply_all_patches.py \ electron/patches/config.json python3 src/tools/download_optimization_profile.py \ --newest_state=src/chrome/android/profiles/newest.txt \ --local_state=src/chrome/android/profiles/local.txt \ --output_name=src/chrome/android/profiles/afdo.prof \ --gs_url_base=chromeos-prebuilt/afdo-job/llvm mv src $pkgname-$pkgver # extra binaries are most likely things we don't want, so nuke them all for elf in $(scanelf -RA -F "%F" $pkgname-$pkgver); do rm -f "$elf" done msg "generating tarball.. (this takes a while)" tar -cf $pkgname-$pkgver.tar \ --exclude="ChangeLog*" \ --exclude="testdata/" \ --exclude="test_data/" \ --exclude="android_rust_toolchain/toolchain/" \ --exclude-backups \ --exclude-caches-all \ --exclude-vcs \ $pkgname-$pkgver xz -T0 -e -9 -vv -k $pkgname-$pkgver.tar } prepare() { default_prepare git init . # link to system tools ln -sfv /usr/bin/clang-format buildtools/linux64/clang-format mkdir -p third_party/node/linux/node-linux-x64/bin ln -sfv /usr/bin/node third_party/node/linux/node-linux-x64/bin/node ln -sfv /usr/bin/java third_party/jdk/current/bin/java ( cd electron git init . git config user.email "example@example.com" git config user.name "example" git add LICENSE git commit -m "init" git tag "v$pkgver" # jesus christ what the fuck is wrong with you? touch .git/packed-refs yarn install --frozen-lockfile ) ( cd third_party/node npm ci ) local use_system=" brotli dav1d ffmpeg flac fontconfig freetype harfbuzz-ng icu jsoncpp libaom libavif libdrm libevent libjpeg libwebp libxml libxslt opus re2 snappy woff2 zlib " for _lib in $use_system libjpeg_turbo; do msg "Removing buildscripts for system provided $_lib" find . -type f -path "*third_party/$_lib/*" \ \! -path "*third_party/$_lib/chromium/*" \ \! -path "*third_party/$_lib/google/*" \ \! -path './base/third_party/icu/*' \ \! -path './third_party/libxml/*' \ \! -path './third_party/pdfium/third_party/freetype/include/pstables.h' \ \! -path './third_party/harfbuzz-ng/utils/hb_scoped.h' \ \! -path './third_party/crashpad/crashpad/third_party/zlib/zlib_crashpad.h' \ \! -regex '.*\.\(gn\|gni\|isolate\|py\)' \ -delete done # https://groups.google.com/a/chromium.org/d/topic/chromium-packagers/9JX1N2nf4PU/discussion touch chrome/test/data/webui/i18n_process_css_test.html # Use the file at run time instead of effectively compiling it in sed 's|//third_party/usb_ids/usb.ids|/usr/share/hwdata/usb.ids|g' \ -i services/device/public/cpp/usb/BUILD.gn python3 build/linux/unbundle/replace_gn_files.py --system-libraries \ $use_system python3 third_party/libaddressinput/chromium/tools/update-strings.py # prevent annoying errors when regenerating gni sed -i 's,^update_readme$,#update_readme,' \ third_party/libvpx/generate_gni.sh # allow system dependencies in "official builds" sed -i 's/OFFICIAL_BUILD/GOOGLE_CHROME_BUILD/' \ tools/generate_shim_headers/generate_shim_headers.py # https://crbug.com/893950 sed -i -e 's/\/malloc/' -e 's/\/free/' \ third_party/blink/renderer/core/xml/*.cc \ third_party/blink/renderer/core/xml/parser/xml_document_parser.cc \ third_party/libxml/chromium/*.cc \ third_party/maldoca/src/maldoca/ole/oss_utils.h msg "Configuring build" local gn_config=" import(\"//electron/build/args/release.gn\") blink_enable_generated_code_formatting=false chrome_pgo_phase=0 clang_use_chrome_plugins=false custom_toolchain=\"//build/toolchain/linux/unbundle:default\" disable_fieldtrial_testing_config=true enable_hangout_services_extension=true enable_nacl=false enable_stripping=false enable_vr=false fatal_linker_warnings=false ffmpeg_branding=\"Chrome\" host_toolchain=\"//build/toolchain/linux/unbundle:default\" icu_use_data_file=true is_cfi=false is_component_ffmpeg=true is_debug=false is_official_build=true link_pulseaudio=true proprietary_codecs=true rtc_link_pipewire=true rtc_use_pipewire=true symbol_level=0 treat_warnings_as_errors=false use_custom_libcxx=false use_gnome_keyring=false use_pulseaudio=true use_sysroot=false use_system_freetype=true use_system_harfbuzz=true use_system_lcms2=true use_system_libdrm=true use_system_libjpeg=true use_system_wayland_scanner=true use_system_zlib=true use_vaapi=true " gn gen out/Release \ --args="$(echo $gn_config)" \ --export-compile-commands } build() { ninja -C out/Release \ electron_dist_zip \ node_gypi_headers \ node_version_header \ tar_headers } package() { mkdir -p "$pkgdir"/usr/lib/electron "$pkgdir"/usr/bin bsdtar -xf out/Release/dist.zip -C "$pkgdir"/usr/lib/electron chmod u+s "$pkgdir"/usr/lib/electron/chrome-sandbox install -Dm755 "$srcdir"/electron-launcher.sh "$pkgdir"/usr/bin/electron install -Dm755 "$srcdir"/default.conf "$pkgdir"/etc/electron/default.conf mkdir -p "$pkgdir"/usr/include/electron mv -v "$builddir"/out/Release/gen/node_headers "$pkgdir"/usr/include/electron ln -sv /usr/include/electron/node_headers/include/node "$pkgdir"/usr/include/electron/node mkdir -p "$pkgdir"/usr/include/electron/node_headers/include/nan cp -v "$builddir"/third_party/nan/*.h "$pkgdir"/usr/include/electron/node_headers/include/nan ln -sv /usr/include/electron/node_headers/include/nan "$pkgdir"/usr/include/electron/nan install -Dm644 electron/default_app/icon.png \ "$pkgdir"/usr/share/icons/hicolor/1024x1024/apps/electron.png install -Dm644 "$srcdir"/electron.desktop \ -t "$pkgdir"/usr/share/applications/ } lang() { pkgdesc="$pkgdesc (translations)" install_if="$pkgname=$pkgver-r$pkgrel lang" mkdir -p "$subpkgdir"/usr/lib/electron/locales mv "$pkgdir"/usr/lib/electron/locales/*.pak \ "$subpkgdir"/usr/lib/electron/locales mv "$subpkgdir"/usr/lib/electron/locales/en-US.pak \ "$pkgdir"/usr/lib/electron/locales } sha512sums=" 1d21e74875ade836625c28d8d9351b41d2776def248193e9c82d4cd50375e9e9b2f7c40026673fe2a191a936f05c3fe639b0423964356ad678f41545aceede3c electron-21.3.3.tar.xz f19ba0c0f542115e6f53019659df256471e811a23d2f37569c9d4dfa265c0c1ace3e62c74d7507f82e6b7b4152c704e651810a00616f8f531592b14bb2af01d9 angle-wayland-include.patch 252b37a2ecc5e7a25385943045f426dc2e30991b28d206ceaff1be7fd8ffeeb024310a8fca6b3e69a4b1c57db535d51c570935351053525f393682d5ecd0f9a9 canonicalize-file-name.patch ac0a80174f95d733f33ddc06fc88cdcf7db0973378c28d8544dc9c19e2dabeac47f91c99b3e7384f650b3405554a9e222543f0860b6acc407c078a8c9180d727 chromium-VirtualCursor-standard-layout.patch c4654d5b23c6f5d9502507e534fe1951d6749c62251e49b6adfe10d1569431e7f7a5a6fa5ff09ec30984415ced27a5e20985df8c91295de34af3c84557fa5b91 chromium-revert-drop-of-system-java.patch d2b5b0396173367fcf1804aaee8e7fbefce9c63ac2a91c3a1ede759cb85e567317a57e4d4f82d3ca021682fb7856e15c074276a03eda946d9b28e1cb706b07ad chromium-use-alpine-target.patch ec04bf43278a19d4bb090eddd636ad7093c7e757cb2ffa1875971e0709761174790e109b9be03a8e299d4077a87fbd8dabd301b8754bb6fe53c055396e8af556 credentials-sys-types-header.patch 4ab8261bf95547b10df44e4d528c06a64c33602c10a1e09d531190dc8947ba6ef9e69145405b801cd364707570f791fee6d93e3bf5d57831f5a85212ddf01729 default-pthread-stacksize.patch f011f66e5aae5a6f0d440492ee9400878b47b66214c1bc8dc1477fdd07ad0a508cdbb74415e55e27085c4e61e112e7c2ae2edfa217f2fb387e13097b24cb17b1 dns-resolver.patch 9d1edb1e0624ee61825e3af23fbb8c5dbc09d2b92d7769d19f8ca618edae8de8a3e051fedf4ad92c230e1373dc8495922c46971aef93a580c04ad80bc33516c0 fix-crashpad.patch 8bebf4a9d5225c6e47edc5b07c4b97be24a45cc221f49632836915ceeb4ecb69b7f79a31ea7f82171cde3443f45fec541f409892542cf1014e81aa6acd01566d fix-missing-cstdint-include-musl.patch efe97b9dd2ec5965fa0cdf1b2a3c01253835c2df710da7ea105c4ce008c11f9caaf8b4321736a2b91f06d8d61972c08e225b16509dc05176a2c39337688ad5b9 fix-narrowing-cast.patch cf73cbe5bf19d6a22157fb7aafb43f326885e852fc6292728f4ed1cd145d07ba5af51b6ec808095136cd406478aaa427ee1b9611c855fbd87976e1a91e1609bd gdbinit.patch fa2637f92f851614347e296fbab744af2c5d7edcbb444aeb4a5d3182a8ec2549593d75e717d7e78e9b2a7257e693b48fc88c149c1591052d7ae802f4fda0a775 jsoncpp.patch e0afb7066c2cb41aa461feb9e45e571517229deab9d06186490b527783a7ba826a4d67d3a14a33a164eea64fa561eb5b93a1d4dfd0acc2e7a9eb038e6ee273db memory-tagging-arm64.patch fdf8ba7badbd5b61d415ad9d49c66b6ef0a6a40ec95a47e13af48711fe1bd3a5574e987929a3c486cdd02c239863b8517e7f834cecd30f156479e43a9441a18e musl-sandbox.patch 85c2842a251a3f8aa59c701ca5f2ce2f5d49b5c7e4773d5387dc597447fb47c9d876f5fb308576686c9a8abc7e35cfc172b6cdfb9f5f1dc1509329e3590b38d8 musl-tid-caching.patch d2825aa9525fcbb53791f0ef2502c0f444a9d668f09db6ae4987b94dc4d0e6f1cf58a6e9e772ab11c896a469ca32242feb3ad9c9dbb20df9316cd74151ab0ec9 musl-v8-monotonic-pthread-cont_timedwait.patch ebd5cf28277853dc5e984961c370ab4a6331488ae7cff45083fea0470262f56486664bc9bd7947fdd796c8635e479633c4d08cfd89270c0310f3ec21cc6642d2 no-execinfo.patch f0bf97a80e663041e33cb0468fd8c47c5f351d6de61059ce1f359a813c40db8e247eaef294c3f562c0a8204e4f1992a918f1d879b1da9891027500e21f482b79 no-glibc-version.patch 10ae0f74a4c1db899b571508100af63e5af8d0f7c41a37fc9b7987cbf9f27f4c55894c02d6820957d7522a528929059f562f96c2f05fd6509f60c6c71d9d8256 no-mallinfo.patch a5aa82c30402773903db1d3876208132fdef175f56ebc0ce1ee4c104a98d498d709c5565c4381736c04c238203b3c8a9cd7a5b5e69876f6afb65d7fc48df23d0 no-res-ninit-nclose.patch 2c0d7239728d98c0564ad7b81d6d243e58e56de58a21357fa30c39e333fc29c1aa98529c6e1b6fa7694169b513391ca27fa542f69b483bbde644cc2ed739bbdd no-stat-redefine.patch 5e9f6279698195467e3b506cea9be0d97ec2d970672b1b12d3d7880eec4f6f53b8f92942dc3fc6738b02889382534ce0f4310a1f94b33e21f8fbc70b85640b81 nullptr-t.patch ad563e29ac7d83c203f5af966c4ed3ebdeb5c997835a45fb28ecde08dde5231d0a775fb413f44867af28724504c42316b27d5a6aaa602057642dcbdf7ec20a7a partition-atfork.patch 65aa0c7c9909a803e59b88ecb6d79c4db491079f3324f7bd02ee485a7bb7a81674b8f0591dab766c97070a401116db7f629fee36af7416a0fefc38f4ae0ad13d py3.11.patch 083ed731e0a3788f2cb04a3035022fbb3e4db99eba01516ea233ea3229f7d898943d8115463a48655ac83eb3cc7a48aceb8bf17c68930a5a1d83b1af95dfade8 quiche-arena-size.patch 128ec0fd14349e065c8bb0910d53cbea7423182a06e06f7b7765f3cba1e5ba5e7a8bccbcdab079335b5235abb7bf0d46dee21ecc8c221be7e1c5c6d9795f958e roll-src-third_party-ffmpeg-102.patch 1063e68f477645914ddf5641eabdd3eaf744e569635d645ea860c3546f67a7ef91eded99331378ee75071b67ecfe9bd4be307bd3da7c7ad93509e2bd634d1ec3 roll-src-third_party-ffmpeg-106.patch 3cf36b269e9fcfa74975d267bbf31bef68b533a51672e5ed81ae511a70f28a45206168af370961a3dab5695ddaff41cb8839c8c2fa53f22a9f3c88d207cb2996 scoped-file-no-close.patch f2f7673f9e793dfbf4456ff8c2be785ea551c36bd512572245d04bf44da08b0133e98d85a1ffd51158009754c83121cad48d755cbc153735df2d2e73233856c0 temp-failure-retry.patch 1d4e8c6e65205e6b72af47b9a2fa6f96aaada9b7d5a74f4e11a345a885df3078b523d02aaf8e9dac3aa30d72bbbd07cd6dc7edcf44fb9ae57a7f81251c398f65 wtf-stacksize.patch 905565c10f5e5600e7d4db965c892cc45009a258e9995da958974d838ace469e1db1019195307e8807860d5b55ba6bfeea478b1f39a9b99e82c619b2816a1a22 icon.patch e05180199ee1d559e4e577cedd3e589844ecf40d98a86321bf1bea5607b02eeb5feb486deddae40e1005b644550331f6b8500177aa7e79bcb3750d3c1ceb76c3 python-jinja-3.10.patch 26a8e4040e69f335a7104f42d012b9d933a40985b33a7be02add27a801c097c5a2be4c6e69faf9175ce8945210ae4c5592ecad2123ccff2beee5473194a765e3 system-node.patch 71571b15cf8bd6259b7fd22bea0e46b64890f3db776365de33fe539f26ce9ef99459e05c3dde9434c3657225bc67160abc915acd93033cb487c770c6a2a5975f vector-const.patch 2aa340854316f1284217c0ca17cbf44953684ad6c7da90815117df30928612eb9fb9ffb734b948dfc309cd25d1a67cd57f77aac2d052a3dd9aca07a3a58cbb30 webpack-hash.patch 08460b15037511a4e5469ceac6ae5dd4db4c8cb87c129aaaf40ba58b16c60b8a307ffdd85805efead235758abed09ec31db1ef4cf9159f7b9acdcee3031bc96c default.conf 191559fc7aa1ea0353c6fb0cc321ee1d5803a0e44848c8be941cfab96277b0de6a59962d373e2a2a1686c8f9be2bcf2d2f33706759a339a959e297d3f7fda463 electron.desktop 03750694e5e0b66f084c6e43135e60be15abb059e23486346ee4352dcc236984f2f35467b47f2b2ad46c98c22091cc2b978de8e73680febadba169d960f13f9f electron-launcher.sh "