# Maintainer (arch): Jan Alexander Steffens (heftig) # Contributor: Ionut Biru # Contributor: Jakub Schmidtke # Contributor: Figue # Contributor: fauno # Contributor: evr # Contributor: Muhammad 'MJ' Jassim # Contributor: vando # Contributor: André Silva # Contributor: Henry Jensen # Contributor: Luke Shumaker # Contributor: Márcio Silva # Maintainer: Andreas Grapentin # Contributor: bill-auger # Contributor: grizzlyuser # NOTE: icecat (60.7 < V <= 78.10) are not upstream releases # upstream releases would normally have '-gnu' appended to $_upstream_ver # this build is based on gnuzilla VCS developement sources # rev: b72c22186cf381d7b1f93be550c9da30865d03b4 pkgname=icecat _upstream_ver=78.10.0-pre2 # -gnu1 pkgver=${_upstream_ver//-/_} pkgrel=1 pkgdesc="the GNU web browser, based on Mozilla Firefox ESR" arch=(x86_64 i686 armv7h) license=(MPL GPL LGPL) url=http://www.gnu.org/software/gnuzilla/ depends=(gtk3 libxt mime-types dbus-glib ffmpeg nss ttf-font libpulse) makedepends=(m4 unzip zip diffutils python2-setuptools yasm mesa imake inetutils xorg-server-xvfb autoconf2.13 rust clang llvm jack gtk2 python nodejs python2-psutil cbindgen nasm) makedepends+=(mozilla-searchplugins jq) if [[ "${CARCH}" == 'i686' ]] then makedepends=(${makedepends[*]/llvm/llvm10}) # FIXME: i686 configure fails with LLVM11 # rustup: error while loading shared libraries: libLLVM-10.so makedepends=(${makedepends[*]/rust/rust=1:1.47.0}) # FIXME: Sandbox: seccomp sandbox violation else makedepends=(${makedepends[*]/rust/rust=1:1.49.0}) # https://lists.gnu.org/archive/html/gnuzilla-dev/2021-04/msg00000.html fi optdepends=('networkmanager: Location detection via available WiFi networks' 'libnotify: Notification integration' 'pulseaudio: Audio support' 'speech-dispatcher: Text-to-Speech' 'hunspell-en_US: Spell checking, American English') options=(!emptydirs !makeflags !strip) source=(https://repo.parabola.nu/other/${pkgname}/${pkgname}-${_upstream_ver}.tar.bz2{,.sig} icecat.desktop icecat-safe.desktop 0001-Use-remoting-name-for-GDK-application-names.patch rust_1.48.patch.gz) source+=(searchplugins_list.json 9003-misc-libre.patch) source_i686=('rust-static-disable-network-test-on-static-libraries.patch') sha256sums=('f4334ab97a30bf8e8fe400c55ed00fcea1d44536dc6df1c7f65fec8eae1664a3' 'SKIP' 'e00dbf01803cdd36fd9e1c0c018c19bb6f97e43016ea87062e6134bdc172bc7d' '33dd309eeb99ec730c97ba844bf6ce6c7840f7d27da19c82389cdefee8c20208' 'e0eaec8ddd24bbebf4956563ebc6d7a56f8dada5835975ee4d320dd3d0c9c442' 'c7f867ccee684939c9f0a9c30ea69127077bbe43af545a03f09dfbbdc02545a9') sha256sums+=('3edb4add450f94c579f2df7c16ac4d9bd9f5c6acf3fbd8a05ce24c21c317257d' '28029afa3201e1be8138be06f741c59d64869edf0c9e90dbb05cfa6b5fff4ecd') sha256sums_i686=('068efe37a99561490e6ec7b70a3cd4dd84e89e6bdf19f04a475d06c78fd28920') validpgpkeys=('318C679D94F17700CC847DE646A70073E4E50D4E') # Ruben Rodriguez validpgpkeys+=('3954A7AB837D0EA9CFA9798925DB7D9B5A8D4B40') # bill-auger (VCS builds) # PGO requires networking _should_skip_pgo_armv7h=1 # disable for armv7h - always _should_skip_pgo_i686=1 # disable for i686 - always _should_skip_pgo_x86_64=0 # disable for x86_64 - libremakepkg eval "_should_skip_pgo=\$_should_skip_pgo_${CARCH}" _check_build_config() { pushd "${srcdir}"/${pkgname}-${pkgver%_*} > /dev/null echo "Checking build configuration..." # Configure produces mozinfo.json that reflects current configuration. # See build/docs/mozinfo.rst ./mach configure # In this test, jq collects values of the following keys of mozinfo.json into array, # and checks if any of them are not equal to false, in which case it returns "true". # E.g. if the value of any key is true or null (in case the key is missing from mozinfo.json), # that means the build configuration has to be reworked. local obj_directory=$(./mach environment | sed -En '/object directory:/{n;s/^\s+//;p;}') local mozinfo_json="${obj_directory}"/mozinfo.json local antifeature_keys=('.crashreporter' '.datareporting' '.healthreport' '.normandy' '.telemetry' '.updater') local antifeatures=() local jq_cmd=( jq -e "${key} != false" "${mozinfo_json}" ) printf "\$mozinfo_json %s - obj_directory is: %s\n" \ "$( [[ -f "${mozinfo_json}" ]] || printf "not " )found" \ "${obj_directory}" for key in ${antifeature_keys[@]} ; do ${jq_cmd[@]} && antifeatures+=(${key}); done ; if (( ${#antifeatures[@]} )) then echo "Some anti-features are not disabled in build configuration files, aborting:" for key in ${antifeature_keys[@]} do echo "${key} - $( ${jq_cmd[@]} || echo "not " )detected\n" done # return 1 # FIXME: .datareporting is detected fi popd > /dev/null } prepare() { mkdir -p mozbuild cd "$srcdir/$pkgname-${pkgver%_*}" # https://bugzilla.mozilla.org/show_bug.cgi?id=1530052 patch -Np1 -i ../0001-Use-remoting-name-for-GDK-application-names.patch # https://bugzilla.mozilla.org/show_bug.cgi?id=1667736 patch -Np1 -i ../rust_1.48.patch cat >../mozconfig <> ../mozconfig < /dev/null # Patch search-engines configs cp "${srcdir}"/searchplugins_list.json list.json sed -i 's|https://duckduckgo.com/|https://html.duckduckgo.com/html/|' ddg/manifest.json # Removing URL parameters that let DuckDuckGo know the place in UI # the search was ran from (like address bar, context menu, etc.) local jq_cmd='del(.chrome_settings_overrides.search_provider.params)' jq "${jq_cmd}" ddg/manifest.json > manifest.json.tmp ! diff manifest.json.tmp ddg/manifest.json > /dev/null mv manifest.json.tmp ddg/manifest.json # Delete unused search engine configs cp -rv /usr/share/mozilla/searchplugins/* . find -mindepth 1 -maxdepth 1 \ -not -name ddg \ -not -name duckduckgo-html \ -not -name duckduckgo-lite \ -not -name internet-archive \ -not -name parabola-labs \ -not -name parabola-packages \ -not -name parabola-wiki \ -not -name searx \ -not -name wikipedia \ -not -name yacy \ -not -name list.json \ -exec rm -rf {} \; # Sanity-check search-engines patching local engines_err_msg="search-engines patching needs re-working" jq < list.json || ! echo "${engines_err_msg}" popd > /dev/null ## libre patching ## # Remove remaining non-free bits echo "applying 9003-misc-libre.patch" patch -Np1 --no-backup-if-mismatch -i "${srcdir}"/9003-misc-libre.patch } build() { cd "$srcdir/$pkgname-${pkgver%_*}" ## build env ## export MOZ_NOSPAM=1 export MOZBUILD_STATE_PATH="$srcdir/mozbuild" export MACH_USE_SYSTEM_PYTHON=1 # LTO needs more open files ulimit -n 4096 # clang-{9,10,11} -> error: unknown argument: '-fvar-tracking-assignments' CFLAGS="${CFLAGS/-fvar-tracking-assignments/}" CXXFLAGS="${CXXFLAGS/-fvar-tracking-assignments/}" ## [ARCH-SPECIFIC BUILD ENV] ## case "${CARCH}" in armv7h) # TODO: re-work for armv7h # export RUSTFLAGS+=" -Cdebuginfo=0 -Clto=off" # export LDFLAGS+=" -Wl,--no-keep-memory -Wl,--reduce-memory-overheads" ;; i686) # -fno-plt with cross-LTO -> LLVM ERROR: Function Import: link error CFLAGS="${CFLAGS/-fno-plt/}" CXXFLAGS="${CXXFLAGS/-fno-plt/}" # disable LTO (clang has issues on IA32) export RUSTFLAGS+=" -Cdebuginfo=0 -Clto=off" export LDFLAGS+=" -Wl,--no-keep-memory -Wl,--reduce-memory-overheads" ;; x86_64) ;; *) echo "no [ARCH-SPECIFIC BUILD ENV] for arch: ${CARCH}" ; return 1 ; ;; esac export CFLAGS export CXXFLAGS ## [ARCH-SPECIFIC BUILD CONFIG] ## case ${CARCH} in armv7h) # TODO: re-work for armv7h ;; i686) # avoid excessive debug symbols in rust leading to out-of-memory situations sed -i "s/debug_info = '\''2'\''/debug_info = '\''0'\''/" build/moz.configure/toolchain.configure ;; x86_64) ;; *) echo "no [ARCH-SPECIFIC BUILD CONFIG] for arch: ${CARCH}" ; return 1 ; ;; esac ## PGO build ## if (( $_should_skip_pgo )) then # skipping "3-tier PGO" "instrumented browser", to avoid OOM problems; # so we have the final .mozconfig now cp ../mozconfig .mozconfig else # Do 3-tier PGO echo "Building instrumented browser..." cat >.mozconfig ../mozconfig - <.mozconfig ../mozconfig - <