-OutFile "../neverball-${VERSION}-setup.exe"
+#------------------------------------------------------------------------------
+
+!include "LogicLib.nsh"
+
+#------------------------------------------------------------------------------
+
+!ifndef VERSION
+!define VERSION "unknown"
+!endif
+
+!ifndef OUTFILE
+!define OUTFILE "../neverball-${VERSION}-setup.exe"
+!endif
+
+!define UNINSTALL_REG_ROOT \
+ "Software\Microsoft\Windows\CurrentVersion\Uninstall\Neverball"
+
+#------------------------------------------------------------------------------
+
+OutFile ${OUTFILE}
Name "Neverball ${VERSION}"
LicenseData "COPYING.txt"
InstallDir "$PROGRAMFILES\Neverball"
XPStyle on
+SetCompressor /solid lzma
+RequestExecutionLevel user
+
+#------------------------------------------------------------------------------
Page license
Page components
Page directory
Page instfiles
-UninstPage uninstConfirm
-UninstPage instfiles
+Function .onInit
+ Call IsUserAdmin
+ Pop $R0
+
+ ${If} $R0 == "true"
+ SetShellVarContext all
+ ${EndIf}
+FunctionEnd
Section "Neverball/Neverputt"
SectionIn RO
- SetOutPath $INSTDIR
+ SetOutPath "$INSTDIR"
- File *.txt
- File /oname=AUTHORS.txt doc\AUTHORS.txt
- File /oname=MANUAL.txt doc\MANUAL.txt
-
- File /r /x .svn /x *.map /x obj data
+ File *.txt doc\*.txt
+ File /r /x .svn /x *.map /x *.obj data
File /r locale
File neverball.exe neverputt.exe *.dll
- File /oname=data\icon\neverball.ico dist\newneverball.ico
- File /oname=data\icon\neverputt.ico dist\newneverputt.ico
-
- WriteUninstaller $INSTDIR\uninstall.exe
+ File /oname=data\icon\neverball.ico dist\ico\neverball.ico
+ File /oname=data\icon\neverputt.ico dist\ico\neverputt.ico
+
+ CreateDirectory "$INSTDIR\bin"
+
+ SetOutPath "$INSTDIR\bin"
+
+ File scripts\neverball.bat
+ File scripts\neverputt.bat
+ File contrib\curve.exe
+
+ # http://nsis.sourceforge.net/\
+ # Add_uninstall_information_to_Add/Remove_Programs
+
+ WriteRegStr SHELL_CONTEXT ${UNINSTALL_REG_ROOT} \
+ "DisplayName" "Neverball ${VERSION}"
+ WriteRegStr SHELL_CONTEXT ${UNINSTALL_REG_ROOT} \
+ "DisplayVersion" "${VERSION}"
+ WriteRegStr SHELL_CONTEXT ${UNINSTALL_REG_ROOT} \
+ "DisplayIcon" "$INSTDIR\data\icon\neverball.ico"
+ WriteRegStr SHELL_CONTEXT ${UNINSTALL_REG_ROOT} \
+ "UninstallString" "$INSTDIR\uninstall.exe"
+ WriteRegStr SHELL_CONTEXT ${UNINSTALL_REG_ROOT} \
+ "URLInfoAbout" "http://www.neverball.org/"
+ WriteRegStr SHELL_CONTEXT ${UNINSTALL_REG_ROOT} \
+ "URLUpdateInfo" "http://www.neverball.org/"
+ WriteRegStr SHELL_CONTEXT ${UNINSTALL_REG_ROOT} \
+ "HelpLink" "http://www.nevercorner.net/"
+ WriteRegDWORD SHELL_CONTEXT ${UNINSTALL_REG_ROOT} \
+ "NoModify" 1
+ WriteRegDWORD SHELL_CONTEXT ${UNINSTALL_REG_ROOT} \
+ "NoRepair" 1
+
+ WriteUninstaller "$INSTDIR\uninstall.exe"
SectionEnd
Section "Mapping tools (compiler, maps, ...)"
- SetOutPath $INSTDIR
+ SetOutPath "$INSTDIR"
File mapc.exe
+ File /oname=bin\mapc.bat scripts\mapc.bat
SetOutPath "$INSTDIR\data"
File /r /x ".svn" data\*.map
- File /r /x ".svn" data\obj
+ File /r /x ".svn" data\*.obj
SectionEnd
-Section "Create Start menu shortcuts"
- # Reset to get a proper working directory for short-cuts
- SetOutPath $INSTDIR
+SectionGroup "Shortcuts"
+ Section "In Start menu"
+ # Reset to get a proper working directory
+ SetOutPath "$INSTDIR"
+
+ CreateDirectory "$SMPROGRAMS\Neverball"
+
+ CreateShortcut \
+ "$SMPROGRAMS\Neverball\Neverball.lnk" \
+ "$INSTDIR\neverball.exe" "" \
+ "$INSTDIR\data\icon\neverball.ico"
+
+ CreateShortcut \
+ "$SMPROGRAMS\Neverball\Neverputt.lnk" \
+ "$INSTDIR\neverputt.exe" "" \
+ "$INSTDIR\data\icon\neverputt.ico"
+ SectionEnd
+
+ Section "On desktop"
+ # Reset to get a proper working directory
+ SetOutPath "$INSTDIR"
+
+ CreateShortcut \
+ "$DESKTOP\Neverball.lnk" \
+ "$INSTDIR\neverball.exe" "" \
+ "$INSTDIR\data\icon\neverball.ico"
+
+ CreateShortcut \
+ "$DESKTOP\Neverputt.lnk" \
+ "$INSTDIR\neverputt.exe" "" \
+ "$INSTDIR\data\icon\neverputt.ico"
+ SectionEnd
+SectionGroupEnd
+
+#------------------------------------------------------------------------------
- CreateDirectory "$SMPROGRAMS\Games"
+UninstPage uninstConfirm
+UninstPage instfiles
- CreateShortcut \
- "$SMPROGRAMS\Games\Neverball.lnk" \
- "$INSTDIR\neverball.exe" "" \
- "$INSTDIR\data\icon\neverball.ico"
+Function un.onInit
+ Call un.IsUserAdmin
+ Pop $R0
- CreateShortcut \
- "$SMPROGRAMS\Games\Neverputt.lnk" \
- "$INSTDIR\neverputt.exe" "" \
- "$INSTDIR\data\icon\neverputt.ico"
-SectionEnd
+ ${If} $R0 == "true"
+ SetShellVarContext all
+ ${EndIf}
+FunctionEnd
Section "Uninstall"
- Delete "$SMPROGRAMS\Games\Neverball.lnk"
- Delete "$SMPROGRAMS\Games\Neverputt.lnk"
- RMDir "$SMPROGRAMS\Games"
+ Delete "$SMPROGRAMS\Neverball\Neverball.lnk"
+ Delete "$SMPROGRAMS\Neverball\Neverputt.lnk"
+ RMDir "$SMPROGRAMS\Neverball"
+ Delete "$DESKTOP\Neverball.lnk"
+ Delete "$DESKTOP\Neverputt.lnk"
+
+ DeleteRegKey SHELL_CONTEXT ${UNINSTALL_REG_ROOT}
# FIXME: unsafe if the directory contains other-than-installed stuff
RMDir /r $INSTDIR
SectionEnd
+#------------------------------------------------------------------------------
+
+# URL: http://nsis.sourceforge.net/IsUserAdmin
+# Author: Lilla (lilla@earthlink.net) 2003-06-13
+
+!macro IsUserAdmin un
+Function ${un}IsUserAdmin
+ Push $R0
+ Push $R1
+ Push $R2
+
+ ClearErrors
+ UserInfo::GetName
+ IfErrors Win9x
+ Pop $R1
+ UserInfo::GetAccountType
+ Pop $R2
+
+ StrCmp $R2 "Admin" 0 Continue
+ StrCpy $R0 "true"
+ Goto Done
+
+ Continue:
+ StrCmp $R2 "" Win9x
+ StrCpy $R0 "false"
+ Goto Done
+
+ Win9x:
+ StrCpy $R0 "true"
+
+ Done:
+
+ Pop $R2
+ Pop $R1
+ Exch $R0
+FunctionEnd
+!macroend
+
+!insertmacro IsUserAdmin ""
+!insertmacro IsUserAdmin "un."
+
+#------------------------------------------------------------------------------
+
+# vim:sts=4:sw=4:et: