Hello,

I would like to send a patch for the makeicecat script. It comes from the
68 branch, git commit 8f9f30e1e9cf2b411ce2747024d4f72edda86904. Here's a
definite list of issues addressed in this patch:
1. Shebang changed to /usr/bin/env bash in order to support systems that
put the bash binary elsewhere than /bin, for example FreeBSD.
2. Everything that makeicecat does is enclosed in functions with
descriptive names. The abstraction of work scope is increasing towards the
end, which lets the reader better understand what makeicecat really does
and in what order.
3. References to /tmp are now based in the current directory. Accessing
paths outside of the sandbox is illegal in Portage sandbox, which voids the
effort of packaging IceCat for Gentoo Linux. Which I maintain in an
unofficial Gentoo overlay. So far I have sed'ed those out during src_unpack
phase, but I think it's only fair that everyone gets a better behaved
makeicecat.

Best regards,
MichaƂ Dec
--- a/makeicecat	2020-04-17 20:18:51.000000000 +0200
+++ b/makeicecat	2020-05-02 18:56:04.605187710 +0200
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
 #
 #    Copyright (C) 2014-2019  Ruben Rodriguez <[email protected]>
 #    Copyright (C) 2019  Amin Bandali <[email protected]>
@@ -21,87 +21,95 @@
 
 set -euxo pipefail
 
-FFMAJOR=68
-FFMINOR=7
-FFSUB=0
-GNUVERSION=1
-FFVERSION=$FFMAJOR.$FFMINOR.$FFSUB
-ICECATVERSION=$FFVERSION-gnu$GNUVERSION
-SOURCEDIR=icecat-$FFVERSION
+function set_global_variables {
+	FFMAJOR=68
+	FFMINOR=7
+	FFSUB=0
+	GNUVERSION=1
+	FFVERSION=$FFMAJOR.$FFMINOR.$FFSUB
+	ICECATVERSION=$FFVERSION-gnu$GNUVERSION
+	SOURCEDIR=icecat-$FFVERSION
 
-DATA="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"/data
-
-mkdir -p output
-cd output
+	DATA="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"/data
+###############################################################################
+# Set variables and build config files
+###############################################################################
+	INFOURL="www.gnu.org/software/gnuzilla/"
+	LEGALINFOURL="www.gnu.org/software/gnuzilla/"
+	ADDONSURL="www.gnu.org/software/gnuzilla/addons.html"
+	LISTURL="lists.gnu.org/mailman/listinfo/bug-gnuzilla"
+}
 
 ###############################################################################
 # Retrieve FF source code
 ###############################################################################
+function src_fetch {
+	rm mozilla-esr${FFMAJOR} $SOURCEDIR -rf
 
-rm mozilla-esr${FFMAJOR} $SOURCEDIR -rf
-
-wget -N https://ftp.mozilla.org/pub/mozilla.org/firefox/releases/${FFVERSION}esr/source/firefox-${FFVERSION}esr.source.tar.xz
-wget -N https://ftp.mozilla.org/pub/mozilla.org/firefox/releases/${FFVERSION}esr/source/firefox-${FFVERSION}esr.source.tar.xz.asc
-gpg --recv-keys --keyserver keyserver.ubuntu.com 14F26682D0916CDD81E37B6D61B7B526D98F0353
-gpg --verify firefox-${FFVERSION}esr.source.tar.xz.asc
-echo -n ad3ea069c3d23aab360ad04ff4d0f5e556d3538f7dd4eae0690c4e9241537570 firefox-${FFVERSION}esr.source.tar.xz |sha256sum -c -
+	wget -N https://ftp.mozilla.org/pub/mozilla.org/firefox/releases/${FFVERSION}esr/source/firefox-${FFVERSION}esr.source.tar.xz
+	wget -N https://ftp.mozilla.org/pub/mozilla.org/firefox/releases/${FFVERSION}esr/source/firefox-${FFVERSION}esr.source.tar.xz.asc
+	gpg --recv-keys --keyserver keyserver.ubuntu.com 14F26682D0916CDD81E37B6D61B7B526D98F0353
+	gpg --verify firefox-${FFVERSION}esr.source.tar.xz.asc
+	echo -n ad3ea069c3d23aab360ad04ff4d0f5e556d3538f7dd4eae0690c4e9241537570 firefox-${FFVERSION}esr.source.tar.xz |sha256sum -c -
 
-echo Extracting Firefox tarball
-tar -xf firefox-${FFVERSION}esr.source.tar.xz
+	echo Extracting Firefox tarball
+	tar -xf firefox-${FFVERSION}esr.source.tar.xz
 
-mv firefox-${FFVERSION} $SOURCEDIR
+	mv firefox-${FFVERSION} $SOURCEDIR
+}
 
 ###############################################################################
 # Retrieve l10n
 ###############################################################################
