Skip to content
Snippets Groups Projects
Verified Commit 1a571c59 authored by Pier Angelo Vendrame's avatar Pier Angelo Vendrame :jack_o_lantern:
Browse files

Bug 41065: Cleanup the NSIS script

Improve the formatting of the installer, and update the language list
to match the one in rbm.conf (even though it would be good to keep the
lists synchronized automatically).

Also, include the channel name in the displayed name and in the default
install directory (except for release).

Since we are changing many lines, I took the ocasion to switch to LF
line endings (NSIS accepts them).
parent 83a1a381
Branches
Tags
1 merge request!897Bug 41065: Cleanup the NSIS script
......@@ -305,11 +305,6 @@ done
cat > $distdir/windows-installer/browser-portable.nsi << 'BROWSER_NSI'
[% INCLUDE 'windows-installer.nsi' %]
BROWSER_NSI
[% IF c('var/mullvad-browser') -%]
cat > $distdir/windows-installer/browser-system.nsi << 'BROWSER_NSI'
[% INCLUDE 'windows-installer.nsi' system_install_mode = 1 %]
BROWSER_NSI
[% END -%]
mv ${TB_STAGE_DIR} $distdir/windows-installer/"[% c('var/Project_Name') %]"
mv $distdir/windows-installer ${TB_STAGE_DIR}
[% END %]
......@@ -389,11 +384,6 @@ cd $distdir
# Working around NSIS braindamage
python3 $rootdir/pe_checksum_fix.py browser-install.exe
mv browser-install.exe $OUTDIR/[% c("var/project-name") %]-[% c("var/osname") %]-portable-[% c("var/torbrowser_version") %].exe
[% IF c('var/mullvad-browser') -%]
makensis browser-system.nsi
python3 $rootdir/pe_checksum_fix.py browser-install.exe
mv browser-install.exe $OUTDIR/[% c("var/project-name") %]-[% c("var/osname") %]-install-[% c("var/torbrowser_version") %].exe
[% END -%]
popd
[% END %]
rm -rf $distdir/${PKG_DIR}
......
......
; NSIS Installer for Tor/Base/Mullvad Browser
;Written by Moritz Bartl
;released under Public Domain
; Based on NSIS examples by Joost Verburg.
; Originally adapted to Tor Browser by Moritz Bartl
; https://github.com/moba/tbb-windows-installer
; Released under the zlib/libpng license.
;--------------------------------
;Modern UI
!include "FileFunc.nsh"
!include "MUI2.nsh"
!include "LogicLib.nsh"
!include "MUI2.nsh"
!include "WinVer.nsh"
;--------------------------------
; General
; Location of Tor/Base/Mullvad Browser to put into installer
!define PROGRAM_SOURCE ".\[% c('var/Project_Name') %]\"
Name "[% c('var/Project_Name') %]"
[% IF c("var/channel") == "release";
SET display_name = c('var/Project_Name');
ELSIF c("var/testbuild");
SET display_name = c('var/Project_Name') _ " Testbuild";
ELSE;
SET display_name = c('var/Project_Name_Channel');
END
-%]
Name "[% display_name %]"
OutFile "browser-install.exe"
; Default installation folder
[% IF system_install_mode -%]
InstallDir "$PROGRAMFILES\[% c('var/Project_Name') %]"
[% ELSE -%]
InstallDir "$DESKTOP\[% c('var/Project_Name') %]"
[% END -%]
InstallDir "$DESKTOP\[% display_name %]"
; Best (but slowest) compression
SetCompressor /SOLID lzma
SetCompressorDictSize 32
;Request application privileges for Windows Vista
[% IF system_install_mode -%]
RequestExecutionLevel admin
[% ELSE -%]
; Do not require elevated privileges
RequestExecutionLevel user
[% END -%]
; Support HiDPI displays
ManifestDPIAware true
[% IF system_install_mode -%]
;Registry keys to uninstall system-wide installs
!define UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\[% c('var/ProjectName') %]"
[% END -%]
;--------------------------------
; Metadata
VIProductVersion "[% pc("firefox", "var/browser_series") %].0.0"
VIAddVersionKey "ProductName" "[% c('var/Project_Name') %]"
VIProductVersion "[% pc('firefox', 'var/browser_series') %].0.0"
VIAddVersionKey "ProductName" "[% display_name %]"
VIAddVersionKey "ProductVersion" "[% c('var/torbrowser_version') %]"
VIAddVersionKey "FileDescription" "[% c('var/Project_Name') %][% IF system_install_mode -%] System[% END -%] Installer"
VIAddVersionKey "LegalCopyright" "© [% pc("firefox", "var/copyright_year") %] [% IF c('var/mullvad-browser') -%]Mullvad, Tor Browser and Mozilla Developers[% ELSE -%]The Tor Project[% END -%]"
VIAddVersionKey "FileDescription" "[% display_name %] Portable Installer"
VIAddVersionKey "LegalCopyright" "© [% pc('firefox', 'var/copyright_year') %] [% IF c('var/mullvad-browser') %]Mullvad, Tor Browser and Mozilla Developers[% ELSE %]The Tor Project[% END %]"
;--------------------------------
; Interface Configuration
!define MUI_ICON "[% c('var/projectname') %][% IF !c('var/base-browser') -%]-[% c('var/channel') %][% END -%].ico"
!define MUI_ICON "[% c('var/projectname') %][% IF !c('var/base-browser') %]-[% c('var/channel') %][% END %].ico"
!define MUI_ABORTWARNING
;--------------------------------
; Modern UI settings
!define MUI_FINISHPAGE_NOREBOOTSUPPORT ; we don't require a reboot
!define MUI_FINISHPAGE_NOREBOOTSUPPORT ; Reboot not required
!define MUI_FINISHPAGE_RUN
!define MUI_FINISHPAGE_RUN_FUNCTION "StartBrowser"
!define MUI_FINISHPAGE_SHOWREADME ; misuse for option to create shortcut; less ugly than MUI_PAGE_COMPONENTS
; Misuse the option to show the readme to create the shortcuts.
; Less ugly than MUI_PAGE_COMPONENTS.
!define MUI_FINISHPAGE_SHOWREADME
!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
......@@ -78,68 +73,44 @@
;--------------------------------
; 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 [% c('var/projectname') %]-langstrings.nsi
!insertmacro MUI_LANGUAGE "English" ; First language is the default language
!insertmacro MUI_LANGUAGE "Arabic" ; ar
!insertmacro MUI_LANGUAGE "Catalan" ; ca
!insertmacro MUI_LANGUAGE "Czech" ; cs
!insertmacro MUI_LANGUAGE "Danish" ; da
!insertmacro MUI_LANGUAGE "German" ; de
!insertmacro MUI_LANGUAGE "Greek" ; el
!insertmacro MUI_LANGUAGE "Spanish" ; es-ES
!insertmacro MUI_LANGUAGE "Farsi" ; fa
!insertmacro MUI_LANGUAGE "Finnish" ; fi
!insertmacro MUI_LANGUAGE "French" ; fr
!insertmacro MUI_LANGUAGE "ScotsGaelic" ; ga-IE
!insertmacro MUI_LANGUAGE "Hebrew" ; he
!insertmacro MUI_LANGUAGE "Hungarian" ; hu
!insertmacro MUI_LANGUAGE "Indonesian"; id
!insertmacro MUI_LANGUAGE "Icelandic" ; is
!insertmacro MUI_LANGUAGE "Italian" ; it
!insertmacro MUI_LANGUAGE "Japanese" ; ja
!insertmacro MUI_LANGUAGE "Georgian" ; ka
!insertmacro MUI_LANGUAGE "Korean" ; ko
!insertmacro MUI_LANGUAGE "Lithuanian" ; lt
!insertmacro MUI_LANGUAGE "Macedonian" ; mk
!insertmacro MUI_LANGUAGE "Malay" ; ms
; Burmese - my: not available on NSIS
!insertmacro MUI_LANGUAGE "Norwegian" ; nb-NO
!insertmacro MUI_LANGUAGE "Dutch" ; nl
!insertmacro MUI_LANGUAGE "Polish" ; pl
!insertmacro MUI_LANGUAGE "PortugueseBR" ; pt-BR
!insertmacro MUI_LANGUAGE "Romanian" ; ro
!insertmacro MUI_LANGUAGE "Russian" ; ru
!insertmacro MUI_LANGUAGE "Albanian" ; sq
!insertmacro MUI_LANGUAGE "Swedish" ; sv-SE
!insertmacro MUI_LANGUAGE "Thai" ; th
!insertmacro MUI_LANGUAGE "Turkish" ; tr
!insertmacro MUI_LANGUAGE "Ukrainian" ; uk
!insertmacro MUI_LANGUAGE "Vietnamese" ; vi
!insertmacro MUI_LANGUAGE "SimpChinese" ; zh-hans, zh-cn
!insertmacro MUI_LANGUAGE "TradChinese" ; zh-hant, zh-tw
;--------------------------------
; Reserve Files
......@@ -153,61 +124,16 @@
;--------------------------------
; Installer Sections
Section "[% c('var/Project_Name') %]" SecBrowser
Section "Browser" SecBrowser
SetOutPath "$INSTDIR"
[% IF !system_install_mode -%]
File /r "${PROGRAM_SOURCE}\*.*"
CreateShortCut "$INSTDIR\Start [% c('var/Project_Name') %].lnk" "$INSTDIR\Browser\[% c('var/exe_name') %].exe"
[% ELSE -%]
File /r "${PROGRAM_SOURCE}\Browser\*.*"
;Enable system-wide install in the browser
FileOpen $0 "$INSTDIR\system-install" w
FileClose $0
;Write the uninstaller
WriteUninstaller $INSTDIR\uninstall.exe
;Add the uninstaller to the control panel
WriteRegStr HKLM "${UNINST_KEY}" "DisplayName" "[% c('var/Project_Name') %]"
WriteRegStr HKLM "${UNINST_KEY}" "UninstallString" "$\"$INSTDIR\uninstall.exe$\""
WriteRegStr HKLM "${UNINST_KEY}" "QuietUninstallString" "$\"$INSTDIR\uninstall.exe$\" /S"
WriteRegStr HKLM "${UNINST_KEY}" "Publisher" "[% IF c('var/mullvad-browser') -%]Mullvad VPN[% ELSE -%]The Tor Project[% END -%]"
WriteRegStr HKLM "${UNINST_KEY}" "DisplayIcon" "$\"$INSTDIR\[% c('var/exe_name') %].exe$\""
WriteRegStr HKLM "${UNINST_KEY}" "DisplayVersion" "[% c('var/torbrowser_version') %]"
WriteRegDWORD HKLM "${UNINST_KEY}" "NoModify" "1"
WriteRegDWORD HKLM "${UNINST_KEY}" "NoRepair" "1"
${GetSize} "$INSTDIR" "/S=0K" $0 $1 $2
IntFmt $0 "0x%08X" $0
WriteRegDWORD HKLM "${UNINST_KEY}" "EstimatedSize" "$0"
[% END -%]
SectionEnd
[% IF system_install_mode -%]
Section "Uninstall"
RMDir /r "$INSTDIR"
DeleteRegKey HKLM "${UNINST_KEY}"
SetShellVarContext all
Delete "$SMPROGRAMS\[% c('var/Project_Name') %].lnk"
Delete "$DESKTOP\[% c('var/Project_Name') %].lnk"
CreateShortCut "$INSTDIR\[% display_name %].lnk" "$INSTDIR\Browser\[% c('var/exe_name') %].exe"
SectionEnd
[% END -%]
Function CreateShortcuts
[% IF system_install_mode -%]
SetShellVarContext all
[% END -%]
CreateShortCut "$SMPROGRAMS\[% c('var/Project_Name') %].lnk" "$INSTDIR\[% IF !system_install_mode -%]Browser\[% END -%][% c('var/exe_name') %].exe"
CreateShortCut "$DESKTOP\[% c('var/Project_Name') %].lnk" "$INSTDIR\[% IF !system_install_mode -%]Browser\[% END -%][% c('var/exe_name') %].exe"
FunctionEnd
;--------------------------------
; Installer Functions
Function .onInit
${IfNot} ${AtLeastWin7}
MessageBox MB_USERICON|MB_OK "[% c('var/Project_Name') %] requires at least Windows 7"
SetErrorLevel 1
......@@ -218,31 +144,26 @@ Function .onInit
; 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, [% c('var/Project_Name') %] can't be installed. This version of [% c('var/Project_Name') %] 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 [% c('var/Project_Name') %], but if you run into any problems, use a new directory instead. Continue?" IDYES NoAbort
MessageBox MB_YESNO "The destination directory already exists. Do you want to continue anyway?" IDYES +2
Abort
NoAbort:
${EndIf}
FunctionEnd
Function CreateShortcuts
CreateShortCut "$SMPROGRAMS\[% display_name %].lnk" "$INSTDIR\[% IF !system_install_mode -%]Browser\[% END -%][% c('var/exe_name') %].exe"
CreateShortCut "$DESKTOP\[% display_name %].lnk" "$INSTDIR\[% IF !system_install_mode -%]Browser\[% END -%][% c('var/exe_name') %].exe"
FunctionEnd
Function StartBrowser
[% IF !system_install_mode -%]
ExecShell "open" "$INSTDIR/Start [% c('var/Project_Name') %].lnk"
[% ELSE -%]
ExecShell "open" "$INSTDIR/[% c('var/exe_name') %].exe"
[% END -%]
ExecShell "open" "$INSTDIR/[% display_name %].lnk"
FunctionEnd
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment