123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326 |
- ; Before you start you will need the shelllink plugin for NSIS
- ; http://nsis.sourceforge.net/ShellLink_plug-in
- ; Download it from the nsis webpage, and unzip it in the NSIS
- ; install dir.
- ;
- ; To use just put this in a directory below the supertuxkart directory
- ; which should be called "supertuxkart" and then copy the
- ; GPL in the supertuxkart directory to 'license.txt'.
- ; You will then need to make an icon, you can use:
- ; http://tools.dynamicdrive.com/favicon/ to convert a png to an icon.
- ; Once you have made an icon put it in the supertuxkart dir and call it
- ; icon.ico. You will need to do the same for install.ico and uninstall.ico
- ; Once there done then all you need to do is compile with NSIS.
- Unicode True
- ;--------------------------------
- ;Include Modern UI
- !include "MUI2.nsh"
- ;--------------------------------
- ;Include LogicLib http://nsis.sourceforge.net/LogicLib
- !include 'LogicLib.nsh'
- ;--------------------------------
- ;Include FileFunc lib
- !include "FileFunc.nsh"
- ;--------------------------------
- ;Include x64 lib
- !include "x64.nsh"
- ;--------------------------------
- ; We save ShellLink.dll in current directory
- !addplugindir .
- ;--------------------------------
- ;General
- ;Name and file
- !define APPNAME "SuperTuxKart"
- !define APPNAMEANDVERSION ""
- !define ARCH ""
- !define VERSION ""
- !define DESCRIPTION "3D open-source arcade racer with a variety characters, tracks, and modes to play"
- Name "${APPNAMEANDVERSION}"
- OutFile ""
- # These will be displayed by the "Click here for support information" link in "Add/Remove Programs"
- # It is possible to use "mailto:" links in here to open the email client
- !define HELPURL "https://supertuxkart.net/" # "Support Information" link
- !define UPDATEURL "https://supertuxkart.net/" # "Product Updates" link
- !define ABOUTURL "https://supertuxkart.net/" # "Publisher" link
- RequestExecutionLevel admin
- ; Overwrite later by onInit
- InstallDir "$PROGRAMFILES\${APPNAMEANDVERSION}"
- ;Get installation folder from registry if available
- InstallDirRegKey HKCU "Software\${APPNAMEANDVERSION}" ""
- ;Sets the text in the bottom corner
- BrandingText "${APPNAMEANDVERSION} Installer"
- ;Set the icon
- !define MUI_ICON "install.ico"
- !define MUI_UNICON "uninstall.ico"
- !define MUI_HEADERIMAGE
- !define MUI_WELCOMEFINISHPAGE_BITMAP "stk_installer.bmp"
- !define MUI_WELCOMEFINISHPAGE_BITMAP_NOSTRETCH
- !define MUI_HEADERIMAGE_BITMAP "logo_slim.bmp"
- ;!define MUI_TEXT_INSTALLING_SUBTITLE "Please vote for SuperTuxKart to become SourceForge's Project of the month at vote.supertuxkart.net"
- ;!define MUI_TEXT_FINISH_INFO_TEXT "Please vote for SuperTuxKart to become $\"Project of the Month$\" at vote.supertuxkart.net"
- ; Sets the compressor to /SOLID lzma which when I (hiker) tested was the best.
- ; Between LZMA and zlib there is only a 20 MB difference.
- SetCompressor /SOLID zlib
- ;Vista redirects $SMPROGRAMS to all users without this
- RequestExecutionLevel admin
- ; For the uninstaller in the remove programs
- !define ADD_REMOVE_KEY_NAME "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAMEANDVERSION}"
- Function .onInit
- ;Default installation folder
- ${If} "${ARCH}" == "x86_64"
- ${OrIf} "${ARCH}" == "aarch64"
- ${If} ${RunningX64}
- ${OrIf} ${IsNativeARM64}
- StrCpy $INSTDIR "$PROGRAMFILES64\${APPNAMEANDVERSION}"
- ${Else}
- StrCpy $INSTDIR "$PROGRAMFILES\${APPNAMEANDVERSION}"
- ${EndIf}
- ${Else}
- ${If} ${RunningX64}
- ${OrIf} ${IsNativeARM64}
- StrCpy $INSTDIR "$PROGRAMFILES32\${APPNAMEANDVERSION}"
- ${Else}
- StrCpy $INSTDIR "$PROGRAMFILES\${APPNAMEANDVERSION}"
- ${EndIf}
- ${EndIf}
- FunctionEnd
- ;--------------------------------
- ;Variables
- Var MUI_TEMP
- Var STARTMENU_FOLDER
- ;--------------------------------
- ;Interface Settings
- !define MUI_ABORTWARNING
- ;--------------------------------
- Function validate_dir
- IfFileExists $INSTDIR\data\*.* 0 return
- IfFileExists $INSTDIR\Uninstall.exe 0 dont_uninstall
- MessageBox MB_YESNO "You can't install ${APPNAMEANDVERSION} in an existing directory. Do you wish to run the uninstaller in $INSTDIR?" IDNO dont_uninstall
- ; -?=$INSTDIR makes sure that this installer waits for the uninstaller
- ; to finish. The uninstaller (and directory) are not removed, but the
- ; uninstaller will be overwritten by our installer anyway.
- ExecWait '"$INSTDIR\Uninstall.exe" _?=$INSTDIR'
- goto return
- dont_uninstall:
- MessageBox MB_OK "You can't install ${APPNAMEANDVERSION} in an existing directory. Please select a new directory."
- abort
- return:
- FunctionEnd
- ;--------------------------------
- ;Pages
- ;Installer pages
- !insertmacro MUI_PAGE_WELCOME
- !insertmacro MUI_PAGE_LICENSE "..\..\COPYING"
- !define MUI_PAGE_CUSTOMFUNCTION_LEAVE validate_dir
- !insertmacro MUI_PAGE_DIRECTORY
- ;Start Menu Folder Page Configuration
- !define MUI_STARTMENUPAGE_REGISTRY_ROOT "HKCU"
- !define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\${APPNAMEANDVERSION}"
- !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder"
- !insertmacro MUI_PAGE_STARTMENU Application $STARTMENU_FOLDER
- !insertmacro MUI_PAGE_INSTFILES
- ;!define MUI_FINISHPAGE_LINK "Please vote for SuperTuxkart here"
- ;!define MUI_FINISHPAGE_LINK_LOCATION "http://vote.supertuxkart.net"
- !insertmacro MUI_PAGE_FINISH
- ;Uninstaller pages
- !insertmacro MUI_UNPAGE_WELCOME
- !insertmacro MUI_UNPAGE_CONFIRM
- !insertmacro MUI_UNPAGE_INSTFILES
- !insertmacro MUI_UNPAGE_FINISH
- ;--------------------------------
- ;Languages
- !insertmacro MUI_LANGUAGE "English"
- ; ---------------------------------------------------------------------------
- ; based on http://nsis.sourceforge.net/Check_if_a_file_exists_at_compile_time
- ; Sets the variable _VAR_NAME to _FILE_NAME if _VAR_NAME is not defined yet
- ; and _FILE_NAME exists:
- !macro !setIfUndefinedAndExists _VAR_NAME _FILE_NAME
- !ifndef ${_VAR_NAME}
- !tempfile _TEMPFILE
- !ifdef NSIS_WIN32_MAKENSIS
- ; Windows - cmd.exe
- !system 'if exist "${_FILE_NAME}" echo !define ${_VAR_NAME} "${_FILE_NAME}" > "${_TEMPFILE}"'
- !else
- ; Posix - sh
- !system 'if [ -e "${_FILE_NAME}" ]; then echo "!define ${_VAR_NAME} ${_FILE_NAME}" > "${_TEMPFILE}"; fi'
- !endif
- !include '${_TEMPFILE}'
- !delfile '${_TEMPFILE}'
- !undef _TEMPFILE
- !endif
- !macroend
- !define !setIfUndefinedAndExists "!insertmacro !setIfUndefinedAndExists"
- ;--------------------------------
- ;Installer Sections
- Section "Install" SecMain
- SetOutPath "$INSTDIR"
- ; files in root dir
- ; Try to find the binary directory in a list of 'typical' names:
- ; The first found directory is used
- ;${!setIfUndefinedAndExists} EXEC_PATH ..\..\bld\bin\RelWithDebInfo\*.*
- ;${!setIfUndefinedAndExists} EXEC_PATH ..\..\bld\bin\Release\*.*
- ;${!setIfUndefinedAndExists} EXEC_PATH ..\..\build\bin\RelWithDebInfo\*.*
- ;${!setIfUndefinedAndExists} EXEC_PATH ..\..\build\bin\Release\*.*
- ;${!setIfUndefinedAndExists} EXEC_PATH ..\..\cmake_build\bin\RelWithDebInfo\*.*
- ;${!setIfUndefinedAndExists} EXEC_PATH ..\..\cmake_build\bin\Release\*.*
- ; Check various options for the editor. Note that us devs mostly use 'bld',
- ; but documented is the name 'build'
- ;${!setIfUndefinedAndExists} EDITOR_PATH ..\..\..\editor\bld\RelWithDebInfo
- ;${!setIfUndefinedAndExists} EDITOR_PATH ..\..\..\editor\bld\Release
- ;${!setIfUndefinedAndExists} EDITOR_PATH ..\..\..\stk-editor\bld\RelWithDebInfo
- ;${!setIfUndefinedAndExists} EDITOR_PATH ..\..\..\stk-editor\bld\Release
- ;${!setIfUndefinedAndExists} EDITOR_PATH ..\..\..\supertuxkart-editor\bld\RelWithDebInfo
- ;${!setIfUndefinedAndExists} EDITOR_PATH ..\..\..\supertuxkart-editor\bld\Release
- ;${!setIfUndefinedAndExists} EDITOR_PATH ..\..\..\editor\build\RelWithDebInfo
- ;${!setIfUndefinedAndExists} EDITOR_PATH ..\..\..\editor\build\Release
- ;${!setIfUndefinedAndExists} EDITOR_PATH ..\..\..\stk-editor\build\RelWithDebInfo
- ;${!setIfUndefinedAndExists} EDITOR_PATH ..\..\..\stk-editor\build\Release
- ;${!setIfUndefinedAndExists} EDITOR_PATH ..\..\..\supertuxkart-editor\build\RelWithDebInfo
- ;${!setIfUndefinedAndExists} EDITOR_PATH ..\..\..\supertuxkart-editor\build\Release
- File /x *.ilk ..\..\build-${ARCH}\bin\*.*
- !ifdef EDITOR_PATH
- File ${EDITOR_PATH}\supertuxkart-editor.exe ${EDITOR_PATH}\supertuxkart-editor.pdb
- File ${EDITOR_PATH}\..\..\supertuxkart-editor.ico
- !endif
- File *.ico
- ; data + assets
- SetOutPath "$INSTDIR\data\"
- File /r /x .svn /x wip-* ..\..\..\stk-assets\*.*
- File /r /x *.sh ..\..\data\*.*
- ;Store installation folder
- WriteRegStr HKCU "Software\${APPNAMEANDVERSION}" "" $INSTDIR
- ;Create uninstaller
- WriteUninstaller "$INSTDIR\Uninstall.exe"
- !insertmacro MUI_STARTMENU_WRITE_BEGIN Application
- ;Create shortcuts
- SetShellVarContext all
- CreateDirectory "$SMPROGRAMS\$STARTMENU_FOLDER"
- CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\Uninstall ${APPNAMEANDVERSION}.lnk" "$INSTDIR\Uninstall.exe" "" "$INSTDIR\uninstall.ico"
- CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\${APPNAMEANDVERSION}.lnk" "$INSTDIR\supertuxkart.exe" "" "$INSTDIR\icon.ico"
- !ifdef EDITOR_PATH
- CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\supertuxkart-editor (beta).lnk" "$INSTDIR\supertuxkart-editor.exe" "" "$INSTDIR\supertuxkart-editor.ico"
- !endif
- ShellLink::SetShortCutShowMode $SMPROGRAMS\$STARTMENU_FOLDER\SuperTuxKart.lnk 0
- !insertmacro MUI_STARTMENU_WRITE_END
- ; Registry information for add/remove programs
- ; See http://nsis.sourceforge.net/Add_uninstall_information_to_Add/Remove_Programs
- WriteRegStr HKLM "${ADD_REMOVE_KEY_NAME}" \
- "DisplayName" "${APPNAMEANDVERSION} - ${ARCH}"
- WriteRegStr HKLM "${ADD_REMOVE_KEY_NAME}" "Publisher" "SuperTuxKart Team"
- WriteRegStr HKLM "${ADD_REMOVE_KEY_NAME}" "UninstallString" "$\"$INSTDIR\Uninstall.exe$\""
- WriteRegStr HKLM "${ADD_REMOVE_KEY_NAME}" "DisplayIcon" "$\"$INSTDIR\icon.ico$\""
- WriteRegStr HKLM "${ADD_REMOVE_KEY_NAME}" "DisplayVersion" "${VERSION}"
- WriteRegStr HKLM "${ADD_REMOVE_KEY_NAME}" "HelpLink" "${HELPURL}"
- WriteRegStr HKLM "${ADD_REMOVE_KEY_NAME}" "URLUpdateInfo" "${UPDATEURL}"
- WriteRegStr HKLM "${ADD_REMOVE_KEY_NAME}" "URLInfoAbout" "${ABOUTURL}"
- # There is no option for modifying or repairing the install
- WriteRegStr HKLM "${ADD_REMOVE_KEY_NAME}" "NoModify" 1
- WriteRegStr HKLM "${ADD_REMOVE_KEY_NAME}" "NoRepair" 1
- ; Write size
- ; [...copy all files here, before GetSize...]
- ${GetSize} "$INSTDIR" "/S=0K" $0 $1 $2
- IntFmt $0 "0x%08X" $0
- WriteRegDWORD HKLM "${ADD_REMOVE_KEY_NAME}" "EstimatedSize" "$0"
- SectionEnd
- ;--------------------------------
- ;Uninstaller Section
- Section "Uninstall" redist
- ;Removes all the supertuxkart data files
- ; DO NOT USE RMDIR ... $INSTDIR\*.* - if someone should e.g.
- ; install supertuxkart in c:\Program Files (note: no subdirectory)
- ; this could remove all files in Program Files!!!!!!!!!!!!!!!!!!!
- ; GitHub Actions script will add installed files as seen in windows.yml
- RMDir /r /REBOOTOK $INSTDIR\data
- DELETE /REBOOTOK "$INSTDIR\install.ico"
- DELETE /REBOOTOK "$INSTDIR\icon.ico"
- DELETE /REBOOTOK "$INSTDIR\supertuxkart.ico"
- DELETE /REBOOTOK "$INSTDIR\supertuxkart.icon"
- DELETE /REBOOTOK "$INSTDIR\uninstall.ico"
- Delete /REBOOTOK "$INSTDIR\Uninstall.exe"
- ;DELETE /REBOOTOK "$INSTDIR\supertuxkart-editor.exe"
- ;DELETE /REBOOTOK "$INSTDIR\supertuxkart-editor.ico"
- ;DELETE /REBOOTOK "$INSTDIR\supertuxkart-editor.pdb"
- RMDir "$INSTDIR"
- SetShellVarContext all
- ;Remove start menu items
- !insertmacro MUI_STARTMENU_GETFOLDER Application $MUI_TEMP
- Delete "$SMPROGRAMS\$MUI_TEMP\Uninstall ${APPNAMEANDVERSION}.lnk"
- Delete "$SMPROGRAMS\$MUI_TEMP\${APPNAMEANDVERSION}.lnk"
- ;Delete "$SMPROGRAMS\$MUI_TEMP\supertuxkart-editor (beta).lnk"
- ;Delete empty start menu parent diretories
- StrCpy $MUI_TEMP "$SMPROGRAMS\$MUI_TEMP"
- startMenuDeleteLoop:
- ClearErrors
- RMDir $MUI_TEMP
- GetFullPathName $MUI_TEMP "$MUI_TEMP\.."
- IfErrors startMenuDeleteLoopDone
- StrCmp $MUI_TEMP $SMPROGRAMS startMenuDeleteLoopDone startMenuDeleteLoop
- startMenuDeleteLoopDone:
- DeleteRegKey /ifempty HKCU "Software\${APPNAMEANDVERSION}"
- DeleteRegKey HKLM "${ADD_REMOVE_KEY_NAME}"
- SectionEnd
|