282 lines
8.6 KiB
Text
282 lines
8.6 KiB
Text
Unicode true
|
|
|
|
!include LogicLib.nsh
|
|
|
|
!define PROJECT "Taisei Project"
|
|
!define PROJECT_URL "https://taisei-project.org/"
|
|
!define PUBLISHER "${PROJECT}"
|
|
!define APPNAME "${PROJECT}"
|
|
!define APPREGISTRY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}"
|
|
|
|
Name "${PROJECT}"
|
|
OutFile "@OUTPUT@"
|
|
|
|
; LZMA compression is *very* slow
|
|
SetCompressor /SOLID zlib
|
|
|
|
!define VERSION "@VERSION({string})@"
|
|
!define PATCH "0"
|
|
!define INST_DIR "@INSTALL_DIR@"
|
|
|
|
!if @TAISEI_64BIT@ == 1
|
|
!include x64.nsh
|
|
!define MULTIUSER_USE_PROGRAMFILES64
|
|
!endif
|
|
|
|
; All vars must be global...
|
|
Var STARTMENU_FOLDER
|
|
Var INSTALL_DESKTOP
|
|
|
|
; Multi-user handling
|
|
!define MULTIUSER_EXECUTIONLEVEL Highest
|
|
!define MULTIUSER_MUI
|
|
!define MULTIUSER_INSTALLMODE_COMMANDLINE
|
|
!define MULTIUSER_INSTALLMODE_INSTDIR "${APPNAME}"
|
|
!define MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_KEY "${APPREGISTRY}"
|
|
!define MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_VALUENAME "InstallLocation"
|
|
!define MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_KEY "${APPREGISTRY}"
|
|
!define MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_VALUENAME "InstallMode"
|
|
!include "MultiUser.nsh"
|
|
|
|
; UI
|
|
!include "MUI2.nsh"
|
|
|
|
!define MUI_HEADERIMAGE_BITMAP "@MESON_SOURCE_ROOT@/misc/icons/taisei.ico"
|
|
|
|
!insertmacro MUI_PAGE_WELCOME
|
|
!insertmacro MUI_PAGE_LICENSE "@MESON_BUILD_ROOT@/COPYING.txt"
|
|
|
|
!define MULTIUSER_INSTALLMODEPAGE_TEXT_ALLUSERS "Install globally for all users (required for replay file association)"
|
|
!insertmacro MULTIUSER_PAGE_INSTALLMODE
|
|
|
|
!insertmacro MUI_PAGE_DIRECTORY
|
|
|
|
!define MUI_STARTMENUPAGE_REGISTRY_ROOT "SHCTX"
|
|
!define MUI_STARTMENUPAGE_REGISTRY_KEY "${APPREGISTRY}"
|
|
!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "StartMenu"
|
|
!insertmacro MUI_PAGE_STARTMENU Application $STARTMENU_FOLDER
|
|
|
|
!insertmacro MUI_PAGE_INSTFILES
|
|
|
|
!define MUI_FINISHPAGE_NOAUTOCLOSE
|
|
!define MUI_FINISHPAGE_RUN_NOTCHECKED
|
|
!define MUI_FINISHPAGE_RUN "$INSTDIR/taisei.exe"
|
|
!define MUI_FINISHPAGE_SHOWREADME "$INSTDIR/README.txt"
|
|
!define MUI_FINISHPAGE_LINK "Visit project web site"
|
|
!define MUI_FINISHPAGE_LINK_LOCATION "${PROJECT_URL}"
|
|
!insertmacro MUI_PAGE_FINISH
|
|
|
|
!insertmacro MUI_UNPAGE_CONFIRM
|
|
!insertmacro MUI_UNPAGE_INSTFILES
|
|
!insertmacro MUI_UNPAGE_FINISH
|
|
|
|
!insertmacro MUI_LANGUAGE "English"
|
|
|
|
; Installer sections
|
|
Function AddToInstallerRegisty
|
|
Pop $0
|
|
Pop $1
|
|
StrCmp "$0" "" ConditionalAddToRegisty_EmptyString
|
|
WriteRegStr SHCTX "${APPREGISTRY}" "$1" "$0"
|
|
DetailPrint "Set install registry entry: '$1' to '$0'"
|
|
ConditionalAddToRegisty_EmptyString:
|
|
FunctionEnd
|
|
|
|
Section "-Core installation"
|
|
SetOutPath "$INSTDIR"
|
|
|
|
File /r "${INST_DIR}\*.*"
|
|
|
|
; Uninstaller
|
|
WriteUninstaller "$INSTDIR\Uninstall.exe"
|
|
|
|
Push "DisplayName"
|
|
Push "${APPNAME}"
|
|
Call AddToInstallerRegisty
|
|
|
|
Push "DisplayVersion"
|
|
Push "${VERSION}"
|
|
Call AddToInstallerRegisty
|
|
|
|
Push "Publisher"
|
|
Push "${PUBLISHER}"
|
|
Call AddToInstallerRegisty
|
|
|
|
Push "UninstallString"
|
|
Push "$\"$INSTDIR\Uninstall.exe$\""
|
|
Call AddToInstallerRegisty
|
|
|
|
Push "QuietUninstallString"
|
|
Push "$\"$INSTDIR\Uninstall.exe$\" /S"
|
|
Call AddToInstallerRegisty
|
|
|
|
Push "NoRepair"
|
|
Push "1"
|
|
Call AddToInstallerRegisty
|
|
|
|
Push "NoModify"
|
|
Push "1"
|
|
Call AddToInstallerRegisty
|
|
|
|
Push "DisplayIcon"
|
|
Push "$INSTDIR\taisei.exe"
|
|
Call AddToInstallerRegisty
|
|
|
|
Push "HelpLink"
|
|
Push "${PROJECT_URL}"
|
|
Call AddToInstallerRegisty
|
|
|
|
Push "URLInfoAbout"
|
|
Push "${PROJECT_URL}"
|
|
Call AddToInstallerRegisty
|
|
|
|
Push "URLUpdateInfo"
|
|
Push "${PROJECT_URL}"
|
|
Call AddToInstallerRegisty
|
|
|
|
Push "Readme"
|
|
Push "$INSTDIR\README.txt"
|
|
Call AddToInstallerRegisty
|
|
|
|
Push "InstallLocation"
|
|
Push "$INSTDIR"
|
|
Call AddToInstallerRegisty
|
|
|
|
Push "InstallMode"
|
|
Push "$MultiUser.InstallMode"
|
|
Call AddToInstallerRegisty
|
|
|
|
Push "InstallToDesktop"
|
|
Push "$INSTALL_DESKTOP"
|
|
Call AddToInstallerRegisty
|
|
|
|
!insertmacro MUI_STARTMENU_WRITE_BEGIN Application
|
|
|
|
CreateDirectory "$SMPROGRAMS\$STARTMENU_FOLDER"
|
|
|
|
CreateShortcut "$SMPROGRAMS\$STARTMENU_FOLDER\Uninstall.lnk" "$INSTDIR\Uninstall.exe"
|
|
CreateShortcut "$SMPROGRAMS\$STARTMENU_FOLDER\Taisei.lnk" "$INSTDIR\taisei.exe"
|
|
|
|
!if @USE_ANGLE@ == 1
|
|
CreateShortcut "$SMPROGRAMS\$STARTMENU_FOLDER\Taisei (ANGLE).lnk" "$INSTDIR\taisei.exe" "--renderer gles30"
|
|
!endif
|
|
|
|
${If} "$INSTALL_DESKTOP" == "1"
|
|
CreateShortcut "$DESKTOP\Taisei.lnk" "$INSTDIR\taisei.exe"
|
|
|
|
!if @USE_ANGLE@ == 1
|
|
CreateShortcut "$DESKTOP\Taisei (ANGLE).lnk" "$INSTDIR\taisei.exe" "--renderer gles30"
|
|
!endif
|
|
${EndIf}
|
|
|
|
!insertmacro MUI_STARTMENU_WRITE_END
|
|
|
|
${If} $MultiUser.InstallMode == "AllUsers"
|
|
DeleteRegKey HKCR ".tsr"
|
|
DeleteRegKey HKCR "TaiseiProject.tsr"
|
|
DeleteRegKey HKCR "TaiseiProject.tsr\DefaultIcon"
|
|
DeleteRegKey HKCR "TaiseiProject.tsr\Shell"
|
|
DeleteRegKey HKCR "TaiseiProject.tsr\Shell\Open"
|
|
DeleteRegKey HKCR "TaiseiProject.tsr\Shell\Open\Command"
|
|
DeleteRegKey HKCR "Applications\taisei.exe"
|
|
DeleteRegKey HKCR "Applications\taisei.exe\DefaultIcon"
|
|
DeleteRegKey HKCR "Applications\taisei.exe\Shell"
|
|
DeleteRegKey HKCR "Applications\taisei.exe\Shell\Open"
|
|
DeleteRegKey HKCR "Applications\taisei.exe\Shell\Open\Command"
|
|
|
|
WriteRegStr HKCR ".tsr" "" "TaiseiProject.tsr"
|
|
WriteRegStr HKCR ".tsr" "Content Type" "application/x-taisei-replay"
|
|
WriteRegStr HKCR "TaiseiProject.tsr" "" "Taisei Project replay"
|
|
WriteRegStr HKCR "TaiseiProject.tsr" "FriendlyTypeName" "@$INSTDIR\taisei.exe,-2"
|
|
WriteRegStr HKCR "TaiseiProject.tsr\DefaultIcon" "" "$INSTDIR\taisei.exe,1"
|
|
WriteRegStr HKCR "TaiseiProject.tsr\Shell\Open\Command" "" "$\"$INSTDIR\taisei.exe$\" --replay $\"%1$\""
|
|
WriteRegStr HKCR "Applications\taisei.exe" "" "Taisei Project"
|
|
WriteRegStr HKCR "Applications\taisei.exe" "FriendlyAppName" "@$INSTDIR\taisei.exe,-1"
|
|
WriteRegStr HKCR "Applications\taisei.exe\DefaultIcon" "" "$INSTDIR\taisei.exe,1"
|
|
WriteRegStr HKCR "Applications\taisei.exe\Shell\Open\Command" "" "$\"$INSTDIR\taisei.exe$\" --replay $\"%1$\""
|
|
${EndIf}
|
|
SectionEnd
|
|
|
|
Section "Uninstall"
|
|
ReadRegStr $INSTALL_DESKTOP SHCTX "${APPREGISTRY}" "InstallToDesktop"
|
|
|
|
${If} $MultiUser.InstallMode == "AllUsers"
|
|
DeleteRegKey HKCR ".tsr"
|
|
DeleteRegKey HKCR "TaiseiProject.tsr"
|
|
DeleteRegKey HKCR "TaiseiProject.tsr\DefaultIcon"
|
|
DeleteRegKey HKCR "TaiseiProject.tsr\Shell"
|
|
DeleteRegKey HKCR "TaiseiProject.tsr\Shell\Open"
|
|
DeleteRegKey HKCR "TaiseiProject.tsr\Shell\Open\Command"
|
|
DeleteRegKey HKCR "Applications\taisei.exe"
|
|
DeleteRegKey HKCR "Applications\taisei.exe\DefaultIcon"
|
|
DeleteRegKey HKCR "Applications\taisei.exe\Shell"
|
|
DeleteRegKey HKCR "Applications\taisei.exe\Shell\Open"
|
|
DeleteRegKey HKCR "Applications\taisei.exe\Shell\Open\Command"
|
|
${EndIf}
|
|
|
|
@UNINSTALL_COMMANDS@
|
|
|
|
Delete "$INSTDIR\Uninstall.exe"
|
|
RMDir "$INSTDIR"
|
|
|
|
!insertmacro MUI_STARTMENU_GETFOLDER Application $STARTMENU_FOLDER
|
|
Delete "$SMPROGRAMS\$STARTMENU_FOLDER\Uninstall.lnk"
|
|
Delete "$SMPROGRAMS\$STARTMENU_FOLDER\Taisei.lnk"
|
|
Delete "$SMPROGRAMS\$STARTMENU_FOLDER\Taisei (OpenGL).lnk"
|
|
Delete "$SMPROGRAMS\$STARTMENU_FOLDER\Taisei (ANGLE).lnk"
|
|
RMDir "$SMPROGRAMS\$STARTMENU_FOLDER"
|
|
|
|
${If} "$INSTALL_DESKTOP" == "1"
|
|
Delete "$DESKTOP\Taisei.lnk"
|
|
Delete "$DESKTOP\Taisei (OpenGL).lnk"
|
|
Delete "$DESKTOP\Taisei (ANGLE).lnk"
|
|
${EndIf}
|
|
|
|
DeleteRegKey SHCTX "${APPREGISTRY}"
|
|
SectionEnd
|
|
|
|
!macro INIT_X64
|
|
!if @TAISEI_64BIT@ == 1
|
|
${If} ${RunningX64}
|
|
SetRegView 64
|
|
${Else}
|
|
MessageBox MB_OK|MB_ICONSTOP "This installer is for 64-bit systems only."
|
|
Abort
|
|
${EndIf}
|
|
!endif
|
|
!macroend
|
|
|
|
Function .onInit
|
|
!insertmacro INIT_X64
|
|
!insertmacro MULTIUSER_INIT
|
|
|
|
ReadRegStr $0 SHCTX "${APPREGISTRY}" "UninstallString"
|
|
StrCmp $0 "" inst
|
|
|
|
MessageBox MB_YESNOCANCEL|MB_ICONEXCLAMATION \
|
|
"${APPNAME} is already installed.$\n$\nDo you want to uninstall the old version before installing the new one?$\n$\nIf unsure, choose YES." \
|
|
/SD IDYES IDYES uninst IDNO inst
|
|
Abort
|
|
|
|
;Run the uninstaller
|
|
uninst:
|
|
ClearErrors
|
|
ReadRegStr $1 SHCTX "${APPREGISTRY}" "QuietUninstallString"
|
|
ReadRegStr $2 SHCTX "${APPREGISTRY}" "InstallLocation"
|
|
IfErrors uninst_failed
|
|
ExecWait '$1 _?=$2' ; Do not copy the uninstaller to a temp file
|
|
IfErrors uninst_failed inst
|
|
|
|
uninst_failed:
|
|
MessageBox MB_OK|MB_ICONSTOP "Uninstall failed."
|
|
Abort
|
|
|
|
inst:
|
|
; TODO: Maybe make it optional again
|
|
StrCpy $INSTALL_DESKTOP "1"
|
|
FunctionEnd
|
|
|
|
Function un.onInit
|
|
!insertmacro INIT_X64
|
|
!insertmacro MULTIUSER_UNINIT
|
|
FunctionEnd
|