diff options
Diffstat (limited to 'scripts/prep-librewolf-rpm.sh')
-rwxr-xr-x | scripts/prep-librewolf-rpm.sh | 134 |
1 files changed, 115 insertions, 19 deletions
diff --git a/scripts/prep-librewolf-rpm.sh b/scripts/prep-librewolf-rpm.sh index 6708b1f..1d6ddb2 100755 --- a/scripts/prep-librewolf-rpm.sh +++ b/scripts/prep-librewolf-rpm.sh @@ -1,11 +1,24 @@ #!/bin/sh # File: prep-librewolf-rpm.sh -# Goal: modify the src.rpm git repo of firefox into src.rpm git repo for LibreWolf +# Location: https://gitlab.com/bgstack15/librewolf-fedora +# Latest supported version: librewolf-88.0-6.fc33 +# Author: bgstack15 +# SPDX-License-Identifier: CC-BY-SA-4.0 # Startdate: 2021-04-28 +# Title: Build Rpm for LibreWolf +# Purpose: Prepare src.rpm for running "rpmbuild -ra librewolf.src.rpm" for LibreWolf by adapting distro Firefox assets +# History: +# Usage: +# Can send the output to COPR +# Reset the local build environment with: +# rm -rf ../git ../prepared ../88.0 +# References: +# https://gitlab.com/librewolf-community/browser/linux/-/tree/master/scripts +# Improve: # Dependencies: -# req-fedora: rpmdevtools +# req-fedora: rpmdevtools, dnf -set -e; +set -e # fail out on any errors ##################################### # Load settings @@ -45,16 +58,15 @@ if test -z "${SKIP_DOWNLOAD}" ; then git checkout "${src_rpm_git_commit}" } # Download original firefox source - spectool -g firefox.spec --source 0 else : ; fi # Download git sources if test -z "${SKIP_GIT}" ; then ( # yes, use sub-shell for cd. pushd is a bashism. mkdir -p "${git_source_dir}" ; cd "${git_source_dir}" - git clone "${librewolf_common_url}" ${git_source_dir}/common - git clone "${librewolf_settings_url}" ${git_source_dir}/settings - git clone "${librewolf_linux_url}" ${git_source_dir}/linux + git clone "${librewolf_common_url}" ${git_source_dir}/common || : + git clone "${librewolf_settings_url}" ${git_source_dir}/settings || : + git clone "${librewolf_linux_url}" ${git_source_dir}/linux || : ) ; else : ; fi @@ -62,14 +74,12 @@ if test -z "${SKIP_GIT}" ; then ( # Script 1 tasks # Modify dependencies, and also lw-ize firefox fedora sources cd "${src_rpm_dir}" -# FIXME: add -i, remove redirect sed -r firefox.spec \ -e '/^%global mozapp/{s:\/firefox:librewolf:;}' \ -e '/^Name:/{s:firefox:librewolf:;}' \ -e '/^%package (x11|wayland)/,/^\s*$/{s/firefox/librewolf/g;s/Firefox/LibreWolf/g;}' \ -e '/^BuildRequires.*zip$/aBuildRequires: jack-audio-connection-kit-devel' \ > firefox.spec2 -# FIXME: probably need a lot more librewolf-ization, like disabling crashreporter, etc. ##################################### # Script 2 tasks @@ -85,21 +95,107 @@ cd "${git_source_dir}"/common/source_files/browser/branding ; tar -zcf "${src_rp # add new source tarball for the common.git/source_files/browser/branding/librewolf,a nd other script3 tasks # just change any logic for enable tests to disable them cd "${src_rpm_dir}" -# FIXME: final changes should happen to firefox.spec +# MOZ_SMP_FLAGS is inside the %build and only appears once in the spec file, so should be a good place to add LW-specific settings. sed -r firefox.spec2 \ - -e '/__rm.*\.mozconfig/iSOURCE100: librewolf-branding.tgz\' -e '( cd browser/branding ; tar -zxf ${SOURCE100} . )' \ + -e '/^%description\s*$/iSource100: librewolf-branding.tgz' \ + -e '/__rm.*\.mozconfig/i( cd browser/branding ; tar -zxf ${SOURCE100} . )' \ -e 's/--enable-tests\>/--disable-tests/g;' \ -e 's/--enable-debug\>/--disable-debug/g;' \ - -e '/^MOZ_SMP_FLAGS/iecho "ac_add_options --enable-hardening" >> .mozconfig\' - -e 'echo "ac_add_options --enable-rust-simd" >> .mozconfig\' - -e 'echo "ac_add_options --with-app-name=librewolf" >> .mozconfig\' - -e 'echo "ac_add_options --with-app-basename=LibreWolf" >> .mozconfig\' - -e 'echo "ac_add_options --with-branding=browser/branding/librewolf" >> .mozconfig\' - -e 'echo "ac_add_options --with-branding=browser/branding/librewolf" >> .mozconfig\' - -e 'echo "ac_add_options --with-distribution-id=io.gitlab.librewolf-community" >> .mozconfig\' - -e 'echo "ac_add_options --with-unsigned-addon-scopes=app,system" >> .mozconfig\' + -e '/^Version/i%global enable_mozilla_crashreporter 0' \ + -e '/^MOZ_SMP_FLAGS/iecho "ac_add_options --enable-hardening" >> .mozconfig\' \ + -e 'echo "ac_add_options --enable-rust-simd" >> .mozconfig\' \ + -e 'echo "ac_add_options --with-app-name=librewolf" >> .mozconfig\' \ + -e 'echo "ac_add_options --with-app-basename=LibreWolf" >> .mozconfig\' \ + -e 'echo "ac_add_options --with-branding=browser/branding/librewolf" >> .mozconfig\' \ + -e 'echo "ac_add_options --with-branding=browser/branding/librewolf" >> .mozconfig\' \ + -e 'echo "ac_add_options --with-distribution-id=io.gitlab.librewolf-community" >> .mozconfig\' \ + -e 'echo "ac_add_options --with-unsigned-addon-scopes=app,system" >> .mozconfig\' \ + -e 'echo "ac_add_options --enable-alsa" >> .mozconfig\' \ + -e 'echo "ac_add_options --enable-jack" >> .mozconfig\' \ + -e 'echo "export MOZ_REQUIRE_SIGNING=0" >> .mozconfig\' \ + -e 'echo "ac_add_options --disable-updater" >> .mozconfig\' \ + -e 'echo "export MOZ_CRASHREPORTER=0" >> .mozconfig\' \ + -e 'echo "export MOZ_DATA_REPORTING=0" >> .mozconfig\' \ + -e 'echo "export MOZ_SERVICES_HEALTHREPORT=0" >> .mozconfig\' \ + -e 'echo "export MOZ_TELEMETRY_REPORTING=0" >> .mozconfig' \ > firefox.spec3 # script 3 notes: fedora firefox already includes some important options: # enable-release # allow-addon-sideload +# +# Unfortunately aarch64 is outside of my scope. + +# still in script 3, add the relevant patches to the spec +cp -pf "${git_source_dir}"/linux/megabar.patch "${git_source_dir}"/linux/remove_addons.patch "${git_source_dir}"/linux/mozilla-vpn-ad.patch "${git_source_dir}"/linux/context-menu.patch "${git_source_dir}"/linux/deb_patches/*.patch "${src_rpm_dir}" +# "cd browser/branding" was added in the previous sed command +sed -r firefox.spec3 \ + -e '/^%description\s*$/iPatch900: armhf-reduce-linker-memory-use.patch\' \ + -e 'Patch901: fix-armhf-webrtc-build.patch\' \ + -e 'Patch902: webrtc-fix-compiler-flags-for-armhf.patch\' \ + -e 'Patch903: sandbox-update-arm-syscall-numbers.patch\' \ + -e 'Patch904: remove_addons.patch\' \ + -e 'Patch905: megabar.patch\' \ + -e 'Patch906: reduce-rust-debuginfo.patch\' \ + -e 'Patch907: mozilla-vpn-ad.patch\' \ + -e 'Patch908: context-menu.patch' \ + -e '/ cd browser\/branding/i%patch900 -p1\' \ + -e '%patch901 -p1\' \ + -e '%patch902 -p1\' \ + -e '%patch903 -p1\' \ + -e '%patch904 -p1\' \ + -e '%patch905 -p1\' \ + -e '%patch906 -p1\' \ + -e '%patch907 -p1\' \ + -e '%patch908 -p1\' \ + -e 'sed -i "/\\"pocket\\"/d" browser/components/moz.build\' \ + -e 'sed -i "/SaveToPocket\.init/d" browser/components/BrowserGlue.jsm\' \ + -e "sed -i -r -e '/organizationalUnit.{0,5}=.{0,5}Mozilla/{N;N;N;d}' toolkit/mozapps/extensions/internal/XPIInstall.jsm\\" \ + -e "sed -i -r -e '/enterprise_only/s#true#false#g;' browser/components/enterprisepolicies/schemas/policies-schema.json\\" \ + -e "_settings_services_sed='s#firefox.settings.services.mozilla.com#f.s.s.m.c.qjz9zk#g'\\" \ + -e 'sed -e "${_settings_services_sed}" -i browser/components/newtab/data/content/activity-stream.bundle.js\' \ + -e 'sed -e "${_settings_services_sed}" -i modules/libpref/init/all.js\' \ + -e 'sed -e "${_settings_services_sed}" -i services/settings/Utils.jsm\' \ + -e 'sed -e "${_settings_services_sed}" -i toolkit/components/search/SearchUtils.jsm\' \ + > firefox.spec4 +# unity-menubar is not a feature expected in Fedora at all, so ignore it. + +################################### +# Script 4 tasks +# "cd browser/branding" was added in the previous sed command +sed firefox.spec4 \ + -e '/ cd browser\/branding/iexport MOZ_NOSPAM=1' \ + > firefox.spec5 + +# but the build itself will happen of course in the build environment and not here. + +################################### +# Additional steps for rpm implementation +cd "${src_rpm_dir}" +mv -f firefox.spec4 librewolf.spec +sed -i -r librewolf.spec \ + -e '/%changelog\s*$/a* '"$( date "+%a %b %d %Y" ) B. Stack <bgstack15@gmail.com> - ${firefox_version}-${distro_firefox_release}"'\' \ + -e '- Fork to librewolf release.\' -e '' + +# upstream fedora firefox src.rpm lists some sources which are only used inside if-endif blocks +# Also, fix %files list +sed -i -r librewolf.spec \ + -e '/^Source[0-9]+:.*mochitest-python\.tar/{i%if 0' -e 'a%endif' -e '}' \ + -e '/^%files -f/,/^%change/{' -e '/_bindir|mozappdir|\/icons/{/browser/!{s/firefox/librewolf/g;}}}' + +if test -z "${SKIP_SRC_RPM}" ; then + if test -f "firefox-${firefox_version}.source.tar.xz" || test -z "${SKIP_SPECTOOL}" ; then + spectool -g librewolf.spec --source 0 # from rpmdevtools + fi + # Upstream fedora firefox does not include some tarballs for some weird reason, so let's pull them from Fedora src.rpm and rip them out + # Unfortunately the version available may not be identical to what is in src.fedoraproject.org + cd "${work_dir}" ; dnf download --source firefox + this_srcrpm="$( find . -iname 'firefox-*.src.rpm' -printf '%f\n' | sort | tail -n1 )" + # find the tarballs closest to these expressions: firefox-langpacks cbindgen-vendor + cd "${src_rpm_dir}" ; rpm2cpio "${work_dir}/${this_srcrpm}" | cpio -idm $( spectool -l --sources "${src_rpm_dir}/librewolf.spec" | awk '$NF ~/z$/ && $NF ~ /cbindgen|langpacks/{print $NF}' ) + # I only know how to get rpmbuild to pull sources from ~/rpmbuild/SOURCES + mkdir -p ~/rpmbuild/SOURCES + cd "${src_rpm_dir}" ; cp -pf * ~/rpmbuild/SOURCES ; + rpmbuild -bs librewolf.spec # creates the librewolf src.rpm in ~/rpmbuild/SRPMS/ + cp -p ~/rpmbuild/SRPMS/librewolf-${firefox_version}-${distro_firefox_version}*.src.rpm "${work_dir}" +fi |