# Borut Razem
# borut.razem@siol.net
+# How to create WIN32 setup.exe
+#
+# - unpack WIN32 mingw daily snapshot sdcc-snapshot-i586-mingw32msvc-yyyymmdd.zip
+# to a clean directory (the option to create directories should be enambled).
+# A sub directory sdcc is created (referenced as PKGDIR in continuation).
+# - copy files sdcc/support/scripts/sdcc.ico and sdcc/support/scripts/sdcc.nsi
+# (this file) from the sdcc CVS snapshot to the PKGDIR directory
+# - copy file COPYING from the sdcc CVS snapshot to the PKGDIR directory,
+# rename it to COPYING.TXT and convert file COPYING to DOS format:
+# unix2dos COPYING.TXT
+# - run NSIS installer from PKGDIR directory:
+# "c:\Program Files\NSIS\makensis.exe" sdcc.nsi
+# - A setup file setup.exe is created in PKGDIR directory.
+# Rename it to sdcc_yyyymmdd_setup.exe and upload it
+# to sdcc download repository at sourceforge.net
+#
+#
+# How to upload secc setup.exe tosourceforge.net
+#
+# Execute following commands from the cmd prompt:
+# - sftp sdcc.sourceforge.net
+# - cd /home/groups/s/sd/sdcc/htdocs/snapshots/i586-mingw32msvc-setup
+# - put sdcc_yyyymmdd_setup.exe
+# - quit
+
+
!include "MUI.nsh"
SetCompressor lzma
-!define SDCC_ROOT "..\.."
+!define SDCC_ROOT "."
-!define FROM_SNAPSHOT
-
-!ifdef FROM_SNAPSHOT
-!system "dir ${SDCC_ROOT}\device > NUL" <> 0
!define DEV_ROOT "${SDCC_ROOT}"
-!else
-!system "dir ${SDCC_ROOT}\device > NUL" = 0
-!define DEV_ROOT "${SDCC_ROOT}\device"
-!endif
!system "unix2dos ${SDCC_ROOT}\doc\ChangeLog_head.txt" = 0
!system "unix2dos ${SDCC_ROOT}\doc\README.TXT" = 0
;--------------------------------
!define MUI_ABORTWARNING
+
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_LICENSE "${SDCC_ROOT}\COPYING.TXT"
!define MUI_STARTMENUPAGE_DEFAULTFOLDER "SDCC"
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
+
!insertmacro MUI_UNPAGE_INSTFILES
+
!insertmacro MUI_LANGUAGE "English"
Name "SDCC"
ShowUnInstDetails show
Function .onInit
+ ;Uninstall the old version, if present
+ ReadRegStr $R0 HKLM \
+ "Software\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" \
+ "UninstallString"
+ StrCmp $R0 "" inst
+
+ MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION \
+ "$(^Name) is already installed. $\n$\nClick 'OK' to remove the \
+ previous version or 'Cancel' to cancel this upgrade." \
+ IDOK uninst
+ Abort
+
+uninst:
+ ; Run the uninstaller
+ ClearErrors
+ ExecWait '$R0 _?=$INSTDIR' ;Do not copy the uninstaller to a temp file
+
+ ;IfErrors no_remove_uninstaller
+ ; ;You can either use Delete /REBOOTOK in the uninstaller or add some code
+ ; ;here to remove to remove the uninstaller. Use a registry key to check
+ ; ;whether the user has chosen to uninstall. If you are using an uninstaller
+ ; ;components page, make sure all sections are uninstalled.
+ ;no_remove_uninstaller:
+
+ Goto done
+inst:
+
+ ; Install the new version
MessageBox MB_YESNO|MB_ICONQUESTION "This will install $(^Name). Do you wish to continue?" IDYES +2
Abort
+
+done:
FunctionEnd
Section -Common
SectionIn 1 2
SetOutPath "$INSTDIR\include\asm\default"
File "${DEV_ROOT}\include\asm\default\features.h"
+ SetOutPath "$INSTDIR\include\asm\ds390"
+ File "${DEV_ROOT}\include\asm\ds390\features.h"
SetOutPath "$INSTDIR\include\asm\gbz80"
File "${DEV_ROOT}\include\asm\gbz80\features.h"
+ SetOutPath "$INSTDIR\include\asm\mcs51"
+ File "${DEV_ROOT}\include\asm\mcs51\features.h"
+ SetOutPath "$INSTDIR\include\asm\pic16"
+ File "${DEV_ROOT}\include\asm\pic16\features.h"
SetOutPath "$INSTDIR\include\asm\z80"
File "${DEV_ROOT}\include\asm\z80\features.h"
+ SetOutPath "$INSTDIR\include\mcs51"
+ File "${DEV_ROOT}\include\mcs51\*.h"
+ SetOutPath "$INSTDIR\include\pic16"
+ File "${DEV_ROOT}\include\pic16\*.h"
+ SetOutPath "$INSTDIR\include\z80"
+ File "${DEV_ROOT}\include\z80\*.h"
SetOutPath "$INSTDIR\include"
File "${DEV_ROOT}\include\*.h"
SectionEnd
WriteIniStr "$INSTDIR\sdcc.url" "InternetShortcut" "URL" "http://sdcc.sourceforge.net/"
SectionEnd
-Section -AddToPath
- MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "Do you want to add $INSTDIR\bin to the PATH?" IDNO +3
- Push "$INSTDIR\bin"
- Call AddToPath
-SectionEnd
-
Section -PostInstall
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\SDCC" "DisplayName" "SDCC"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\SDCC" "UninstallString" "$INSTDIR\uninstall.exe"
WriteUninstaller "$INSTDIR\uninstall.exe"
SectionEnd
+Section -AddToPath
+ MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "Do you want to add $INSTDIR\bin to the PATH?" IDNO +3
+ Push "$INSTDIR\bin"
+ Call AddToPath
+SectionEnd
+
-#### Uninstaller code ####
+;;;; Uninstaller code ;;;;
Function un.onInit
MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "Are you sure you want to completely remove $(^Name) and all of its components?" IDYES +2
Delete "$INSTDIR\lib\ds400\*.lib"
Delete "$INSTDIR\include\asm\z80\*.h"
+ Delete "$INSTDIR\include\asm\pic16\*.h"
+ Delete "$INSTDIR\include\asm\mcs51\*.h"
Delete "$INSTDIR\include\asm\gbz80\*.h"
+ Delete "$INSTDIR\include\asm\ds390\*.h"
Delete "$INSTDIR\include\asm\default\*.h"
+ Delete "$INSTDIR\include\z80\*.h"
+ Delete "$INSTDIR\include\pic16\*.h"
+ Delete "$INSTDIR\include\mcs51\*.h"
Delete "$INSTDIR\include\*.h"
Delete "$INSTDIR\doc\README.TXT"
RMDir "$INSTDIR\lib"
RMDir "$INSTDIR\include\asm\z80"
+ RMDir "$INSTDIR\include\asm\pic16"
+ RMDir "$INSTDIR\include\asm\mcs51"
RMDir "$INSTDIR\include\asm\gbz80"
+ RMDir "$INSTDIR\include\asm\ds390"
RMDir "$INSTDIR\include\asm\default"
RMDir "$INSTDIR\include\asm"
+ RMDir "$INSTDIR\include\z80"
+ RMDir "$INSTDIR\include\pic16"
+ RMDir "$INSTDIR\include\mcs51"
RMDir "$INSTDIR\include"
RMDir "$INSTDIR\doc"
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
!verbose 3
-!include "WinMessages.NSH"
+!include "WinMessages.nsh"
!verbose 4
; AddToPath - Adds the given dir to the search path.
Push $3
Push $4
- # don't add if the path doesn't exist
+ ; don't add if the path doesn't exist
IfFileExists $0 "" AddToPath_done
Call IsNT
FileOpen $1 "$1\autoexec.bat" a
FileSeek $1 -1 END
FileReadByte $1 $2
- IntCmp $2 26 0 +2 +2 # DOS EOF
- FileSeek $1 -1 END # write over EOF
+ IntCmp $2 26 0 +2 +2 ; DOS EOF
+ FileSeek $1 -1 END ; write over EOF
FileWrite $1 "$\r$\nSET PATH=%PATH%;$3$\r$\n"
FileClose $1
SetRebootFlag true
AddToPath_NT:
ReadRegStr $1 HKCU "Environment" "PATH"
- StrCpy $2 $1 1 -1 # copy last char
- StrCmp $2 ";" 0 +2 # if last char == ;
- StrCpy $1 $1 -1 # remove last char
+ StrCpy $2 $1 1 -1 ; copy last char
+ StrCmp $2 ";" 0 +2 ; if last char == ;
+ StrCpy $1 $1 -1 ; remove last char
StrCmp $1 "" AddToPath_NTdoIt
StrCpy $0 "$1;$0"
AddToPath_NTdoIt:
Push $5
Push $6
- IntFmt $6 "%c" 26 # DOS EOF
+ IntFmt $6 "%c" 26 ; DOS EOF
Call un.IsNT
Pop $1
unRemoveFromPath_dosLoop:
FileRead $1 $3
- StrCpy $5 $3 1 -1 # read last char
- StrCmp $5 $6 0 +2 # if DOS EOF
- StrCpy $3 $3 -1 # remove DOS EOF so we can compare
+ StrCpy $5 $3 1 -1 ; read last char
+ StrCmp $5 $6 0 +2 ; if DOS EOF
+ StrCpy $3 $3 -1 ; remove DOS EOF so we can compare
StrCmp $3 "$0$\r$\n" unRemoveFromPath_dosLoopRemoveLine
StrCmp $3 "$0$\n" unRemoveFromPath_dosLoopRemoveLine
StrCmp $3 "$0" unRemoveFromPath_dosLoopRemoveLine
unRemoveFromPath_NT:
ReadRegStr $1 HKCU "Environment" "PATH"
- StrCpy $5 $1 1 -1 # copy last char
- StrCmp $5 ";" +2 # if last char != ;
- StrCpy $1 "$1;" # append ;
+ StrCpy $5 $1 1 -1 ; copy last char
+ StrCmp $5 ";" +2 ; if last char != ;
+ StrCpy $1 "$1;" ; append ;
Push $1
Push "$0;"
- Call un.StrStr ; Find `$0;` in $1
- Pop $2 ; pos of our dir
+ Call un.StrStr ; Find `$0;` in $1
+ Pop $2 ; pos of our dir
StrCmp $2 "" unRemoveFromPath_done
; else, it is in path
- # $0 - path to add
- # $1 - path var
+ ; $0 - path to add
+ ; $1 - path var
StrLen $3 "$0;"
StrLen $4 $2
- StrCpy $5 $1 -$4 # $5 is now the part before the path to remove
- StrCpy $6 $2 "" $3 # $6 is now the part after the path to remove
+ StrCpy $5 $1 -$4 ; $5 is now the part before the path to remove
+ StrCpy $6 $2 "" $3 ; $6 is now the part after the path to remove
StrCpy $3 $5$6
- StrCpy $5 $3 1 -1 # copy last char
- StrCmp $5 ";" 0 +2 # if last char == ;
- StrCpy $3 $3 -1 # remove last char
+ StrCpy $5 $3 1 -1 ; copy last char
+ StrCmp $5 ";" 0 +2 ; if last char == ;
+ StrCpy $3 $3 -1 ; remove last char
StrCmp $3 "" +3
; New PATH not empty: update the registry
Pop $0
FunctionEnd
-###########################################
-# Utility Functions #
-###########################################
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; Utility Functions ;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; IsNT
; no input
!macro StrStr un
Function ${un}StrStr
-Exch $R1 ; st=haystack,old$R1, $R1=needle
- Exch ; st=old$R1,haystack
+Exch $R1 ; st=haystack,old$R1, $R1=needle
+ Exch ; st=old$R1,haystack
Exch $R2 ; st=old$R1,old$R2, $R2=haystack
Push $R3
Push $R4
!macroend
!insertmacro StrStr ""
!insertmacro StrStr "un."
-