+function l10n_fetch {
+	mkdir l10n
+	pushd l10n
+		while read line;do
+			line=$(echo $line |cut -d' ' -f1)
+			#[ $line = "es-ES" ] || continue # To speed up testing
+			[ $line = "en-US" ] && continue
+			hg clone https://hg.mozilla.org/l10n-central/$line
+			mkdir -p $line/browser/chrome/browser/preferences
+			touch $line/browser/chrome/browser/preferences/advanced-scripts.dtd
+			rm -rf $line/.hg*
+		done < ../$SOURCEDIR/browser/locales/shipped-locales
+	popd
+
+	mv l10n $SOURCEDIR
+
+	hg clone http://hg.mozilla.org/l10n/compare-locales/
+	pushd compare-locales/
+		hg checkout RELEASE_3_3_0
+	popd
+	rm compare-locales/.hg* compare-locales/.git* -rf
+	mv compare-locales $SOURCEDIR/l10n
+
+	#######################################################
+
+	cd $SOURCEDIR
+
+	shopt -s nullglob
+	for patch in $DATA/patches/*.patch; do
+		echo Patching with file: $patch
+		patch -p1 --force --no-backup-if-mismatch --input $patch
+	done
+	shopt -u nullglob
+
+	for file_to_append in $(cd $DATA/files-to-append; find . -type f -print); do
+		echo Appending new data to the end of file: $file_to_append
+		cat $DATA/files-to-append/$file_to_append >> $file_to_append
+	done
+
+	for dir in l10n/*; do
+		if [[ $dir != l10n/compare-locales ]]; then
+			if [[ ! -e $DATA/files-to-append/$dir/browser/browser/preferences/preferences.ftl ]]; then
+				cat $DATA/files-to-append/browser/locales/en-US/browser/preferences/preferences.ftl >> $dir/browser/browser/preferences/preferences.ftl
+			fi
+		fi
+	done
 
-mkdir l10n
-cd l10n
-while read line;do
-    line=$(echo $line |cut -d' ' -f1)
-    #[ $line = "es-ES" ] || continue # To speed up testing
-    [ $line = "en-US" ] && continue
-    hg clone https://hg.mozilla.org/l10n-central/$line
-    mkdir -p $line/browser/chrome/browser/preferences
-    touch $line/browser/chrome/browser/preferences/advanced-scripts.dtd
-    rm -rf $line/.hg*
-done < ../$SOURCEDIR/browser/locales/shipped-locales
-cd ..
-
-mv l10n $SOURCEDIR
-
-hg clone http://hg.mozilla.org/l10n/compare-locales/
-cd compare-locales/
-hg checkout RELEASE_3_3_0
-cd ..
-rm compare-locales/.hg* compare-locales/.git* -rf
-mv compare-locales $SOURCEDIR/l10n
-
-#######################################################
-
-cd $SOURCEDIR
-
-shopt -s nullglob
-for patch in $DATA/patches/*.patch; do
-    echo Patching with file: $patch
-    patch -p1 --force --no-backup-if-mismatch --input $patch
-done
-shopt -u nullglob
-
-for file_to_append in $(cd $DATA/files-to-append; find . -type f -print); do
-    echo Appending new data to the end of file: $file_to_append
-    cat $DATA/files-to-append/$file_to_append >> $file_to_append
-done
-
-for dir in l10n/*; do
-    if [[ $dir != l10n/compare-locales ]]; then
-        if [[ ! -e $DATA/files-to-append/$dir/browser/browser/preferences/preferences.ftl ]]; then
-            cat $DATA/files-to-append/browser/locales/en-US/browser/preferences/preferences.ftl >> $dir/browser/browser/preferences/preferences.ftl
-        fi
-    fi
-done
-
-cp $DATA/Changelog.IceCat $DATA/README.IceCat .
+	cp $DATA/Changelog.IceCat $DATA/README.IceCat .
+}
 
 ###############################################################################
 # Functions
@@ -161,127 +169,163 @@
 }
 
 ###############################################################################
-# Set variables and build config files
+# Custom settings and features
 ###############################################################################
 
-INFOURL="www.gnu.org/software/gnuzilla/"
-LEGALINFOURL="www.gnu.org/software/gnuzilla/"
-ADDONSURL="www.gnu.org/software/gnuzilla/addons.html"
-LISTURL="lists.gnu.org/mailman/listinfo/bug-gnuzilla"
+function disable_eme {
+	echo "ac_add_options --disable-eme" >> build/mozconfig.common.override
+	echo "ac_add_options --disable-eme" >> build/mozconfig.common
+}
 
-###############################################################################
-# Custom settings and features
-###############################################################################
+function correct_nondescript_build_error {
+	echo "ac_add_options --enable-stdcxx-compat" >> build/mozconfig.common.override
+}
 
-# Disable EME
-echo "ac_add_options --disable-eme" >> build/mozconfig.common.override
-echo "ac_add_options --disable-eme" >> build/mozconfig.common
-
-# Correct build error
-echo "ac_add_options --enable-stdcxx-compat" >> build/mozconfig.common.override
-
-# Disable healthreport
-sed '/mozilla.org\/legal/d' -i toolkit/components/telemetry/healthreport-prefs.js
-cat << EOF >> toolkit/components/telemetry/healthreport-prefs.js
+function disable_healthreport {
+	sed '/mozilla.org\/legal/d' -i toolkit/components/telemetry/healthreport-prefs.js
+	cat << EOF >> toolkit/components/telemetry/healthreport-prefs.js
 pref("datareporting.healthreport.infoURL", "https://$INFOURL";);
 EOF
+}
 
-# Custom privacy statement link
-sed "s%https://www.mozilla.org/legal/privacy/%https://$LEGALINFOURL%"; -i ./browser/app/profile/firefox.js ./toolkit/content/aboutRights.xhtml
+function change_privacy_statement_link {
+	sed "s%https://www.mozilla.org/legal/privacy/%https://$LEGALINFOURL%"; -i ./browser/app/profile/firefox.js ./toolkit/content/aboutRights.xhtml
+}
 
-# Sanitize lists
-for file in $(find |grep searchplugins/list.txt)
-do
-  /bin/sed /^$/d -i $file
-  sort -u $file > /tmp/sorttmp
-  cp /tmp/sorttmp $file
-  echo >> $file
-done
+function sanitize_lists {
+	for file in $(find |grep searchplugins/list.txt); do
+		/bin/sed /^$/d -i $file
+		sort -u $file > sorttmp
+		cp sorttmp $file
+		echo >> $file
+	done
+}
 
-# Disable activity-stream antifeatures.
+function disable_activity_stream_antifeatures {
 # These are not condensed into a single sed script to make it fail on individual commands that didn't change the source
-ActivityStream=browser/components/newtab/lib/ActivityStream.jsm
-sed '/^const DEFAULT_SITES/,/^])\;/c const DEFAULT_SITES = new Map\([[""]]\);' -i $ActivityStream
-sed '/\["showSponsored/,/value/s/value: true/value: false/' -i $ActivityStream
-sed '/\["telemetry"/,/value/s/value: true/value: false/' -i $ActivityStream
-sed '/\["section.highlights.includePocket"/,/value/s/value: true/value: false/' -i $ActivityStream
-sed '/\["telemetry.ping.endpoint"/,/value/s/value: .*/value: ""/' -i $ActivityStream
-sed 's/\(read_more_endpoint:\) .http.*/\1 "",/' -i $ActivityStream
-sed 's/\(stories_endpoint:\) .http.*/\1 "",/' -i $ActivityStream
-sed 's/\(stories_referrer:\) .http.*/\1 "",/' -i $ActivityStream
-sed 's/\(topics_endpoint:\) .http.*/\1 "",/' -i $ActivityStream
-sed '/name: "telemetry"/,/value/s/value: true/value: false/' -i $ActivityStream
-sed '/name: "section.topstories"/,/return/s/return.*/return false;/' -i $ActivityStream
-sed 's/.Ubuntu., //' -i browser/components/newtab/css/activity-stream*.css
+	local ActivityStream=browser/components/newtab/lib/ActivityStream.jsm
+	sed '/^const DEFAULT_SITES/,/^])\;/c const DEFAULT_SITES = new Map\([[""]]\);' -i $ActivityStream
+	sed '/\["showSponsored/,/value/s/value: true/value: false/' -i $ActivityStream
+	sed '/\["telemetry"/,/value/s/value: true/value: false/' -i $ActivityStream
+	sed '/\["section.highlights.includePocket"/,/value/s/value: true/value: false/' -i $ActivityStream
+	sed '/\["telemetry.ping.endpoint"/,/value/s/value: .*/value: ""/' -i $ActivityStream
+	sed 's/\(read_more_endpoint:\) .http.*/\1 "",/' -i $ActivityStream
+	sed 's/\(stories_endpoint:\) .http.*/\1 "",/' -i $ActivityStream
+	sed 's/\(stories_referrer:\) .http.*/\1 "",/' -i $ActivityStream
+	sed 's/\(topics_endpoint:\) .http.*/\1 "",/' -i $ActivityStream
+	sed '/name: "telemetry"/,/value/s/value: true/value: false/' -i $ActivityStream
+	sed '/name: "section.topstories"/,/return/s/return.*/return false;/' -i $ActivityStream
+	sed 's/.Ubuntu., //' -i browser/components/newtab/css/activity-stream*.css
+}
+
+function custom_settings_and_features {
+	disable_eme
+	correct_nondescript_build_error
+	disable_healthreport
+	change_privacy_statement_link
+	sanitize_lists
+	disable_activity_stream_antifeatures
+}
 
 ###############################################################################
 # Branding
 ###############################################################################
 
