* support/scripts/sdcc.nsi:
[fw/sdcc] / support / scripts / sdcc.nsi
1 # sdcc.nsi - NSIS installer script for SDCC
2 #
3 # Copyright (c) 2003-2009 Borut Razem
4 #
5 # This file is part of sdcc.
6 #
7 #  This software is provided 'as-is', without any express or implied
8 #  warranty.  In no event will the authors be held liable for any damages
9 #  arising from the use of this software.
10 #
11 #  Permission is granted to anyone to use this software for any purpose,
12 #  including commercial applications, and to alter it and redistribute it
13 #  freely, subject to the following restrictions:
14 #
15 #  1. The origin of this software must not be misrepresented; you must not
16 #     claim that you wrote the original software. If you use this software
17 #     in a product, an acknowledgment in the product documentation would be
18 #     appreciated but is not required.
19 #  2. Altered source versions must be plainly marked as such, and must not be
20 #     misrepresented as being the original software.
21 #  3. This notice may not be removed or altered from any source distribution.
22 #
23 #  Borut Razem
24 #  borut.razem@siol.net
25
26 # How to create WIN32 setup.exe
27 #
28 # - unpack WIN32 mingw daily snapshot sdcc-snapshot-i586-mingw32msvc-yyyymmdd-rrrr.zip
29 #   to a clean directory (the option to create directories should be enabled).
30 #   A sub directory sdcc is created (referenced as PKGDIR in continuation).
31 # - copy files sdcc/support/scripts/sdcc.ico and sdcc/support/scripts/sdcc.nsi
32 #   (this file) from the sdcc Subversion snapshot to the PKGDIR directory
33 # - copy file COPYING from the sdcc Subversion snapshot to the PKGDIR directory,
34 #   rename it to COPYING.txt and convert it to DOS format:
35 #   unix2dos COPYING.txt
36 # - copy readline5.dll to PKGDIR/bin/readline5.dll
37 # - run NSIS installer from PKGDIR directory:
38 #   "c:\Program Files\NSIS\makensis.exe" -DVER_MAJOR=<SDCC_VER_MAJOR> -DVER_MINOR=<SDCC_VER_MINOR> -DVER_REVISION=<SDCC_VER_DEVEL> -DVER_BUILD=<SDCC_REVISION> sdcc.nsi
39 #   replace <VER_XXX> with the appropriate values, for example for SDCC 2.7.4:
40 #   <SDCC_VER_MAJOR> = 2
41 #   <SDCC_VER_MINOR> = 7
42 #   <SDCC_VER_DEVEL> = 4
43 #   replace <SDCC_REVISION> with the current svn revision number
44 # - A setup file setup.exe is created in PKGDIR directory.
45 #   Rename it to sdcc-yyyymmdd-rrrr-setup.exe and upload it
46 #   to sdcc download repository at sourceforge.net
47 #
48 #
49 # How to create WIN32 release setup.exe package
50 #
51 # - unpack WIN32 mingw daily snapshot sdcc-snapshot-i586-mingw32msvc-yyyymmdd-rrrr.zip
52 #   to a clean directory (the option to create directories should be enabled).
53 #   A sub directory sdcc is created (referenced as PKGDIR in continuation).
54 # - remove the PKGDIR/doc/ directory
55 # - unpack sdcc-doc-yyyymmdd-rrrr.zip to the PKGDIR/doc directory
56 # - copy files sdcc/support/scripts/sdcc.ico and sdcc/support/scripts/sdcc.nsi
57 #   (this file) from the sdcc Subversion snapshot to the PKGDIR directory
58 # - copy file COPYING from the sdcc Subversion snapshot to the PKGDIR directory,
59 #   rename it to COPYING.txt and convert it to DOS format:
60 #   unix2dos COPYING.txt
61 # - copy readline5.dll to PKGDIR/bin/readline5.dll
62 # - run NSIS installer from PKGDIR directory:
63 #   "c:\Program Files\NSIS\makensis.exe" -DFULL_DOC -DVER_MAJOR=<VER_MAJOR> -DVER_MINOR=<VER_MINOR> -DVER_REVISION=<VER_PATCH> -DVER_BUILD=<REVISION> sdcc.nsi
64 # - A setup file setup.exe is created in PKGDIR directory.
65 #   Rename it to sdcc-x.x.x-setup.exe and upload it
66 #   to sdcc download repository at sourceforge.net
67 #
68 # How to upload secc setup.exe tosourceforge.net
69 #
70 # Execute following commands from the cmd prompt:
71 # - sftp sdcc.sourceforge.net
72 # - cd /home/groups/s/sd/sdcc/htdocs/snapshots/i586-mingw32msvc-setup
73 # - put sdcc_yyyymmdd_setup.exe
74 # - quit
75 #
76 # For debugging define -DSDCC.DEBUG command line option
77
78 ;--------------------------------
79 ; Debugging Macros
80
81 !ifdef SDCC.DEBUG
82   Var SDCC.FunctionName
83   Var SDCC.StrStack0
84   Var SDCC.StrStack1
85   Var SDCC.StrStack2
86   Var SDCC.StrStack3
87   Var SDCC.StrStack4
88
89 !define SDCC.PushStr "!insertmacro MACRO_SDCC_PushStr"
90 !macro MACRO_SDCC_PushStr NAME
91   StrCpy $SDCC.StrStack4 $SDCC.StrStack3
92   StrCpy $SDCC.StrStack3 $SDCC.StrStack2
93   StrCpy $SDCC.StrStack2 $SDCC.StrStack1
94   StrCpy $SDCC.StrStack1 $SDCC.StrStack0
95   StrCpy $SDCC.StrStack0 $SDCC.FunctionName
96   StrCpy $SDCC.FunctionName "${NAME}"
97 !macroend
98
99 !define SDCC.PopStr "!insertmacro MACRO_SDCC_PopStr"
100 !macro MACRO_SDCC_PopStr
101   StrCpy $SDCC.FunctionName $SDCC.StrStack0
102   StrCpy $SDCC.StrStack0 $SDCC.StrStack1
103   StrCpy $SDCC.StrStack1 $SDCC.StrStack2
104   StrCpy $SDCC.StrStack2 $SDCC.StrStack3
105   StrCpy $SDCC.StrStack3 $SDCC.StrStack4
106 !macroend
107 !endif
108
109 !define DebugMsg "!insertmacro MACRO_SDCC_DebugMsg"
110 !macro MACRO_SDCC_DebugMsg MSG
111   !ifdef SDCC.DEBUG
112     MessageBox MB_OK "*** $SDCC.FunctionName: ${MSG} ***"
113   !endif
114 !macroend
115
116 !define Function "!insertmacro MACRO_SDCC_Function"
117 !macro MACRO_SDCC_Function NAME
118   Function "${NAME}"
119   !ifdef SDCC.DEBUG
120     ${SDCC.PushStr} ${NAME}
121   !endif
122 !macroend
123
124 !define FunctionEnd "!insertmacro MACRO_SDCC_FunctionEnd"
125 !macro MACRO_SDCC_FunctionEnd
126   !ifdef SDCC.DEBUG
127     ${SDCC.PopStr}
128   !endif
129   FunctionEnd
130 !macroend
131
132 !define Section "!insertmacro MACRO_SDCC_Section"
133 !macro MACRO_SDCC_Section NAME ID
134   Section "${NAME}" "${ID}"
135   !ifdef SDCC.DEBUG
136     ${SDCC.PushStr} "${NAME}"
137   !endif
138 !macroend
139
140 !define UnselectedSection "!insertmacro MACRO_SDCC_UnselectedSection"
141 !macro MACRO_SDCC_UnselectedSection NAME ID
142   Section /o ${NAME} ${ID}
143   !ifdef SDCC.DEBUG
144     ${SDCC.PushStr} "${NAME}"
145   !endif
146 !macroend
147
148 !define SectionEnd "!insertmacro MACRO_SDCC_SectionEnd"
149 !macro MACRO_SDCC_SectionEnd
150   !ifdef SDCC.DEBUG
151     ${SDCC.PopStr}
152   !endif
153   SectionEnd
154 !macroend
155
156
157 !define PRODUCT_NAME "SDCC"
158
159 ; Version
160 !ifdef VER_MAJOR & VER_MINOR & VER_REVISION & VER_BUILD
161   !define PRODUCT_VERSION "${VER_MAJOR}.${VER_MINOR}.${VER_REVISION}"
162 !else
163   !define PRODUCT_VERSION "XX.XX"
164 !endif
165
166 SetCompressor /SOLID lzma
167
168 !define SDCC_ROOT "."
169
170 !define DEV_ROOT "${SDCC_ROOT}"
171
172 !ifdef FULL_DOC
173 !system "unix2dos ${SDCC_ROOT}\doc\ChangeLog.txt" = 0
174 !else
175 !system "unix2dos ${SDCC_ROOT}\doc\ChangeLog_head.txt" = 0
176 !endif
177 !system "unix2dos ${SDCC_ROOT}\doc\README.TXT" = 0
178
179 InstType "Full (Bin, ucSim, SDCDB, Doc, Lib, Src)"
180 InstType "Medium (Bin, ucSim, SDCDB, Doc, Lib)"
181 InstType "Compact (Bin, ucSim, SDCDB, Doc)"
182
183 ;--------------------------------
184 ; Configuration
185
186 !define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
187 !define UNINST_ROOT_KEY HKLM
188 !define SDCC_ROOT_KEY HKLM
189
190 ;--------------------------------
191 ; Header Files
192
193 !include MUI2.nsh
194 !include WordFunc.nsh
195 !include StrFunc.nsh
196 ${StrStr}
197 ${UnStrStr}
198
199 ;--------------------------------
200 ; Functions
201
202 !ifdef VER_MAJOR & VER_MINOR & VER_REVISION & VER_BUILD
203   !insertmacro VersionCompare
204 !endif
205
206 ;--------------------------------
207 ; Variables
208
209 Var SDCC.PathToRemove
210
211 ;--------------------------------
212 ; Configuration
213
214 ; MUI Settings
215 !define MUI_ABORTWARNING
216 !define MUI_ICON ".\sdcc.ico"
217
218 ; Welcome page
219 !insertmacro MUI_PAGE_WELCOME
220
221 ; License page
222 !insertmacro MUI_PAGE_LICENSE "${SDCC_ROOT}\COPYING.txt"
223
224 ; Uninstall/reinstall page
225 !ifdef VER_MAJOR & VER_MINOR & VER_REVISION & VER_BUILD
226 Page custom SDCC.PageReinstall SDCC.PageLeaveReinstall
227 !endif
228
229 ; StartMenu page
230 !define MUI_STARTMENUPAGE_DEFAULTFOLDER ${PRODUCT_NAME}
231 !define MUI_STARTMENUPAGE_REGISTRY_ROOT ${UNINST_ROOT_KEY}
232 !define MUI_STARTMENUPAGE_REGISTRY_KEY "${PRODUCT_UNINST_KEY}"
233 !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "NSIS:StartMenuDir"
234 !define MUI_STARTMENUPAGE_NODISABLE
235 Var MUI_STARTMENUPAGE_VARIABLE
236 !insertmacro MUI_PAGE_STARTMENU Application $MUI_STARTMENUPAGE_VARIABLE
237
238 ; Components page
239 !define MUI_COMPONENTSPAGE_SMALLDESC
240 !insertmacro MUI_PAGE_COMPONENTS
241
242 ; Directory page
243 !insertmacro MUI_PAGE_DIRECTORY
244
245 ; Instfiles page
246 !define MUI_PAGE_CUSTOMFUNCTION_LEAVE "SDCC.InstFilesLeave"
247 !insertmacro MUI_PAGE_INSTFILES
248
249 ${Function} SDCC.InstFilesLeave
250   ; Remove old path if reinstallation
251   ${If} $SDCC.PathToRemove != ""
252     ${DebugMsg} "removing path $SDCC.PathToRemove"
253     Push $SDCC.PathToRemove
254     Call SDCC.RemoveFromPath
255   ${EndIf}
256 ${FunctionEnd}
257
258 ; Finish page - add to path
259 !define MUI_FINISHPAGE_TEXT "Confirm the checkbox if you want to add SDCC binary directory to the PATH environment variable"
260 !define MUI_FINISHPAGE_SHOWREADME_TEXT "Add $INSTDIR\bin to the PATH"
261 !define MUI_FINISHPAGE_SHOWREADME_FUNCTION SDCC.AddBinToPath
262 !define MUI_FINISHPAGE_SHOWREADME
263 !define MUI_FINISHPAGE_BUTTON "Next"
264 !insertmacro MUI_PAGE_FINISH
265
266 ; Finish page - reboot
267 !insertmacro MUI_PAGE_FINISH
268
269 ${Function} SDCC.AddBinToPath
270   ; Add new path
271   ${DebugMsg} "adding path $INSTDIR\bin"
272   Push "$INSTDIR\bin"
273   Call SDCC.AddToPath
274 ${FunctionEnd}
275
276 ; Uninstaller pages
277 !insertmacro MUI_UNPAGE_CONFIRM
278 !insertmacro MUI_UNPAGE_INSTFILES
279 !insertmacro MUI_UNPAGE_FINISH
280
281 ; Language files
282 !insertmacro MUI_LANGUAGE "English"
283
284 Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
285 BrandingText ""
286 OutFile "setup.exe"
287 InstallDir "$PROGRAMFILES\SDCC"
288 ;;;;ShowInstDetails show
289 ;;;;ShowUnInstDetails show
290
291
292 ${Function} .onInit
293   ${DebugMsg} "Pre INSTDIR = $INSTDIR"
294
295 !ifndef VER_MAJOR & VER_MINOR & VER_REVISION & VER_BUILD
296   ; Old unistallation method
297   ; Uninstall the old version, if present
298   ReadRegStr $R0 ${UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString"
299   StrCmp $R0 "" inst
300
301   MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION \
302   "$(^Name) is already installed. $\n$\nClick 'OK' to remove the \
303   previous version or 'Cancel' to cancel this upgrade." \
304   IDOK uninst
305   Abort
306
307 uninst:
308   ; Run the uninstaller
309   ClearErrors
310   ExecWait '$R0'
311
312   Goto done
313 inst:
314
315   ; Install the new version
316   MessageBox MB_YESNO|MB_ICONQUESTION "This will install $(^Name). Do you wish to continue?" IDYES +2
317   Abort
318
319 done:
320 !else
321   ; If the registry key exists it is an uninstallation or reinstallation:
322   ;  take the old installation directory
323   Push $R0
324
325   ReadRegStr $R0 ${UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "InstallLocation"
326   ${IfNot} ${Errors}
327     StrCpy $INSTDIR $R0
328     StrCpy $SDCC.PathToRemove "$INSTDIR\bin"
329   ${EndIf}
330
331   Pop $R0
332 !endif
333   ${DebugMsg} "Post INSTDIR = $INSTDIR"
334 ${FunctionEnd}
335
336 ${Function} un.onInit
337
338   ${DebugMsg} "Pre INSTDIR = $INSTDIR"
339
340   Push $R0
341   ReadRegStr $R0 ${UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "InstallLocation"
342   ${IfNot} ${Errors}
343     StrCpy $INSTDIR $R0
344   ${EndIf}
345   Pop $R0
346
347   ${DebugMsg} "Post INSTDIR = $INSTDIR"
348
349 ${FunctionEnd}
350
351 ${Section} -Common SECCOMMON
352   SetOutPath "$INSTDIR"
353   File ".\sdcc.ico"
354   File "${SDCC_ROOT}\COPYING.txt"
355 ${SectionEnd}
356
357 ${Section} "SDCC application files" SEC01
358   SectionIn 1 2 3 RO
359   SetOutPath "$INSTDIR\bin"
360   File "${SDCC_ROOT}\bin\as-gbz80.exe"
361   File "${SDCC_ROOT}\bin\as-hc08.exe"
362   File "${SDCC_ROOT}\bin\as-z80.exe"
363   File "${SDCC_ROOT}\bin\asx8051.exe"
364   File "${SDCC_ROOT}\bin\aslink.exe"
365   File "${SDCC_ROOT}\bin\asranlib.exe"
366   File "${SDCC_ROOT}\bin\link-gbz80.exe"
367   File "${SDCC_ROOT}\bin\link-hc08.exe"
368   File "${SDCC_ROOT}\bin\link-z80.exe"
369   File "${SDCC_ROOT}\bin\makebin.exe"
370   File "${SDCC_ROOT}\bin\packihx.exe"
371   File "${SDCC_ROOT}\bin\sdcc.exe"
372   File "${SDCC_ROOT}\bin\sdcclib.exe"
373   File "${SDCC_ROOT}\bin\sdcpp.exe"
374   File "${SDCC_ROOT}\bin\readline5.dll"
375 ${SectionEnd}
376
377 ${Section} "ucSim application files" SEC02
378   SectionIn 1 2 3
379   SetOutPath "$INSTDIR\bin"
380   File "${SDCC_ROOT}\bin\s51.exe"
381   File "${SDCC_ROOT}\bin\savr.exe"
382   File "${SDCC_ROOT}\bin\shc08.exe"
383   File "${SDCC_ROOT}\bin\sz80.exe"
384 ${SectionEnd}
385
386 ${Section} "SDCDB files" SEC03
387   SectionIn 1 2 3
388   File "${SDCC_ROOT}\bin\sdcdb.exe"
389   File "${SDCC_ROOT}\bin\sdcdb.el"
390   File "${SDCC_ROOT}\bin\sdcdbsrc.el"
391 ${SectionEnd}
392
393 ${Section} "SDCC documentation" SEC04
394   SectionIn 1 2 3
395   SetOutPath "$INSTDIR\doc"
396 !ifdef FULL_DOC
397   File /r "${SDCC_ROOT}\doc\*"
398 !else
399   File "${SDCC_ROOT}\doc\ChangeLog_head.txt"
400   File "${SDCC_ROOT}\doc\README.TXT"
401 !endif
402 ${SectionEnd}
403
404 ${Section} "SDCC include files" SEC05
405   SectionIn 1 2
406   SetOutPath "$INSTDIR\include\asm\default"
407   File "${DEV_ROOT}\include\asm\default\features.h"
408   SetOutPath "$INSTDIR\include\asm\ds390"
409   File "${DEV_ROOT}\include\asm\ds390\features.h"
410   SetOutPath "$INSTDIR\include\asm\gbz80"
411   File "${DEV_ROOT}\include\asm\gbz80\features.h"
412   SetOutPath "$INSTDIR\include\asm\mcs51"
413   File "${DEV_ROOT}\include\asm\mcs51\features.h"
414   SetOutPath "$INSTDIR\include\asm\pic"
415   File "${DEV_ROOT}\include\asm\pic\features.h"
416   SetOutPath "$INSTDIR\include\asm\pic16"
417   File "${DEV_ROOT}\include\asm\pic16\features.h"
418   SetOutPath "$INSTDIR\include\asm\z80"
419   File "${DEV_ROOT}\include\asm\z80\features.h"
420   SetOutPath "$INSTDIR\include\hc08"
421   File "${DEV_ROOT}\include\hc08\*.h"
422   SetOutPath "$INSTDIR\include\mcs51"
423   File "${DEV_ROOT}\include\mcs51\*.h"
424   SetOutPath "$INSTDIR\include\pic"
425   File "${DEV_ROOT}\include\pic\*.h"
426   File "${DEV_ROOT}\include\pic\*.txt"
427   File "${DEV_ROOT}\include\pic\*.inc"
428   SetOutPath "$INSTDIR\include\pic16"
429   File "${DEV_ROOT}\include\pic16\*.h"
430   File "${DEV_ROOT}\include\pic16\*.txt"
431   SetOutPath "$INSTDIR\include\z80"
432   File "${DEV_ROOT}\include\z80\*.h"
433   SetOutPath "$INSTDIR\include"
434   File "${DEV_ROOT}\include\*.h"
435 ${SectionEnd}
436
437 ${Section} "SDCC DS390 library" SEC06
438   SectionIn 1 2
439   SetOutPath "$INSTDIR\lib\ds390"
440   File "${DEV_ROOT}\lib\ds390\*.*"
441 ${SectionEnd}
442
443 ${Section} "SDCC DS400 library" SEC07
444   SectionIn 1 2
445   SetOutPath "$INSTDIR\lib\ds400"
446   File "${DEV_ROOT}\lib\ds400\*.*"
447 ${SectionEnd}
448
449 ${Section} "SDCC GBZ80 library" SEC08
450   SectionIn 1 2
451   SetOutPath "$INSTDIR\lib\gbz80"
452   File "${DEV_ROOT}\lib\gbz80\*.*"
453 ${SectionEnd}
454
455 ${Section} "SDCC Z80 library" SEC09
456   SectionIn 1 2
457   SetOutPath "$INSTDIR\lib\z80"
458   File "${DEV_ROOT}\lib\z80\*.*"
459 ${SectionEnd}
460
461 ${Section} "SDCC small model library" SEC10
462   SectionIn 1 2
463   SetOutPath "$INSTDIR\lib\small"
464   File "${DEV_ROOT}\lib\small\*.*"
465 ${SectionEnd}
466
467 ${Section} "SDCC medium model library" SEC11
468   SectionIn 1 2
469   SetOutPath "$INSTDIR\lib\medium"
470   File "${DEV_ROOT}\lib\medium\*.*"
471 ${SectionEnd}
472
473 ${Section} "SDCC large model library" SEC12
474   SectionIn 1 2
475   SetOutPath "$INSTDIR\lib\large"
476   File "${DEV_ROOT}\lib\large\*.*"
477 ${SectionEnd}
478
479 ${Section} "SDCC small-stack-auto model library" SEC13
480   SectionIn 1 2
481   SetOutPath "$INSTDIR\lib\small-stack-auto"
482   File "${DEV_ROOT}\lib\small-stack-auto\*.*"
483 ${SectionEnd}
484
485 ${Section} "SDCC HC08 library" SEC14
486   SectionIn 1 2
487   SetOutPath "$INSTDIR\lib\hc08"
488   File "${DEV_ROOT}\lib\hc08\*.*"
489 ${SectionEnd}
490
491 ${Section} "SDCC PIC16 library" SEC15
492   SectionIn 1 2
493   SetOutPath "$INSTDIR\lib\pic16"
494   File "${DEV_ROOT}\lib\pic16\*.o"
495   File "${DEV_ROOT}\lib\pic16\*.lib"
496 ${SectionEnd}
497
498 ${Section} "SDCC PIC library" SEC16
499   SectionIn 1 2
500   SetOutPath "$INSTDIR\lib\pic"
501   File "${DEV_ROOT}\lib\pic\*.lib"
502 ${SectionEnd}
503
504 ${Section} "SDCC library sources" SEC17
505   SectionIn 1
506   SetOutPath "$INSTDIR\lib\src\ds390\examples"
507   File "${DEV_ROOT}\lib\src\ds390\examples\MOVED"
508
509   SetOutPath "$INSTDIR\lib\src\ds390"
510   File "${DEV_ROOT}\lib\src\ds390\*.c"
511 #  File "${DEV_ROOT}\lib\src\ds390\Makefile"
512
513   SetOutPath "$INSTDIR\lib\src\ds400"
514   File "${DEV_ROOT}\lib\src\ds400\*.c"
515 #  File "${DEV_ROOT}\lib\src\ds400\Makefile"
516
517   SetOutPath "$INSTDIR\lib\src\gbz80"
518   File "${DEV_ROOT}\lib\src\gbz80\*.c"
519   File "${DEV_ROOT}\lib\src\gbz80\*.s"
520 #  File "${DEV_ROOT}\lib\src\gbz80\Makefile"
521
522   SetOutPath "$INSTDIR\lib\src\z80"
523   File "${DEV_ROOT}\lib\src\z80\*.s"
524 #  File "${DEV_ROOT}\lib\src\z80\Makefile"
525
526   SetOutPath "$INSTDIR\lib\src\hc08"
527   File "${DEV_ROOT}\lib\src\hc08\*.c"
528 #  File "${DEV_ROOT}\lib\src\hc08\Makefile"
529
530   SetOutPath "$INSTDIR\lib\src\mcs51"
531   File "${DEV_ROOT}\lib\src\mcs51\*.asm"
532 #  File "${DEV_ROOT}\lib\src\mcs51\Makefile"
533
534   SetOutPath "$INSTDIR\lib\src\small"
535 #  File "${DEV_ROOT}\lib\src\small\Makefile"
536
537   SetOutPath "$INSTDIR\lib\src\medium"
538 #  File "${DEV_ROOT}\lib\src\medium\Makefile"
539
540   SetOutPath "$INSTDIR\lib\src\large"
541 #  File "${DEV_ROOT}\lib\src\large\Makefile"
542
543   SetOutPath "$INSTDIR\lib\src\pic"
544 #  File "${DEV_ROOT}\lib\src\pic\configure"
545 #  File "${DEV_ROOT}\lib\src\pic\configure.in"
546 #  File "${DEV_ROOT}\lib\src\pic\GPL"
547 #  File "${DEV_ROOT}\lib\src\pic\LGPL"
548 #  File "${DEV_ROOT}\lib\src\pic\Makefile"
549 #  File "${DEV_ROOT}\lib\src\pic\Makefile.common"
550 #  File "${DEV_ROOT}\lib\src\pic\Makefile.common.in"
551 #  File "${DEV_ROOT}\lib\src\pic\Makefile.rules"
552 #  File "${DEV_ROOT}\lib\src\pic\Makefile.subdir"
553 #  File "${DEV_ROOT}\lib\src\pic\NEWS"
554 #  File "${DEV_ROOT}\lib\src\pic\README"
555   File "${DEV_ROOT}\lib\src\pic\TEMPLATE.c"
556   File "${DEV_ROOT}\lib\src\pic\TEMPLATE.S"
557
558   SetOutPath "$INSTDIR\lib\src\pic\libsdcc"
559   File "${DEV_ROOT}\lib\src\pic\libsdcc\*.c"
560   File "${DEV_ROOT}\lib\src\pic\libsdcc\*.S"
561   File "${DEV_ROOT}\lib\src\pic\libsdcc\*.inc"
562 #  File "${DEV_ROOT}\lib\src\pic\libsdcc\Makefile"
563   
564   SetOutPath "$INSTDIR\lib\src\pic\libdev"
565   File "${DEV_ROOT}\lib\src\pic\libdev\*.c"
566 #  File "${DEV_ROOT}\lib\src\pic\libdev\Makefile"
567
568   SetOutPath "$INSTDIR\lib\src\pic\libm"
569   File "${DEV_ROOT}\lib\src\pic\libm\*.c"
570
571   SetOutPath "$INSTDIR\lib\src\pic16"
572 #  File "${DEV_ROOT}\lib\src\pic16\configure"
573 #  File "${DEV_ROOT}\lib\src\pic16\configure.in"
574 #  File "${DEV_ROOT}\lib\src\pic16\COPYING"
575 #  File "${DEV_ROOT}\lib\src\pic16\Makefile"
576 #  File "${DEV_ROOT}\lib\src\pic16\Makefile.common"
577 #  File "${DEV_ROOT}\lib\src\pic16\Makefile.common.in"
578 #  File "${DEV_ROOT}\lib\src\pic16\Makefile.rules"
579 #  File "${DEV_ROOT}\lib\src\pic16\Makefile.subdir"
580 #  File "${DEV_ROOT}\lib\src\pic16\pics.all"
581 #  File "${DEV_ROOT}\lib\src\pic16\pics.build"
582 #  File "${DEV_ROOT}\lib\src\pic16\README"
583
584   SetOutPath "$INSTDIR\lib\src\pic16\debug"
585 #  File "${DEV_ROOT}\lib\src\pic16\debug\Makefile"
586
587   SetOutPath "$INSTDIR\lib\src\pic16\debug\gstack"
588 #  File "${DEV_ROOT}\lib\src\pic16\debug\gstack\Makefile"
589   File "${DEV_ROOT}\lib\src\pic16\debug\gstack\*.c"
590
591   SetOutPath "$INSTDIR\lib\src\pic16\libc"
592 #  File "${DEV_ROOT}\lib\src\pic16\libc\Makefile"
593
594   SetOutPath "$INSTDIR\lib\src\pic16\libc\ctype"
595   File "${DEV_ROOT}\lib\src\pic16\libc\ctype\*.c"
596 #  File "${DEV_ROOT}\lib\src\pic16\libc\ctype\Makefile"
597
598   SetOutPath "$INSTDIR\lib\src\pic16\libc\delay"
599   File "${DEV_ROOT}\lib\src\pic16\libc\delay\*.S"
600 #  File "${DEV_ROOT}\lib\src\pic16\libc\delay\Makefile"
601
602   SetOutPath "$INSTDIR\lib\src\pic16\libc\stdio"
603   File "${DEV_ROOT}\lib\src\pic16\libc\stdio\*.c"
604 #  File "${DEV_ROOT}\lib\src\pic16\libc\stdio\Makefile"
605
606   SetOutPath "$INSTDIR\lib\src\pic16\libc\stdlib"
607   File "${DEV_ROOT}\lib\src\pic16\libc\stdlib\*.c"
608   File "${DEV_ROOT}\lib\src\pic16\libc\stdlib\*.S"
609 #  File "${DEV_ROOT}\lib\src\pic16\libc\stdlib\Makefile"
610
611   SetOutPath "$INSTDIR\lib\src\pic16\libc\string"
612   File "${DEV_ROOT}\lib\src\pic16\libc\string\*.c"
613 #  File "${DEV_ROOT}\lib\src\pic16\libc\string\Makefile"
614
615   SetOutPath "$INSTDIR\lib\src\pic16\libc\utils"
616   File "${DEV_ROOT}\lib\src\pic16\libc\utils\*.S"
617 #  File "${DEV_ROOT}\lib\src\pic16\libc\utils\Makefile"
618
619   SetOutPath "$INSTDIR\lib\src\pic16\libdev"
620   File "${DEV_ROOT}\lib\src\pic16\libdev\*.c"
621 #  File "${DEV_ROOT}\lib\src\pic16\libdev\Makefile"
622
623   SetOutPath "$INSTDIR\lib\src\pic16\libio"
624   File "${DEV_ROOT}\lib\src\pic16\libio\*.ignore"
625 #  File "${DEV_ROOT}\lib\src\pic16\libio\Makefile"
626
627   SetOutPath "$INSTDIR\lib\src\pic16\libio\adc"
628   File "${DEV_ROOT}\lib\src\pic16\libio\adc\*.c"
629 #  File "${DEV_ROOT}\lib\src\pic16\libio\adc\Makefile"
630
631   SetOutPath "$INSTDIR\lib\src\pic16\libio\i2c"
632   File "${DEV_ROOT}\lib\src\pic16\libio\i2c\*.c"
633 #  File "${DEV_ROOT}\lib\src\pic16\libio\i2c\Makefile"
634
635   SetOutPath "$INSTDIR\lib\src\pic16\libio\usart"
636   File "${DEV_ROOT}\lib\src\pic16\libio\usart\*.c"
637 #  File "${DEV_ROOT}\lib\src\pic16\libio\usart\Makefile"
638
639   SetOutPath "$INSTDIR\lib\src\pic16\libm"
640   File "${DEV_ROOT}\lib\src\pic16\libm\*.c"
641 #  File "${DEV_ROOT}\lib\src\pic16\libm\Makefile"
642
643   SetOutPath "$INSTDIR\lib\src\pic16\libsdcc"
644 #  File "${DEV_ROOT}\lib\src\pic16\libsdcc\Makefile"
645
646   SetOutPath "$INSTDIR\lib\src\pic16\libsdcc\char"
647   File "${DEV_ROOT}\lib\src\pic16\libsdcc\char\*.c"
648 #  File "${DEV_ROOT}\lib\src\pic16\libsdcc\char\Makefile"
649
650   SetOutPath "$INSTDIR\lib\src\pic16\libsdcc\fixed16x16"
651   File "${DEV_ROOT}\lib\src\pic16\libsdcc\fixed16x16\*.c"
652   File "${DEV_ROOT}\lib\src\pic16\libsdcc\fixed16x16\*.S"
653 #  File "${DEV_ROOT}\lib\src\pic16\libsdcc\fixed16x16\Makefile"
654
655   SetOutPath "$INSTDIR\lib\src\pic16\libsdcc\float"
656   File "${DEV_ROOT}\lib\src\pic16\libsdcc\float\*.c"
657 #  File "${DEV_ROOT}\lib\src\pic16\libsdcc\float\Makefile"
658
659   SetOutPath "$INSTDIR\lib\src\pic16\libsdcc\gptr"
660   File "${DEV_ROOT}\lib\src\pic16\libsdcc\gptr\*.c"
661 #  File "${DEV_ROOT}\lib\src\pic16\libsdcc\gptr\Makefile"
662
663   SetOutPath "$INSTDIR\lib\src\pic16\libsdcc\int"
664   File "${DEV_ROOT}\lib\src\pic16\libsdcc\int\*.c"
665 #  File "${DEV_ROOT}\lib\src\pic16\libsdcc\int\Makefile"
666
667   SetOutPath "$INSTDIR\lib\src\pic16\libsdcc\long"
668   File "${DEV_ROOT}\lib\src\pic16\libsdcc\long\*.c"
669 #  File "${DEV_ROOT}\lib\src\pic16\libsdcc\long\Makefile"
670
671   SetOutPath "$INSTDIR\lib\src\pic16\libsdcc\lregs"
672   File "${DEV_ROOT}\lib\src\pic16\libsdcc\lregs\*.c"
673 #  File "${DEV_ROOT}\lib\src\pic16\libsdcc\lregs\Makefile"
674
675   SetOutPath "$INSTDIR\lib\src\pic16\libsdcc\stack"
676   File "${DEV_ROOT}\lib\src\pic16\libsdcc\stack\*.S"
677
678   SetOutPath "$INSTDIR\lib\src\pic16\startup"
679   File "${DEV_ROOT}\lib\src\pic16\startup\*.c"
680 #  File "${DEV_ROOT}\lib\src\pic16\startup\Makefile"
681 #  File "${DEV_ROOT}\lib\src\pic16\startup\README"
682
683   SetOutPath "$INSTDIR\lib\src"
684   File "${DEV_ROOT}\lib\src\*.c"
685 ${SectionEnd}
686
687 ;--------------------------------
688 ;Descriptions
689
690 ;Language strings
691 LangString DESC_SEC01 ${LANG_ENGLISH} "SDCC application files"
692 LangString DESC_SEC02 ${LANG_ENGLISH} "ucSim application files"
693 LangString DESC_SEC03 ${LANG_ENGLISH} "SDCDB files"
694 LangString DESC_SEC04 ${LANG_ENGLISH} "SDCC documentation"
695 LangString DESC_SEC05 ${LANG_ENGLISH} "SDCC include files"
696 LangString DESC_SEC06 ${LANG_ENGLISH} "SDCC DS390 library"
697 LangString DESC_SEC07 ${LANG_ENGLISH} "SDCC DS400 library"
698 LangString DESC_SEC08 ${LANG_ENGLISH} "SDCC GBZ80 library"
699 LangString DESC_SEC09 ${LANG_ENGLISH} "SDCC Z80 library"
700 LangString DESC_SEC10 ${LANG_ENGLISH} "SDCC small model library"
701 LangString DESC_SEC11 ${LANG_ENGLISH} "SDCC medium model library"
702 LangString DESC_SEC12 ${LANG_ENGLISH} "SDCC large model library"
703 LangString DESC_SEC13 ${LANG_ENGLISH} "SDCC small-stack-auto model library"
704 LangString DESC_SEC14 ${LANG_ENGLISH} "SDCC HC08 library"
705 LangString DESC_SEC15 ${LANG_ENGLISH} "SDCC PIC16 library"
706 LangString DESC_SEC16 ${LANG_ENGLISH} "SDCC PIC library"
707 LangString DESC_SEC17 ${LANG_ENGLISH} "SDCC library sources"
708
709 ;Assign language strings to sections
710 !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
711   !insertmacro MUI_DESCRIPTION_TEXT ${SEC01} $(DESC_SEC01)
712   !insertmacro MUI_DESCRIPTION_TEXT ${SEC02} $(DESC_SEC02)
713   !insertmacro MUI_DESCRIPTION_TEXT ${SEC03} $(DESC_SEC03)
714   !insertmacro MUI_DESCRIPTION_TEXT ${SEC04} $(DESC_SEC04)
715   !insertmacro MUI_DESCRIPTION_TEXT ${SEC05} $(DESC_SEC05)
716   !insertmacro MUI_DESCRIPTION_TEXT ${SEC06} $(DESC_SEC06)
717   !insertmacro MUI_DESCRIPTION_TEXT ${SEC07} $(DESC_SEC07)
718   !insertmacro MUI_DESCRIPTION_TEXT ${SEC08} $(DESC_SEC08)
719   !insertmacro MUI_DESCRIPTION_TEXT ${SEC09} $(DESC_SEC09)
720   !insertmacro MUI_DESCRIPTION_TEXT ${SEC10} $(DESC_SEC10)
721   !insertmacro MUI_DESCRIPTION_TEXT ${SEC11} $(DESC_SEC11)
722   !insertmacro MUI_DESCRIPTION_TEXT ${SEC12} $(DESC_SEC12)
723   !insertmacro MUI_DESCRIPTION_TEXT ${SEC13} $(DESC_SEC13)
724   !insertmacro MUI_DESCRIPTION_TEXT ${SEC14} $(DESC_SEC14)
725   !insertmacro MUI_DESCRIPTION_TEXT ${SEC15} $(DESC_SEC15)
726   !insertmacro MUI_DESCRIPTION_TEXT ${SEC16} $(DESC_SEC16)
727   !insertmacro MUI_DESCRIPTION_TEXT ${SEC17} $(DESC_SEC17)
728 !insertmacro MUI_FUNCTION_DESCRIPTION_END
729 ;--------------------------------
730
731 ${Section} -Icons SECICONS
732 !insertmacro MUI_STARTMENU_WRITE_BEGIN Application
733   CreateDirectory "$SMPROGRAMS\$MUI_STARTMENUPAGE_VARIABLE"
734   CreateShortCut "$SMPROGRAMS\$MUI_STARTMENUPAGE_VARIABLE\Uninstall SDCC.lnk" "$INSTDIR\uninstall.exe" 
735 !ifdef FULL_DOC
736   CreateShortCut "$SMPROGRAMS\$MUI_STARTMENUPAGE_VARIABLE\Documentation.lnk" "$INSTDIR\doc\sdccman.pdf" "" "$INSTDIR\sdcc.ico" "" "" "" ""
737   CreateShortCut "$SMPROGRAMS\$MUI_STARTMENUPAGE_VARIABLE\README.lnk" "$INSTDIR\doc\README.TXT" "" "$INSTDIR\sdcc.ico" "" "" "" ""
738   CreateShortCut "$SMPROGRAMS\$MUI_STARTMENUPAGE_VARIABLE\Change Log.lnk" "$INSTDIR\doc\ChangeLog.txt" "" "$INSTDIR\sdcc.ico" "" "" "" ""
739 !else
740   CreateShortCut "$SMPROGRAMS\$MUI_STARTMENUPAGE_VARIABLE\Documentation.lnk" "$INSTDIR\doc\README.TXT" "" "$INSTDIR\sdcc.ico" "" "" "" ""
741   CreateShortCut "$SMPROGRAMS\$MUI_STARTMENUPAGE_VARIABLE\Change Log.lnk" "$INSTDIR\doc\ChangeLog_head.txt" "" "$INSTDIR\sdcc.ico" "" "" "" ""
742 !endif
743   CreateShortCut "$SMPROGRAMS\$MUI_STARTMENUPAGE_VARIABLE\GPL 2 License.lnk" "$INSTDIR\COPYING.txt"
744 !insertmacro MUI_STARTMENU_WRITE_END
745 ${SectionEnd}
746
747 ${Section} -INI SECINI
748   WriteIniStr "$SMPROGRAMS\$MUI_STARTMENUPAGE_VARIABLE\SDCC on the Web.url" "InternetShortcut" "URL" "http://sdcc.sourceforge.net/"
749 !ifdef FULL_DOC
750   WriteIniStr "$SMPROGRAMS\$MUI_STARTMENUPAGE_VARIABLE\Latest Changes.url" "InternetShortcut" "URL" "http://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc/ChangeLog"
751 !endif
752 ${SectionEnd}
753
754 ${Section} -PostInstall SECPOSTINSTALL
755   WriteRegStr ${SDCC_ROOT_KEY} "Software\${PRODUCT_NAME}" "" $INSTDIR
756 !ifdef VER_MAJOR & VER_MINOR & VER_REVISION & VER_BUILD
757   WriteRegDword ${SDCC_ROOT_KEY} "Software\${PRODUCT_NAME}" "VersionMajor" "${VER_MAJOR}"
758   WriteRegDword ${SDCC_ROOT_KEY} "Software\${PRODUCT_NAME}" "VersionMinor" "${VER_MINOR}"
759   WriteRegDword ${SDCC_ROOT_KEY} "Software\${PRODUCT_NAME}" "VersionRevision" "${VER_REVISION}"
760   WriteRegDword ${SDCC_ROOT_KEY} "Software\${PRODUCT_NAME}" "VersionBuild" "${VER_BUILD}"
761 !endif
762
763   WriteRegExpandStr ${UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninstall.exe"
764   WriteRegExpandStr ${UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "InstallLocation" "$INSTDIR"
765   WriteRegStr ${UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "${PRODUCT_NAME}"
766   WriteRegStr ${UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "sdcc.sourceforge.net"
767   WriteRegStr ${UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "http://sdcc.sourceforge.net/"
768   WriteRegStr ${UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "HelpLink" "http://sdcc.sourceforge.net/"
769   WriteRegStr ${UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLUpdateInfo" "http://sdcc.sourceforge.net/"
770
771   WriteUninstaller "$INSTDIR\uninstall.exe"
772 ${SectionEnd}
773
774
775 ;;;; Uninstaller code ;;;;
776
777 ${Section} Uninstall SECUNINSTALL
778   !insertmacro MUI_STARTMENU_GETFOLDER Application $MUI_STARTMENUPAGE_VARIABLE
779
780   ${DebugMsg} "removing path $INSTDIR\bin"
781   Push "$INSTDIR\bin"
782   Call un.SDCC.RemoveFromPath
783
784 ; Clean the registry
785   DeleteRegKey ${UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
786   DeleteRegKey ${SDCC_ROOT_KEY} "Software\${PRODUCT_NAME}"
787
788   Delete "$SMPROGRAMS\$MUI_STARTMENUPAGE_VARIABLE\GPL 2 License.lnk"
789   Delete "$SMPROGRAMS\$MUI_STARTMENUPAGE_VARIABLE\Change Log.lnk"
790 !ifdef FULL_DOC
791   Delete "$SMPROGRAMS\$MUI_STARTMENUPAGE_VARIABLE\Latest Changes.url"
792   Delete "$SMPROGRAMS\$MUI_STARTMENUPAGE_VARIABLE\README.lnk"
793 !endif
794   Delete "$SMPROGRAMS\$MUI_STARTMENUPAGE_VARIABLE\Documentation.lnk"
795   Delete "$SMPROGRAMS\$MUI_STARTMENUPAGE_VARIABLE\Uninstall SDCC.lnk"
796   Delete "$SMPROGRAMS\$MUI_STARTMENUPAGE_VARIABLE\SDCC on the Web.url"
797
798   RMDir "$SMPROGRAMS\$MUI_STARTMENUPAGE_VARIABLE"
799
800   Delete "$INSTDIR\lib\src\large\Makefile"
801
802   Delete "$INSTDIR\lib\src\medium\Makefile"
803
804   Delete "$INSTDIR\lib\src\small\Makefile"
805
806   Delete "$INSTDIR\lib\src\mcs51\*.asm"
807   Delete "$INSTDIR\lib\src\mcs51\Makefile"
808   Delete "$INSTDIR\lib\src\mcs51\README"
809
810   Delete "$INSTDIR\lib\src\hc08\*.c"
811   Delete "$INSTDIR\lib\src\hc08\hc08.lib"
812   Delete "$INSTDIR\lib\src\hc08\Makefile"
813
814   Delete "$INSTDIR\lib\src\z80\*.s"
815   Delete "$INSTDIR\lib\src\z80\z80.lib"
816   Delete "$INSTDIR\lib\src\z80\README"
817   Delete "$INSTDIR\lib\src\z80\Makefile"
818
819   Delete "$INSTDIR\lib\src\gbz80\*.c"
820   Delete "$INSTDIR\lib\src\gbz80\*.s"
821   Delete "$INSTDIR\lib\src\gbz80\gbz80.lib"
822   Delete "$INSTDIR\lib\src\gbz80\README"
823   Delete "$INSTDIR\lib\src\gbz80\Makefile"
824
825   Delete "$INSTDIR\lib\src\ds390\*.c"
826   Delete "$INSTDIR\lib\src\ds390\libds390.lib"
827   Delete "$INSTDIR\lib\src\ds390\Makefile.dep"
828   Delete "$INSTDIR\lib\src\ds390\Makefile"
829   Delete "$INSTDIR\lib\src\ds390\examples\MOVED"
830
831   Delete "$INSTDIR\lib\src\ds400\*.c"
832   Delete "$INSTDIR\lib\src\ds400\libds400.lib"
833   Delete "$INSTDIR\lib\src\ds400\Makefile.dep"
834   Delete "$INSTDIR\lib\src\ds400\Makefile"
835
836   Delete "$INSTDIR\lib\src\*.c"
837
838   Delete "$INSTDIR\lib\pic\*.lib"
839
840   Delete "$INSTDIR\lib\pic16\*.o"
841   Delete "$INSTDIR\lib\pic16\*.lib"
842
843   Delete "$INSTDIR\lib\hc08\*.lib"
844
845   Delete "$INSTDIR\lib\z80\*.o"
846   Delete "$INSTDIR\lib\z80\*.lib"
847
848   Delete "$INSTDIR\lib\small\*.lib"
849
850   Delete "$INSTDIR\lib\medium\*.lib"
851
852   Delete "$INSTDIR\lib\large\*.lib"
853
854   Delete "$INSTDIR\lib\small-stack-auto\*.lib"
855
856   Delete "$INSTDIR\lib\gbz80\*.lib"
857
858   Delete "$INSTDIR\lib\ds390\*.lib"
859
860   Delete "$INSTDIR\lib\ds400\*.lib"
861
862   Delete "$INSTDIR\include\asm\z80\*.h"
863   Delete "$INSTDIR\include\asm\pic16\*.h"
864   Delete "$INSTDIR\include\asm\pic\*.h"
865   Delete "$INSTDIR\include\asm\mcs51\*.h"
866   Delete "$INSTDIR\include\asm\gbz80\*.h"
867   Delete "$INSTDIR\include\asm\ds390\*.h"
868   Delete "$INSTDIR\include\asm\default\*.h"
869   Delete "$INSTDIR\include\z80\*.h"
870   Delete "$INSTDIR\include\pic\*.h"
871   Delete "$INSTDIR\include\pic\*.txt"
872   Delete "$INSTDIR\include\pic\*.inc"
873   Delete "$INSTDIR\include\pic16\*.h"
874   Delete "$INSTDIR\include\pic16\*.txt"
875   Delete "$INSTDIR\include\mcs51\*.h"
876   Delete "$INSTDIR\include\hc08\*.h"
877   Delete "$INSTDIR\include\*.h"
878
879 !ifndef FULL_DOC
880   Delete "$INSTDIR\doc\README.TXT"
881   Delete "$INSTDIR\doc\ChangeLog_head.txt"
882 !endif
883
884   Delete "$INSTDIR\bin\as-gbz80.exe"
885   Delete "$INSTDIR\bin\as-hc08.exe"
886   Delete "$INSTDIR\bin\as-z80.exe"
887   Delete "$INSTDIR\bin\asx8051.exe"
888   Delete "$INSTDIR\bin\aslink.exe"
889   Delete "$INSTDIR\bin\asranlib.exe"
890   Delete "$INSTDIR\bin\link-gbz80.exe"
891   Delete "$INSTDIR\bin\link-hc08.exe"
892   Delete "$INSTDIR\bin\link-z80.exe"
893   Delete "$INSTDIR\bin\makebin.exe"
894   Delete "$INSTDIR\bin\packihx.exe"
895   Delete "$INSTDIR\bin\sdcc.exe"
896   Delete "$INSTDIR\bin\sdcclib.exe"
897   Delete "$INSTDIR\bin\sdcpp.exe"
898   Delete "$INSTDIR\bin\readline5.dll"
899
900
901   Delete "$INSTDIR\bin\s51.exe"
902   Delete "$INSTDIR\bin\savr.exe"
903   Delete "$INSTDIR\bin\shc08.exe"
904   Delete "$INSTDIR\bin\sz80.exe"
905
906   Delete "$INSTDIR\bin\sdcdb.exe"
907   Delete "$INSTDIR\bin\sdcdb.el"
908   Delete "$INSTDIR\bin\sdcdbsrc.el"
909
910   Delete "$INSTDIR\COPYING.txt"
911   Delete "$INSTDIR\sdcc.ico"
912   Delete "$INSTDIR\uninstall.exe"
913
914   RMDir /r "$INSTDIR\lib\src\pic"
915   RMDir /r "$INSTDIR\lib\src\pic16"
916   RMDir "$INSTDIR\lib\src\small"
917   RMDir "$INSTDIR\lib\src\medium"
918   RMDir "$INSTDIR\lib\src\large"
919   RMDir "$INSTDIR\lib\src\mcs51"
920   RMDir "$INSTDIR\lib\src\z80"
921   RMDir "$INSTDIR\lib\src\gbz80"
922   RMDir "$INSTDIR\lib\src\ds390\examples"
923   RMDir "$INSTDIR\lib\src\ds390"
924   RMDir "$INSTDIR\lib\src\ds400"
925   RMDir "$INSTDIR\lib\src\hc08"
926   RMDir "$INSTDIR\lib\src"
927
928   RMDir "$INSTDIR\lib\pic"
929   RMDir "$INSTDIR\lib\pic16"
930   RMDir "$INSTDIR\lib\z80"
931   RMDir "$INSTDIR\lib\small"
932   RMDir "$INSTDIR\lib\medium"
933   RMDir "$INSTDIR\lib\large"
934   RMDir "$INSTDIR\lib\small-stack-auto"
935   RMDir "$INSTDIR\lib\gbz80"
936   RMDir "$INSTDIR\lib\ds390"
937   RMDir "$INSTDIR\lib\ds400"
938   RMDir "$INSTDIR\lib\hc08"
939   RMDir "$INSTDIR\lib"
940
941   RMDir "$INSTDIR\include\asm\z80"
942   RMDir "$INSTDIR\include\asm\pic16"
943   RMDir "$INSTDIR\include\asm\pic"
944   RMDir "$INSTDIR\include\asm\mcs51"
945   RMDir "$INSTDIR\include\asm\gbz80"
946   RMDir "$INSTDIR\include\asm\ds390"
947   RMDir "$INSTDIR\include\asm\default"
948   RMDir "$INSTDIR\include\asm"
949   RMDir "$INSTDIR\include\z80"
950   RMDir "$INSTDIR\include\pic"
951   RMDir "$INSTDIR\include\pic16"
952   RMDir "$INSTDIR\include\mcs51"
953   RMDir "$INSTDIR\include\hc08"
954   RMDir "$INSTDIR\include"
955
956 !ifdef FULL_DOC
957   RMDir /r "$INSTDIR\doc"
958 !else
959   RMDir "$INSTDIR\doc"
960 !endif
961
962   RMDir "$INSTDIR\bin"
963
964   RMDir "$INSTDIR"
965 ;;;;  SetAutoClose true
966 ${SectionEnd}
967
968 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
969 ; Path Manipulation functions                                                 ;
970 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
971
972 !verbose 3
973 !include "WinMessages.nsh"
974 !verbose 4
975
976 ; AddToPath - Adds the given dir to the search path.
977 ;        Input - head of the stack
978 ;        Note - Win9x systems requires reboot
979
980 ${Function} SDCC.AddToPath
981   Exch $0
982   Push $1
983   Push $2
984   Push $3
985   Push $4
986
987   ; don't add if the path doesn't exist
988   ${If} ${FileExists} $0
989     Call SDCC.IsNT
990     Pop $4
991     ${If} $4 != 1
992       ; Not on NT: read PATH from environment variable
993       ReadEnvStr $1 PATH
994     ${Else}
995       ; On NT: read PATH from registry
996       ReadRegStr $1 HKCU "Environment" "PATH"
997     ${EndIf}
998
999     ${StrStr} $2 "$1;" "$0;"
1000     ${If} $2 == ""
1001       ${StrStr} $2 "$1;" "$0\;"
1002       ${If} $2 == ""
1003         GetFullPathName /SHORT $3 $0
1004         ${StrStr} $2 "$1;" "$3;"
1005         ${If} $2 == ""
1006           ${StrStr} $2 "$1;" "$03\;"
1007           ${If} $2 == ""
1008             ${If} $4 != 1
1009               ; Not on NT
1010               StrCpy $1 $WINDIR 2
1011               FileOpen $1 "$1\autoexec.bat" a
1012               FileSeek $1 -1 END
1013               FileReadByte $1 $2
1014               ${If} $2 = 26        ; DOS EOF
1015                 FileSeek $1 -1 END ; write over EOF
1016               ${Endif}
1017               ${DebugMsg} "adding line $\r$\nSET PATH=%PATH%;$3$\r$\n"
1018               FileWrite $1 "$\r$\nSET PATH=%PATH%;$3$\r$\n"
1019               FileClose $1
1020               ${DebugMsg} "SetRebootFlag true"
1021               SetRebootFlag true
1022             ${Else}
1023               ;System PATH variable is at:
1024               ;HKLM "/SYSTEM/CurrentControlSet/Control/Session Manager/Environment" "Path"
1025               ReadRegStr $1 HKCU "Environment" "PATH"
1026               StrCpy $2 $1 1 -1  ; copy last char
1027               ${If} $2 == ";"    ; if last char == ;
1028                 StrCpy $1 $1 -1  ; remove last char
1029               ${Endif}
1030               ${If} $1 != ""
1031                 StrCpy $0 "$1;$0"
1032               ${Endif}
1033               WriteRegExpandStr HKCU "Environment" "PATH" $0
1034               SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000
1035             ${Endif}
1036           ${Endif}
1037         ${Endif}
1038       ${Endif}
1039     ${Endif}
1040   ${EndIf}
1041
1042   Pop $4
1043   Pop $3
1044   Pop $2
1045   Pop $1
1046   Pop $0
1047 ${FunctionEnd}
1048
1049 ; RemoveFromPath - Remove a given dir from the path
1050 ;     Input: head of the stack
1051
1052 !macro SDCC.RemoveFromPath un
1053 ${Function} ${un}SDCC.RemoveFromPath
1054   Exch $0
1055   Push $1
1056   Push $2
1057   Push $3
1058   Push $4
1059   Push $5
1060   Push $6
1061
1062   IntFmt $6 "%c" 26 ; DOS EOF
1063
1064   Call ${un}SDCC.IsNT
1065   Pop $1
1066   ${If} $1 != 1
1067     ; Not on NT
1068     StrCpy $1 $WINDIR 2
1069     FileOpen $1 "$1\autoexec.bat" r
1070     GetTempFileName $4
1071     FileOpen $2 $4 w
1072     GetFullPathName /SHORT $0 $0
1073     StrCpy $0 "SET PATH=%PATH%;$0"
1074
1075   nextLine:
1076     ; copy all lines except the line containing "SET PATH=%PATH%;$0"
1077     ; from autoexec.bat to the temporary file
1078     ClearErrors
1079     FileRead $1 $3
1080     ${IfNot} ${Errors}
1081       StrCpy $5 $3 1 -1 ; read last char
1082       ${If} $5 == $6    ; if DOS EOF
1083         StrCpy $3 $3 -1 ; remove DOS EOF so we can compare
1084       ${EndIf}
1085       ${If} $3 != "$0$\r$\n"
1086         ${AndIf} $3 != "$0$\n"
1087         ${AndIf} $3 != "$0"
1088         FileWrite $2 $3
1089         Goto nextLine
1090       ${Else}
1091         ; This is the line I'm looking for:
1092         ; don't copy it
1093         ${DebugMsg} "removing line $0"
1094         ${DebugMsg} "SetRebootFlag true"
1095         SetRebootFlag true
1096         Goto nextLine
1097       ${EndIf}
1098     ${EndIf}
1099
1100     FileClose $2
1101     FileClose $1
1102     StrCpy $1 $WINDIR 2
1103     Delete "$1\autoexec.bat"
1104     CopyFiles /SILENT $4 "$1\autoexec.bat"
1105     Delete $4
1106   ${Else}
1107     ;System PATH variable is at:
1108     ;HKLM "/SYSTEM/CurrentControlSet/Control/Session Manager/Environment" "Path"
1109     ReadRegStr $1 HKCU "Environment" "PATH"
1110     StrCpy $5 $1 1 -1 ; copy last char
1111     ${If} $5 != ";"   ; if last char != ;
1112       StrCpy $1 "$1;" ; append ;
1113     ${EndIf}
1114     Push $1
1115     Push "$0;"
1116     Call ${un}StrStr  ; Find `$0;` in $1
1117     Pop $2            ; pos of our dir
1118     ${If} $2 != ""
1119       ; it is in path:
1120       ; $0 - path to add
1121       ; $1 - path var
1122       StrLen $3 "$0;"
1123       StrLen $4 $2
1124       StrCpy $5 $1 -$4   ; $5 is now the part before the path to remove
1125       StrCpy $6 $2 "" $3 ; $6 is now the part after the path to remove
1126       StrCpy $3 $5$6
1127
1128       StrCpy $5 $3 1 -1  ; copy last char
1129       ${If} $5 == ";"    ; if last char == ;
1130         StrCpy $3 $3 -1  ; remove last char
1131       ${EndIf}
1132       ${If} $3 != ""
1133         ; New PATH not empty: update the registry
1134         WriteRegExpandStr HKCU "Environment" "PATH" $3
1135       ${Else}
1136         ; New PATH empty: remove from the registry
1137         DeleteRegValue HKCU "Environment" "PATH"
1138       ${EndIf}
1139       SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000
1140     ${Endif}
1141   ${Endif}
1142
1143   Pop $6
1144   Pop $5
1145   Pop $4
1146   Pop $3
1147   Pop $2
1148   Pop $1
1149   Pop $0
1150 ${FunctionEnd}
1151 !macroend
1152 !insertmacro SDCC.RemoveFromPath ""
1153 !insertmacro SDCC.RemoveFromPath "un."
1154
1155 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1156 ; Utility Functions                                                           ;
1157 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1158
1159 ; IsNT
1160 ; no input
1161 ; output, top of the stack = 1 if NT or 0 if not
1162 ;
1163 ; Usage:
1164 ;   Call IsNT
1165 ;   Pop $R0
1166 ;  ($R0 at this point is 1 or 0)
1167
1168 !macro SDCC.IsNT un
1169 ${Function} ${un}SDCC.IsNT
1170   Push $R0
1171   ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion
1172   ${If} $R0 == ""
1173     ; we are not NT.
1174     Pop $R0
1175     Push 0
1176   ${Else}
1177     ; NT!!!
1178     Pop $R0
1179     Push 1
1180   ${EndIf}
1181 ${FunctionEnd}
1182 !macroend
1183 !insertmacro SDCC.IsNT ""
1184 !insertmacro SDCC.IsNT "un."
1185
1186 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1187 ;  Uninstall/Reinstall page functions                                         ;
1188 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1189
1190 !ifdef VER_MAJOR & VER_MINOR & VER_REVISION & VER_BUILD
1191
1192 Var ReinstallPageCheck
1193
1194 ${Function} SDCC.PageReinstall
1195
1196   ReadRegStr $R0 ${SDCC_ROOT_KEY} "Software\${PRODUCT_NAME}" ""
1197
1198   ${If} $R0 == ""
1199     ReadRegStr $R0 ${UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString"
1200     ${If} $R0 == ""
1201       Abort
1202     ${EndIf}
1203   ${EndIf}
1204
1205   ReadRegDWORD $R0 ${SDCC_ROOT_KEY} "Software\${PRODUCT_NAME}" "VersionMajor"
1206   ReadRegDWORD $R1 ${SDCC_ROOT_KEY} "Software\${PRODUCT_NAME}" "VersionMinor"
1207   ReadRegDWORD $R2 ${SDCC_ROOT_KEY} "Software\${PRODUCT_NAME}" "VersionRevision"
1208   ReadRegDWORD $R3 ${SDCC_ROOT_KEY} "Software\${PRODUCT_NAME}" "VersionBuild"
1209   StrCpy $R0 $R0.$R1.$R2.$R3
1210
1211   ${VersionCompare} ${VER_MAJOR}.${VER_MINOR}.${VER_REVISION}.${VER_BUILD} $R0 $R0
1212   ${If} $R0 == 0
1213     StrCpy $R1 "${PRODUCT_NAME} ${PRODUCT_VERSION} is already installed. Select the operation you want to perform and click Next to continue."
1214     StrCpy $R2 "Add/Reinstall components"
1215     StrCpy $R3 "Uninstall ${PRODUCT_NAME}"
1216     !insertmacro MUI_HEADER_TEXT "Already Installed" "Choose the maintenance option to perform."
1217     StrCpy $R0 "2"
1218   ${ElseIf} $R0 == 1
1219     StrCpy $R1 "An older version of ${PRODUCT_NAME} is installed on your system. It's recommended that you uninstall the current version before installing. Select the operation you want to perform and click Next to continue."
1220     StrCpy $R2 "Uninstall before installing"
1221     StrCpy $R3 "Do not uninstall"
1222     !insertmacro MUI_HEADER_TEXT "Already Installed" "Choose how you want to install ${PRODUCT_NAME}."
1223     StrCpy $R0 "1"
1224   ${ElseIf} $R0 == 2
1225     StrCpy $R1 "A newer version of ${PRODUCT_NAME} is already installed! It is not recommended that you install an older version. If you really want to install this older version, it's better to uninstall the current version first. Select the operation you want to perform and click Next to continue."
1226     StrCpy $R2 "Uninstall before installing"
1227     StrCpy $R3 "Do not uninstall"
1228     !insertmacro MUI_HEADER_TEXT "Already Installed" "Choose how you want to install ${PRODUCT_NAME}."
1229     StrCpy $R0 "1"
1230   ${Else}
1231     Abort
1232   ${EndIf}
1233
1234   nsDialogs::Create /NOUNLOAD 1018
1235
1236   ${NSD_CreateLabel} 0 0 100% 24u $R1
1237   Pop $R1
1238
1239   ${NSD_CreateRadioButton} 30u 50u -30u 8u $R2
1240   Pop $R2
1241   ${NSD_OnClick} $R2 SDCC.PageReinstallUpdateSelection
1242
1243   ${NSD_CreateRadioButton} 30u 70u -30u 8u $R3
1244   Pop $R3
1245   ${NSD_OnClick} $R3 SDCC.PageReinstallUpdateSelection
1246
1247   ${If} $ReinstallPageCheck != 2
1248     SendMessage $R2 ${BM_SETCHECK} ${BST_CHECKED} 0
1249   ${Else}
1250     SendMessage $R3 ${BM_SETCHECK} ${BST_CHECKED} 0
1251   ${EndIf}
1252
1253   nsDialogs::Show
1254
1255 ${FunctionEnd}
1256
1257 ${Function} SDCC.PageReinstallUpdateSelection
1258
1259   Pop $R1
1260
1261   ${NSD_GetState} $R2 $R1
1262
1263   ${If} $R1 == ${BST_CHECKED}
1264     StrCpy $ReinstallPageCheck 1
1265   ${Else}
1266     StrCpy $ReinstallPageCheck 2
1267   ${EndIf}
1268
1269 ${FunctionEnd}
1270
1271 ${Function} SDCC.PageLeaveReinstall
1272
1273   ${NSD_GetState} $R2 $R1
1274
1275   ${DebugMsg} "R0 = $R0, R1 = $R1, R2 = $R2"
1276
1277   ${If} $R0 == "1"
1278     ${AndIf} $R1 != "1"
1279     Goto reinst_done
1280   ${EndIf}
1281
1282   ${If} $R0 == "2"
1283     ${AndIf} $R1 == 1
1284     Goto reinst_done
1285   ${EndIf}
1286
1287   ReadRegStr $R1 ${UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString"
1288
1289   ;Run uninstaller
1290   HideWindow
1291
1292   ${If} $R0 == "2"
1293     ; Uninstall only: uninstaller should be removed
1294     ClearErrors
1295     ; ExecWait doesn't wait if _?=$INSTDIR is not defined!
1296     ExecWait '$R1'
1297     Quit
1298   ${Else}
1299     ; Uninstal & Reinstall: uninstaller will be rewritten
1300     ClearErrors
1301     ; ExecWait doesn't wait if _?=$INSTDIR is not defined!
1302     ExecWait '$R1 _?=$INSTDIR'
1303   ${EndIf}
1304
1305   BringToFront
1306
1307 reinst_done:
1308
1309 ${FunctionEnd}
1310
1311 !endif # VER_MAJOR & VER_MINOR & VER_REVISION & VER_BUILD