[tbb-commits] [builders/tor-browser-build] 08/10: Bug 40500: Update projects/browser for base-browser

gitolite role git at cupani.torproject.org
Fri Jul 15 09:04:41 UTC 2022


This is an automated email from the git hooks/post-receive script.

boklm pushed a commit to branch master
in repository builders/tor-browser-build.

commit a61134f3c64734f6b8f8243ba5cb85eb79c3c55c
Author: Nicolas Vigier <boklm at torproject.org>
AuthorDate: Tue Jun 14 16:49:52 2022 +0200

    Bug 40500: Update projects/browser for base-browser
---
 projects/browser/RelativeLink/execdesktop          |   2 +-
 .../{start-tor-browser => start-browser}           |  86 ++++-----
 .../browser/RelativeLink/start-browser.desktop     |  34 ++++
 .../browser/RelativeLink/start-tor-browser.desktop |  34 ----
 projects/browser/build                             | 199 ++++++++++++---------
 projects/browser/build.android                     |   4 +-
 projects/browser/config                            |  26 +--
 projects/browser/pe_checksum_fix.py                |   4 +-
 projects/browser/windows-installer/basebrowser.ico | Bin 0 -> 23934 bytes
 projects/browser/windows-installer/basebrowser.nsi | 185 +++++++++++++++++++
 10 files changed, 395 insertions(+), 179 deletions(-)

diff --git a/projects/browser/RelativeLink/execdesktop b/projects/browser/RelativeLink/execdesktop
index fa6dc0a..5e3e65e 100755
--- a/projects/browser/RelativeLink/execdesktop
+++ b/projects/browser/RelativeLink/execdesktop
@@ -1,6 +1,6 @@
 #!/usr/bin/env bash
 
-TBB_START_PROG="$(grep '^X-TorBrowser-ExecShell' $1 | tail -1 | sed 's/^X-TorBrowser-ExecShell=//' | sed 's/%.//')"
+TBB_START_PROG="$(grep '^X-[% c("var/ProjectName") %]-ExecShell' $1 | tail -1 | sed 's/^X-[% c("var/ProjectName") %]-ExecShell=//' | sed 's/%.//')"
 
 shift
 
diff --git a/projects/browser/RelativeLink/start-tor-browser b/projects/browser/RelativeLink/start-browser
similarity index 72%
rename from projects/browser/RelativeLink/start-tor-browser
rename to projects/browser/RelativeLink/start-browser
index 8f0764c..b7b96d2 100755
--- a/projects/browser/RelativeLink/start-tor-browser
+++ b/projects/browser/RelativeLink/start-browser
@@ -5,11 +5,11 @@
 #
 # Copyright 2017 The Tor Project.  See LICENSE for licensing information.
 
-complain_dialog_title="Tor Browser"
+complain_dialog_title="[% c('var/Project_Name') %]"
 
-# Make sure this script wasn't started as 'sh start-tor-browser' or similar.
+# Make sure this script wasn't started as 'sh start-[% c('var/project-name') %]' or similar.
 if [ "x$BASH" = "x" ]; then
-    echo "$complain_dialog_title should be started as './start-tor-browser'"
+    echo "$complain_dialog_title should be started as './start-[% c('var/project-name') %]'"
     echo "Exiting." >&2
     exit 1;
 fi
@@ -83,22 +83,22 @@ complain () {
 }
 
 if [ "`id -u`" -eq 0 ]; then
-	complain "The Tor Browser Bundle should not be run as root.  Exiting."
+	complain "The [% c('var/Project_Name') %] should not be run as root.  Exiting."
 	exit 1
 fi
 
 if test -r /proc/cpuinfo && ! grep -q '^flags\s*:.* sse2' /proc/cpuinfo; then
-        complain "Tor Browser requires a CPU with SSE2 support.  Exiting."
+        complain "[% c('var/Project_Name') %] requires a CPU with SSE2 support.  Exiting."
         exit 1
 fi
 
 tbb_usage () {
-    printf "\nTor Browser Script Options\n"
+    printf "\n[% c('var/Project_Name') %] Script Options\n"
     printf "  --verbose         Display Tor and Firefox output in the terminal\n"
-    printf "  --log [file]      Record Tor and Firefox output in file (default: tor-browser.log)\n"
-    printf "  --detach          Detach from terminal and run Tor Browser in the background.\n"
-    printf "  --register-app    Register Tor Browser as a desktop app for this user\n"
-    printf "  --unregister-app  Unregister Tor Browser as a desktop app for this user\n"
+    printf "  --log [file]      Record Tor and Firefox output in file (default: [% c('var/project-name') %].log)\n"
+    printf "  --detach          Detach from terminal and run [% c('var/Project_Name') %] in the background.\n"
+    printf "  --register-app    Register [% c('var/Project_Name') %] as a desktop app for this user\n"
+    printf "  --unregister-app  Unregister [% c('var/Project_Name') %] as a desktop app for this user\n"
 }
 log_output=0
 show_output=0
@@ -125,14 +125,14 @@ do
           ;;
       -l | --log)
           if [ -z "$2" -o "${2:0:1}" == "-" ]; then
-             printf "Logging Tor Browser debug information to tor-browser.log\n"
-             logfile="../tor-browser.log"
+             printf "Logging [% c('var/Project_Name') %] debug information to [% c('var/project-name') %].log\n"
+             logfile="../[% c('var/project-name') %].log"
           elif [ "${2:0:1}" == "/" -o "${2:0:1}" == "~" ]; then
-             printf "Logging Tor Browser debug information to %s\n" "$2"
+             printf "Logging [% c('var/Project_Name') %] debug information to %s\n" "$2"
              logfile="$2"
              shift
           else
-             printf "Logging Tor Browser debug information to %s\n" "$2"
+             printf "Logging [% c('var/Project_Name') %] debug information to %s\n" "$2"
              logfile="../$2"
              shift
           fi
@@ -203,7 +203,7 @@ if [ -L "$myname" ]; then
 		myname="`readlink -f "$myname" 2>/dev/null`"
 		if [ "$?" -ne 0 ]; then
 			# Ugh.
-			complain "start-tor-browser cannot be run using a symlink on this operating system."
+			complain "start-[% c('var/project-name') %] cannot be run using a symlink on this operating system."
 		fi
 	fi
 fi
@@ -229,26 +229,26 @@ fi
 
 # Fix up .desktop Icon and Exec Paths, and update the .desktop file from the
 # canonical version if it was changed by the updater.
-cp start-tor-browser.desktop ../
-sed -i -e "s,^Name=.*,Name=Tor Browser,g" ../start-tor-browser.desktop
-sed -i -e "s,^Icon=.*,Icon=$PWD/browser/chrome/icons/default/default128.png,g" ../start-tor-browser.desktop
-sed -i -e "s,^Exec=.*,Exec=sh -c '\"$PWD/start-tor-browser\" --detach || ([ !  -x \"$PWD/start-tor-browser\" ] \&\& \"\$(dirname \"\$*\")\"/Browser/start-tor-browser --detach)' dummy %k,g" ../start-tor-browser.desktop
+cp start-[% c('var/project-name') %].desktop ../
+sed -i -e "s,^Name=.*,Name=[% c('var/Project_Name') %],g" ../start-[% c('var/project-name') %].desktop
+sed -i -e "s,^Icon=.*,Icon=$PWD/browser/chrome/icons/default/default128.png,g" ../start-[% c('var/project-name') %].desktop
+sed -i -e "s,^Exec=.*,Exec=sh -c '\"$PWD/start-[% c('var/project-name') %]\" --detach || ([ !  -x \"$PWD/start-[% c('var/project-name') %]\" ] \&\& \"\$(dirname \"\$*\")\"/Browser/start-[% c('var/project-name') %] --detach)' dummy %k,g" ../start-[% c('var/project-name') %].desktop
 
 if [ "$register_desktop_app" -eq 1 ]; then
 	mkdir -p "$HOME/.local/share/applications/"
