LIB_TYPE=LIB
[fw/sdcc] / support / scripts / sdcc.nsi
1 # sdcc.nsi - NSIS installer script for SDCC
2 #
3 # Copyright (c) 2003-2008 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\link-gbz80.exe"
366   File "${SDCC_ROOT}\bin\link-hc08.exe"
367   File "${SDCC_ROOT}\bin\link-z80.exe"
368   File "${SDCC_ROOT}\bin\makebin.exe"
369   File "${SDCC_ROOT}\bin\packihx.exe"
370   File "${SDCC_ROOT}\bin\sdcc.exe"
371   File "${SDCC_ROOT}\bin\sdcclib.exe"
372   File "${SDCC_ROOT}\bin\sdcpp.exe"
373   File "${SDCC_ROOT}\bin\readline5.dll"
374 ${SectionEnd}
375
376 ${Section} "ucSim application files" SEC02
377   SectionIn 1 2 3
378   SetOutPath "$INSTDIR\bin"
379   File "${SDCC_ROOT}\bin\s51.exe"
380   File "${SDCC_ROOT}\bin\savr.exe"
381   File "${SDCC_ROOT}\bin\shc08.exe"
382   File "${SDCC_ROOT}\bin\sz80.exe"
383 ${SectionEnd}
384
385 ${Section} "SDCDB files" SEC03
386   SectionIn 1 2 3
387   File "${SDCC_ROOT}\bin\sdcdb.exe"
388   File "${SDCC_ROOT}\bin\sdcdb.el"
389   File "${SDCC_ROOT}\bin\sdcdbsrc.el"
390 ${SectionEnd}
391
392 ${Section} "SDCC documentation" SEC04
393   SectionIn 1 2 3
394   SetOutPath "$INSTDIR\doc"
395 !ifdef FULL_DOC
396   File /r "${SDCC_ROOT}\doc\*"
397 !else
398   File "${SDCC_ROOT}\doc\ChangeLog_head.txt"
399   File "${SDCC_ROOT}\doc\README.TXT"
400 !endif
401 ${SectionEnd}
402
403 ${Section} "SDCC include files" SEC05
404   SectionIn 1 2
405   SetOutPath "$INSTDIR\include\asm\default"
406   File "${DEV_ROOT}\include\asm\default\features.h"
407   SetOutPath "$INSTDIR\include\asm\ds390"
408   File "${DEV_ROOT}\include\asm\ds390\features.h"
409   SetOutPath "$INSTDIR\include\asm\gbz80"
410   File "${DEV_ROOT}\include\asm\gbz80\features.h"
411   SetOutPath "$INSTDIR\include\asm\mcs51"
412   File "${DEV_ROOT}\include\asm\mcs51\features.h"
413   SetOutPath "$INSTDIR\include\asm\pic"
414   File "${DEV_ROOT}\include\asm\pic\features.h"
415   SetOutPath "$INSTDIR\include\asm\pic16"
416   File "${DEV_ROOT}\include\asm\pic16\features.h"
417   SetOutPath "$INSTDIR\include\asm\z80"
418   File "${DEV_ROOT}\include\asm\z80\features.h"
419   SetOutPath "$INSTDIR\include\hc08"
420   File "${DEV_ROOT}\include\hc08\*.h"
421   SetOutPath "$INSTDIR\include\mcs51"
422   File "${DEV_ROOT}\include\mcs51\*.h"
423   SetOutPath "$INSTDIR\include\pic"
424   File "${DEV_ROOT}\include\pic\*.h"
425   File "${DEV_ROOT}\include\pic\*.txt"
426   File "${DEV_ROOT}\include\pic\*.inc"
427   SetOutPath "$INSTDIR\include\pic16"
428   File "${DEV_ROOT}\include\pic16\*.h"
429   File "${DEV_ROOT}\include\pic16\*.txt"
430   SetOutPath "$INSTDIR\include\z80"
431   File "${DEV_ROOT}\include\z80\*.h"
432   SetOutPath "$INSTDIR\include"
433   File "${DEV_ROOT}\include\*.h"
434 ${SectionEnd}
435
436 ${Section} "SDCC DS390 library" SEC06
437   SectionIn 1 2
438   SetOutPath "$INSTDIR\lib\ds390"
439   File "${DEV_ROOT}\lib\ds390\*.rel"
440   File "${DEV_ROOT}\lib\ds390\*.lib"
441 ${SectionEnd}
442
443 ${Section} "SDCC DS400 library" SEC07
444   SectionIn 1 2
445   SetOutPath "$INSTDIR\lib\ds400"
446   File "${DEV_ROOT}\lib\ds400\*.rel"
447   File "${DEV_ROOT}\lib\ds400\*.lib"
448 ${SectionEnd}
449
450 ${Section} "SDCC GBZ80 library" SEC08
451   SectionIn 1 2
452   SetOutPath "$INSTDIR\lib\gbz80"
453   File "${DEV_ROOT}\lib\gbz80\*.o"
454   File "${DEV_ROOT}\lib\gbz80\*.lib"
455 ${SectionEnd}
456
457 ${Section} "SDCC Z80 library" SEC09
458   SectionIn 1 2
459   SetOutPath "$INSTDIR\lib\z80"
460   File "${DEV_ROOT}\lib\z80\*.o"
461   File "${DEV_ROOT}\lib\z80\*.lib"
462 ${SectionEnd}
463
464 ${Section} "SDCC small model library" SEC10
465   SectionIn 1 2
466   SetOutPath "$INSTDIR\lib\small"
467   File "${DEV_ROOT}\lib\small\*.rel"
468   File "${DEV_ROOT}\lib\small\*.lib"
469 ${SectionEnd}
470
471 ${Section} "SDCC medium model library" SEC11
472   SectionIn 1 2
473   SetOutPath "$INSTDIR\lib\medium"
474   File "${DEV_ROOT}\lib\medium\*.rel"
475   File "${DEV_ROOT}\lib\medium\*.lib"
476 ${SectionEnd}
477
478 ${Section} "SDCC large model library" SEC12
479   SectionIn 1 2
480   SetOutPath "$INSTDIR\lib\large"
481   File "${DEV_ROOT}\lib\large\*.rel"
482   File "${DEV_ROOT}\lib\large\*.lib"
483 ${SectionEnd}
484
485 ${Section} "SDCC small-stack-auto model library" SEC13
486   SectionIn 1 2
487   SetOutPath "$INSTDIR\lib\small-stack-auto"
488   File "${DEV_ROOT}\lib\small-stack-auto\*.rel"
489   File "${DEV_ROOT}\lib\small-stack-auto\*.lib"
490 ${SectionEnd}
491
492 ${Section} "SDCC HC08 library" SEC14
493   SectionIn 1 2
494   SetOutPath "$INSTDIR\lib\hc08"
495   File "${DEV_ROOT}\lib\hc08\*.rel"
496   File "${DEV_ROOT}\lib\hc08\*.lib"
497 ${SectionEnd}
498
499 ${Section} "SDCC PIC16 library" SEC15
500   SectionIn 1 2
501   SetOutPath "$INSTDIR\lib\pic16"
502   File "${DEV_ROOT}\lib\pic16\*.o"
503   File "${DEV_ROOT}\lib\pic16\*.lib"
504 ${SectionEnd}
505
506 ${Section} "SDCC PIC library" SEC16
507   SectionIn 1 2
508   SetOutPath "$INSTDIR\lib\pic"
509   File "${DEV_ROOT}\lib\pic\*.lib"
510 ${SectionEnd}
511
512 ${Section} "SDCC library sources" SEC17
513   SectionIn 1
514   SetOutPath "$INSTDIR\lib\src\ds390\examples"
515   File "${DEV_ROOT}\lib\src\ds390\examples\MOVED"
516
517   SetOutPath "$INSTDIR\lib\src\ds390"
518   File "${DEV_ROOT}\lib\src\ds390\*.c"
519 #  File "${DEV_ROOT}\lib\src\ds390\Makefile"
520
521   SetOutPath "$INSTDIR\lib\src\ds400"
522   File "${DEV_ROOT}\lib\src\ds400\*.c"
523 #  File "${DEV_ROOT}\lib\src\ds400\Makefile"
524
525   SetOutPath "$INSTDIR\lib\src\gbz80"
526   File "${DEV_ROOT}\lib\src\gbz80\*.c"
527   File "${DEV_ROOT}\lib\src\gbz80\*.s"
528 #  File "${DEV_ROOT}\lib\src\gbz80\Makefile"
529
530   SetOutPath "$INSTDIR\lib\src\z80"
531   File "${DEV_ROOT}\lib\src\z80\*.s"
532 #  File "${DEV_ROOT}\lib\src\z80\Makefile"
533
534   SetOutPath "$INSTDIR\lib\src\hc08"
535   File "${DEV_ROOT}\lib\src\hc08\*.c"
536 #  File "${DEV_ROOT}\lib\src\hc08\Makefile"
537
538   SetOutPath "$INSTDIR\lib\src\mcs51"
539   File "${DEV_ROOT}\lib\src\mcs51\*.asm"
540 #  File "${DEV_ROOT}\lib\src\mcs51\Makefile"
541
542   SetOutPath "$INSTDIR\lib\src\small"
543 #  File "${DEV_ROOT}\lib\src\small\Makefile"
544
545   SetOutPath "$INSTDIR\lib\src\medium"
546 #  File "${DEV_ROOT}\lib\src\medium\Makefile"
547
548   SetOutPath "$INSTDIR\lib\src\large"
549 #  File "${DEV_ROOT}\lib\src\large\Makefile"
550
551   SetOutPath "$INSTDIR\lib\src\pic"
552 #  File "${DEV_ROOT}\lib\src\pic\configure"
553 #  File "${DEV_ROOT}\lib\src\pic\configure.in"
554 #  File "${DEV_ROOT}\lib\src\pic\GPL"
555 #  File "${DEV_ROOT}\lib\src\pic\LGPL"
556 #  File "${DEV_ROOT}\lib\src\pic\Makefile"
557 #  File "${DEV_ROOT}\lib\src\pic\Makefile.common"
558 #  File "${DEV_ROOT}\lib\src\pic\Makefile.common.in"
559 #  File "${DEV_ROOT}\lib\src\pic\Makefile.rules"
560 #  File "${DEV_ROOT}\lib\src\pic\Makefile.subdir"
561 #  File "${DEV_ROOT}\lib\src\pic\NEWS"
562 #  File "${DEV_ROOT}\lib\src\pic\README"
563   File "${DEV_ROOT}\lib\src\pic\TEMPLATE.c"
564   File "${DEV_ROOT}\lib\src\pic\TEMPLATE.S"
565
566   SetOutPath "$INSTDIR\lib\src\pic\libsdcc"
567   File "${DEV_ROOT}\lib\src\pic\libsdcc\*.c"
568   File "${DEV_ROOT}\lib\src\pic\libsdcc\*.S"
569   File "${DEV_ROOT}\lib\src\pic\libsdcc\*.inc"
570 #  File "${DEV_ROOT}\lib\src\pic\libsdcc\Makefile"
571   
572   SetOutPath "$INSTDIR\lib\src\pic\libdev"
573   File "${DEV_ROOT}\lib\src\pic\libdev\*.c"
574 #  File "${DEV_ROOT}\lib\src\pic\libdev\Makefile"
575
576   SetOutPath "$INSTDIR\lib\src\pic\libm"
577   File "${DEV_ROOT}\lib\src\pic\libm\*.c"
578
579   SetOutPath "$INSTDIR\lib\src\pic16"
580 #  File "${DEV_ROOT}\lib\src\pic16\configure"
581 #  File "${DEV_ROOT}\lib\src\pic16\configure.in"
582 #  File "${DEV_ROOT}\lib\src\pic16\COPYING"
583 #  File "${DEV_ROOT}\lib\src\pic16\Makefile"
584 #  File "${DEV_ROOT}\lib\src\pic16\Makefile.common"
585 #  File "${DEV_ROOT}\lib\src\pic16\Makefile.common.in"
586 #  File "${DEV_ROOT}\lib\src\pic16\Makefile.rules"
587 #  File "${DEV_ROOT}\lib\src\pic16\Makefile.subdir"
588 #  File "${DEV_ROOT}\lib\src\pic16\pics.all"
589 #  File "${DEV_ROOT}\lib\src\pic16\pics.build"
590 #  File "${DEV_ROOT}\lib\src\pic16\README"
591
592   SetOutPath "$INSTDIR\lib\src\pic16\debug"
593 #  File "${DEV_ROOT}\lib\src\pic16\debug\Makefile"
594
595   SetOutPath "$INSTDIR\lib\src\pic16\debug\gstack"
596 #  File "${DEV_ROOT}\lib\src\pic16\debug\gstack\Makefile"
597   File "${DEV_ROOT}\lib\src\pic16\debug\gstack\*.c"
598
599   SetOutPath "$INSTDIR\lib\src\pic16\libc"
600 #  File "${DEV_ROOT}\lib\src\pic16\libc\Makefile"
601
602   SetOutPath "$INSTDIR\lib\src\pic16\libc\ctype"
603   File "${DEV_ROOT}\lib\src\pic16\libc\ctype\*.c"
604 #  File "${DEV_ROOT}\lib\src\pic16\libc\ctype\Makefile"
605
606   SetOutPath "$INSTDIR\lib\src\pic16\libc\delay"
607   File "${DEV_ROOT}\lib\src\pic16\libc\delay\*.S"
608 #  File "${DEV_ROOT}\lib\src\pic16\libc\delay\Makefile"
609
610   SetOutPath "$INSTDIR\lib\src\pic16\libc\stdio"
611   File "${DEV_ROOT}\lib\src\pic16\libc\stdio\*.c"
612 #  File "${DEV_ROOT}\lib\src\pic16\libc\stdio\Makefile"
613
614   SetOutPath "$INSTDIR\lib\src\pic16\libc\stdlib"
615   File "${DEV_ROOT}\lib\src\pic16\libc\stdlib\*.c"
616   File "${DEV_ROOT}\lib\src\pic16\libc\stdlib\*.S"
617 #  File "${DEV_ROOT}\lib\src\pic16\libc\stdlib\Makefile"
618
619   SetOutPath "$INSTDIR\lib\src\pic16\libc\string"
620   File "${DEV_ROOT}\lib\src\pic16\libc\string\*.c"
621 #  File "${DEV_ROOT}\lib\src\pic16\libc\string\Makefile"
622
623   SetOutPath "$INSTDIR\lib\src\pic16\libc\utils"
624   File "${DEV_ROOT}\lib\src\pic16\libc\utils\*.S"
625 #  File "${DEV_ROOT}\lib\src\pic16\libc\utils\Makefile"
626
627   SetOutPath "$INSTDIR\lib\src\pic16\libdev"
628   File "${DEV_ROOT}\lib\src\pic16\libdev\*.c"
629 #  File "${DEV_ROOT}\lib\src\pic16\libdev\Makefile"
630
631   SetOutPath "$INSTDIR\lib\src\pic16\libio"
632   File "${DEV_ROOT}\lib\src\pic16\libio\*.ignore"
633 #  File "${DEV_ROOT}\lib\src\pic16\libio\Makefile"
634
635   SetOutPath "$INSTDIR\lib\src\pic16\libio\adc"
636   File "${DEV_ROOT}\lib\src\pic16\libio\adc\*.c"
637 #  File "${DEV_ROOT}\lib\src\pic16\libio\adc\Makefile"
638
639   SetOutPath "$INSTDIR\lib\src\pic16\libio\i2c"
640   File "${DEV_ROOT}\lib\src\pic16\libio\i2c\*.c"
641 #  File "${DEV_ROOT}\lib\src\pic16\libio\i2c\Makefile"
642
643   SetOutPath "$INSTDIR\lib\src\pic16\libio\usart"
644   File "${DEV_ROOT}\lib\src\pic16\libio\usart\*.c"
645 #  File "${DEV_ROOT}\lib\src\pic16\libio\usart\Makefile"
646
647   SetOutPath "$INSTDIR\lib\src\pic16\libm"
648   File "${DEV_ROOT}\lib\src\pic16\libm\*.c"
649 #  File "${DEV_ROOT}\lib\src\pic16\libm\Makefile"
650
651   SetOutPath "$INSTDIR\lib\src\pic16\libsdcc"
652 #  File "${DEV_ROOT}\lib\src\pic16\libsdcc\Makefile"
653
654   SetOutPath "$INSTDIR\lib\src\pic16\libsdcc\char"
655   File "${DEV_ROOT}\lib\src\pic16\libsdcc\char\*.c"
656 #  File "${DEV_ROOT}\lib\src\pic16\libsdcc\char\Makefile"
657
658   SetOutPath "$INSTDIR\lib\src\pic16\libsdcc\fixed16x16"
659   File "${DEV_ROOT}\lib\src\pic16\libsdcc\fixed16x16\*.c"
660   File "${DEV_ROOT}\lib\src\pic16\libsdcc\fixed16x16\*.S"
661 #  File "${DEV_ROOT}\lib\src\pic16\libsdcc\fixed16x16\Makefile"
662
663   SetOutPath "$INSTDIR\lib\src\pic16\libsdcc\float"
664   File "${DEV_ROOT}\lib\src\pic16\libsdcc\float\*.c"
665 #  File "${DEV_ROOT}\lib\src\pic16\libsdcc\float\Makefile"
666
667   SetOutPath "$INSTDIR\lib\src\pic16\libsdcc\gptr"
668   File "${DEV_ROOT}\lib\src\pic16\libsdcc\gptr\*.c"
669 #  File "${DEV_ROOT}\lib\src\pic16\libsdcc\gptr\Makefile"
670
671   SetOutPath "$INSTDIR\lib\src\pic16\libsdcc\int"
672   File "${DEV_ROOT}\lib\src\pic16\libsdcc\int\*.c"
673 #  File "${DEV_ROOT}\lib\src\pic16\libsdcc\int\Makefile"
674
675   SetOutPath "$INSTDIR\lib\src\pic16\libsdcc\long"
676   File "${DEV_ROOT}\lib\src\pic16\libsdcc\long\*.c"
677 #  File "${DEV_ROOT}\lib\src\pic16\libsdcc\long\Makefile"
678
679   SetOutPath "$INSTDIR\lib\src\pic16\libsdcc\lregs"
680   File "${DEV_ROOT}\lib\src\pic16\libsdcc\lregs\*.c"
681 #  File "${DEV_ROOT}\lib\src\pic16\libsdcc\lregs\Makefile"
682
683   SetOutPath "$INSTDIR\lib\src\pic16\libsdcc\stack"
684   File "${DEV_ROOT}\lib\src\pic16\libsdcc\stack\*.S"
685
686   SetOutPath "$INSTDIR\lib\src\pic16\startup"
687   File "${DEV_ROOT}\lib\src\pic16\startup\*.c"
688 #  File "${DEV_ROOT}\lib\src\pic16\startup\Makefile"
689 #  File "${DEV_ROOT}\lib\src\pic16\startup\README"
690
691   SetOutPath "$INSTDIR\lib\src"
692   File "${DEV_ROOT}\lib\src\*.c"
693 ${SectionEnd}
694
695 ;--------------------------------
696 ;Descriptions
697
698 ;Language strings
699 LangString DESC_SEC01 ${LANG_ENGLISH} "SDCC application files"
700 LangString DESC_SEC02 ${LANG_ENGLISH} "ucSim application files"
701 LangString DESC_SEC03 ${LANG_ENGLISH} "SDCDB files"
702 LangString DESC_SEC04 ${LANG_ENGLISH} "SDCC documentation"
703 LangString DESC_SEC05 ${LANG_ENGLISH} "SDCC include files"
704 LangString DESC_SEC06 ${LANG_ENGLISH} "SDCC DS390 library"
705 LangString DESC_SEC07 ${LANG_ENGLISH} "SDCC DS400 library"
706 LangString DESC_SEC08 ${LANG_ENGLISH} "SDCC GBZ80 library"
707 LangString DESC_SEC09 ${LANG_ENGLISH} "SDCC Z80 library"
708 LangString DESC_SEC10 ${LANG_ENGLISH} "SDCC small model library"
709 LangString DESC_SEC11 ${LANG_ENGLISH} "SDCC medium model library"
710 LangString DESC_SEC12 ${LANG_ENGLISH} "SDCC large model library"
711 LangString DESC_SEC13 ${LANG_ENGLISH} "SDCC small-stack-auto model library"
712 LangString DESC_SEC14 ${LANG_ENGLISH} "SDCC HC08 library"
713 LangString DESC_SEC15 ${LANG_ENGLISH} "SDCC PIC16 library"
714 LangString DESC_SEC16 ${LANG_ENGLISH} "SDCC PIC library"
715 LangString DESC_SEC17 ${LANG_ENGLISH} "SDCC library sources"
716
717 ;Assign language strings to sections
718 !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
719   !insertmacro MUI_DESCRIPTION_TEXT ${SEC01} $(DESC_SEC01)
720   !insertmacro MUI_DESCRIPTION_TEXT ${SEC02} $(DESC_SEC02)
721   !insertmacro MUI_DESCRIPTION_TEXT ${SEC03} $(DESC_SEC03)
722   !insertmacro MUI_DESCRIPTION_TEXT ${SEC04} $(DESC_SEC04)
723   !insertmacro MUI_DESCRIPTION_TEXT ${SEC05} $(DESC_SEC05)
724   !insertmacro MUI_DESCRIPTION_TEXT ${SEC06} $(DESC_SEC06)
725   !insertmacro MUI_DESCRIPTION_TEXT ${SEC07} $(DESC_SEC07)
726   !insertmacro MUI_DESCRIPTION_TEXT ${SEC08} $(DESC_SEC08)
727   !insertmacro MUI_DESCRIPTION_TEXT ${SEC09} $(DESC_SEC09)
728   !insertmacro MUI_DESCRIPTION_TEXT ${SEC10} $(DESC_SEC10)
729   !insertmacro MUI_DESCRIPTION_TEXT ${SEC11} $(DESC_SEC11)
730   !insertmacro MUI_DESCRIPTION_TEXT ${SEC12} $(DESC_SEC12)
731   !insertmacro MUI_DESCRIPTION_TEXT ${SEC13} $(DESC_SEC13)
732   !insertmacro MUI_DESCRIPTION_TEXT ${SEC14} $(DESC_SEC14)
733   !insertmacro MUI_DESCRIPTION_TEXT ${SEC15} $(DESC_SEC15)
734   !insertmacro MUI_DESCRIPTION_TEXT ${SEC16} $(DESC_SEC16)
735   !insertmacro MUI_DESCRIPTION_TEXT ${SEC17} $(DESC_SEC17)
736 !insertmacro MUI_FUNCTION_DESCRIPTION_END
737 ;--------------------------------
738
739 ${Section} -Icons SECICONS
740 !insertmacro MUI_STARTMENU_WRITE_BEGIN Application
741   CreateDirectory "$SMPROGRAMS\$MUI_STARTMENUPAGE_VARIABLE"
742   CreateShortCut "$SMPROGRAMS\$MUI_STARTMENUPAGE_VARIABLE\Uninstall SDCC.lnk" "$INSTDIR\uninstall.exe" 
743 !ifdef FULL_DOC
744   CreateShortCut "$SMPROGRAMS\$MUI_STARTMENUPAGE_VARIABLE\Documentation.lnk" "$INSTDIR\doc\sdccman.pdf" "" "$INSTDIR\sdcc.ico" "" "" "" ""
745   CreateShortCut "$SMPROGRAMS\$MUI_STARTMENUPAGE_VARIABLE\README.lnk" "$INSTDIR\doc\README.TXT" "" "$INSTDIR\sdcc.ico" "" "" "" ""
746   CreateShortCut "$SMPROGRAMS\$MUI_STARTMENUPAGE_VARIABLE\Change Log.lnk" "$INSTDIR\doc\ChangeLog.txt" "" "$INSTDIR\sdcc.ico" "" "" "" ""
747 !else
748   CreateShortCut "$SMPROGRAMS\$MUI_STARTMENUPAGE_VARIABLE\Documentation.lnk" "$INSTDIR\doc\README.TXT" "" "$INSTDIR\sdcc.ico" "" "" "" ""
749   CreateShortCut "$SMPROGRAMS\$MUI_STARTMENUPAGE_VARIABLE\Change Log.lnk" "$INSTDIR\doc\ChangeLog_head.txt" "" "$INSTDIR\sdcc.ico" "" "" "" ""
750 !endif
751   CreateShortCut "$SMPROGRAMS\$MUI_STARTMENUPAGE_VARIABLE\GPL 2 License.lnk" "$INSTDIR\COPYING.txt"
752 !insertmacro MUI_STARTMENU_WRITE_END
753 ${SectionEnd}
754
755 ${Section} -INI SECINI
756   WriteIniStr "$SMPROGRAMS\$MUI_STARTMENUPAGE_VARIABLE\SDCC on the Web.url" "InternetShortcut" "URL" "http://sdcc.sourceforge.net/"
757 !ifdef FULL_DOC
758   WriteIniStr "$SMPROGRAMS\$MUI_STARTMENUPAGE_VARIABLE\Latest Changes.url" "InternetShortcut" "URL" "http://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc/ChangeLog"
759 !endif
760 ${SectionEnd}
761
762 ${Section} -PostInstall SECPOSTINSTALL
763   WriteRegStr ${SDCC_ROOT_KEY} "Software\${PRODUCT_NAME}" "" $INSTDIR
764 !ifdef VER_MAJOR & VER_MINOR & VER_REVISION & VER_BUILD
765   WriteRegDword ${SDCC_ROOT_KEY} "Software\${PRODUCT_NAME}" "VersionMajor" "${VER_MAJOR}"
766   WriteRegDword ${SDCC_ROOT_KEY} "Software\${PRODUCT_NAME}" "VersionMinor" "${VER_MINOR}"
767   WriteRegDword ${SDCC_ROOT_KEY} "Software\${PRODUCT_NAME}" "VersionRevision" "${VER_REVISION}"
768   WriteRegDword ${SDCC_ROOT_KEY} "Software\${PRODUCT_NAME}" "VersionBuild" "${VER_BUILD}"
769 !endif
770
771   WriteRegExpandStr ${UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninstall.exe"
772   WriteRegExpandStr ${UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "InstallLocation" "$INSTDIR"
773   WriteRegStr ${UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "${PRODUCT_NAME}"
774   WriteRegStr ${UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "sdcc.sourceforge.net"
775   WriteRegStr ${UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "http://sdcc.sourceforge.net/"
776   WriteRegStr ${UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "HelpLink" "http://sdcc.sourceforge.net/"
777   WriteRegStr ${UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLUpdateInfo" "http://sdcc.sourceforge.net/"
778
779   WriteUninstaller "$INSTDIR\uninstall.exe"
780 ${SectionEnd}
781
782
783 ;;;; Uninstaller code ;;;;
784
785 ${Section} Uninstall SECUNINSTALL
786   !insertmacro MUI_STARTMENU_GETFOLDER Application $MUI_STARTMENUPAGE_VARIABLE
787
788   ${DebugMsg} "removing path $INSTDIR\bin"
789   Push "$INSTDIR\bin"
790   Call un.SDCC.RemoveFromPath
791
792 ; Clean the registry
793   DeleteRegKey ${UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
794   DeleteRegKey ${SDCC_ROOT_KEY} "Software\${PRODUCT_NAME}"
795
796   Delete "$SMPROGRAMS\$MUI_STARTMENUPAGE_VARIABLE\GPL 2 License.lnk"
797   Delete "$SMPROGRAMS\$MUI_STARTMENUPAGE_VARIABLE\Change Log.lnk"
798 !ifdef FULL_DOC
799   Delete "$SMPROGRAMS\$MUI_STARTMENUPAGE_VARIABLE\Latest Changes.url"
800   Delete "$SMPROGRAMS\$MUI_STARTMENUPAGE_VARIABLE\README.lnk"
801 !endif
802   Delete "$SMPROGRAMS\$MUI_STARTMENUPAGE_VARIABLE\Documentation.lnk"
803   Delete "$SMPROGRAMS\$MUI_STARTMENUPAGE_VARIABLE\Uninstall SDCC.lnk"
804   Delete "$SMPROGRAMS\$MUI_STARTMENUPAGE_VARIABLE\SDCC on the Web.url"
805
806   RMDir "$SMPROGRAMS\$MUI_STARTMENUPAGE_VARIABLE"
807
808   Delete "$INSTDIR\lib\src\large\Makefile"
809
810   Delete "$INSTDIR\lib\src\medium\Makefile"
811
812   Delete "$INSTDIR\lib\src\small\Makefile"
813
814   Delete "$INSTDIR\lib\src\mcs51\*.asm"
815   Delete "$INSTDIR\lib\src\mcs51\Makefile"
816   Delete "$INSTDIR\lib\src\mcs51\README"
817
818   Delete "$INSTDIR\lib\src\hc08\*.c"
819   Delete "$INSTDIR\lib\src\hc08\hc08.lib"
820   Delete "$INSTDIR\lib\src\hc08\Makefile"
821
822   Delete "$INSTDIR\lib\src\z80\*.s"
823   Delete "$INSTDIR\lib\src\z80\z80.lib"
824   Delete "$INSTDIR\lib\src\z80\README"
825   Delete "$INSTDIR\lib\src\z80\Makefile"
826
827   Delete "$INSTDIR\lib\src\gbz80\*.c"
828   Delete "$INSTDIR\lib\src\gbz80\*.s"
829   Delete "$INSTDIR\lib\src\gbz80\gbz80.lib"
830   Delete "$INSTDIR\lib\src\gbz80\README"
831   Delete "$INSTDIR\lib\src\gbz80\Makefile"
832
833   Delete "$INSTDIR\lib\src\ds390\*.c"
834   Delete "$INSTDIR\lib\src\ds390\libds390.lib"
835   Delete "$INSTDIR\lib\src\ds390\Makefile.dep"
836   Delete "$INSTDIR\lib\src\ds390\Makefile"
837   Delete "$INSTDIR\lib\src\ds390\examples\MOVED"
838
839   Delete "$INSTDIR\lib\src\ds400\*.c"
840   Delete "$INSTDIR\lib\src\ds400\libds400.lib"
841   Delete "$INSTDIR\lib\src\ds400\Makefile.dep"
842   Delete "$INSTDIR\lib\src\ds400\Makefile"
843
844   Delete "$INSTDIR\lib\src\*.c"
845
846   Delete "$INSTDIR\lib\pic\*.o"
847   Delete "$INSTDIR\lib\pic\*.lib"
848
849   Delete "$INSTDIR\lib\pic16\*.o"
850   Delete "$INSTDIR\lib\pic16\*.lib"
851
852   Delete "$INSTDIR\lib\hc08\*.rel"
853   Delete "$INSTDIR\lib\hc08\*.lib"
854
855   Delete "$INSTDIR\lib\z80\*.o"
856   Delete "$INSTDIR\lib\z80\*.lib"
857
858   Delete "$INSTDIR\lib\small\*.rel"
859   Delete "$INSTDIR\lib\small\*.lib"
860
861   Delete "$INSTDIR\lib\medium\*.rel"
862   Delete "$INSTDIR\lib\medium\*.lib"
863
864   Delete "$INSTDIR\lib\large\*.rel"
865   Delete "$INSTDIR\lib\large\*.lib"
866
867   Delete "$INSTDIR\lib\small-stack-auto\*.rel"
868   Delete "$INSTDIR\lib\small-stack-auto\*.lib"
869
870   Delete "$INSTDIR\lib\gbz80\*.o"
871   Delete "$INSTDIR\lib\gbz80\*.lib"
872
873   Delete "$INSTDIR\lib\ds390\*.rel"
874   Delete "$INSTDIR\lib\ds390\*.lib"
875
876   Delete "$INSTDIR\lib\ds400\*.rel"
877   Delete "$INSTDIR\lib\ds400\*.lib"
878
879   Delete "$INSTDIR\include\asm\z80\*.h"
880   Delete "$INSTDIR\include\asm\pic16\*.h"
881   Delete "$INSTDIR\include\asm\pic\*.h"
882   Delete "$INSTDIR\include\asm\mcs51\*.h"
883   Delete "$INSTDIR\include\asm\gbz80\*.h"
884   Delete "$INSTDIR\include\asm\ds390\*.h"
885   Delete "$INSTDIR\include\asm\default\*.h"
886   Delete "$INSTDIR\include\z80\*.h"
887   Delete "$INSTDIR\include\pic\*.h"
888   Delete "$INSTDIR\include\pic\*.txt"
889   Delete "$INSTDIR\include\pic\*.inc"
890   Delete "$INSTDIR\include\pic16\*.h"
891   Delete "$INSTDIR\include\pic16\*.txt"
892   Delete "$INSTDIR\include\mcs51\*.h"
893   Delete "$INSTDIR\include\hc08\*.h"
894   Delete "$INSTDIR\include\*.h"
895
896 !ifndef FULL_DOC
897   Delete "$INSTDIR\doc\README.TXT"
898   Delete "$INSTDIR\doc\ChangeLog_head.txt"
899 !endif
900
901   Delete "$INSTDIR\bin\as-gbz80.exe"
902   Delete "$INSTDIR\bin\as-hc08.exe"
903   Delete "$INSTDIR\bin\as-z80.exe"
904   Delete "$INSTDIR\bin\asx8051.exe"
905   Delete "$INSTDIR\bin\aslink.exe"
906   Delete "$INSTDIR\bin\link-gbz80.exe"
907   Delete "$INSTDIR\bin\link-hc08.exe"
908   Delete "$INSTDIR\bin\link-z80.exe"
909   Delete "$INSTDIR\bin\makebin.exe"
910   Delete "$INSTDIR\bin\packihx.exe"
911   Delete "$INSTDIR\bin\sdcc.exe"
912   Delete "$INSTDIR\bin\sdcclib.exe"
913   Delete "$INSTDIR\bin\sdcpp.exe"
914   Delete "$INSTDIR\bin\readline5.dll"
915
916
917   Delete "$INSTDIR\bin\s51.exe"
918   Delete "$INSTDIR\bin\savr.exe"
919   Delete "$INSTDIR\bin\shc08.exe"
920   Delete "$INSTDIR\bin\sz80.exe"
921
922   Delete "$INSTDIR\bin\sdcdb.exe"
923   Delete "$INSTDIR\bin\sdcdb.el"
924   Delete "$INSTDIR\bin\sdcdbsrc.el"
925
926   Delete "$INSTDIR\COPYING.txt"
927   Delete "$INSTDIR\sdcc.ico"
928   Delete "$INSTDIR\uninstall.exe"
929
930   RMDir /r "$INSTDIR\lib\src\pic"
931   RMDir /r "$INSTDIR\lib\src\pic16"
932   RMDir "$INSTDIR\lib\src\small"
933   RMDir "$INSTDIR\lib\src\medium"
934   RMDir "$INSTDIR\lib\src\large"
935   RMDir "$INSTDIR\lib\src\mcs51"
936   RMDir "$INSTDIR\lib\src\z80"
937   RMDir "$INSTDIR\lib\src\gbz80"
938   RMDir "$INSTDIR\lib\src\ds390\examples"
939   RMDir "$INSTDIR\lib\src\ds390"
940   RMDir "$INSTDIR\lib\src\ds400"
941   RMDir "$INSTDIR\lib\src\hc08"
942   RMDir "$INSTDIR\lib\src"
943
944   RMDir "$INSTDIR\lib\pic"
945   RMDir "$INSTDIR\lib\pic16"
946   RMDir "$INSTDIR\lib\z80"
947   RMDir "$INSTDIR\lib\small"
948   RMDir "$INSTDIR\lib\medium"
949   RMDir "$INSTDIR\lib\large"
950   RMDir "$INSTDIR\lib\small-stack-auto"
951   RMDir "$INSTDIR\lib\gbz80"
952   RMDir "$INSTDIR\lib\ds390"
953   RMDir "$INSTDIR\lib\ds400"
954   RMDir "$INSTDIR\lib\hc08"
955   RMDir "$INSTDIR\lib"
956
957   RMDir "$INSTDIR\include\asm\z80"
958   RMDir "$INSTDIR\include\asm\pic16"
959   RMDir "$INSTDIR\include\asm\pic"
960   RMDir "$INSTDIR\include\asm\mcs51"
961   RMDir "$INSTDIR\include\asm\gbz80"
962   RMDir "$INSTDIR\include\asm\ds390"
963   RMDir "$INSTDIR\include\asm\default"
964   RMDir "$INSTDIR\include\asm"
965   RMDir "$INSTDIR\include\z80"
966   RMDir "$INSTDIR\include\pic"
967   RMDir "$INSTDIR\include\pic16"
968   RMDir "$INSTDIR\include\mcs51"
969   RMDir "$INSTDIR\include\hc08"
970   RMDir "$INSTDIR\include"
971
972 !ifdef FULL_DOC
973   RMDir /r "$INSTDIR\doc"
974 !else
975   RMDir "$INSTDIR\doc"
976 !endif
977
978   RMDir "$INSTDIR\bin"
979
980   RMDir "$INSTDIR"
981 ;;;;  SetAutoClose true
982 ${SectionEnd}
983
984 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
985 ; Path Manipulation functions                                                 ;
986 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
987
988 !verbose 3
989 !include "WinMessages.nsh"
990 !verbose 4
991
992 ; AddToPath - Adds the given dir to the search path.
993 ;        Input - head of the stack
994 ;        Note - Win9x systems requires reboot
995
996 ${Function} SDCC.AddToPath
997   Exch $0
998   Push $1
999   Push $2
1000   Push $3
1001   Push $4
1002
1003   ; don't add if the path doesn't exist
1004   ${If} ${FileExists} $0
1005     Call SDCC.IsNT
1006     Pop $4
1007     ${If} $4 != 1
1008       ; Not on NT: read PATH from environment variable
1009       ReadEnvStr $1 PATH
1010     ${Else}
1011       ; On NT: read PATH from registry
1012       ReadRegStr $1 HKCU "Environment" "PATH"
1013     ${EndIf}
1014
1015     ${StrStr} $2 "$1;" "$0;"
1016     ${If} $2 == ""
1017       ${StrStr} $2 "$1;" "$0\;"
1018       ${If} $2 == ""
1019         GetFullPathName /SHORT $3 $0
1020         ${StrStr} $2 "$1;" "$3;"
1021         ${If} $2 == ""
1022           ${StrStr} $2 "$1;" "$03\;"
1023           ${If} $2 == ""
1024             ${If} $4 != 1
1025               ; Not on NT
1026               StrCpy $1 $WINDIR 2
1027               FileOpen $1 "$1\autoexec.bat" a
1028               FileSeek $1 -1 END
1029               FileReadByte $1 $2
1030               ${If} $2 = 26        ; DOS EOF
1031                 FileSeek $1 -1 END ; write over EOF
1032               ${Endif}
1033               ${DebugMsg} "adding line $\r$\nSET PATH=%PATH%;$3$\r$\n"
1034               FileWrite $1 "$\r$\nSET PATH=%PATH%;$3$\r$\n"
1035               FileClose $1
1036               ${DebugMsg} "SetRebootFlag true"
1037               SetRebootFlag true
1038             ${Else}
1039               ;System PATH variable is at:
1040               ;HKLM "/SYSTEM/CurrentControlSet/Control/Session Manager/Environment" "Path"
1041               ReadRegStr $1 HKCU "Environment" "PATH"
1042               StrCpy $2 $1 1 -1  ; copy last char
1043               ${If} $2 == ";"    ; if last char == ;
1044                 StrCpy $1 $1 -1  ; remove last char
1045               ${Endif}
1046               ${If} $1 != ""
1047                 StrCpy $0 "$1;$0"
1048               ${Endif}
1049               WriteRegExpandStr HKCU "Environment" "PATH" $0
1050               SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000
1051             ${Endif}
1052           ${Endif}
1053         ${Endif}
1054       ${Endif}
1055     ${Endif}
1056   ${EndIf}
1057
1058   Pop $4
1059   Pop $3
1060   Pop $2
1061   Pop $1
1062   Pop $0
1063 ${FunctionEnd}
1064
1065 ; RemoveFromPath - Remove a given dir from the path
1066 ;     Input: head of the stack
1067
1068 !macro SDCC.RemoveFromPath un
1069 ${Function} ${un}SDCC.RemoveFromPath
1070   Exch $0
1071   Push $1
1072   Push $2
1073   Push $3
1074   Push $4
1075   Push $5
1076   Push $6
1077
1078   IntFmt $6 "%c" 26 ; DOS EOF
1079
1080   Call ${un}SDCC.IsNT
1081   Pop $1
1082   ${If} $1 != 1
1083     ; Not on NT
1084     StrCpy $1 $WINDIR 2
1085     FileOpen $1 "$1\autoexec.bat" r
1086     GetTempFileName $4
1087     FileOpen $2 $4 w
1088     GetFullPathName /SHORT $0 $0
1089     StrCpy $0 "SET PATH=%PATH%;$0"
1090
1091   nextLine:
1092     ; copy all lines except the line containing "SET PATH=%PATH%;$0"
1093     ; from autoexec.bat to the temporary file
1094     ClearErrors
1095     FileRead $1 $3
1096     ${IfNot} ${Errors}
1097       StrCpy $5 $3 1 -1 ; read last char
1098       ${If} $5 == $6    ; if DOS EOF
1099         StrCpy $3 $3 -1 ; remove DOS EOF so we can compare
1100       ${EndIf}
1101       ${If} $3 != "$0$\r$\n"
1102         ${AndIf} $3 != "$0$\n"
1103         ${AndIf} $3 != "$0"
1104         FileWrite $2 $3
1105         Goto nextLine
1106       ${Else}
1107         ; This is the line I'm looking for:
1108         ; don't copy it
1109         ${DebugMsg} "removing line $0"
1110         ${DebugMsg} "SetRebootFlag true"
1111         SetRebootFlag true
1112         Goto nextLine
1113       ${EndIf}
1114     ${EndIf}
1115
1116     FileClose $2
1117     FileClose $1
1118     StrCpy $1 $WINDIR 2
1119     Delete "$1\autoexec.bat"
1120     CopyFiles /SILENT $4 "$1\autoexec.bat"
1121     Delete $4
1122   ${Else}
1123     ;System PATH variable is at:
1124     ;HKLM "/SYSTEM/CurrentControlSet/Control/Session Manager/Environment" "Path"
1125     ReadRegStr $1 HKCU "Environment" "PATH"
1126     StrCpy $5 $1 1 -1 ; copy last char
1127     ${If} $5 != ";"   ; if last char != ;
1128       StrCpy $1 "$1;" ; append ;
1129     ${EndIf}
1130     Push $1
1131     Push "$0;"
1132     Call ${un}StrStr  ; Find `$0;` in $1
1133     Pop $2            ; pos of our dir
1134     ${If} $2 != ""
1135       ; it is in path:
1136       ; $0 - path to add
1137       ; $1 - path var
1138       StrLen $3 "$0;"
1139       StrLen $4 $2
1140       StrCpy $5 $1 -$4   ; $5 is now the part before the path to remove
1141       StrCpy $6 $2 "" $3 ; $6 is now the part after the path to remove
1142       StrCpy $3 $5$6
1143
1144       StrCpy $5 $3 1 -1  ; copy last char
1145       ${If} $5 == ";"    ; if last char == ;
1146         StrCpy $3 $3 -1  ; remove last char
1147       ${EndIf}
1148       ${If} $3 != ""
1149         ; New PATH not empty: update the registry
1150         WriteRegExpandStr HKCU "Environment" "PATH" $3
1151       ${Else}
1152         ; New PATH empty: remove from the registry
1153         DeleteRegValue HKCU "Environment" "PATH"
1154       ${EndIf}
1155       SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000
1156     ${Endif}
1157   ${Endif}
1158
1159   Pop $6
1160   Pop $5
1161   Pop $4
1162   Pop $3
1163   Pop $2
1164   Pop $1
1165   Pop $0
1166 ${FunctionEnd}
1167 !macroend
1168 !insertmacro SDCC.RemoveFromPath ""
1169 !insertmacro SDCC.RemoveFromPath "un."
1170
1171 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1172 ; Utility Functions                                                           ;
1173 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1174
1175 ; IsNT
1176 ; no input
1177 ; output, top of the stack = 1 if NT or 0 if not
1178 ;
1179 ; Usage:
1180 ;   Call IsNT
1181 ;   Pop $R0
1182 ;  ($R0 at this point is 1 or 0)
1183
1184 !macro SDCC.IsNT un
1185 ${Function} ${un}SDCC.IsNT
1186   Push $R0
1187   ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion
1188   ${If} $R0 == ""
1189     ; we are not NT.
1190     Pop $R0
1191     Push 0
1192   ${Else}
1193     ; NT!!!
1194     Pop $R0
1195     Push 1
1196   ${EndIf}
1197 ${FunctionEnd}
1198 !macroend
1199 !insertmacro SDCC.IsNT ""
1200 !insertmacro SDCC.IsNT "un."
1201
1202 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1203 ;  Uninstall/Reinstall page functions                                         ;
1204 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1205
1206 !ifdef VER_MAJOR & VER_MINOR & VER_REVISION & VER_BUILD
1207
1208 Var ReinstallPageCheck
1209
1210 ${Function} SDCC.PageReinstall
1211
1212   ReadRegStr $R0 ${SDCC_ROOT_KEY} "Software\${PRODUCT_NAME}" ""
1213
1214   ${If} $R0 == ""
1215     ReadRegStr $R0 ${UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString"
1216     ${If} $R0 == ""
1217       Abort
1218     ${EndIf}
1219   ${EndIf}
1220
1221   ReadRegDWORD $R0 ${SDCC_ROOT_KEY} "Software\${PRODUCT_NAME}" "VersionMajor"
1222   ReadRegDWORD $R1 ${SDCC_ROOT_KEY} "Software\${PRODUCT_NAME}" "VersionMinor"
1223   ReadRegDWORD $R2 ${SDCC_ROOT_KEY} "Software\${PRODUCT_NAME}" "VersionRevision"
1224   ReadRegDWORD $R3 ${SDCC_ROOT_KEY} "Software\${PRODUCT_NAME}" "VersionBuild"
1225   StrCpy $R0 $R0.$R1.$R2.$R3
1226
1227   ${VersionCompare} ${VER_MAJOR}.${VER_MINOR}.${VER_REVISION}.${VER_BUILD} $R0 $R0
1228   ${If} $R0 == 0
1229     StrCpy $R1 "${PRODUCT_NAME} ${PRODUCT_VERSION} is already installed. Select the operation you want to perform and click Next to continue."
1230     StrCpy $R2 "Add/Reinstall components"
1231     StrCpy $R3 "Uninstall ${PRODUCT_NAME}"
1232     !insertmacro MUI_HEADER_TEXT "Already Installed" "Choose the maintenance option to perform."
1233     StrCpy $R0 "2"
1234   ${ElseIf} $R0 == 1
1235     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."
1236     StrCpy $R2 "Uninstall before installing"
1237     StrCpy $R3 "Do not uninstall"
1238     !insertmacro MUI_HEADER_TEXT "Already Installed" "Choose how you want to install ${PRODUCT_NAME}."
1239     StrCpy $R0 "1"
1240   ${ElseIf} $R0 == 2
1241     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."
1242     StrCpy $R2 "Uninstall before installing"
1243     StrCpy $R3 "Do not uninstall"
1244     !insertmacro MUI_HEADER_TEXT "Already Installed" "Choose how you want to install ${PRODUCT_NAME}."
1245     StrCpy $R0 "1"
1246   ${Else}
1247     Abort
1248   ${EndIf}
1249
1250   nsDialogs::Create /NOUNLOAD 1018
1251
1252   ${NSD_CreateLabel} 0 0 100% 24u $R1
1253   Pop $R1
1254
1255   ${NSD_CreateRadioButton} 30u 50u -30u 8u $R2
1256   Pop $R2
1257   ${NSD_OnClick} $R2 SDCC.PageReinstallUpdateSelection
1258
1259   ${NSD_CreateRadioButton} 30u 70u -30u 8u $R3
1260   Pop $R3
1261   ${NSD_OnClick} $R3 SDCC.PageReinstallUpdateSelection
1262
1263   ${If} $ReinstallPageCheck != 2
1264     SendMessage $R2 ${BM_SETCHECK} ${BST_CHECKED} 0
1265   ${Else}
1266     SendMessage $R3 ${BM_SETCHECK} ${BST_CHECKED} 0
1267   ${EndIf}
1268
1269   nsDialogs::Show
1270
1271 ${FunctionEnd}
1272
1273 ${Function} SDCC.PageReinstallUpdateSelection
1274
1275   Pop $R1
1276
1277   ${NSD_GetState} $R2 $R1
1278
1279   ${If} $R1 == ${BST_CHECKED}
1280     StrCpy $ReinstallPageCheck 1
1281   ${Else}
1282     StrCpy $ReinstallPageCheck 2
1283   ${EndIf}
1284
1285 ${FunctionEnd}
1286
1287 ${Function} SDCC.PageLeaveReinstall
1288
1289   ${NSD_GetState} $R2 $R1
1290
1291   ${DebugMsg} "R0 = $R0, R1 = $R1, R2 = $R2"
1292
1293   ${If} $R0 == "1"
1294     ${AndIf} $R1 != "1"
1295     Goto reinst_done
1296   ${EndIf}
1297
1298   ${If} $R0 == "2"
1299     ${AndIf} $R1 == 1
1300     Goto reinst_done
1301   ${EndIf}
1302
1303   ReadRegStr $R1 ${UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString"
1304
1305   ;Run uninstaller
1306   HideWindow
1307
1308   ${If} $R0 == "2"
1309     ; Uninstall only: uninstaller should be removed
1310     ClearErrors
1311     ; ExecWait doesn't wait if _?=$INSTDIR is not defined!
1312     ExecWait '$R1'
1313     Quit
1314   ${Else}
1315     ; Uninstal & Reinstall: uninstaller will be rewritten
1316     ClearErrors
1317     ; ExecWait doesn't wait if _?=$INSTDIR is not defined!
1318     ExecWait '$R1 _?=$INSTDIR'
1319   ${EndIf}
1320
1321   BringToFront
1322
1323 reinst_done:
1324
1325 ${FunctionEnd}
1326
1327 !endif # VER_MAJOR & VER_MINOR & VER_REVISION & VER_BUILD