float: Use nasm_error helpers
[nasm.git] / nsis / nasm.nsi
blobad368e577635a5ef27cf7f9e78dd5d9df640eb51
1 #!Nsis Installer Command Script
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.
8 # The script requires NSIS v2.45 (or any later)
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.
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.
29 !addincludedir "${objdir}\nsis"
30 !addincludedir "${srcdir}\nsis"
31 !include "version.nsh"
32 !include "arch.nsh"
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}"
39 SetCompressor /solid lzma
41 !if "${NSIS_PACKEDVERSION}" >= 0x3000000
42 Unicode true
43 !endif
45 !define MULTIUSER_EXECUTIONLEVEL Highest
46 !define MULTIUSER_MUI
47 !define MULTIUSER_INSTALLMODE_COMMANDLINE
48 !define MULTIUSER_INSTALLMODE_INSTDIR "NASM"
49 !include "NASMMultiUser.nsh"
51 !insertmacro MULTIUSER_PAGE_INSTALLMODE
52 !insertmacro MULTIUSER_INSTALLMODEPAGE_INTERFACE
54 ;--------------------------------
55 ;General
57 ;Name and file
58 Name "${PACKAGE_NAME}"
59 OutFile "${objdir}\${PACKAGE_SHORT_NAME}-installer-${ARCH}.exe"
61 ;Get installation folder from registry if available
62 InstallDirRegKey HKCU "Software\${PRODUCT_SHORT_NAME}" ""
64 ;Request application privileges for Windows Vista
65 RequestExecutionLevel user
67 ;--------------------------------
68 ;Variables
70 Var StartMenuFolder
71 Var CmdFailed
73 ;--------------------------------
74 ;Interface Settings
75 Caption "${PACKAGE_SHORT_NAME} installation"
76 Icon "${srcdir}\nsis\nasm.ico"
77 UninstallIcon "${srcdir}\nsis\nasm-un.ico"
79 !define MUI_ABORTWARNING
81 ;--------------------------------
82 ;Pages
84 !insertmacro MUI_PAGE_COMPONENTS
85 !insertmacro MUI_PAGE_DIRECTORY
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}"
92 !insertmacro MUI_PAGE_STARTMENU Application $StartMenuFolder
94 !insertmacro MUI_PAGE_INSTFILES
96 !insertmacro MUI_UNPAGE_CONFIRM
97 !insertmacro MUI_UNPAGE_INSTFILES
99 ;--------------------------------
100 ;Installer Sections
102 !insertmacro MUI_LANGUAGE English
104 Section "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"
112 ;Store installation folder
113 WriteRegStr HKCU "Software\${PRODUCT_SHORT_NAME}" "" $INSTDIR
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
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
129 skip:
130 ;Create uninstaller
131 WriteUninstaller "$INSTDIR\Uninstall.exe"
133 !insertmacro MUI_STARTMENU_WRITE_BEGIN Application
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"
142 !insertmacro MUI_STARTMENU_WRITE_END
143 SectionEnd
145 Section "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"
154 SectionEnd
156 Section "Manual" SecManual
157 SetOutPath "$INSTDIR"
158 File "${objdir}\doc\nasmdoc.pdf"
159 CreateShortCut "$SMPROGRAMS\$StartMenuFolder\Manual.lnk" "$INSTDIR\nasmdoc.pdf"
160 SectionEnd
162 Section "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"
167 SectionEnd
169 ;--------------------------------
170 ;Descriptions
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)"
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
186 ;--------------------------------
187 ;Uninstaller Section
189 Section "Uninstall"
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:
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:
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}"
230 SectionEnd
233 ; MUI requires this hooks
234 Function .onInit
235 SetRegView ${BITS}
236 !insertmacro MULTIUSER_INIT
237 FunctionEnd
239 Function un.onInit
240 !insertmacro MULTIUSER_UNINIT
241 FunctionEnd