-	cp ../start-tor-browser.desktop "$HOME/.local/share/applications/"
+	cp ../start-[% c('var/project-name') %].desktop "$HOME/.local/share/applications/"
 	update-desktop-database "$HOME/.local/share/applications/"
-	printf "Tor Browser has been registered as a desktop app for this user in ~/.local/share/applications/\n"
+	printf "[% c('var/Project_Name') %] has been registered as a desktop app for this user in ~/.local/share/applications/\n"
 	exit 0
 fi
 
 if [ "$register_desktop_app" -eq -1 ]; then
-	if [ -e "$HOME/.local/share/applications/start-tor-browser.desktop" ]; then
-		rm -f "$HOME/.local/share/applications/start-tor-browser.desktop"
+	if [ -e "$HOME/.local/share/applications/start-[% c('var/project-name') %].desktop" ]; then
+		rm -f "$HOME/.local/share/applications/start-[% c('var/project-name') %].desktop"
 		update-desktop-database "$HOME/.local/share/applications/"
-		printf "Tor Browser has been removed as a user desktop app (from ~/.local/share/applications/)\n"
+		printf "[% c('var/Project_Name') %] has been removed as a user desktop app (from ~/.local/share/applications/)\n"
 	else
-		printf "Tor Browser does not appear to be a desktop app (not present in ~/.local/share/applications/)\n"
+		printf "[% c('var/Project_Name') %] does not appear to be a desktop app (not present in ~/.local/share/applications/)\n"
 	fi
 	exit 0
 fi
@@ -256,6 +256,7 @@ fi
 HOME="${PWD}"
 export HOME
 
+[% IF c("var/tor-browser") -%]
 SYSARCHITECTURE=$(getconf LONG_BIT)
 TORARCHITECTURE=$(expr "$(file TorBrowser/Tor/tor)" : '.*ELF \([[:digit:]]*\)')
 
@@ -263,6 +264,7 @@ if [ $SYSARCHITECTURE -ne $TORARCHITECTURE ]; then
    complain "Wrong architecture? 32-bit vs. 64-bit."
    exit 1
 fi
+[% END -%]
 
 [% IF c("var/asan") -%]
 # We need to disable LSan which is enabled by default now. Otherwise we'll get
@@ -271,6 +273,7 @@ ASAN_OPTIONS="detect_leaks=0"
 export ASAN_OPTIONS
 [% END -%]
 