-# Branding files
-rm browser/branding/{official,unofficial,aurora,nightly} mobile/android/branding/* -rf
-cp -a $DATA/branding/icecat/ browser/branding/official
-cp -a $DATA/branding/icecat/ browser/branding/unofficial
-cp -a $DATA/branding/icecat/ browser/branding/nightly
-cp -a $DATA/branding/icecatmobile/ mobile/android/branding/official
-cp -a $DATA/branding/icecatmobile/ mobile/android/branding/unofficial
-cp -a $DATA/branding/icecatmobile/ mobile/android/branding/nightly
-# Disable preprocessor
-sed 's/_PP//' -i browser/branding/branding-common.mozbuild
+function copy_gnu_branding {
+	rm browser/branding/{official,unofficial,aurora,nightly} mobile/android/branding/* -rf
+	cp -a $DATA/branding/icecat/ browser/branding/official
+	cp -a $DATA/branding/icecat/ browser/branding/unofficial
+	cp -a $DATA/branding/icecat/ browser/branding/nightly
+	cp -a $DATA/branding/icecatmobile/ mobile/android/branding/official
+	cp -a $DATA/branding/icecatmobile/ mobile/android/branding/unofficial
+	cp -a $DATA/branding/icecatmobile/ mobile/android/branding/nightly
+}
+
+function disable_preprocessor {
+	sed 's/_PP//' -i browser/branding/branding-common.mozbuild
+}
 
-# Delete stuff we don't use and that may contain trademaked logos
-rm -rf ./browser/metro ./addon-sdk/source/doc/static-files/media ./b2g
+function delete_unused_files_and_possible_trademark_minefields {
+	rm -rf ./browser/metro ./addon-sdk/source/doc/static-files/media ./b2g
+}
 
-# Custom bookmarks
-cp $DATA/bookmarks.html.in browser/locales/generic/profile/bookmarks.html.in
+function replace_bookmarks {
+	cp $DATA/bookmarks.html.in browser/locales/generic/profile/bookmarks.html.in
+}
 
+function change_legal_pages {
 # Custom legal about pages
 
-find l10n -wholename '*/brand.dtd' |xargs /bin/sed 's/trademarkInfo.part1.*/trademarkInfo.part1 "The IceCat logo is Copyright 2008-2015 Free Software Foundation, released under the terms of the GNU Lesser General Public License, version 3 or any later version.">/' -i
-find l10n -wholename '*/brand.ftl' |xargs /bin/sed 's/^trademarkInfo = .*/trademarkInfo = The IceCat logo is Copyright 2008-2015 Free Software Foundation, released under the terms of the GNU Lesser General Public License, version 3 or any later version./' -i
+	find l10n -wholename '*/brand.dtd' |xargs /bin/sed 's/trademarkInfo.part1.*/trademarkInfo.part1 "The IceCat logo is Copyright 2008-2015 Free Software Foundation, released under the terms of the GNU Lesser General Public License, version 3 or any later version.">/' -i
+	find l10n -wholename '*/brand.ftl' |xargs /bin/sed 's/^trademarkInfo = .*/trademarkInfo = The IceCat logo is Copyright 2008-2015 Free Software Foundation, released under the terms of the GNU Lesser General Public License, version 3 or any later version./' -i
+
+	for STRING in rights-intro-point-2 rights-intro-point-3 rights-intro-point-4 rights-intro-point-5 rights-intro-point-6 rights-webservices rights-safebrowsing; do
+		find -name aboutRights.ftl | xargs sed -i "s/^$STRING.*/$STRING = /"
+	done
 
-for STRING in rights-intro-point-2 rights-intro-point-3 rights-intro-point-4 rights-intro-point-5 rights-intro-point-6 rights-webservices rights-safebrowsing
-do
- find -name aboutRights.ftl | xargs sed -i "s/^$STRING.*/$STRING = /"
-done
-
-for STRING in helpus community-2 community-exp
-do
- find -name aboutDialog.ftl | xargs sed -i "s/^$STRING.*/$STRING = /"
-done
+	for STRING in helpus community-2 community-exp; do
+		find -name aboutDialog.ftl | xargs sed -i "s/^$STRING.*/$STRING = /"
+	done
 
