nasm/nsis/nasm.nsi
Cyrill Gorcunov a1461a5a89 nsis: Use Program Files (x86) directory for nasm installation on x86-64
https://bugzilla.nasm.us/show_bug.cgi?id=3392365

Reported-by: Mat <mberchtold@gmail.com>
Based-on-patch-by: Mat <mberchtold@gmail.com>
Signed-off-by: Cyrill Gorcunov <gorcunov@gmail.com>
2016-10-23 16:27:48 +03:00

245 lines
8.1 KiB
Plaintext

#!Nsis Installer Command Script
#
# Copyright (c) 2009, Shao Miller (shao.miller@yrdsb.edu.on.ca)
# Copyright (c) 2009, Cyrill Gorcunov (gorcunov@gmail.com)
# All rights reserved.
#
# The script requires NSIS v2.45 (or any later)
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
# * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL <copyright holder> BE LIABLE FOR
# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
!addincludedir "${objdir}/nsis"
!addincludedir "${srcdir}/nsis"
!include "version.nsh"
!include /nonfatal "arch.nsh"
!include /nonfatal "x64.nsh"
!define PRODUCT_NAME "Netwide Assembler"
!define PRODUCT_SHORT_NAME "nasm"
!define PACKAGE_NAME "${PRODUCT_NAME} ${VERSION}"
!define PACKAGE_SHORT_NAME "${PRODUCT_SHORT_NAME}-${VERSION}"
SetCompressor lzma
!define MULTIUSER_EXECUTIONLEVEL Highest
!define MULTIUSER_MUI
!define MULTIUSER_INSTALLMODE_COMMANDLINE
!define MULTIUSER_INSTALLMODE_INSTDIR "NASM"
!include "MultiUser.nsh"
!insertmacro MULTIUSER_PAGE_INSTALLMODE
!insertmacro MULTIUSER_INSTALLMODEPAGE_INTERFACE
;--------------------------------
;General
;Name and file
Name "${PACKAGE_NAME}"
OutFile "${objdir}/${PACKAGE_SHORT_NAME}-installer-${ARCH}.exe"
;Get installation folder from registry if available
InstallDirRegKey HKCU "Software\${PRODUCT_SHORT_NAME}" ""
;Request application privileges for Windows Vista
RequestExecutionLevel user
;--------------------------------
;Variables
Var StartMenuFolder
Var CmdFailed
;--------------------------------
;Interface Settings
Caption "${PACKAGE_SHORT_NAME} installation"
Icon "${srcdir}/nsis/nasm.ico"
UninstallIcon "${srcdir}/nsis/nasm-un.ico"
!define MUI_ABORTWARNING
;--------------------------------
;Pages
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_DIRECTORY
;Start Menu Folder Page Configuration
!define MUI_STARTMENUPAGE_REGISTRY_ROOT "HKCU"
!define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\${PRODUCT_SHORT_NAME}"
!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "${PRODUCT_SHORT_NAME}"
!insertmacro MUI_PAGE_STARTMENU Application $StartMenuFolder
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES
;--------------------------------
;Installer Sections
!insertmacro MUI_LANGUAGE English
Section "NASM" SecNasm
Sectionin RO
SetOutPath "$INSTDIR"
File "${srcdir}/LICENSE"
File "${objdir}/nasm.exe"
File "${objdir}/ndisasm.exe"
File "${srcdir}/nsis/nasm.ico"
;Store installation folder
WriteRegStr HKCU "Software\${PRODUCT_SHORT_NAME}" "" $INSTDIR
;Store shortcuts folder
WriteRegStr HKCU "Software\${PRODUCT_SHORT_NAME}\" "lnk" $SMPROGRAMS\$StartMenuFolder
WriteRegStr HKCU "Software\${PRODUCT_SHORT_NAME}\" "bat-lnk" $DESKTOP\${PRODUCT_SHORT_NAME}.lnk
;
; the bat we need
StrCpy $CmdFailed "true"
FileOpen $0 "nasmpath.bat" w
IfErrors skip
StrCpy $CmdFailed "false"
FileWrite $0 "@set path=$INSTDIR;%path%$\r$\n"
FileWrite $0 "@%comspec%"
FileClose $0
CreateShortCut "$DESKTOP\${PRODUCT_SHORT_NAME}.lnk" "$INSTDIR\nasmpath.bat" "" "$INSTDIR\nasm.ico" 0
skip:
;Create uninstaller
WriteUninstaller "$INSTDIR\Uninstall.exe"
!insertmacro MUI_STARTMENU_WRITE_BEGIN Application
;Create shortcuts
CreateDirectory "$SMPROGRAMS\$StartMenuFolder"
StrCmp $CmdFailed "true" +2
CreateShortCut "$SMPROGRAMS\$StartMenuFolder\${PRODUCT_SHORT_NAME}-shell.lnk" "$INSTDIR\nasmpath.bat"
CreateShortCut "$SMPROGRAMS\$StartMenuFolder\${PRODUCT_SHORT_NAME}.lnk" "$INSTDIR\nasm.exe" "" "$INSTDIR\nasm.ico" 0
CreateShortCut "$SMPROGRAMS\$StartMenuFolder\Uninstall.lnk" "$INSTDIR\Uninstall.exe"
!insertmacro MUI_STARTMENU_WRITE_END
SectionEnd
Section "RDOFF" SecRdoff
File "${objdir}/rdoff/ldrdf.exe"
File "${objdir}/rdoff/rdf2bin.exe"
File "${objdir}/rdoff/rdf2com.exe"
File "${objdir}/rdoff/rdf2ith.exe"
File "${objdir}/rdoff/rdf2ihx.exe"
File "${objdir}/rdoff/rdf2srec.exe"
File "${objdir}/rdoff/rdfdump.exe"
File "${objdir}/rdoff/rdflib.exe"
SectionEnd
Section "Manual" SecManual
SetOutPath "$INSTDIR"
File "${objdir}/doc/nasmdoc.pdf"
CreateShortCut "$SMPROGRAMS\$StartMenuFolder\Manual.lnk" "$INSTDIR\nasmdoc.pdf"
SectionEnd
Section "VS8 integration" SecVS8
CreateDirectory "$INSTDIR\VSrules"
SetOutPath "$INSTDIR\VSrules"
File "${srcdir}/contrib/VSrules/nasm.README"
File "${srcdir}/contrib/VSrules/nasm.rules"
SectionEnd
;--------------------------------
;Descriptions
;Language strings
LangString DESC_SecNasm ${LANG_ENGLISH} "NASM assembler and disassember modules"
LangString DESC_SecManual ${LANG_ENGLISH} "Complete NASM manual (pdf file)"
LangString DESC_SecRdoff ${LANG_ENGLISH} "RDOFF utilities (you may not need it if you don't know what is it)"
LangString DESC_SecVS8 ${LANG_ENGLISH} "Visual Studio 2008 NASM integration (rules file)"
;Assign language strings to sections
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
!insertmacro MUI_DESCRIPTION_TEXT ${SecNasm} $(DESC_SecNasm)
!insertmacro MUI_DESCRIPTION_TEXT ${SecRdoff} $(DESC_SecRdoff)
!insertmacro MUI_DESCRIPTION_TEXT ${SecManual} $(DESC_SecManual)
!insertmacro MUI_DESCRIPTION_TEXT ${SecVS8} $(DESC_SecVS8)
!insertmacro MUI_FUNCTION_DESCRIPTION_END
;--------------------------------
;Uninstaller Section
Section "Uninstall"
;
; files on HDD
IfFileExists "$INSTDIR" +3 +1
MessageBox MB_OK "No files found, aborting."
Abort
MessageBox MB_YESNO "The following directory will be deleted$\n$INSTDIR" IDYES rm_instdir_true IDNO rm_instdir_false
rm_instdir_true:
RMDir /r /rebootok "$INSTDIR"
rm_instdir_false:
;
; Desktop link
ReadRegStr $0 HKCU Software\${PRODUCT_SHORT_NAME} "bat-lnk"
StrCmp $0 0 +1 +3
MessageBox MB_OK "Invalid path to a bat-lnk file, aborting"
Abort
IfFileExists $0 +3 +1
MessageBox MB_OK "No bat-lnk files found, aborting."
Abort
MessageBox MB_YESNO "The following file will be deleted$\n$0" IDYES rm_batlinks_true IDNO rm_batlinks_false
rm_batlinks_true:
Delete /rebootok "$0"
RMDir "$0"
rm_batlinks_false:
;
; Start menu folder
ReadRegStr $0 HKCU Software\${PRODUCT_SHORT_NAME} "lnk"
StrCmp $0 0 +1 +3
MessageBox MB_OK "Invalid path to a lnk file, aborting"
Abort
IfFileExists $0 +3 +1
MessageBox MB_OK "No lnk files found, aborting."
Abort
MessageBox MB_YESNO "The following directory will be deleted$\n$0" IDYES rm_links_true IDNO rm_links_false
rm_links_true:
Delete /rebootok "$0\*"
RMDir "$0"
rm_links_false:
DeleteRegKey /ifempty HKCU "Software\${PRODUCT_SHORT_NAME}"
SectionEnd
;
; MUI requires this hooks
Function .onInit
!insertmacro MULTIUSER_INIT
${If} ${RunningX64}
SetRegView 64
${EnableX64FSRedirection}
StrCpy $INSTDIR "$PROGRAMFILES64\${PRODUCT_SHORT_NAME}"
${Else}
StrCpy $INSTDIR "$PROGRAMFILES\${PRODUCT_SHORT_NAME}"
${EndIf}
FunctionEnd
Function un.onInit
!insertmacro MULTIUSER_UNINIT
FunctionEnd