+[% IF c("var/tor-browser") -%]
 function setControlPortPasswd() {
     local ctrlPasswd=$1
 
@@ -332,9 +335,10 @@ TOR_CONTROL_PASSWD environment variable."
 # Either set `TOR_CONTROL_PASSWD` before running ./start-tor-browser, or put
 # your password in the following line where the word “secret” is:
 setControlPortPasswd ${TOR_CONTROL_PASSWD:='"secret"'}
+[% END -%]
 
 # Set up custom bundled fonts. See fonts-conf(5).
-export FONTCONFIG_PATH="${HOME}/TorBrowser/Data/fontconfig"
+export FONTCONFIG_PATH="${HOME}/[% c('var/ProjectName') %]/Data/fontconfig"
 export FONTCONFIG_FILE="fonts.conf"
 
 # Avoid overwriting user's dconf values. Fixes #27903.
@@ -352,28 +356,28 @@ cd "${HOME}"
 
 if [ "$show_usage" -eq 1 ]; then
     # Display Firefox help, then our help
-    TOR_CONTROL_PASSWD=${TOR_CONTROL_PASSWD} ./firefox \
-        --class "Tor Browser" --name "Tor Browser" \
-        -profile TorBrowser/Data/Browser/profile.default --help 2>/dev/null
+    [% IF c("var/tor-browser") %]TOR_CONTROL_PASSWD=${TOR_CONTROL_PASSWD}[% END %] ./firefox \
+        --class "[% c('var/Project_Name') %]" --name "[% c('var/Project_Name') %]" \
+        -profile [% c('var/ProjectName') %]/Data/Browser/profile.default --help 2>/dev/null
     tbb_usage
 elif [ "$detach" -eq 1 ] ; then
-    TOR_CONTROL_PASSWD=${TOR_CONTROL_PASSWD} ./firefox \
-        --class "Tor Browser" --name "Tor Browser" \
-        -profile TorBrowser/Data/Browser/profile.default "${@}" > "$logfile" 2>&1 </dev/null &
+    [% IF c("var/tor-browser") %]TOR_CONTROL_PASSWD=${TOR_CONTROL_PASSWD}[% END %] ./firefox \
+        --class "[% c('var/Project_Name') %]" --name "[% c('var/Project_Name') %]" \
+        -profile [% c('var/ProjectName') %]/Data/Browser/profile.default "${@}" > "$logfile" 2>&1 </dev/null &
     disown "$!"
 elif [ "$log_output" -eq 1 -a "$show_output" -eq 1 ]; then
-    TOR_CONTROL_PASSWD=${TOR_CONTROL_PASSWD} ./firefox \
-        --class "Tor Browser" --name "Tor Browser" \
-        -profile TorBrowser/Data/Browser/profile.default "${@}" 2>&1 </dev/null | \
+    [% IF c("var/tor-browser") %]TOR_CONTROL_PASSWD=${TOR_CONTROL_PASSWD}[% END %] ./firefox \
+        --class "[% c('var/Project_Name') %]" --name "[% c('var/Project_Name') %]" \
+        -profile [% c('var/ProjectName') %]/Data/Browser/profile.default "${@}" 2>&1 </dev/null | \
         tee "$logfile"
 elif [ "$show_output" -eq 1 ]; then
-    TOR_CONTROL_PASSWD=${TOR_CONTROL_PASSWD} ./firefox \
-        --class "Tor Browser" --name "Tor Browser" \
-        -profile TorBrowser/Data/Browser/profile.default "${@}" < /dev/null
+    [% IF c("var/tor-browser") %]TOR_CONTROL_PASSWD=${TOR_CONTROL_PASSWD}[% END %] ./firefox \
+        --class "[% c('var/Project_Name') %]" --name "[% c('var/Project_Name') %]" \
+        -profile [% c('var/ProjectName') %]/Data/Browser/profile.default "${@}" < /dev/null
 else
-    TOR_CONTROL_PASSWD=${TOR_CONTROL_PASSWD} ./firefox \
-        --class "Tor Browser" --name "Tor Browser" \
-        -profile TorBrowser/Data/Browser/profile.default "${@}" > "$logfile" 2>&1 </dev/null
+    [% IF c("var/tor-browser") %]TOR_CONTROL_PASSWD=${TOR_CONTROL_PASSWD}[% END %] ./firefox \
+        --class "[% c('var/Project_Name') %]" --name "[% c('var/Project_Name') %]" \
+        -profile [% c('var/ProjectName') %]/Data/Browser/profile.default "${@}" > "$logfile" 2>&1 </dev/null
 fi
 
 exit $?
diff --git a/projects/browser/RelativeLink/start-browser.desktop b/projects/browser/RelativeLink/start-browser.desktop
new file mode 100755
index 0000000..68f0075
--- /dev/null
+++ b/projects/browser/RelativeLink/start-browser.desktop
@@ -0,0 +1,34 @@
+#!/usr/bin/env ./Browser/execdesktop
+#
+# This file is a self-modifying .desktop file that can be run from the shell.
+# It preserves arguments and environment for the start-[% c("var/project-name") %] script.
+#
+# Run './start-[% c("var/project-name") %].desktop --help' to display the full set of options.
+#
+# When invoked from the shell, this file must always be in a [% c("var/Project_Name") %] root
+# directory. When run from the file manager or desktop GUI, it is relocatable.
+#
+# After first invocation, it will update itself with the absolute path to the
+# current [% c("var/Project_Name") %] location, to support relocation of this .desktop file for GUI
+# invocation. You can also add [% c("var/Project_Name") %] to your desktop's application menu
+# by running './start-[% c("var/project-name") %].desktop --register-app'
+#
+# If you use --register-app, and then relocate your [% c("var/Project_Name") %] directory, [% c("var/Project_Name") %]
+# will no longer launch from your desktop's app launcher/dock. However, if you
+# re-run --register-app from inside that new directory, the script
+# will correct the absolute paths and re-register itself.
+#
+# This file will also still function if the path changes when [% c("var/Project_Name") %] is used as a
+# portable app, so long as it is run directly from that new directory, either
+# via the shell or via the file manager.
+
+[Desktop Entry]
+Type=Application
+Name=[% c("var/Project_Name") %] Setup
+GenericName=Web Browser
+Comment=[% c("var/Project_Name") %]  is +1 for privacy and −1 for mass surveillance
+Categories=Network;WebBrowser;Security;
+Exec=sh -c '"$(dirname "$*")"/Browser/start-[% c("var/project-name") %]  --detach || ([ ! -x "$(dirname "$*")"/Browser/start-[% c("var/project-name") %] ] && "$(dirname "$*")"/start-[% c("var/project-name") %] --detach)' dummy %k
+X-[% c("var/ProjectName") %]-ExecShell=./Browser/start-[% c("var/project-name") %] --detach
+Icon=web-browser
+StartupWMClass=[% c("var/Project_Name") %]
diff --git a/projects/browser/RelativeLink/start-tor-browser.desktop b/projects/browser/RelativeLink/start-tor-browser.desktop
deleted file mode 100755
index c02a59f..0000000
--- a/projects/browser/RelativeLink/start-tor-browser.desktop
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/usr/bin/env ./Browser/execdesktop
-#
-# This file is a self-modifying .desktop file that can be run from the shell.
-# It preserves arguments and environment for the start-tor-browser script.
-#
-# Run './start-tor-browser.desktop --help' to display the full set of options.
-#
-# When invoked from the shell, this file must always be in a Tor Browser root
-# directory. When run from the file manager or desktop GUI, it is relocatable.
-#
-# After first invocation, it will update itself with the absolute path to the
-# current TBB location, to support relocation of this .desktop file for GUI
-# invocation. You can also add Tor Browser to your desktop's application menu
-# by running './start-tor-browser.desktop --register-app'
-#
-# If you use --register-app, and then relocate your TBB directory, Tor Browser
-# will no longer launch from your desktop's app launcher/dock. However, if you
-# re-run --register-app from inside that new directory, the script
-# will correct the absolute paths and re-register itself.
-#
-# This file will also still function if the path changes when TBB is used as a
-# portable app, so long as it is run directly from that new directory, either
-# via the shell or via the file manager.
-
-[Desktop Entry]
-Type=Application
-Name=Tor Browser Setup
-GenericName=Web Browser
-Comment=Tor Browser is +1 for privacy and −1 for mass surveillance
-Categories=Network;WebBrowser;Security;
-Exec=sh -c '"$(dirname "$*")"/Browser/start-tor-browser --detach || ([ ! -x "$(dirname "$*")"/Browser/start-tor-browser ] && "$(dirname "$*")"/start-tor-browser --detach)' dummy %k
-X-TorBrowser-ExecShell=./Browser/start-tor-browser --detach
-Icon=web-browser
-StartupWMClass=Tor Browser
diff --git a/projects/browser/build b/projects/browser/build
index 750883c..9c7e4a0 100644
--- a/projects/browser/build
+++ b/projects/browser/build
@@ -20,9 +20,9 @@ GENERATEDPREFSPATH=$rootdir/Bundle-Data/PTConfigs/generated-prefs.js
 touch "$GENERATEDPREFSPATH"
 
 [% IF c("var/osx") %]
-  TBDIR="$TB_STAGE_DIR/Tor Browser.app"
+  TBDIR="$TB_STAGE_DIR/[% c("var/Project_Name") %].app"
 
-  DOCSPATH=Contents/Resources/TorBrowser/Docs
+  DOCSPATH=Contents/Resources/[% c('var/ProjectName') %]/Docs
   EXTSPATH=Contents/Resources/distribution/extensions
   TORBINPATH=Contents/MacOS/Tor
   TORCONFIGPATH=Contents/Resources/TorBrowser/Tor
@@ -32,11 +32,11 @@ touch "$GENERATEDPREFSPATH"
 [% ELSE %]
   TBDIR=$TB_STAGE_DIR/Browser
 
-  DOCSPATH=TorBrowser/Docs
-  EXTSPATH=TorBrowser/Data/Browser/profile.default/extensions
+  DOCSPATH=[% c('var/ProjectName') %]/Docs
+  EXTSPATH=[% c('var/ProjectName') %]/Data/Browser/profile.default/extensions
   TORCONFIGPATH=TorBrowser/Data/Tor
 
-  mkdir -p "$TBDIR/TorBrowser/Data/Browser/Caches"
+  mkdir -p "$TBDIR/[% c('var/ProjectName') %]/Data/Browser/Caches"
 [% END %]
 
 mkdir -p "$TBDIR/$EXTSPATH"
@@ -47,42 +47,57 @@ MARTOOLS=$rootdir/mar-tools
 
 mv [% c('input_files_by_name/noscript') %] "$TBDIR/$EXTSPATH/{73a6fe31-595d-460b-a920-fcc0f8843232}.xpi"
 
-tar -C "$TBDIR" -xf [% c('input_files_by_name/obfs4') %]
-tar -C "$TBDIR" -xf [% c('input_files_by_name/snowflake') -%]
+[% IF c("var/tor-browser") -%]
+  tar -C "$TBDIR" -xf [% c('input_files_by_name/obfs4') %]
+  tar -C "$TBDIR" -xf [% c('input_files_by_name/snowflake') -%]
+[% END -%]
 
 tar -C "$TBDIR[% IF c("var/osx") %]/Contents/Resources[% END %]" -xf [% c('input_files_by_name/fonts') %]
 
 [% IF c("var/linux") %]
-  cp RelativeLink/* ${TB_STAGE_DIR}/Browser/
-  cp RelativeLink/start-tor-browser.desktop ${TB_STAGE_DIR}/
-  cat > ${TB_STAGE_DIR}/Browser/start-tor-browser << 'RBM_TB_EOF'
-[% INCLUDE 'RelativeLink/start-tor-browser' -%]
+  cat > ${TB_STAGE_DIR}/start-[% c("var/project-name") %].desktop << 'RBM_TB_EOF'
+[% INCLUDE 'RelativeLink/start-browser.desktop' -%]
+RBM_TB_EOF
+  cat > ${TB_STAGE_DIR}/Browser/start-[% c("var/project-name") %] << 'RBM_TB_EOF'
+[% INCLUDE 'RelativeLink/start-browser' -%]
 RBM_TB_EOF
+  cat > ${TB_STAGE_DIR}/Browser/execdesktop << 'RBM_TB_EOF'
+[% INCLUDE 'RelativeLink/execdesktop' -%]
+RBM_TB_EOF
+  chmod +x ${TB_STAGE_DIR}/start-[% c("var/project-name") %].desktop \
+           ${TB_STAGE_DIR}/Browser/start-[% c("var/project-name") %] \
+           ${TB_STAGE_DIR}/Browser/execdesktop
+  cp ${TB_STAGE_DIR}/start-[% c("var/project-name") %].desktop \
+     ${TB_STAGE_DIR}/Browser
   [% IF c("var/namecoin") %]
     pushd ${TB_STAGE_DIR}/Browser/
     patch -p1 < $rootdir/namecoin.patch
     popd
   [% END %]
-  chmod +x ${TB_STAGE_DIR}/Browser/start-tor-browser
   # Make sure we get the desired scrollbar behavior with Gtk3, see bug 27546.
   GTK_SETTINGS_DIR=${TB_STAGE_DIR}/Browser/.config/gtk-3.0
   mkdir -p $GTK_SETTINGS_DIR
   cp $rootdir/gtk3-settings.ini $GTK_SETTINGS_DIR/settings.ini
 [% END %]
 
-tar -C ${TB_STAGE_DIR} -xf [% c('input_files_by_name/firefox') %]/tor-browser.tar.gz
+tar -C ${TB_STAGE_DIR} -xf [% c('input_files_by_name/firefox') %]/browser.tar.gz
 
-# Include the Tor Browser manual
-TMP_MANUAL_PATH=$rootdir/tmp_manual/
-mkdir $TMP_MANUAL_PATH
-pushd $TMP_MANUAL_PATH
-tar -xf $rootdir/[% c('input_files_by_name/manual') %]
-find . -exec [% c("touch") %] {} \;
-find chrome/ | sort | zip -X -@ "$TBDIR[% IF c("var/osx") %]/Contents/Resources[% END %]/browser/omni.ja"
-popd
-rm -rf $TMP_MANUAL_PATH
+[% IF c("var/tor-browser") -%]
+  # Include the Tor Browser manual
+  TMP_MANUAL_PATH=$rootdir/tmp_manual/
+  mkdir $TMP_MANUAL_PATH
+  pushd $TMP_MANUAL_PATH
+  tar -xf $rootdir/[% c('input_files_by_name/manual') %]
+  find . -exec [% c("touch") %] {} \;
+  find chrome/ | sort | zip -X -@ "$TBDIR[% IF c("var/osx") %]/Contents/Resources[% END %]/browser/omni.ja"
+  popd
+  rm -rf $TMP_MANUAL_PATH
+[% END -%]
+
+[% IF c("var/tor-browser") -%]
+  tar -C "$TBDIR[% IF ! c("var/osx") %]/TorBrowser[% END %]" -xf [% c('input_files_by_name/tor') %]/tor.tar.gz
+[% END -%]
 
-tar -C "$TBDIR[% IF ! c("var/osx") %]/TorBrowser[% END %]" -xf [% c('input_files_by_name/tor') %]/tor.tar.gz
 [% IF c("var/namecoin") %]
   # Extract Electrum-NMC
   tar -C "$TBDIR/TorBrowser" -xf [% c('input_files_by_name/electrum-nmc') %]
@@ -112,48 +127,56 @@ tar -C "$TBDIR[% IF ! c("var/osx") %]/TorBrowser[% END %]" -xf [% c('input_files
   mkdir -p $SKELETON_TMP_RESOURCES/browser
   echo "[XRE]" > $SKELETON_TMP_RESOURCES/browser/override.ini
   echo "EnableProfileMigrator=0" >> $SKELETON_TMP_RESOURCES/browser/override.ini
-  mkdir -p $SKELETON_TMP_RESOURCES/TorBrowser/Tor
-  cp -p Bundle-Data/mac/TorBrowser/Data/Tor/torrc-defaults $SKELETON_TMP_RESOURCES/TorBrowser/Tor/
+  [% IF c("var/tor-browser") -%]
+    mkdir -p $SKELETON_TMP_RESOURCES/TorBrowser/Tor
+    cp -p Bundle-Data/mac/TorBrowser/Data/Tor/torrc-defaults $SKELETON_TMP_RESOURCES/TorBrowser/Tor/
+  [% END -%]
   # Place a copy of the bookmarks.html file at the top. It will be moved into
   # browser/omni.ja later
   cp -p Bundle-Data/mac/TorBrowser/Data/Browser/profile.default/bookmarks.html $rootdir
   rm -Rf Bundle-Data/mac
   mv $SKELETON_TMP Bundle-Data/mac
 
-  # Install a "tor" shim that sets the working directory. See #10030.
-  mv "$TBDIR/$TORBINPATH/tor" "$TBDIR/$TORBINPATH/tor.real"
-  cp Bundle-Data/mac-tor.sh "$TBDIR/$TORCONFIGPATH/tor"
+  [% IF c("var/tor-browser") -%]
+    # Install a "tor" shim that sets the working directory. See #10030.
+    mv "$TBDIR/$TORBINPATH/tor" "$TBDIR/$TORBINPATH/tor.real"
+    cp Bundle-Data/mac-tor.sh "$TBDIR/$TORCONFIGPATH/tor"
+  [% END -%]
 
   tar -C Bundle-Data/mac-applications.dmg -c . | tar -C $TB_STAGE_DIR -x
 [% END %]
 
 mkdir -p "$TBDIR/$DOCSPATH"
 cp -a Bundle-Data/Docs/* "$TBDIR/$DOCSPATH"
-tar -C Bundle-Data/[% bundledata_osname %] [% IF ! c("var/namecoin") %]--exclude=*Electrum-NMC* --exclude=*ncprop279*[% END %] -c . | tar -C "$TBDIR[% IF ! c("var/osx") %]/TorBrowser[% END %]" -x
-
-cat Bundle-Data/PTConfigs/[% bundledata_osname %]/torrc-defaults-appendix >> "$TBDIR/$TORCONFIGPATH/torrc-defaults"
-cat Bundle-Data/PTConfigs/bridge_prefs.js >> "$GENERATEDPREFSPATH"
-
-function bridges_conf {
-  local pt="$1"
-  local i=1
-  while read -r line
-  do
-    echo "pref(\"extensions.torlauncher.default_bridge.$pt.$i\", \"$line\");" >> "$GENERATEDPREFSPATH"
-    i=$((i + 1))
-  done < "$rootdir/bridges_list.$pt.txt"
-}
-bridges_conf obfs4
-bridges_conf meek-azure
-bridges_conf snowflake
+tar -C Bundle-Data/[% bundledata_osname %] [% IF ! c("var/namecoin") %]--exclude=*Electrum-NMC* --exclude=*ncprop279*[% END %] -c . | tar -C "$TBDIR[% IF ! c("var/osx") %]/[% c('var/ProjectName') %][% END %]" -x
+
+[% IF c("var/tor-browser") -%]
+  cat Bundle-Data/PTConfigs/[% bundledata_osname %]/torrc-defaults-appendix >> "$TBDIR/$TORCONFIGPATH/torrc-defaults"
+  cat Bundle-Data/PTConfigs/bridge_prefs.js >> "$GENERATEDPREFSPATH"
+
+  function bridges_conf {
+    local pt="$1"
+    local i=1
+    while read -r line
+    do
+      echo "pref(\"extensions.torlauncher.default_bridge.$pt.$i\", \"$line\");" >> "$GENERATEDPREFSPATH"
+      i=$((i + 1))
+    done < "$rootdir/bridges_list.$pt.txt"
+  }
+  bridges_conf obfs4
+  bridges_conf meek-azure
+  bridges_conf snowflake
+[% END -%]
 
-[% IF ! c("var/multi_lingual") %]
+[% IF ! c("var/multi_lingual") && c("var/tor-browser") %]
   echo 'pref("extensions.torlauncher.prompt_for_locale", false);' >> "$GENERATEDPREFSPATH"
 [% END %]
 
 [% IF c("var/linux") %]
-  chmod 700 ${TB_STAGE_DIR}/Browser/TorBrowser/Data/Browser
-  chmod 700 ${TB_STAGE_DIR}/Browser/TorBrowser/Data/Tor
+  chmod 700 ${TB_STAGE_DIR}/Browser/[% c('var/ProjectName') %]/Data/Browser
+  [% IF c("var/tor-browser") -%]
+    chmod 700 ${TB_STAGE_DIR}/Browser/TorBrowser/Data/Tor
+  [% END -%]
 [% END %]
 
 [% IF c("var/multi_lingual") %]
@@ -162,18 +185,18 @@ bridges_conf snowflake
   # of the directory that is inside the package (in other words, users will
   # not see tor-browser_ALL after they install Tor Browser).
   PKG_LOCALE="ALL"
-  PKG_DIR="tor-browser"
+  PKG_DIR='[% c("var/project-name") %]'
 [% ELSE %]
   PKG_LOCALE="en-US"
-  PKG_DIR="tor-browser_${PKG_LOCALE}"
+  PKG_DIR="[% c('var/project-name') %]_${PKG_LOCALE}"
 [% END %]
 
 
 pushd "$TBDIR[% IF c("var/osx") %]/Contents/Resources[% END %]/browser/"
-unzip omni.ja defaults/preferences/000-tor-browser.js || [ $? -lt 3 ]
+unzip omni.ja defaults/preferences/[% c("var/prefs_file") %] || [ $? -lt 3 ]
 # Append our built extension-overrides.js to 000-tor-browser.js
-cat "$GENERATEDPREFSPATH" >> defaults/preferences/000-tor-browser.js
-cp defaults/preferences/000-tor-browser.js $rootdir
+cat "$GENERATEDPREFSPATH" >> defaults/preferences/[% c("var/prefs_file") %]
+cp defaults/preferences/[% c("var/prefs_file") %] $rootdir
 [% IF c("var/osx") %]
   # Embed our default bookmarks within the en-US locale.
   mkdir -p chrome/en-US/locale/browser
@@ -184,9 +207,9 @@ cp defaults/preferences/000-tor-browser.js $rootdir
   rm -rf chrome
 [% END %]
 # Set the locale of the bundle.
-echo "pref(\"intl.locale.requested\", \"en-US\");" >> defaults/preferences/000-tor-browser.js
-[% c("touch") %] defaults/preferences/000-tor-browser.js
-zip -Xm omni.ja defaults/preferences/000-tor-browser.js
+echo "pref(\"intl.locale.requested\", \"en-US\");" >> defaults/preferences/[% c("var/prefs_file") %]
+[% c("touch") %] defaults/preferences/[% c("var/prefs_file") %]
+zip -Xm omni.ja defaults/preferences/[% c("var/prefs_file") %]
 rm -rf defaults
 # create tbb_version.json file for #25020
 echo '{"version":"[% c("var/torbrowser_version") %]","architecture":"[% c("var/mar_osname") %]","channel":"[% c("var/channel") %]","locale":"en-US"}' > ../tbb_version.json
@@ -235,14 +258,14 @@ popd
   export PATH="/var/tmp/dist/nsis/bin:$PATH"
 
   mv $rootdir/windows-installer $distdir/windows-installer
-  mv ${TB_STAGE_DIR} $distdir/windows-installer/"Tor Browser"
+  mv ${TB_STAGE_DIR} $distdir/windows-installer/"[% c('var/Project_Name') %]"
   mv $distdir/windows-installer ${TB_STAGE_DIR}
 [% END %]
 
 [% IF c("var/windows") %]
-  TBDIR="$distdir/$PKG_DIR/Tor Browser/Browser"
+  TBDIR="$distdir/$PKG_DIR/[% c("var/Project_Name") %]/Browser"
 [% ELSIF c("var/osx") %]
-  TBDIR="$distdir/$PKG_DIR/Tor Browser.app"
+  TBDIR="$distdir/$PKG_DIR/[% c("var/Project_Name") %].app"
 [% ELSE %]
   TBDIR="$distdir/$PKG_DIR/Browser"
 [% END %]
@@ -261,7 +284,7 @@ cd $distdir
 
 [% IF c("var/build_mar") -%]
   # Create full MAR file and compressed package.
-  [% SET mar_file = 'tor-browser-' _ c("var/mar_osname") _ '-' _ c("var/torbrowser_version") _ '_${PKG_LOCALE}.mar' %]
+  [% SET mar_file = c("var/project-name") _ '-' _ c("var/mar_osname") _ '-' _ c("var/torbrowser_version") _ '_${PKG_LOCALE}.mar' %]
   MAR=$MARTOOLS/mar \
   MOZ_PRODUCT_VERSION=[% c("var/torbrowser_version") %] \
   MAR_CHANNEL_ID=torbrowser-torproject-[% c("var/channel") %] \
@@ -271,23 +294,23 @@ cd $distdir
 [% IF c("var/linux") %]
   [% c('tar', {
         tar_src => [ '$PKG_DIR' ],
-        tar_args => '-cJf $OUTDIR/tor-browser-' _ c("var/mar_osname") _ '-' _ c("var/torbrowser_version") _ '_${PKG_LOCALE}.tar.xz',
+        tar_args => '-cJf $OUTDIR/' _ c("var/project-name") _ '-' _ c("var/mar_osname") _ '-' _ c("var/torbrowser_version") _ '_${PKG_LOCALE}.tar.xz',
     }) %]
 [% ELSIF c("var/osx") %]
   [% c('var/ddmg', {
         dmg_src => '"$PKG_DIR"',
-        dmg_out => '$OUTDIR/TorBrowser-' _ c("var/torbrowser_version") _ '-osx64_${PKG_LOCALE}.dmg',
+        dmg_out => '$OUTDIR/' _ c('var/ProjectName') _ '-' _ c("var/torbrowser_version") _ '-osx64_${PKG_LOCALE}.dmg',
     }) %]
 [% ELSIF c("var/windows") %]
   find "$PKG_DIR" -exec [% c("touch") %] {} \;
   pushd "$PKG_DIR"
-  makensis torbrowser.nsi
+  makensis [% c("var/projectname") %].nsi
   # Working around NSIS braindamage
-  mv torbrowser-install.exe torbrowser-install-tmp.exe
+  mv [% c("var/projectname") %]-install.exe browser-install-tmp.exe
   python3 $rootdir/pe_checksum_fix.py
-  mv torbrowser-install-tmp2.exe torbrowser-install.exe
-  rm torbrowser-install-tmp.exe
-  mv torbrowser-install.exe $OUTDIR/torbrowser-install[% IF c("var/windows-x86_64") %]-win64[% END %]-[% c("var/torbrowser_version") %]_${PKG_LOCALE}.exe
+  mv browser-install-tmp2.exe [% c("var/projectname") %]-install.exe
+  rm browser-install-tmp.exe
+  mv [% c("var/projectname") %]-install.exe $OUTDIR/[% c("var/projectname") %]-install[% IF c("var/windows-x86_64") %]-win64[% END %]-[% c("var/torbrowser_version") %]_${PKG_LOCALE}.exe
   popd
 [% END %]
 rm -rf $distdir/${PKG_DIR}
@@ -295,12 +318,14 @@ SCRIPT_EOF
 
 cp $rootdir/[% c('input_files_by_name/firefox') %]/mar-tools-*.zip "$OUTDIR"/
 [% IF c("var/linux-x86_64") -%]
-  cp $rootdir/[% c('input_files_by_name/firefox') %]/tor-browser-debug.tar.xz "$OUTDIR"/tor-browser-[% c("var/mar_osname") %]-debug.tar.xz
+  [% IF c("var/tor-browser") -%]
+    cp $rootdir/[% c('input_files_by_name/firefox') %]/browser-debug.tar.xz "$OUTDIR"/[% c("var/project-name") %]-[% c("var/mar_osname") %]-debug.tar.xz
+  [% END -%]
   [% IF !c("var/asan") -%]
     cp $rootdir/[% c('input_files_by_name/firefox') %]/geckodriver-linux64.tar.xz "$OUTDIR"/
   [% END -%]
 [% END -%]
-[% IF c("var/linux") -%]
+[% IF c("var/linux") && c("var/tor-browser") -%]
   cp $rootdir/[% c('input_files_by_name/tor') %]/tor-debug.tar.xz "$OUTDIR"/tor-[% c("var/mar_osname") %]-debug.tar.xz
 [% END -%]
 [% IF c("var/build_infos_json") -%]
@@ -308,7 +333,7 @@ cp $rootdir/[% c('input_files_by_name/firefox') %]/mar-tools-*.zip "$OUTDIR"/
 [% END -%]
 
 # Create a tarball with all Linux x86_64 language packs (Bug 32676)
-[% IF c("var/linux-x86_64") && ! c("var/multi_lingual") && ! c("var/testbuild") -%]
+[% IF c("var/tor-browser") && c("var/linux-x86_64") && ! c("var/multi_lingual") && ! c("var/testbuild") -%]
   pushd $rootdir/[% c('input_files_by_name/firefox-langpacks') %]
   [% c('tar', {
            tar_src => [ '.' ],
@@ -325,12 +350,12 @@ cp $rootdir/[% c('input_files_by_name/firefox') %]/mar-tools-*.zip "$OUTDIR"/
   [% FOREACH lang = locales %]
     [% SET lang = tmpl(lang);
        SET xpi = '$rootdir/' _ c('input_files_by_name/firefox-langpacks') _ '/' _ lang _ '.xpi';
-       SET tbdir = '$distdir/tor-browser_' _ lang;
-       SET mar_file = 'tor-browser-' _ c("var/mar_osname") _ '-' _ c("var/torbrowser_version") _ '_' _ lang _ '.mar';
+       SET tbdir = '$distdir/' _ c("var/project-name") _ '_' _ lang;
+       SET mar_file = c("var/project-name") _ '-' _ c("var/mar_osname") _ '-' _ c("var/torbrowser_version") _ '_' _ lang _ '.mar';
        IF c("var/osx");
-         SET browserdir = tbdir _ '/Tor Browser.app';
+         SET browserdir = tbdir _ '/' _ c("var/Project_Name") _ '.app';
        ELSIF c("var/windows");
-         SET browserdir = tbdir _ '/Tor Browser/Browser';
+         SET browserdir = tbdir _ '/' _ c("var/Project_Name") _ '/Browser';
        ELSE;
          SET browserdir = tbdir _ '/Browser';
        END;
@@ -346,7 +371,7 @@ cp $rootdir/[% c('input_files_by_name/firefox') %]/mar-tools-*.zip "$OUTDIR"/
          END;
        END;
     %]
-      cat > "$scripts_dir/create-tor-browser_[% lang %]" << SCRIPT_EOF
+      cat > "$scripts_dir/create-browser_[% lang %]" << SCRIPT_EOF
 #!/bin/bash
       set -e
       cp -a ${TB_STAGE_DIR} [% tbdir %]
@@ -354,11 +379,11 @@ cp $rootdir/[% c('input_files_by_name/firefox') %]/mar-tools-*.zip "$OUTDIR"/
 
       pushd "[% browserdir %]/[% IF c("var/osx") %]Contents/Resources/[% END %]browser/"
       mkdir -p defaults/preferences
-      cp $rootdir/000-tor-browser.js defaults/preferences/
+      cp $rootdir/[% c("var/prefs_file") %] defaults/preferences/
       # Set the locale of the bundle.
-      echo "pref(\"intl.locale.requested\", \"[% lang %]\");" >> defaults/preferences/000-tor-browser.js
-      [% c("touch") %] defaults/preferences/000-tor-browser.js
-      zip -Xm omni.ja defaults/preferences/000-tor-browser.js
+      echo "pref(\"intl.locale.requested\", \"[% lang %]\");" >> defaults/preferences/[% c("var/prefs_file") %]
+      [% c("touch") %] defaults/preferences/[% c("var/prefs_file") %]
+      zip -Xm omni.ja defaults/preferences/[% c("var/prefs_file") %]
       rm -rf defaults
       # create tbb_version.json file for #25020
       echo '{"version":"[% c("var/torbrowser_version") %]","architecture":"[% c("var/mar_osname") %]","channel":"[% c("var/channel") %]","locale":"[% lang %]"}' > ../tbb_version.json
@@ -387,10 +412,10 @@ cp $rootdir/[% c('input_files_by_name/firefox') %]/mar-tools-*.zip "$OUTDIR"/
       [% END -%]
 
       [% IF c("var/linux") %]
-        [% SET tardir = 'tor-browser_' _ lang;
+        [% SET tardir = c("var/project-name") _ '_' _ lang;
           c('tar', {
                 tar_src => [ tardir ],
-                tar_args => '-cJf $OUTDIR/tor-browser-' _ c("var/mar_osname") _ '-' _ c("var/torbrowser_version") _ '_' _ lang _ '.tar.xz',
+                tar_args => '-cJf $OUTDIR/' _ c("var/project-name") _ '-' _ c("var/mar_osname") _ '-' _ c("var/torbrowser_version") _ '_' _ lang _ '.tar.xz',
             }) %]
       [% ELSIF c("var/osx") %]
         [% # Rename the Japanese bundle to not confuse users
@@ -399,18 +424,18 @@ cp $rootdir/[% c('input_files_by_name/firefox') %]/mar-tools-*.zip "$OUTDIR"/
            END; -%]
         [% c('var/ddmg', {
           dmg_src => tbdir,
-          dmg_out => '$OUTDIR/TorBrowser-' _ c("var/torbrowser_version") _ '-osx64_' _ lang _ '.dmg',
+          dmg_out => '$OUTDIR/' _ c('var/ProjectName') _ '-' _ c("var/torbrowser_version") _ '-osx64_' _ lang _ '.dmg',
         }) %]
       [% ELSIF c("var/windows") %]
         find "[% tbdir %]" -exec [% c("touch") %] {} \;
         pushd "[% tbdir %]"
-        makensis torbrowser.nsi
+        makensis [% c("var/projectname") %].nsi
         # Working around NSIS braindamage
-        mv torbrowser-install.exe torbrowser-install-tmp.exe
+        mv [% c("var/projectname") %]-install.exe browser-install-tmp.exe
         python3 $rootdir/pe_checksum_fix.py
-        mv torbrowser-install-tmp2.exe torbrowser-install.exe
-        rm torbrowser-install-tmp.exe
-        mv torbrowser-install.exe $OUTDIR/torbrowser-install[% IF c("var/windows-x86_64") %]-win64[% END %]-[% c("var/torbrowser_version") %]_[% lang %].exe
+        mv browser-install-tmp2.exe [% c("var/projectname") %]-install.exe
+        rm browser-install-tmp.exe
+        mv [% c("var/projectname") %]-install.exe $OUTDIR/[% c("var/projectname") %]-install[% IF c("var/windows-x86_64") %]-win64[% END %]-[% c("var/torbrowser_version") %]_[% lang %].exe
         popd
       [% END %]
       rm -rf [% tbdir %]
diff --git a/projects/browser/build.android b/projects/browser/build.android
index 2e1b11f..589d117 100644
--- a/projects/browser/build.android
+++ b/projects/browser/build.android
@@ -3,9 +3,9 @@
 [% pc(c('var/compiler'), 'var/setup', { compiler_tarfile => c('input_files_by_name/' _ c('var/compiler')) }) %]
 assets_dir=assets
 ext_dir=$assets_dir/extensions
-qa_apk=[% dest_dir %]/[% c('filename') %]/tor-browser-[% c("version") %]-[% c("var/osname") %]-multi-qa.apk
+qa_apk=[% dest_dir %]/[% c('filename') %]/[% c("var/project-name") %]-[% c("version") %]-[% c("var/osname") %]-multi-qa.apk
 apk=$rootdir/fenix/app-[% c("var/abi") %]-*.apk
-test_out_apk=[% dest_dir %]/[% c('filename') %]/tor-browser-[% c("version") %]-[% c("var/osname") %]-androidTest.apk
+test_out_apk=[% dest_dir %]/[% c('filename') %]/[% c("var/project-name") %]-[% c("version") %]-[% c("var/osname") %]-androidTest.apk
 test_in_apk=$rootdir/fenix/app-*-androidTest.apk
 
 tar xavf $rootdir/[% c('input_files_by_name/fenix') %]
diff --git a/projects/browser/config b/projects/browser/config
index 31e2cc1..ae820f8 100644
--- a/projects/browser/config
+++ b/projects/browser/config
@@ -1,6 +1,6 @@
 # vim: filetype=yaml sw=2
 version: '[% c("var/torbrowser_version") %]'
-filename: 'tor-browser-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %]'
+filename: '[% c("var/project-name") %]-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %]'
 container:
   use_container: 1
 
@@ -46,6 +46,12 @@ targets:
     build: '[% INCLUDE build.android %]'
     var:
       verify_allowed_addons: 1
+  torbrowser:
+    var:
+      prefs_file: 000-tor-browser.js
+  basebrowser:
+    var:
+      prefs_file: 001-base-profile.js
 
 input_files:
   - project: container-image
@@ -59,7 +65,7 @@ input_files:
     enable: '[% c("var/android") %]'
   - project: tor
     name: tor
-    enable: '[% ! c("var/android") %]'
+    enable: '[% ! c("var/android") && c("var/tor-browser") %]'
   - project: firefox-langpacks
     name: firefox-langpacks
     enable: '[% ! c("var/testbuild") && ! c("var/android") %]'
@@ -71,19 +77,15 @@ input_files:
     enable: '[% ! c("var/android") %]'
   - project: obfs4
     name: obfs4
-    enable: '[% ! c("var/android") %]'
+    enable: '[% ! c("var/android") && c("var/tor-browser") %]'
   - project: snowflake
     name: snowflake
-    enable: '[% ! c("var/android") %]'
+    enable: '[% ! c("var/android") && c("var/tor-browser") %]'
   - filename: Bundle-Data
     enable: '[% ! c("var/android") %]'
   - URL: https://addons.mozilla.org/firefox/downloads/file/3954910/noscript-11.4.6.xpi
     name: noscript
     sha256sum: 5f917e54a52d7269959976ebb6eb41f1a14c047c30d5f7bd6a401fe4126f0b3a
-  - filename: 'RelativeLink/start-tor-browser.desktop'
-    enable: '[% c("var/linux") %]'
-  - filename: 'RelativeLink/execdesktop'
-    enable: '[% c("var/linux") %]'
   - filename: 'gtk3-settings.ini'
     enable: '[% c("var/linux") %]'
   - project: libdmg-hfsplus
@@ -118,11 +120,11 @@ input_files:
   - filename: verify_allowed_addons.py
     enable: '[% c("var/android") && c("var/verify_allowed_addons") %]'
   - filename: bridges_list.obfs4.txt
-    enable: '[% ! c("var/android") %]'
+    enable: '[% ! c("var/android") && c("var/tor-browser") %]'
   - filename: bridges_list.meek-azure.txt
-    enable: '[% ! c("var/android") %]'
+    enable: '[% ! c("var/android") && c("var/tor-browser") %]'
   - filename: bridges_list.snowflake.txt
-    enable: '[% ! c("var/android") %]'
+    enable: '[% ! c("var/android") && c("var/tor-browser") %]'
   - project: manual
     name: manual
-    enable: '[% ! c("var/android") %]'
+    enable: '[% ! c("var/android") && c("var/tor-browser") %]'
diff --git a/projects/browser/pe_checksum_fix.py b/projects/browser/pe_checksum_fix.py
index 73cd009..1ee56ad 100755
--- a/projects/browser/pe_checksum_fix.py
+++ b/projects/browser/pe_checksum_fix.py
@@ -45,7 +45,7 @@ Thanks to a cypherpunk for this workaround idea.
 
 import pefile;
 
-f = open('torbrowser-install-tmp.exe', 'rb')
+f = open('browser-install-tmp.exe', 'rb')
 exe = f.read()
 f.close()
 remainder = len(exe) % 8
@@ -53,4 +53,4 @@ if remainder > 0:
     exe += bytes('\0' * (8 - remainder), 'utf-8')
 pef = pefile.PE(data=exe, fast_load=True)
 pef.OPTIONAL_HEADER.CheckSum = pef.generate_checksum()
-pef.write(filename='torbrowser-install-tmp2.exe')
+pef.write(filename='browser-install-tmp2.exe')
diff --git a/projects/browser/windows-installer/basebrowser.ico b/projects/browser/windows-installer/basebrowser.ico
new file mode 100644
index 0000000..cce2759
Binary files /dev/null and b/projects/browser/windows-installer/basebrowser.ico differ
diff --git a/projects/browser/windows-installer/basebrowser.nsi b/projects/browser/windows-installer/basebrowser.nsi
new file mode 100644
index 0000000..5d3e858
--- /dev/null
+++ b/projects/browser/windows-installer/basebrowser.nsi
@@ -0,0 +1,185 @@
+;NSIS Installer for Base Browser Bundle
+;Written by Moritz Bartl
+;released under Public Domain
+
+;--------------------------------
+;Modern" UI
+
+  !include "MUI2.nsh"
+  !include "LogicLib.nsh"
+  !include "WinVer.nsh"
+
+;--------------------------------
+;General
+ 
+  ; location of Base Browser bundle to put into installer
+  !define TBBSOURCE ".\Base Browser\"  
+
+  Name "Base Browser"
+  OutFile "basebrowser-install.exe"
+
+  ;Default installation folder
+  InstallDir "$DESKTOP\Base Browser"
+  
+  ;Best (but slowest) compression
+  SetCompressor /SOLID lzma
+  SetCompressorDictSize 32
+
+  ;Request application privileges for Windows Vista
+  RequestExecutionLevel user
+
+;--------------------------------
+;Interface Configuration
+
+  !define MUI_ICON   "basebrowser.ico"
+  !define MUI_ABORTWARNING
+
+;--------------------------------
+;Modern UI settings
+  !define MUI_FINISHPAGE_NOREBOOTSUPPORT     ; we don't require a reboot
+  !define MUI_FINISHPAGE_RUN
+  !define MUI_FINISHPAGE_RUN_FUNCTION "StartBaseBrowser"
+  !define MUI_FINISHPAGE_SHOWREADME ; misuse for option to create shortcut; less ugly than MUI_PAGE_COMPONENTS
+  !define MUI_FINISHPAGE_SHOWREADME_TEXT "&Add Start Menu && Desktop shortcuts"
+  !define MUI_FINISHPAGE_SHOWREADME_FUNCTION "CreateShortCuts"
+;--------------------------------
+;Pages
+
+  !define MUI_PAGE_CUSTOMFUNCTION_LEAVE CheckIfTargetDirectoryExists
+  !insertmacro MUI_PAGE_DIRECTORY
+  !insertmacro MUI_PAGE_INSTFILES
+  !insertmacro MUI_PAGE_FINISH
+
+;--------------------------------
+;Languages
+
+  !insertmacro MUI_LANGUAGE "English" ;first language is the default language
+  !insertmacro MUI_LANGUAGE "French"
+  !insertmacro MUI_LANGUAGE "German"
+  !insertmacro MUI_LANGUAGE "Spanish"
+  !insertmacro MUI_LANGUAGE "SpanishInternational"
+  !insertmacro MUI_LANGUAGE "SimpChinese"
+  !insertmacro MUI_LANGUAGE "TradChinese"
+  !insertmacro MUI_LANGUAGE "Japanese"
+  !insertmacro MUI_LANGUAGE "Korean"
+  !insertmacro MUI_LANGUAGE "Italian"
+  !insertmacro MUI_LANGUAGE "Dutch"
+  !insertmacro MUI_LANGUAGE "Danish"
+  !insertmacro MUI_LANGUAGE "Swedish"
+  !insertmacro MUI_LANGUAGE "Norwegian"
+  !insertmacro MUI_LANGUAGE "NorwegianNynorsk"
+  !insertmacro MUI_LANGUAGE "Finnish"
+  !insertmacro MUI_LANGUAGE "Greek"
+  !insertmacro MUI_LANGUAGE "Russian"
+  !insertmacro MUI_LANGUAGE "Portuguese"
+  !insertmacro MUI_LANGUAGE "PortugueseBR"
+  !insertmacro MUI_LANGUAGE "Polish"
+  !insertmacro MUI_LANGUAGE "Ukrainian"
+  !insertmacro MUI_LANGUAGE "Czech"
+  !insertmacro MUI_LANGUAGE "Slovak"
+  !insertmacro MUI_LANGUAGE "Croatian"
+  !insertmacro MUI_LANGUAGE "Bulgarian"
+  !insertmacro MUI_LANGUAGE "Hungarian"
+  !insertmacro MUI_LANGUAGE "Thai"
+  !insertmacro MUI_LANGUAGE "Romanian"
+  !insertmacro MUI_LANGUAGE "Latvian"
+  !insertmacro MUI_LANGUAGE "Macedonian"
+  !insertmacro MUI_LANGUAGE "Estonian"
+  !insertmacro MUI_LANGUAGE "Turkish"
+  !insertmacro MUI_LANGUAGE "Lithuanian"
+  !insertmacro MUI_LANGUAGE "Slovenian"
+  !insertmacro MUI_LANGUAGE "Serbian"
+  !insertmacro MUI_LANGUAGE "SerbianLatin"
+  !insertmacro MUI_LANGUAGE "Arabic"
+  !insertmacro MUI_LANGUAGE "Farsi"
+  !insertmacro MUI_LANGUAGE "Hebrew"
+  !insertmacro MUI_LANGUAGE "Indonesian"
+  !insertmacro MUI_LANGUAGE "Mongolian"
+  !insertmacro MUI_LANGUAGE "Luxembourgish"
+  !insertmacro MUI_LANGUAGE "Albanian"
+  !insertmacro MUI_LANGUAGE "Breton"
+  !insertmacro MUI_LANGUAGE "Belarusian"
+  !insertmacro MUI_LANGUAGE "Icelandic"
+  !insertmacro MUI_LANGUAGE "Malay"
+  !insertmacro MUI_LANGUAGE "Bosnian"
+  !insertmacro MUI_LANGUAGE "Kurdish"
+  !insertmacro MUI_LANGUAGE "Irish"
+  !insertmacro MUI_LANGUAGE "Uzbek"
+  !insertmacro MUI_LANGUAGE "Galician"
+  !insertmacro MUI_LANGUAGE "Afrikaans"
+  !insertmacro MUI_LANGUAGE "Catalan"
+  !insertmacro MUI_LANGUAGE "Esperanto"
+
+;--------------------------------
+;Multi Language support: Read strings from separate file
+
+; !include torbrowser-langstrings.nsi
+
+;--------------------------------
+;Reserve Files
+  
+  ;If you are using solid compression, files that are required before
+  ;the actual installation should be stored first in the data block,
+  ;because this will make your installer start faster.
+  
+  !insertmacro MUI_RESERVEFILE_LANGDLL
+
+;--------------------------------
+;Installer Sections
+
+Section "Base Browser Bundle" SecTBB
+
+  SetOutPath "$INSTDIR"
+  File /r "${TBBSOURCE}\*.*"
+  SetOutPath "$INSTDIR\Browser"
+  CreateShortCut "$INSTDIR\Start Base Browser.lnk" "$INSTDIR\Browser\firefox.exe"
+
+SectionEnd
+
+Function CreateShortcuts
+
+  CreateShortCut "$SMPROGRAMS\Start Base Browser.lnk" "$INSTDIR\Browser\firefox.exe" 
+  CreateShortCut "$DESKTOP\Start Base Browser.lnk" "$INSTDIR\Browser\firefox.exe"
+
+FunctionEnd
+;--------------------------------
+;Installer Functions
+
+Function .onInit
+
+  ${IfNot} ${AtLeastWin7}
+    MessageBox MB_USERICON|MB_OK "Base Browser requires at least Windows 7"
+    SetErrorLevel 1
+    Quit
+  ${EndIf}
+
+  ; Don't install on systems that don't support SSE2. The parameter value of
+  ; 10 is for PF_XMMI64_INSTRUCTIONS_AVAILABLE which will check whether the
+  ; SSE2 instruction set is available.
+  System::Call "kernel32::IsProcessorFeaturePresent(i 10)i .R7"
+
+  ${If} "$R7" == "0"
+    MessageBox MB_OK|MB_ICONSTOP "Sorry, Base Browser can't be installed. This version of Base Browser requires a processor with SSE2 support."
+    Abort
+  ${EndIf}
+
+  !insertmacro MUI_LANGDLL_DISPLAY
+
+FunctionEnd
+
+;--------------------------------
+;Helper Functions
+
+Function CheckIfTargetDirectoryExists
+${If} ${FileExists} "$INSTDIR\*.*"
+ MessageBox MB_YESNO "The destination directory already exists. You can try to upgrade the Base Browser Bundle, but if you run into any problems, use a new directory instead. Continue?" IDYES NoAbort
+   Abort
+ NoAbort:
+${EndIf}
+FunctionEnd
+
+
+Function StartBaseBrowser
+ExecShell "open" "$INSTDIR/Start Base Browser.lnk"
+FunctionEnd
+

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the tbb-commits mailing list