#!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"

!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
FunctionEnd

Function un.onInit
    !insertmacro MULTIUSER_UNINIT
FunctionEnd
