* support/scripts/inc2h.pl: WIN32 port
[fw/sdcc] / support / scripts / sdcc.nsi
index c457ee642d60ba930450a9ff034194a43f86f7af..3c297df08a11456b514142414e6ea20628906625 100644 (file)
 #  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
@@ -53,6 +71,7 @@ Var MUI_STARTMENUPAGE_VARIABLE
 
 ;--------------------------------
 !define MUI_ABORTWARNING
+
 !insertmacro MUI_PAGE_WELCOME
 !insertmacro MUI_PAGE_LICENSE "${SDCC_ROOT}\COPYING.TXT"
 !define MUI_STARTMENUPAGE_DEFAULTFOLDER "SDCC"
@@ -65,7 +84,9 @@ Var MUI_STARTMENUPAGE_VARIABLE
 !insertmacro MUI_PAGE_DIRECTORY
 !insertmacro MUI_PAGE_INSTFILES
 !insertmacro MUI_PAGE_FINISH
+
 !insertmacro MUI_UNPAGE_INSTFILES
+
 !insertmacro MUI_LANGUAGE "English"
 
 Name "SDCC"
@@ -76,8 +97,38 @@ ShowInstDetails show
 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
@@ -103,10 +154,22 @@ Section "SDCC include files"
   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
@@ -222,12 +285,6 @@ Section -INI
   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"
@@ -238,8 +295,14 @@ Section -PostInstall
   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
@@ -324,8 +387,14 @@ Section Uninstall
   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"
@@ -356,9 +425,15 @@ Section Uninstall
   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"
@@ -378,7 +453,7 @@ SectionEnd
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 !verbose 3
-!include "WinMessages.NSH"
+!include "WinMessages.nsh"
 !verbose 4
 
 ; AddToPath - Adds the given dir to the search path.
@@ -392,7 +467,7 @@ Function AddToPath
   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
@@ -431,8 +506,8 @@ Function AddToPath
     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
@@ -440,9 +515,9 @@ Function AddToPath
 
   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:
@@ -469,7 +544,7 @@ Function un.RemoveFromPath
   Push $5
   Push $6
 
-  IntFmt $6 "%c" 26 # DOS EOF
+  IntFmt $6 "%c" 26 ; DOS EOF
 
   Call un.IsNT
   Pop $1
@@ -485,9 +560,9 @@ Function un.RemoveFromPath
 
     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
@@ -509,26 +584,26 @@ Function un.RemoveFromPath
 
   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
@@ -548,9 +623,9 @@ Function un.RemoveFromPath
     Pop $0
 FunctionEnd
 
-###########################################
-#            Utility Functions            #
-###########################################
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;            Utility Functions            ;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 ; IsNT
 ; no input
@@ -595,8 +670,8 @@ FunctionEnd
 
 !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
@@ -625,4 +700,3 @@ FunctionEnd
 !macroend
 !insertmacro StrStr ""
 !insertmacro StrStr "un."
-