-cp $DATA/aboutRights.xhtml toolkit/content/aboutRights.xhtml
-cp $DATA/aboutRights.xhtml toolkit/content/aboutRights-unbranded.xhtml
+	cp $DATA/aboutRights.xhtml toolkit/content/aboutRights.xhtml
+	cp $DATA/aboutRights.xhtml toolkit/content/aboutRights-unbranded.xhtml
 
-sed -i 's/<a\ href\=\"http\:\/\/www.mozilla.org\/\">Mozilla\ Project<\/a>/<a\ href\=\"http\:\/\/www.gnu.org\/\"\>GNU\ Project<\/a>/g' browser/base/content/overrides/app-license.html
+	sed -i 's/<a\ href\=\"http\:\/\/www.mozilla.org\/\">Mozilla\ Project<\/a>/<a\ href\=\"http\:\/\/www.gnu.org\/\"\>GNU\ Project<\/a>/g' browser/base/content/overrides/app-license.html
+}
 
+function change_logo_in_about_preferences {
 # Custom logo for about:preferences?entrypoint=menupanel#sync
-cp $DATA/branding/sync.png browser/themes/shared/fxa/logo.png
+	cp $DATA/branding/sync.png browser/themes/shared/fxa/logo.png
+}
 
+function hide_mobile_promo {
 # Hide mobile promo
-echo ".fxaMobilePromo {  display: none !important; }" >> browser/themes/shared/incontentprefs/preferences.inc.css
+	echo ".fxaMobilePromo {  display: none !important; }" >> browser/themes/shared/incontentprefs/preferences.inc.css
+}
 
+function hide_plugin_deprecation_notice {
 # Hide plugindeprecation-notice
-echo "#plugindeprecation-notice {  display: none !important; }" >> toolkit/mozapps/extensions/content/extensions.css
+	echo "#plugindeprecation-notice {  display: none !important; }" >> toolkit/mozapps/extensions/content/extensions.css
+}
+
+function hide_unsigned_plugin_warnings {
 # Hide warnings on unsigned extensions
-echo ".warning{display: none!important; } .addon[notification=warning]{background-image: none!important;}" >> toolkit/mozapps/extensions/content/extensions.css
+	echo ".warning{display: none!important; } .addon[notification=warning]{background-image: none!important;}" >> toolkit/mozapps/extensions/content/extensions.css
+}
+
+function hide_extra_links {
 # Hide extra links in about box
-sed '/releaseNotes.link/d' -i ./browser/base/content/aboutDialog.xul
-sed '/description.*helpus/,/description/d' -i ./browser/base/content/aboutDialog.xul
+	sed '/releaseNotes.link/d' -i ./browser/base/content/aboutDialog.xul
+	sed '/description.*helpus/,/description/d' -i ./browser/base/content/aboutDialog.xul
+}
+
+function general_branding {
+	copy_gnu_branding
+	disable_preprocessor
+	delete_unused_files_and_possible_trademark_minefields
+	replace_bookmarks
+	change_legal_pages
+	change_logo_in_about_preferences
+	hide_mobile_promo
+	hide_plugin_deprecation_notice
+	hide_unsigned_plugin_warnings
+	hide_extra_links
+}
 
 ###############################################################################
 # Batch rebranding
 ###############################################################################
+function replace_firefox_branding {
+	find . | tac | grep -i fennec  | prename --nofullpath -E 's/fennec/icecatmobile/;' -E 's/Fennec/IceCatMobile/;'
+	find . | tac | grep -i firefox | prename --nofullpath -E 's/firefox/icecat/;' -E 's/Firefox/IceCat/;'
+}
 
-# Replace Firefox branding
-find . | tac | grep -i fennec  | prename --nofullpath -E 's/fennec/icecatmobile/;' -E 's/Fennec/IceCatMobile/;'
-find . | tac | grep -i firefox | prename --nofullpath -E 's/firefox/icecat/;' -E 's/Firefox/IceCat/;'
-
-rm browser/components/newtab/data/content/assets/icecat-wordmark.svg
-cp $DATA/branding/icecat-wordmark.svg browser/components/newtab/data/content/assets/
+function replace_wordmark {
+	cat $DATA/branding/icecat-wordmark.svg > browser/components/newtab/data/content/assets/icecat-wordmark.svg
+}
 
-echo "Running batch rebranding"
-SEDSCRIPT="
+function batch_sed1 {
+	local SEDSCRIPT="
 s|marketplace.firefox.com|f-droid.org/repository/browse|g;
 s/org.mozilla.firefox/org.gnu.icecat/g;
 s/Adobe Flash/Flash/g;
@@ -317,12 +361,15 @@
 
 s|www.gnu.org/software/gnuzilla/icecat-help|libreplanet.org/wiki/Group:IceCat/Help|g;
 "
-find . -type f -not -iregex '.*changelog.*' -not -iregex '.*copyright.*' -not -iregex '.*third_party/rust.*' -execdir /bin/sed --follow-symlinks -i "$SEDSCRIPT" '{}' ';'
-
+	find . -type f -not -iregex '.*changelog.*' -not -iregex '.*copyright.*' -not -iregex '.*third_party/rust.*' -execdir /bin/sed --follow-symlinks -i "$SEDSCRIPT" '{}' ';'
+}
 
-find l10n -type f -execdir /bin/sed --follow-symlinks -i "s/from GNU/from Mozilla/g" '{}' ';'
+function change_authorship_in_linguas {
+	find l10n -type f -execdir /bin/sed --follow-symlinks -i "s/from GNU/from Mozilla/g" '{}' ';'
+}
 
-SEDSCRIPT="
+function batch_sed2 {
+	local SEDSCRIPT="
 s/free and open source software/Free Software/g;
 s/free and open source/Free Software/g;
 s/Open Source/Free Software/g;
@@ -331,35 +378,39 @@
 s/opensource/Free Software/g;
 s/OpenSource/Free Software/g;
 "
+	for extension in dtd ftl inc properties; do
+		find . -type f -name "*$extension" -execdir /bin/sed --follow-symlinks -i "$SEDSCRIPT" '{}' ';'
+	done
+}
 
