1#!Nsis Installer Command Script 2 3# 4# Copyright (c) 2009, Shao Miller (shao.miller@yrdsb.edu.on.ca) 5# Copyright (c) 2009, Cyrill Gorcunov (gorcunov@gmail.com) 6# All rights reserved. 7# 8# The script requires NSIS v2.45 (or any later) 9# 10# Redistribution and use in source and binary forms, with or without 11# modification, are permitted provided that the following conditions are met: 12# * Redistributions of source code must retain the above copyright 13# notice, this list of conditions and the following disclaimer. 14# * Redistributions in binary form must reproduce the above copyright 15# notice, this list of conditions and the following disclaimer in the 16# documentation and/or other materials provided with the distribution. 17# 18# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19# ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 20# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 21# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL <copyright holder> BE LIABLE FOR 22# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 23# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 24# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 25# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 26# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 29!addincludedir "${objdir}\nsis" 30!addincludedir "${srcdir}\nsis" 31!include "version.nsh" 32!include "arch.nsh" 33 34!define PRODUCT_NAME "Netwide Assembler" 35!define PRODUCT_SHORT_NAME "nasm" 36!define PACKAGE_NAME "${PRODUCT_NAME} ${VERSION}" 37!define PACKAGE_SHORT_NAME "${PRODUCT_SHORT_NAME}-${VERSION}" 38 39SetCompressor /solid lzma 40 41!if "${NSIS_PACKEDVERSION}" >= 0x3000000 42Unicode true 43!endif 44 45!define MULTIUSER_EXECUTIONLEVEL Highest 46!define MULTIUSER_MUI 47!define MULTIUSER_INSTALLMODE_COMMANDLINE 48!define MULTIUSER_INSTALLMODE_INSTDIR "NASM" 49!include "NASMMultiUser.nsh" 50 51!insertmacro MULTIUSER_PAGE_INSTALLMODE 52!insertmacro MULTIUSER_INSTALLMODEPAGE_INTERFACE 53 54;-------------------------------- 55;General 56 57;Name and file 58Name "${PACKAGE_NAME}" 59OutFile "${objdir}\${PACKAGE_SHORT_NAME}-installer-${ARCH}.exe" 60 61;Get installation folder from registry if available 62InstallDirRegKey HKCU "Software\${PRODUCT_SHORT_NAME}" "" 63 64;Request application privileges for Windows Vista 65RequestExecutionLevel user 66 67;-------------------------------- 68;Variables 69 70Var StartMenuFolder 71Var CmdFailed 72 73;-------------------------------- 74;Interface Settings 75Caption "${PACKAGE_SHORT_NAME} installation" 76Icon "${srcdir}\nsis\nasm.ico" 77UninstallIcon "${srcdir}\nsis\nasm-un.ico" 78 79!define MUI_ABORTWARNING 80 81;-------------------------------- 82;Pages 83 84!insertmacro MUI_PAGE_COMPONENTS 85!insertmacro MUI_PAGE_DIRECTORY 86 87;Start Menu Folder Page Configuration 88!define MUI_STARTMENUPAGE_REGISTRY_ROOT "HKCU" 89!define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\${PRODUCT_SHORT_NAME}" 90!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "${PRODUCT_SHORT_NAME}" 91 92!insertmacro MUI_PAGE_STARTMENU Application $StartMenuFolder 93 94!insertmacro MUI_PAGE_INSTFILES 95 96!insertmacro MUI_UNPAGE_CONFIRM 97!insertmacro MUI_UNPAGE_INSTFILES 98 99;-------------------------------- 100;Installer Sections 101 102!insertmacro MUI_LANGUAGE English 103 104Section "NASM" SecNasm 105 Sectionin RO 106 SetOutPath "$INSTDIR" 107 File "${srcdir}\LICENSE" 108 File "${objdir}\nasm.exe" 109 File "${objdir}\ndisasm.exe" 110 File "${srcdir}\nsis\nasm.ico" 111 112 ;Store installation folder 113 WriteRegStr HKCU "Software\${PRODUCT_SHORT_NAME}" "" $INSTDIR 114 115 ;Store shortcuts folder 116 WriteRegStr HKCU "Software\${PRODUCT_SHORT_NAME}\" "lnk" $SMPROGRAMS\$StartMenuFolder 117 WriteRegStr HKCU "Software\${PRODUCT_SHORT_NAME}\" "bat-lnk" $DESKTOP\${PRODUCT_SHORT_NAME}.lnk 118 119 ; 120 ; the bat we need 121 StrCpy $CmdFailed "true" 122 FileOpen $0 "nasmpath.bat" w 123 IfErrors skip 124 StrCpy $CmdFailed "false" 125 FileWrite $0 "@set path=$INSTDIR;%path%$\r$\n" 126 FileWrite $0 "@%comspec%" 127 FileClose $0 128 CreateShortCut "$DESKTOP\${PRODUCT_SHORT_NAME}.lnk" "$INSTDIR\nasmpath.bat" "" "$INSTDIR\nasm.ico" 0 129skip: 130 ;Create uninstaller 131 WriteUninstaller "$INSTDIR\Uninstall.exe" 132 133 !insertmacro MUI_STARTMENU_WRITE_BEGIN Application 134 135 ;Create shortcuts 136 CreateDirectory "$SMPROGRAMS\$StartMenuFolder" 137 StrCmp $CmdFailed "true" +2 138 CreateShortCut "$SMPROGRAMS\$StartMenuFolder\${PRODUCT_SHORT_NAME}-shell.lnk" "$INSTDIR\nasmpath.bat" 139 CreateShortCut "$SMPROGRAMS\$StartMenuFolder\${PRODUCT_SHORT_NAME}.lnk" "$INSTDIR\nasm.exe" "" "$INSTDIR\nasm.ico" 0 140 CreateShortCut "$SMPROGRAMS\$StartMenuFolder\Uninstall.lnk" "$INSTDIR\Uninstall.exe" 141 142 !insertmacro MUI_STARTMENU_WRITE_END 143SectionEnd 144 145Section "RDOFF" SecRdoff 146 File "${objdir}\rdoff\ldrdf.exe" 147 File "${objdir}\rdoff\rdf2bin.exe" 148 File "${objdir}\rdoff\rdf2com.exe" 149 File "${objdir}\rdoff\rdf2ith.exe" 150 File "${objdir}\rdoff\rdf2ihx.exe" 151 File "${objdir}\rdoff\rdf2srec.exe" 152 File "${objdir}\rdoff\rdfdump.exe" 153 File "${objdir}\rdoff\rdflib.exe" 154SectionEnd 155 156Section "Manual" SecManual 157 SetOutPath "$INSTDIR" 158 File "${objdir}\doc\nasmdoc.pdf" 159 CreateShortCut "$SMPROGRAMS\$StartMenuFolder\Manual.lnk" "$INSTDIR\nasmdoc.pdf" 160SectionEnd 161 162Section "VS8 integration" SecVS8 163 CreateDirectory "$INSTDIR\VSrules" 164 SetOutPath "$INSTDIR\VSrules" 165 File "${srcdir}\contrib\VSrules\nasm.README" 166 File "${srcdir}\contrib\VSrules\nasm.rules" 167SectionEnd 168 169;-------------------------------- 170;Descriptions 171 172 ;Language strings 173 LangString DESC_SecNasm ${LANG_ENGLISH} "NASM assembler and disassember modules" 174 LangString DESC_SecManual ${LANG_ENGLISH} "Complete NASM manual (pdf file)" 175 LangString DESC_SecRdoff ${LANG_ENGLISH} "RDOFF utilities (you may not need it if you don't know what is it)" 176 LangString DESC_SecVS8 ${LANG_ENGLISH} "Visual Studio 2008 NASM integration (rules file)" 177 178 ;Assign language strings to sections 179 !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN 180 !insertmacro MUI_DESCRIPTION_TEXT ${SecNasm} $(DESC_SecNasm) 181 !insertmacro MUI_DESCRIPTION_TEXT ${SecRdoff} $(DESC_SecRdoff) 182 !insertmacro MUI_DESCRIPTION_TEXT ${SecManual} $(DESC_SecManual) 183 !insertmacro MUI_DESCRIPTION_TEXT ${SecVS8} $(DESC_SecVS8) 184 !insertmacro MUI_FUNCTION_DESCRIPTION_END 185 186;-------------------------------- 187;Uninstaller Section 188 189Section "Uninstall" 190 ; 191 ; files on HDD 192 IfFileExists "$INSTDIR" +3 +1 193 MessageBox MB_OK "No files found, aborting." 194 Abort 195 MessageBox MB_YESNO "The following directory will be deleted$\n$INSTDIR" IDYES rm_instdir_true IDNO rm_instdir_false 196 rm_instdir_true: 197 RMDir /r /rebootok "$INSTDIR" 198 rm_instdir_false: 199 200 ; 201 ; Desktop link 202 ReadRegStr $0 HKCU Software\${PRODUCT_SHORT_NAME} "bat-lnk" 203 StrCmp $0 0 +1 +3 204 MessageBox MB_OK "Invalid path to a bat-lnk file, aborting" 205 Abort 206 IfFileExists $0 +3 +1 207 MessageBox MB_OK "No bat-lnk files found, aborting." 208 Abort 209 MessageBox MB_YESNO "The following file will be deleted$\n$0" IDYES rm_batlinks_true IDNO rm_batlinks_false 210 rm_batlinks_true: 211 Delete /rebootok "$0" 212 RMDir "$0" 213 rm_batlinks_false: 214 215 ; 216 ; Start menu folder 217 ReadRegStr $0 HKCU Software\${PRODUCT_SHORT_NAME} "lnk" 218 StrCmp $0 0 +1 +3 219 MessageBox MB_OK "Invalid path to a lnk file, aborting" 220 Abort 221 IfFileExists $0 +3 +1 222 MessageBox MB_OK "No lnk files found, aborting." 223 Abort 224 MessageBox MB_YESNO "The following directory will be deleted$\n$0" IDYES rm_links_true IDNO rm_links_false 225 rm_links_true: 226 Delete /rebootok "$0\*" 227 RMDir "$0" 228 rm_links_false: 229 DeleteRegKey /ifempty HKCU "Software\${PRODUCT_SHORT_NAME}" 230SectionEnd 231 232; 233; MUI requires this hooks 234Function .onInit 235 SetRegView ${BITS} 236 !insertmacro MULTIUSER_INIT 237FunctionEnd 238 239Function un.onInit 240 !insertmacro MULTIUSER_UNINIT 241FunctionEnd 242