-
-
Notifications
You must be signed in to change notification settings - Fork 65
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Added nsis template; Bumped version to 0.11.12 Signed-off-by: pmx <mingl0280@gmail.com>
- Loading branch information
Showing
2 changed files
with
266 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,260 @@ | ||
!define PRODUCT_NAME "[[ib.appname]]" | ||
!define PRODUCT_VERSION "[[ib.version]]" | ||
!define PY_VERSION "[[ib.py_version]]" | ||
!define PY_MAJOR_VERSION "[[ib.py_major_version]]" | ||
!define BITNESS "[[ib.py_bitness]]" | ||
!define ARCH_TAG "[[arch_tag]]" | ||
!define INSTALLER_NAME "[[ib.installer_name]]" | ||
!define PRODUCT_ICON "[[icon]]" | ||
|
||
; Marker file to tell the uninstaller that it's a user installation | ||
!define USER_INSTALL_MARKER _user_install_marker | ||
|
||
SetCompressor lzma | ||
|
||
!if "${NSIS_PACKEDVERSION}" >= 0x03000000 | ||
Unicode true | ||
ManifestDPIAware true | ||
!endif | ||
|
||
!define MULTIUSER_EXECUTIONLEVEL Highest | ||
!define MULTIUSER_INSTALLMODE_DEFAULT_CURRENTUSER | ||
!define MULTIUSER_MUI | ||
!define MULTIUSER_INSTALLMODE_COMMANDLINE | ||
!define MULTIUSER_INSTALLMODE_INSTDIR "[[ib.appname]]" | ||
[% if ib.py_bitness == 64 %] | ||
!define MULTIUSER_INSTALLMODE_FUNCTION correct_prog_files | ||
[% endif %] | ||
!include MultiUser.nsh | ||
!include FileFunc.nsh | ||
|
||
[% block modernui %] | ||
; Modern UI installer stuff | ||
!include "MUI2.nsh" | ||
!include "WinVer.nsh" | ||
!define MUI_ABORTWARNING | ||
!define MUI_ICON "[[icon]]" | ||
!define MUI_UNICON "[[icon]]" | ||
|
||
; UI pages | ||
[% block ui_pages %] | ||
!insertmacro MUI_PAGE_WELCOME | ||
[% if license_file %] | ||
!insertmacro MUI_PAGE_LICENSE [[license_file]] | ||
[% endif %] | ||
!insertmacro MULTIUSER_PAGE_INSTALLMODE | ||
!insertmacro MUI_PAGE_DIRECTORY | ||
!insertmacro MUI_PAGE_INSTFILES | ||
!insertmacro MUI_PAGE_FINISH | ||
[% endblock ui_pages %] | ||
!insertmacro MUI_LANGUAGE "English" | ||
[% endblock modernui %] | ||
|
||
Name "${PRODUCT_NAME} ${PRODUCT_VERSION}" | ||
OutFile "${INSTALLER_NAME}" | ||
ShowInstDetails show | ||
|
||
Var cmdLineInstallDir | ||
|
||
; Product Information | ||
|
||
VIProductVersion "[[ib.version]].0" | ||
VIAddVersionKey /LANG=${LANG_ENGLISH} "ProductName" "[[ib.appname]] installer" | ||
VIAddVersionKey /LANG=${LANG_ENGLISH} "ProductVersion" "[[ib.version]]" | ||
VIAddVersionKey /LANG=${LANG_ENGLISH} "LegalCopyright" "Copyright (c) 2020 [[ib.publisher]]" | ||
; This 2020 should be removed but pynsist doesn't support it. | ||
VIAddVersionKey /LANG=${LANG_ENGLISH} "FileDescription" "[[ib.appname]] installer" | ||
VIAddVersionKey /LANG=${LANG_ENGLISH} "FileVersion" "[[ib.version]]" | ||
|
||
Section -SETTINGS | ||
SetOutPath "$INSTDIR" | ||
SetOverwrite ifnewer | ||
SectionEnd | ||
|
||
[% block sections %] | ||
|
||
Section "!${PRODUCT_NAME}" sec_app | ||
SetRegView [[ib.py_bitness]] | ||
SectionIn RO | ||
File ${PRODUCT_ICON} | ||
SetOutPath "$INSTDIR\pkgs" | ||
File /r "pkgs\*.*" | ||
SetOutPath "$INSTDIR" | ||
|
||
; Marker file for per-user install | ||
StrCmp $MultiUser.InstallMode CurrentUser 0 +3 | ||
FileOpen $0 "$INSTDIR\${USER_INSTALL_MARKER}" w | ||
FileClose $0 | ||
SetFileAttributes "$INSTDIR\${USER_INSTALL_MARKER}" HIDDEN | ||
|
||
[% block install_files %] | ||
; Install files | ||
[% for destination, group in grouped_files %] | ||
SetOutPath "[[destination]]" | ||
[% for file in group %] | ||
File "[[ file ]]" | ||
[% endfor %] | ||
[% endfor %] | ||
|
||
; Install directories | ||
[% for dir, destination in ib.install_dirs %] | ||
SetOutPath "[[ pjoin(destination, dir) ]]" | ||
File /r "[[dir]]\*.*" | ||
[% endfor %] | ||
[% endblock install_files %] | ||
|
||
[% block install_shortcuts %] | ||
; Install shortcuts | ||
; The output path becomes the working directory for shortcuts | ||
SetOutPath "%HOMEDRIVE%\%HOMEPATH%" | ||
[% if single_shortcut %] | ||
[% for scname, sc in ib.shortcuts.items() %] | ||
CreateShortCut "$SMPROGRAMS\[[scname]].lnk" "[[sc['target'] ]]" \ | ||
'[[ sc['parameters'] ]]' "$INSTDIR\[[ sc['icon'] ]]" | ||
[% endfor %] | ||
[% else %] | ||
[# Multiple shortcuts: create a directory for them #] | ||
CreateDirectory "$SMPROGRAMS\${PRODUCT_NAME}" | ||
[% for scname, sc in ib.shortcuts.items() %] | ||
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\[[scname]].lnk" "[[sc['target'] ]]" \ | ||
'[[ sc['parameters'] ]]' "$INSTDIR\[[ sc['icon'] ]]" | ||
[% endfor %] | ||
[% endif %] | ||
SetOutPath "$INSTDIR" | ||
[% endblock install_shortcuts %] | ||
|
||
[% block install_commands %] | ||
[% if has_commands %] | ||
DetailPrint "Setting up command-line launchers..." | ||
|
||
StrCmp $MultiUser.InstallMode CurrentUser 0 AddSysPathSystem | ||
; Add to PATH for current user | ||
nsExec::ExecToLog '[[ python ]] -Es "$INSTDIR\_system_path.py" add_user "$INSTDIR\bin"' | ||
GoTo AddedSysPath | ||
AddSysPathSystem: | ||
; Add to PATH for all users | ||
nsExec::ExecToLog '[[ python ]] -Es "$INSTDIR\_system_path.py" add "$INSTDIR\bin"' | ||
AddedSysPath: | ||
[% endif %] | ||
[% endblock install_commands %] | ||
|
||
; Byte-compile Python files. | ||
DetailPrint "Byte-compiling Python modules..." | ||
nsExec::ExecToLog '[[ python ]] -m compileall -q "$INSTDIR\pkgs"' | ||
WriteUninstaller $INSTDIR\uninstall.exe | ||
; Add ourselves to Add/remove programs | ||
WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" \ | ||
"DisplayName" "${PRODUCT_NAME}" | ||
WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" \ | ||
"UninstallString" '"$INSTDIR\uninstall.exe"' | ||
WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" \ | ||
"InstallLocation" "$INSTDIR" | ||
WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" \ | ||
"DisplayIcon" "$INSTDIR\${PRODUCT_ICON}" | ||
[% if ib.publisher is not none %] | ||
WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" \ | ||
"Publisher" "[[ib.publisher]]" | ||
[% endif %] | ||
WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" \ | ||
"DisplayVersion" "${PRODUCT_VERSION}" | ||
WriteRegDWORD SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" \ | ||
"NoModify" 1 | ||
WriteRegDWORD SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" \ | ||
"NoRepair" 1 | ||
|
||
; Check if we need to reboot | ||
IfRebootFlag 0 noreboot | ||
MessageBox MB_YESNO "A reboot is required to finish the installation. Do you wish to reboot now?" \ | ||
/SD IDNO IDNO noreboot | ||
Reboot | ||
noreboot: | ||
SectionEnd | ||
|
||
Section "Uninstall" | ||
SetRegView [[ib.py_bitness]] | ||
SetShellVarContext all | ||
IfFileExists "$INSTDIR\${USER_INSTALL_MARKER}" 0 +3 | ||
SetShellVarContext current | ||
Delete "$INSTDIR\${USER_INSTALL_MARKER}" | ||
|
||
Delete $INSTDIR\uninstall.exe | ||
Delete "$INSTDIR\${PRODUCT_ICON}" | ||
RMDir /r "$INSTDIR\pkgs" | ||
|
||
; Remove ourselves from %PATH% | ||
[% block uninstall_commands %] | ||
[% if has_commands %] | ||
nsExec::ExecToLog '[[ python ]] -Es "$INSTDIR\_system_path.py" remove "$INSTDIR\bin"' | ||
[% endif %] | ||
[% endblock uninstall_commands %] | ||
|
||
[% block uninstall_files %] | ||
; Uninstall files | ||
[% for file, destination in ib.install_files %] | ||
Delete "[[pjoin(destination, file)]]" | ||
[% endfor %] | ||
; Uninstall directories | ||
[% for dir, destination in ib.install_dirs %] | ||
RMDir /r "[[pjoin(destination, dir)]]" | ||
[% endfor %] | ||
[% endblock uninstall_files %] | ||
|
||
[% block uninstall_shortcuts %] | ||
; Uninstall shortcuts | ||
[% if single_shortcut %] | ||
[% for scname in ib.shortcuts %] | ||
Delete "$SMPROGRAMS\[[scname]].lnk" | ||
[% endfor %] | ||
[% else %] | ||
RMDir /r "$SMPROGRAMS\${PRODUCT_NAME}" | ||
[% endif %] | ||
[% endblock uninstall_shortcuts %] | ||
RMDir $INSTDIR | ||
DeleteRegKey SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" | ||
SectionEnd | ||
|
||
[% endblock sections %] | ||
|
||
; Functions | ||
|
||
Function .onMouseOverSection | ||
; Find which section the mouse is over, and set the corresponding description. | ||
FindWindow $R0 "#32770" "" $HWNDPARENT | ||
GetDlgItem $R0 $R0 1043 ; description item (must be added to the UI) | ||
|
||
[% block mouseover_messages %] | ||
StrCmp $0 ${sec_app} "" +2 | ||
SendMessage $R0 ${WM_SETTEXT} 0 "STR:${PRODUCT_NAME}" | ||
|
||
[% endblock mouseover_messages %] | ||
FunctionEnd | ||
|
||
Function .onInit | ||
; Multiuser.nsh breaks /D command line parameter. Parse /INSTDIR instead. | ||
; Cribbing from https://nsis-dev.github.io/NSIS-Forums/html/t-299280.html | ||
${GetParameters} $0 | ||
ClearErrors | ||
${GetOptions} '$0' "/INSTDIR=" $1 | ||
IfErrors +2 ; Error means flag not found | ||
StrCpy $cmdLineInstallDir $1 | ||
ClearErrors | ||
|
||
!insertmacro MULTIUSER_INIT | ||
|
||
; If cmd line included /INSTDIR, override the install dir set by MultiUser | ||
StrCmp $cmdLineInstallDir "" +2 | ||
StrCpy $INSTDIR $cmdLineInstallDir | ||
FunctionEnd | ||
|
||
Function un.onInit | ||
!insertmacro MULTIUSER_UNINIT | ||
FunctionEnd | ||
|
||
[% if ib.py_bitness == 64 %] | ||
Function correct_prog_files | ||
; The multiuser machinery doesn't know about the different Program files | ||
; folder for 64-bit applications. Override the install dir it set. | ||
StrCmp $MultiUser.InstallMode AllUsers 0 +2 | ||
StrCpy $INSTDIR "$PROGRAMFILES64\${MULTIUSER_INSTALLMODE_INSTDIR}" | ||
FunctionEnd | ||
[% endif %] |