-for extension in dtd ftl inc properties; do
-    find . -type f -name "*$extension" -execdir /bin/sed --follow-symlinks -i "$SEDSCRIPT" '{}' ';'
-done
-
-sed 's/which are both/which are/; s/free<\/a> and/Free Software<\/a>./; />open source</d; s/free and open source licenses/Free Software licenses/ ' -i toolkit/content/license.html
-
-sed 's/mozilla-bin/icecat-bin/' -i build/unix/run-mozilla.sh
+function emphasize_freedom {
+	sed 's/which are both/which are/; s/free<\/a> and/Free Software<\/a>./; />open source</d; s/free and open source licenses/Free Software licenses/ ' -i toolkit/content/license.html
+}
 
-find . | tac | grep run-mozilla | prename --nofullpath -E 's/mozilla/icecat/;'
+function fix_run_mozilla_script {
+	sed 's/mozilla-bin/icecat-bin/' -i build/unix/run-mozilla.sh
+	find . | tac | grep run-mozilla | prename --nofullpath -E 's/mozilla/icecat/;'
+}
 
+function do_not_make_fingerprinting_worse {
 # do not alter useragent/platform/oscpu/etc with fingerprinting countermeasure, it makes things worse
-sed '/ShouldResistFingerprinting/,/}/s/^/\/\//' -i ./netwerk/protocol/http/nsHttpHandler.cpp
-sed '/If fingerprinting resistance is on/,/}/s/^/\/\//' -i ./dom/base/Navigator.cpp
-
+	sed '/ShouldResistFingerprinting/,/}/s/^/\/\//' -i ./netwerk/protocol/http/nsHttpHandler.cpp
+	sed '/If fingerprinting resistance is on/,/}/s/^/\/\//' -i ./dom/base/Navigator.cpp
 # Leave user agent as Firefox
-sed "/MOZILLA_UAVERSION/ s:IceCat/:Firefox/:" -i netwerk/protocol/http/nsHttpHandler.cpp
-
-find . -name region.properties |xargs -i /bin/sed 's_https://www.mibbit.*__' -i {}
+	sed "/MOZILLA_UAVERSION/ s:IceCat/:Firefox/:" -i netwerk/protocol/http/nsHttpHandler.cpp
+	find . -name region.properties |xargs -i /bin/sed 's_https://www.mibbit.*__' -i {}
+}
 
-# Set migrator scripts
-cp browser/components/migration/IceCatProfileMigrator.jsm browser/components/migration/FirefoxProfileMigrator.jsm
-sed 's/IceCat/Firefox/g; s/icecat/firefox/g' -i browser/components/migration/FirefoxProfileMigrator.jsm
+function set_migrator_scripts {
+	sed 's/IceCat/Firefox/g; s/icecat/firefox/g' browser/components/migration/IceCatProfileMigrator.jsm > browser/components/migration/FirefoxProfileMigrator.jsm
+}
 
-# Copy js settings
-cat $DATA/settings.js >> browser/app/profile/icecat.js
+function add_js_settings {
+	cat $DATA/settings.js >> browser/app/profile/icecat.js
+}
 
-# Set spoofed useragent on the desktop version
-cat << EOF >> browser/app/profile/icecat.js
+function spoof_desktop_user_agent {
+	cat << EOF >> browser/app/profile/icecat.js
 // Set useragent to Firefox compatible
 //pref("general.useragent.compatMode.firefox",true);
 // Spoof the useragent to a generic one
@@ -372,8 +423,10 @@
 pref("general.oscpu.override", "Windows NT 6.1");
 pref("general.platform.override", "Win32");
 EOF
+}
 
-cat << EOF >> browser/confvars.sh
+function modify_confvars {
+	cat << EOF >> browser/confvars.sh
 # IceCat settings
 MOZ_APP_UA_NAME=IceCat
 MOZ_APP_VENDOR=GNU
@@ -390,81 +443,122 @@
 MOZ_ANDROID_GOOGLE_PLAY_SERVICES=0
 MOZ_ADDON_SIGNING=0
 EOF
+	sed 's/mozilla-esr/gnu-esr/' -i browser/confvars.sh
+}
 
-sed 's/mozilla-esr/gnu-esr/' -i browser/confvars.sh
+function batch_rebranding {
+	replace_firefox_branding
+	replace_wordmark
+	echo "Running batch rebranding"
+	batch_sed1
+	change_authorship_in_linguas
+	batch_sed2
+	emphasize_freedom
+	fix_run_mozilla_script
+	do_not_make_fingerprinting_worse
+	set_migrator_scripts
+	add_js_settings
+	spoof_desktop_user_agent
+	modify_confvars
+}
 
 ###############################################################################
 # Icons
 ###############################################################################
+function change_favicon {
+	local favicon=$DATA/branding/icecat/icecat.ico
+	cp $favicon image/test/unit/image4gif16x16bmp24bpp.ico
+	cp $favicon image/test/unit/image4gif16x16bmp32bpp.ico
+	cp $favicon image/test/unit/image4gif32x32bmp24bpp.ico
+	cp $favicon image/test/unit/image4gif32x32bmp32bpp.ico
+}
+
+function change_jpglogo {
+	local jpglogo=$DATA/../artwork/icecat.jpg
+	cp $jpglogo  image/test/unit/image1png16x16.jpg
+	cp $jpglogo  image/test/unit/image1png64x64.jpg
+	cp $jpglogo  toolkit/components/places/tests/favicons/favicon-big32.jpg
+	cp $jpglogo image/test/unit/image1png16x16.jpg
+	cp $jpglogo image/test/unit/image2.jpg
+	cp $jpglogo image/test/unit/image2jpg16x16cropped.jpg
+	cp $jpglogo image/test/unit/image2jpg16x16cropped2.jpg
+	cp $jpglogo image/test/unit/image2jpg16x32cropped3.jpg
+	cp $jpglogo image/test/unit/image2jpg16x32scaled.jpg
+	cp $jpglogo image/test/unit/image2jpg32x16cropped4.jpg
+	cp $jpglogo image/test/unit/image2jpg32x16scaled.jpg
+	cp $jpglogo image/test/unit/image2jpg32x32.jpg
+}
+
+function change_ff16_logo {
+	local ff16=$DATA/branding/icecat/default16.png
+	cp $ff16 dom/canvas/test/crossorigin/image.png
+	cp $ff16 image/test/unit/image1.png
+	cp $ff16 image/test/unit/image2jpg16x16.png
+	cp $ff16 image/test/unit/image2jpg16x16-win.png
+	cp $ff16 dom/canvas/test/crossorigin/image-allow-credentials.png
+	cp $ff16 dom/html/test/image-allow-credentials.png
+	cp $ff16 dom/canvas/test/crossorigin/image-allow-star.png
+	cp $ff16 toolkit/components/places/tests/favicons/expected-favicon-big32.jpg.png
+	cp $ff16 toolkit/components/places/tests/favicons/expected-favicon-big64.png.png
+}
 
-favicon=$DATA/branding/icecat/icecat.ico
-jpglogo=$DATA/../artwork/icecat.jpg
+function change_ff32_logo {
+	local ff32=$DATA/branding/icecat/default32.png
+	cp $ff32 image/test/unit/image2jpg32x32.png
+	cp $ff32 image/test/unit/image2jpg32x32-win.png
+	cp $ff32 image/test/unit/image2jpg32x32.png
+	cp $ff32 image/test/unit/image2jpg32x32-win.png
+}
 
-#Firefox logo
-ff256=$DATA/branding/icecat/default256.png
-ff128=$DATA/branding/icecat/mozicon128.png
-ff64=$DATA/branding/icecat/content/icon64.png
-ff48=$DATA/branding/icecat/default48.png
-ff32=$DATA/branding/icecat/default32.png
-ff24=$DATA/branding/icecat/default24.png
-ff22=$DATA/branding/icecat/default22.png
-ff16=$DATA/branding/icecat/default16.png
-
-#Grey flat logo
-gf300=$DATA/android-images/resources/drawable-xhdpi/icon_home_empty_icecat.png
-gf225=$DATA/android-images/resources/drawable-hdpi/icon_home_empty_icecat.png
-gf150=$DATA/android-images/resources/drawable-mdpi/icon_home_empty_icecat.png
-gf32=$DATA/android-images/resources/drawable-xhdpi/ic_status_logo.png
-gf24=$DATA/android-images/resources/drawable-hdpi/ic_status_logo.png
-gf16=$DATA/android-images/resources/drawable-mdpi/ic_status_logo.png
-# White flat
-wf24=$DATA/android-images/resources/drawable-mdpi-v11/ic_status_logo.png
-wf48=$DATA/android-images/resources/drawable-xhdpi-v11/ic_status_logo.png
-wf36=$DATA/android-images/resources/drawable-hdpi-v11/ic_status_logo.png
-
-#Market logo
-ma50=$DATA/android-images/core/marketplace-logo.png
-ma128=$DATA/android-images/resources/drawable-mdpi/marketplace.png
-
-cp $ff16 dom/canvas/test/crossorigin/image.png
-cp $ff16 image/test/unit/image1.png
-cp $jpglogo  image/test/unit/image1png16x16.jpg
-cp $jpglogo  image/test/unit/image1png64x64.jpg
-cp $ff16 image/test/unit/image2jpg16x16.png
-cp $ff16 image/test/unit/image2jpg16x16-win.png
-cp $ff32 image/test/unit/image2jpg32x32.png
-cp $ff32 image/test/unit/image2jpg32x32-win.png
-cp $ff16 dom/canvas/test/crossorigin/image-allow-credentials.png
-cp $ff16 dom/html/test/image-allow-credentials.png
-cp $ff16 dom/canvas/test/crossorigin/image-allow-star.png
-cp $ff16 toolkit/components/places/tests/favicons/expected-favicon-big32.jpg.png
-cp $ff16 toolkit/components/places/tests/favicons/expected-favicon-big64.png.png
-cp $jpglogo  toolkit/components/places/tests/favicons/favicon-big32.jpg
-cp $ff64 toolkit/components/places/tests/favicons/favicon-big64.png
-cp $favicon image/test/unit/image4gif16x16bmp24bpp.ico
-cp $favicon image/test/unit/image4gif16x16bmp32bpp.ico
-cp $favicon image/test/unit/image4gif32x32bmp24bpp.ico
-cp $favicon image/test/unit/image4gif32x32bmp32bpp.ico
-cp $jpglogo image/test/unit/image1png16x16.jpg
-cp $jpglogo image/test/unit/image2.jpg
-cp $jpglogo image/test/unit/image2jpg16x16cropped.jpg
-cp $jpglogo image/test/unit/image2jpg16x16cropped2.jpg
-cp $jpglogo image/test/unit/image2jpg16x32cropped3.jpg
-cp $jpglogo image/test/unit/image2jpg16x32scaled.jpg
-cp $jpglogo image/test/unit/image2jpg32x16cropped4.jpg
-cp $jpglogo image/test/unit/image2jpg32x16scaled.jpg
-cp $jpglogo image/test/unit/image2jpg32x32.jpg
-cp $ff32 image/test/unit/image2jpg32x32.png
-cp $ff32 image/test/unit/image2jpg32x32-win.png
+function change_ff64_logo {
+	local ff64=$DATA/branding/icecat/content/icon64.png
+	cp $ff64 toolkit/components/places/tests/favicons/favicon-big64.png
+}
 
+function package_icons {
+	#Firefox logo
+	local ff256=$DATA/branding/icecat/default256.png
+	local ff128=$DATA/branding/icecat/mozicon128.png
+
+	local ff48=$DATA/branding/icecat/default48.png
+	local ff24=$DATA/branding/icecat/default24.png
+	local ff22=$DATA/branding/icecat/default22.png
+
+
+	#Grey flat logo
+	gf300=$DATA/android-images/resources/drawable-xhdpi/icon_home_empty_icecat.png
+	gf225=$DATA/android-images/resources/drawable-hdpi/icon_home_empty_icecat.png
+	gf150=$DATA/android-images/resources/drawable-mdpi/icon_home_empty_icecat.png
+	gf32=$DATA/android-images/resources/drawable-xhdpi/ic_status_logo.png
+	gf24=$DATA/android-images/resources/drawable-hdpi/ic_status_logo.png
+	gf16=$DATA/android-images/resources/drawable-mdpi/ic_status_logo.png
+	# White flat
+	wf24=$DATA/android-images/resources/drawable-mdpi-v11/ic_status_logo.png
+	wf48=$DATA/android-images/resources/drawable-xhdpi-v11/ic_status_logo.png
+	wf36=$DATA/android-images/resources/drawable-hdpi-v11/ic_status_logo.png
+
+	#Market logo
+	ma50=$DATA/android-images/core/marketplace-logo.png
+	ma128=$DATA/android-images/resources/drawable-mdpi/marketplace.png
+
+	# The above are unused logos. The real action happens from now on:
+	change_favicon
+	change_jpglogo
+	change_ff16_logo
+	change_ff32_logo
+	change_ff64_logo	
+}
 ###############################################################################
 # Mobile
 ###############################################################################
 
-echo "-dontwarn android.support.**" >> mobile/android/config/proguard/proguard.cfg
-echo "-dontwarn android.support.**" >> mobile/android/config/proguard/strip-libs.cfg
+function disable_android_support_warning {
+	echo "-dontwarn android.support.**" >> mobile/android/config/proguard/proguard.cfg
+	echo "-dontwarn android.support.**" >> mobile/android/config/proguard/strip-libs.cfg
+}
 
-cat << EOF >> mobile/android/confvars.sh
+function modify_confvars_for_android {
+	cat << EOF >> mobile/android/confvars.sh
 # IceCat settings
 MOZ_APP_VENDOR=GNU
 MOZ_APP_VERSION=$FFVERSION
@@ -479,38 +573,71 @@
 MOZ_ANDROID_GOOGLE_PLAY_SERVICES=0
 MOZ_ADDON_SIGNING=0
 EOF
+}
 
-rm -R mobile/android/gradle/
-sed -i '/gradle/d' mobile/android/base/Makefile.in
+function remove_gradle {
+	rm -R mobile/android/gradle/
+	sed -i '/gradle/d' mobile/android/base/Makefile.in
+}
 
-cat $DATA/settings.js >> mobile/android/app/mobile.js
-cat $DATA/settings-android.js >> mobile/android/app/mobile.js
+function copy_icecat_android_settings {
+	cat $DATA/settings.js >> mobile/android/app/mobile.js
+	cat $DATA/settings-android.js >> mobile/android/app/mobile.js
+}
 
-cat << EOF > mobile/locales/en-US/chrome/region.properties
+function change_mobile_search_providers {
+	cat << EOF > mobile/locales/en-US/chrome/region.properties
 browser.search.defaultenginename=DuckDuckGo
 browser.search.order.1=DuckDuckGo
 browser.search.order.2=Google
 browser.search.order.3=Yahoo
 EOF
+}
 
-cp $DATA/preferences_vendor.xml ./mobile/android/app/src/main/res/xml/preferences_vendor.xml
+function copy_vendor_prefs {
+	cp $DATA/preferences_vendor.xml ./mobile/android/app/src/main/res/xml/preferences_vendor.xml
+}
 
-sed '/public static void checkAndNotifyPolicy/ s/{/{ if(true) return;/; /private static void notifyDataPolicy/ s/{/{ if(true) return;/ ' -i mobile/android/base/java/org/mozilla/gecko/DataReportingNotification.java
+function change_checkAndNotifyPolicy_from_public_to_private {
+	sed '/public static void checkAndNotifyPolicy/ s/{/{ if(true) return;/; /private static void notifyDataPolicy/ s/{/{ if(true) return;/ ' -i mobile/android/base/java/org/mozilla/gecko/DataReportingNotification.java
+}
+
+function copy_android_images {
+	cp -a $DATA/android-images/core/* mobile/android/themes/core/images/
+	cp -a $DATA/android-images/resources mobile/android/base
+}
 
-cp -a $DATA/android-images/core/* mobile/android/themes/core/images/
-cp -a $DATA/android-images/resources mobile/android/base
+function change_mobile_privacy_policy {
+	sed '/aboutDetails/,/div/d; /privacyURL/d' mobile/android/chrome/content/about.xhtml -i
+}
 
-sed '/aboutDetails/,/div/d; /privacyURL/d' mobile/android/chrome/content/about.xhtml -i
+function remove_sender_id {
+	sed '/SENDERID/d' -i mobile/android/app/mobile.js
+}
 
-sed '/SENDERID/d' -i mobile/android/app/mobile.js
+function add_mobile_dupes {
+	cat $DATA/mobile.dupes  >> mobile/android/installer/allowed-dupes.mn
+}
 
-cat $DATA/mobile.dupes  >> mobile/android/installer/allowed-dupes.mn
+function mobile_packaging {
+	disable_android_support_warning
+	modify_confvars_for_android
+	remove_gradle
+	copy_icecat_android_settings
+	change_mobile_search_providers
+	copy_vendor_prefs
+	change_checkAndNotifyPolicy_from_public_to_private
+	copy_android_images
+	change_mobile_privacy_policy
+	remove_sender_id
+	add_mobile_dupes
+}
 
 ###############################################################################
 # Macos packaging
 ###############################################################################
-
-cat << EOF > ./build/package/mac_osx/pkg-dmg
+function macos_packaging {
+	cat << EOF > ./build/package/mac_osx/pkg-dmg
 #!/bin/sh
 set -e
 export LC_ALL=C
@@ -524,43 +651,45 @@
 find . -executable -exec chmod 750 {} \;
 find . ! -executable -exec chmod 640 {} \;
 
-find . -type f | sed -e 's/^\.\///' | sort | xargs -i echo "{}={}" > /tmp/filelist.txt
-find . -type l | sed -e 's/^\.\///' | sort | xargs -i echo "{}={}" >> /tmp/filelist.txt
+find . -type f | sed -e 's/^\.\///' | sort | xargs -i echo "{}={}" > filelist.txt
+find . -type l | sed -e 's/^\.\///' | sort | xargs -i echo "{}={}" >> filelist.txt
 
-mkisofs -D -V "\$6" -no-pad -R -apple -o /tmp/icecat-uncompressed.dmg -path-list /tmp/filelist.txt -graft-points -gid 20 -dir-mode 0750 -new-dir-mode 0750
+mkisofs -D -V "\$6" -no-pad -R -apple -o icecat-uncompressed.dmg -path-list filelist.txt -graft-points -gid 20 -dir-mode 0750 -new-dir-mode 0750
 
 
-dmg dmg /tmp/icecat-uncompressed.dmg \$4
-rm /tmp/icecat-uncompressed.dmg
+dmg dmg icecat-uncompressed.dmg \$4
+rm icecat-uncompressed.dmg
 
 find . -executable -exec chmod 755 {} \;
 find . ! -executable -exec chmod 644 {} \;
 find . -type d -exec chmod 755 {} \;
 EOF
+}
 
 ###############################################################################
 # Extensions
 ###############################################################################
-
-# Disable search field at extensions panel
-#sed  '/header-search/d; /search.placeholder/d' -i toolkit/mozapps/extensions/content/extensions.xul
-cat << EOF >> toolkit/mozapps/extensions/content/extensions.css
+function disable_search_field_in_extension_panel {
+#	sed  '/header-search/d; /search.placeholder/d' -i toolkit/mozapps/extensions/content/extensions.xul
+	cat << EOF >> toolkit/mozapps/extensions/content/extensions.css
 #header-search {
   display:none;
 }
 EOF
+}
 
+function add_extensions_to_manifest {
 # Add extensions to manifest
-for EXTENSION in $(ls $DATA/extensions/); do
-sed "/Browser Chrome Files/s%$%\n@BINPATH@/browser/extensions/$EXTENSION/*%" -i browser/installer/package-manifest.in
-sed "/Browser Chrome Files/s%$%\n@BINPATH@/extensions/$EXTENSION/*%" -i mobile/android/installer/package-manifest.in
+	for EXTENSION in $(ls $DATA/extensions/); do
+		sed "/Browser Chrome Files/s%$%\n@BINPATH@/browser/extensions/$EXTENSION/*%" -i browser/installer/package-manifest.in
+		sed "/Browser Chrome Files/s%$%\n@BINPATH@/extensions/$EXTENSION/*%" -i mobile/android/installer/package-manifest.in
 #echo "DIRS += ['$EXTENSION']" >> browser/app/profile/extensions/moz.build
 #touch browser/app/profile/extensions/$EXTENSION/moz.build
-done
+	done
 
-cp $DATA/extensions/ extensions/gnu -a
+	cp $DATA/extensions/ extensions/gnu -a
 
-cat << EOF >> browser/app/Makefile.in
+	cat << EOF >> browser/app/Makefile.in
 libs::
 	mkdir -p \$(DIST)/bin/browser/extensions
 	cp -a \$(topsrcdir)/extensions/gnu/* \$(DIST)/bin/browser/extensions/
@@ -569,21 +698,24 @@
 EOF
 
 
-cat << EOF >> mobile/android/app/Makefile.in
+	cat << EOF >> mobile/android/app/Makefile.in
 libs::
 	mkdir -p \$(DIST)/bin/distribution
 	cp -a \$(topsrcdir)/extensions/gnu/ \$(DIST)/bin/distribution/extensions/
 EOF
 
 #sed '/^make-package-internal:/ s%$%\n\tcp $(topsrcdir)/extensions.gnu/* $(DIST)/icecat/browser/extensions -a%' -i toolkit/mozapps/installer/packager.mk
+}
 
+function add_extensions_to_allowed_dupes {
 # Add extensions to allowed-dupes.mn
-cat << EOF >> ./browser/installer/allowed-dupes.mn
+	cat << EOF >> ./browser/installer/allowed-dupes.mn
 # IceCat extras
 browser/chrome/browser/content/browser/aboutaccounts/images/fox.png
 EOF
-find extensions/gnu/ | sort | sed s=extensions/gnu=browser/extensions= >> ./browser/installer/allowed-dupes.mn
-find extensions/gnu/ | sort | sed s=extensions/gnu=distribution/extensions= >> mobile/android/installer/allowed-dupes.mn
+	find extensions/gnu/ | sort | sed s=extensions/gnu=browser/extensions= >> ./browser/installer/allowed-dupes.mn
+	find extensions/gnu/ | sort | sed s=extensions/gnu=distribution/extensions= >> mobile/android/installer/allowed-dupes.mn
+}
 
 # Onboarding
 #mkdir -p browser/extensions/onboarding browser/extensions/onboarding/content browser/extensions/onboarding/locales/en-US
@@ -595,14 +727,50 @@
 #    cp $DATA/onboarding/locales/$locale/onboarding.properties l10n/$locale/browser/extensions/onboarding
 #done
 
+function extension_packaging {
+	disable_search_field_in_extension_panel
+	add_extensions_to_manifest
+	add_extensions_to_allowed_dupes
+}
+
+function fix_cve_2009_4029 {
 # Fix CVE-2009-4029
-sed 's/777/755/;' -i toolkit/crashreporter/google-breakpad/Makefile.in
+	sed 's/777/755/;' -i toolkit/crashreporter/google-breakpad/Makefile.in
 #(cd toolkit/crashreporter/google-breakpad; aclocal)
 #(cd toolkit/crashreporter/google-breakpad; automake)
+}
 
+function fix_cve_2012_3386 {
 # Fix CVE-2012-3386
-/bin/sed 's/chmod a+w/chmod u+w/' -i ./js/src/ctypes/libffi/Makefile.in ./toolkit/crashreporter/google-breakpad/Makefile.in ./toolkit/crashreporter/google-breakpad/src/third_party/glog/Makefile.in || true
+	/bin/sed 's/chmod a+w/chmod u+w/' -i ./js/src/ctypes/libffi/Makefile.in ./toolkit/crashreporter/google-breakpad/Makefile.in ./toolkit/crashreporter/google-breakpad/src/third_party/glog/Makefile.in || true
+}
+
+function errata {
+	fix_cve_2009_4029
+	fix_cve_2012_3386
+}
+
+function package_source_tarball {
+	cd ..
+	echo Packaging tarball
+	tar cfj icecat-$ICECATVERSION.tar.bz2 $SOURCEDIR
+}
+
+function main {
+	set_global_variables
+	mkdir -p output
+	cd output
+	src_fetch
+	l10n_fetch
+	custom_settings_and_features
+	general_branding
+	batch_rebranding
+	package_icons
+	mobile_packaging
+	macos_packaging
+	extension_packaging
+	errata
+	package_source_tarball
+}
 
-cd ..
-echo Packaging tarball
-tar cfj icecat-$ICECATVERSION.tar.bz2 $SOURCEDIR
+main $@

Reply via email to