Code

version back down to 0.43+devel
[inkscape.git] / packaging / win32 / inkscape.nsi
1 ; #######################################
2 ; Inkscape NSIS installer project file
3 ; Used as of 0.40
4 ; #######################################
6 ; #######################################
7 ; DEFINES
8 ; #######################################
9 !define PRODUCT_NAME "Inkscape"
10 !define PRODUCT_VERSION "0.43+devel"
11 !define PRODUCT_PUBLISHER "Inkscape Organization"
12 !define PRODUCT_WEB_SITE "http://www.inkscape.org"
13 !define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\inkscape.exe"
14 !define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
18 ; #######################################
19 ; MUI   SETTINGS
20 ; #######################################
21 ; MUI 1.67 compatible ------
22 SetCompressor /SOLID lzma
23 !include "MUI.nsh"
24 !include "sections.nsh"
25 !define MUI_ABORTWARNING
26 !define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico"
27 !define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico"
28 !define MUI_HEADERIMAGE
29 !define MUI_HEADERIMAGE_BITMAP "header.bmp"
30 !define MUI_COMPONENTSPAGE_SMALLDESC
33 ; Welcome page
34 !insertmacro MUI_PAGE_WELCOME
35 ; License page
36 ; !define MUI_LICENSEPAGE_RADIOBUTTONS
37 LicenseForceSelection off
38 !define MUI_LICENSEPAGE_BUTTON $(lng_LICENSE_BUTTON)
39 !define MUI_LICENSEPAGE_TEXT_BOTTOM $(lng_LICENSE_BOTTOM_TEXT)
40 !insertmacro MUI_PAGE_LICENSE "..\..\Copying"
41 !insertmacro MUI_PAGE_COMPONENTS
42 ; InstType $(lng_Full)
43 ; InstType $(lng_Optimal)
44 ; InstType $(lng_Minimal)
45 ; Directory page
46 !insertmacro MUI_PAGE_DIRECTORY
47 ; Instfiles page
48 !insertmacro MUI_PAGE_INSTFILES
49 ; Finish page
50 !define MUI_FINISHPAGE_RUN "$INSTDIR\inkscape.exe"
51 !insertmacro MUI_PAGE_FINISH
53 ; Uninstaller pages
54 !insertmacro MUI_UNPAGE_CONFIRM
55 UninstPage custom un.CustomPageUninstall
56 !insertmacro MUI_UNPAGE_INSTFILES
57 ShowUninstDetails hide
58 !insertmacro MUI_UNPAGE_FINISH
60 ; #######################################
61 ; STRING   LOCALIZATION
62 ; #######################################
63 ; Thanks to Adib Taraben and Luca Bruno for getting this started
64 ; Add your translation here!  :-)
65 ; I had wanted to list the languages alphabetically, but apparently
66 ; the first is the default.  So putting English first is just being
67 ; practical.  It is not chauvinism or hubris, I swear!  ;-)
68 ; default language first
70 ; Language files
71 !include "english.nsh" 
72 !include "catalan.nsh" 
73 !include "czech.nsh" 
74 !include "french.nsh" 
75 !include "german.nsh" 
76 !include "italian.nsh" 
77 ;!include "polish.nsh" 
78 !include "spanish.nsh" 
80 ReserveFile "inkscape.nsi.uninstall"
83 ; #######################################
84 ; SETTINGS
85 ; #######################################
87 Name              "${PRODUCT_NAME} ${PRODUCT_VERSION}"
88 Caption           $(lng_Caption)
89 OutFile           "Inkscape-${PRODUCT_VERSION}-1.win32.exe"
90 InstallDir        "$PROGRAMFILES\Inkscape"
91 InstallDirRegKey  HKLM "${PRODUCT_DIR_REGKEY}" ""
92 ShowInstDetails   hide
93 ShowUnInstDetails hide
95 var askMultiUser
96 Var MultiUser
97 var User
99 ; #######################################
100 ;  I N S T A L L E R    S E C T I O N S
101 ; #######################################
103 ; Turn off old selected section
104 ; GetWindowsVersion
106 ; Based on Yazno's function, http://yazno.tripod.com/powerpimpit/
107 ; Updated by Joost Verburg
108 ; Updated for Windows 98 SE by Matthew Win Tibbals 5-21-03
110 ; Returns on top of stack
112 ; Windows Version (95, 98, ME, NT x.x, 2000, XP, 2003)
113 ; or
114 ; '' (Unknown Windows Version)
116 ; Usage:
117 ;   Call GetWindowsVersion
118 ;   Pop $R0
119 ;   ; at this point $R0 is "NT 4.0" or whatnot
120 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
121 Function GetWindowsVersion
122  
123   Push $R0
124   Push $R1
125  
126   ClearErrors
127  
128   ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion
129  
130   IfErrors 0 lbl_winnt
131  
132   ; we are not NT
133   ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion" VersionNumber
134  
135   StrCpy $R1 $R0 1
136   StrCmp $R1 '4' 0 lbl_error
137  
138   StrCpy $R1 $R0 3
139  
140   StrCmp $R1 '4.0' lbl_win32_95
141   StrCmp $R1 '4.9' lbl_win32_ME lbl_win32_98
142  
143   lbl_win32_95:
144     StrCpy $R0 '95'
145         StrCpy $AskMultiUser "0"
146   Goto lbl_done
147  
148   lbl_win32_98:
149     StrCpy $R0 '98'
150         StrCpy $AskMultiUser "0"
151   Goto lbl_done
152   lbl_win32_ME:
153     StrCpy $R0 'ME'
154         StrCpy $AskMultiUser "0"
155   Goto lbl_done
156  
157   lbl_winnt:
158  
159   StrCpy $R1 $R0 1
160  
161   StrCmp $R1 '3' lbl_winnt_x
162   StrCmp $R1 '4' lbl_winnt_x
163  
164   StrCpy $R1 $R0 3
165  
166   StrCmp $R1 '5.0' lbl_winnt_2000
167   StrCmp $R1 '5.1' lbl_winnt_XP
168   StrCmp $R1 '5.2' lbl_winnt_2003 lbl_error
169  
170   lbl_winnt_x:
171     StrCpy $R0 "NT $R0" 6
172   Goto lbl_done
173  
174   lbl_winnt_2000:
175     Strcpy $R0 '2000'
176   Goto lbl_done
177  
178   lbl_winnt_XP:
179     Strcpy $R0 'XP'
180   Goto lbl_done
181  
182   lbl_winnt_2003:
183     Strcpy $R0 '2003'
184   Goto lbl_done
185  
186   lbl_error:
187     Strcpy $R0 ''
188   lbl_done:
189  
190   Pop $R1
191   Exch $R0
193 FunctionEnd
195 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
197  ; StrStr
198  ; input, top of stack = string to search for
199  ;        top of stack-1 = string to search in
200  ; output, top of stack (replaces with the portion of the string remaining)
201  ; modifies no other variables.
202  ;
203  ; Usage:
204  ;   Push "this is a long ass string"
205  ;   Push "ass"
206  ;   Call StrStr
207  ;   Pop $R0
208  ;  ($R0 at this point is "ass string")
210  Function StrStr
211    Exch $R1 ; st=haystack,old$R1, $R1=needle
212    Exch    ; st=old$R1,haystack
213    Exch $R2 ; st=old$R1,old$R2, $R2=haystack
214    Push $R3
215    Push $R4
216    Push $R5
217    StrLen $R3 $R1
218    StrCpy $R4 0
219    ; $R1=needle
220    ; $R2=haystack
221    ; $R3=len(needle)
222    ; $R4=cnt
223    ; $R5=tmp
224    loop:
225      StrCpy $R5 $R2 $R3 $R4
226      StrCmp $R5 $R1 done
227      StrCmp $R5 "" done
228      IntOp $R4 $R4 + 1
229      Goto loop
230  done:
231    StrCpy $R1 $R2 "" $R4
232    Pop $R5
233    Pop $R4
234    Pop $R3
235    Pop $R2
236    Exch $R1
237  FunctionEnd
239 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
241  ; GetParameters
242  ; input, none
243  ; output, top of stack (replaces, with e.g. whatever)
244  ; modifies no other variables.
245  
246  Function GetParameters
247  
248    Push $R0
249    Push $R1
250    Push $R2
251    Push $R3
252    
253    StrCpy $R2 1
254    StrLen $R3 $CMDLINE
255    
256    ;Check for quote or space
257    StrCpy $R0 $CMDLINE $R2
258    StrCmp $R0 '"' 0 +3
259      StrCpy $R1 '"'
260      Goto loop
261    StrCpy $R1 " "
262    
263    loop:
264      IntOp $R2 $R2 + 1
265      StrCpy $R0 $CMDLINE 1 $R2
266      StrCmp $R0 $R1 get
267      StrCmp $R2 $R3 get
268      Goto loop
269    
270    get:
271      IntOp $R2 $R2 + 1
272      StrCpy $R0 $CMDLINE 1 $R2
273      StrCmp $R0 " " get
274      StrCpy $R0 $CMDLINE "" $R2
275    
276    Pop $R3
277    Pop $R2
278    Pop $R1
279    Exch $R0
280  
281  FunctionEnd
283 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
284 ; GetParameterValue
285 ; Chris Morgan<cmorgan@alum.wpi.edu> 5/10/2004
286 ; -Updated 4/7/2005 to add support for retrieving a command line switch
287 ;  and additional documentation
289 ; Searches the command line input, retrieved using GetParameters, for the
290 ; value of an option given the option name.  If no option is found the
291 ; default value is placed on the top of the stack upon function return.
293 ; This function can also be used to detect the existence of just a
294 ; command line switch like /OUTPUT  Pass the default and "OUTPUT"
295 ; on the stack like normal.  An empty return string "" will indicate
296 ; that the switch was found, the default value indicates that
297 ; neither a parameter or switch was found.
299 ; Inputs - Top of stack is default if parameter isn't found,
300 ;  second in stack is parameter to search for, ex. "OUTPUT"
301 ; Outputs - Top of the stack contains the value of this parameter
302 ;  So if the command line contained /OUTPUT=somedirectory, "somedirectory"
303 ;  will be on the top of the stack when this function returns
305 ; Register usage
306 ;$R0 - default return value if the parameter isn't found
307 ;$R1 - input parameter, for example OUTPUT from the above example
308 ;$R2 - the length of the search, this is the search parameter+2
309 ;      as we have '/OUTPUT='
310 ;$R3 - the command line string
311 ;$R4 - result from StrStr calls
312 ;$R5 - search for ' ' or '"'
313  
314 Function GetParameterValue
315   Exch $R0  ; get the top of the stack(default parameter) into R0
316   Exch      ; exchange the top of the stack(default) with
317             ; the second in the stack(parameter to search for)
318   Exch $R1  ; get the top of the stack(search parameter) into $R1
319  
320   ;Preserve on the stack the registers used in this function
321   Push $R2
322   Push $R3
323   Push $R4
324   Push $R5
325  
326   Strlen $R2 $R1+2    ; store the length of the search string into R2
327  
328   Call GetParameters  ; get the command line parameters
329   Pop $R3             ; store the command line string in R3
330  
331   # search for quoted search string
332   StrCpy $R5 '"'      ; later on we want to search for a open quote
333   Push $R3            ; push the 'search in' string onto the stack
334   Push '"/$R1='       ; push the 'search for'
335   Call StrStr         ; search for the quoted parameter value
336   Pop $R4
337   StrCpy $R4 $R4 "" 1   ; skip over open quote character, "" means no maxlen
338   StrCmp $R4 "" "" next ; if we didn't find an empty string go to next
339  
340   # search for non-quoted search string
341   StrCpy $R5 ' '      ; later on we want to search for a space since we
342                       ; didn't start with an open quote '"' we shouldn't
343                       ; look for a close quote '"'
344   Push $R3            ; push the command line back on the stack for searching
345   Push '/$R1='        ; search for the non-quoted search string
346   Call StrStr
347   Pop $R4
348  
349   ; $R4 now contains the parameter string starting at the search string,
350   ; if it was found
351 next:
352   StrCmp $R4 "" check_for_switch ; if we didn't find anything then look for
353                                  ; usage as a command line switch
354   # copy the value after /$R1= by using StrCpy with an offset of $R2,
355   # the length of '/OUTPUT='
356   StrCpy $R0 $R4 "" $R2  ; copy commandline text beyond parameter into $R0
357   # search for the next parameter so we can trim this extra text off
358   Push $R0
359   Push $R5            ; search for either the first space ' ', or the first
360                       ; quote '"'
361                       ; if we found '"/output' then we want to find the
362                       ; ending ", as in '"/output=somevalue"'
363                       ; if we found '/output' then we want to find the first
364                       ; space after '/output=somevalue'
365   Call StrStr         ; search for the next parameter
366   Pop $R4
367   StrCmp $R4 "" done  ; if 'somevalue' is missing, we are done
368   StrLen $R4 $R4      ; get the length of 'somevalue' so we can copy this
369                       ; text into our output buffer
370   StrCpy $R0 $R0 -$R4 ; using the length of the string beyond the value,
371                       ; copy only the value into $R0
372   goto done           ; if we are in the parameter retrieval path skip over
373                       ; the check for a command line switch
374  
375 ; See if the parameter was specified as a command line switch, like '/output'
376 check_for_switch:
377   Push $R3            ; push the command line back on the stack for searching
378   Push '/$R1'         ; search for the non-quoted search string
379   Call StrStr
380   Pop $R4
381   StrCmp $R4 "" done  ; if we didn't find anything then use the default
382   StrCpy $R0 ""       ; otherwise copy in an empty string since we found the
383                       ; parameter, just didn't find a value
384  
385 done:
386   Pop $R5
387   Pop $R4
388   Pop $R3
389   Pop $R2
390   Pop $R1
391   Exch $R0 ; put the value in $R0 at the top of the stack
392 FunctionEnd
394 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
396 !macro Language polng lng
397   SectionIn 1 2 3
398   SetOutPath $INSTDIR
399   File /nonfatal /a "..\..\inkscape\*.${lng}.txt"
400   SetOutPath $INSTDIR\locale
401   File /nonfatal /a /r "..\..\inkscape\locale\${polng}"
402   SetOutPath $INSTDIR\lib\locale
403   File /nonfatal /a /r "..\..\inkscape\lib\locale\${polng}"
404   ; the keyboard tables
405   SetOutPath $INSTDIR\share\screens
406   File /nonfatal /a /r "..\..\inkscape\share\screens\keys.${polng}.svg"  
407   SetOutPath $INSTDIR\share\templates
408   File /nonfatal /a /r "..\..\inkscape\share\templates\default.${polng}.svg"  
409   SetOutPath $INSTDIR\doc
410   File /nonfatal /a /r "..\..\inkscape\doc\keys.${polng}.xml"  
411   File /nonfatal /a /r "..\..\inkscape\doc\keys.${polng}.html"  
412   SectionGetFlags ${SecTutorials} $R1 
413   IntOp $R1 $R1 & ${SF_SELECTED} 
414   IntCmp $R1 ${SF_SELECTED} 0 skip_tutorials 
415     SetOutPath $INSTDIR\share\tutorials
416     File /nonfatal /a "..\..\inkscape\share\tutorials\*.${polng}.*"
417   skip_tutorials:
418 !macroend
420 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
425 ;--------------------------------
426 ; Installer Sections
428 Section -removeInkscape
429   ; check for an old installation and clean that dlls and stuff
430   ClearErrors
431   IfFileExists $INSTDIR\etc 0 doDeleteLib
432     DetailPrint "$INSTDIR\etc exists, will be removed"
433     RmDir /r $INSTDIR\etc
434         IfErrors 0 +4
435       DetailPrint "fatal: failed to delete $INSTDIR\etc"
436       DetailPrint "aborting installation"
437           Abort
438   doDeleteLib:
440   ClearErrors
441   IfFileExists $INSTDIR\lib 0 doDeleteLocale
442     DetailPrint "$INSTDIR\lib exists, will be removed"  
443     RmDir /r $INSTDIR\lib
444         IfErrors 0 +4
445       DetailPrint "fatal: failed to delete $INSTDIR\lib"
446       DetailPrint "aborting installation"
447           Abort
448   doDeleteLocale:
450   ClearErrors
451   IfFileExists $INSTDIR\locale 0 doDeleteDll
452     DetailPrint "$INSTDIR\locale exists, will be removed"
453     RmDir /r $INSTDIR\locale
454         IfErrors 0 +4
455       DetailPrint "fatal: failed to delete $INSTDIR\locale"
456       DetailPrint "aborting installation"
457           Abort
458   doDeleteDll:
460   ClearErrors
461   FindFirst $0 $1 $INSTDIR\*.dll
462     FindNextLoop:
463     StrCmp $1 "" FindNextDone
464     DetailPrint "$INSTDIR\$1 exists, will be removed"
465     Delete $INSTDIR\$1
466     IfErrors 0 +4
467       DetailPrint "fatal: failed to delete $INSTDIR\$1"
468       DetailPrint "aborting installation"
469       Abort
470     FindNext $0 $1
471     Goto FindNextLoop
472   FindNextDone:
473 SectionEnd
475 Section $(lng_Core) SecCore
477   DetailPrint "Installing Inkscape Core Files ..."
479   SectionIn 1 2 3 RO
480   SetOutPath $INSTDIR
481   SetOverwrite on
482   SetAutoClose false
484   File /a "..\..\inkscape\ink*.exe"
485   File /a "..\..\inkscape\AUTHORS"
486   File /a "..\..\inkscape\COPYING"
487   File /a "..\..\inkscape\COPYING.LIB"
488   File /a "..\..\inkscape\NEWS"
489   File /a "..\..\inkscape\HACKING.txt"
490   File /a "..\..\inkscape\README"
491   File /a "..\..\inkscape\README.txt"
492   File /a "..\..\inkscape\TRANSLATORS"
493   File /nonfatal /a /r "..\..\inkscape\data"
494   File /nonfatal /a /r "..\..\inkscape\doc"
495   File /nonfatal /a /r "..\..\inkscape\plugins"
496   File /nonfatal /a /r /x *.??*.???* /x "examples" /x "tutorials" "..\..\inkscape\share"
497   ; this files are added because it slips through the filter
498   SetOutPath $INSTDIR\share\clipart
499   File /a "..\..\inkscape\share\clipart\inkscape.logo.svg"
500   ;File /a "..\..\inkscape\share\clipart\inkscape.logo.classic.svg"  
501   SetOutPath $INSTDIR\share\extensions
502   File /a "..\..\inkscape\share\extensions\pdf_output.inx.txt"
503   File /a "..\..\inkscape\share\extensions\pdf_output_via_gs_on_win32.inx.txt"
504   SetOutPath $INSTDIR\modules
505   File /nonfatal /a /r "..\..\inkscape\modules\*.*"
506   SetOutPath $INSTDIR\python
507   File /nonfatal /a /r "..\..\inkscape\python\*.*"
509   
510 SectionEnd
512 Section $(lng_GTKFiles) SecGTK
514   DetailPrint "Installing GTK Files ..."
515   
516   SectionIn 1 2 3 RO
517   SetOutPath $INSTDIR
518   SetOverwrite on
519   File /a /r "..\..\inkscape\*.dll"
520   File /a /r /x "locale" "..\..\inkscape\lib"
521   File /a /r "..\..\inkscape\etc"
522 SectionEnd
524 Section $(lng_Alluser) SecAlluser
525   ; disable this option in Win95/Win98/WinME
526   SectionIn 1 2 3 
527   StrCpy $MultiUser "1"
528 SectionEnd
530 SectionGroup $(lng_Shortcuts) SecShortcuts
532 Section $(lng_Desktop) SecDesktop
533   SectionIn 1 2 3
534   ClearErrors
535   CreateShortCut "$DESKTOP\Inkscape.lnk" "$INSTDIR\inkscape.exe"
536   IfErrors 0 +2
537     DetailPrint "Uups! Problems creating desktop shortcuts"
538 SectionEnd
540 Section $(lng_Quicklaunch) SecQuicklaunch
541   SectionIn 1 2 3
542   ClearErrors
543   StrCmp $QUICKLAUNCH $TEMP +2
544     CreateShortCut "$QUICKLAUNCH\Inkscape.lnk" "$INSTDIR\inkscape.exe"
545   IfErrors 0 +2
546     DetailPrint "Uups! Problems creating quicklaunch shortcuts"
547 SectionEnd
549 Section $(lng_SVGWriter) SecSVGWriter 
550   SectionIn 1 2 3
551   ; create file associations, test before if needed
552   DetailPrint "creating file associations"
553   ClearErrors
554   ReadRegStr $0 HKCR ".svg" ""
555   StrCmp $0 "" 0 +3
556     WriteRegStr HKCR ".svg" "" "svgfile"
557     WriteRegStr HKCR "svgfile" "" "Scalable Vector Graphics file"
558   ReadRegStr $0 HKCR ".svgz" ""
559   StrCmp $0 "" 0 +3
560     WriteRegStr HKCR ".svgz" "" "svgfile"
561     WriteRegStr HKCR "svgfile" "" "Scalable Vector Graphics file"
562   IfErrors 0 +2
563     DetailPrint "Uups! Problems creating file assoziations for svg writer"
564   
565   DetailPrint "creating default editor"
566   ClearErrors
567   ReadRegStr $0 HKCR ".svg" ""
568   WriteRegStr HKCR "$0\shell\edit\command" "" '"$INSTDIR\Inkscape.exe" "%1"'
569   ReadRegStr $0 HKCR ".svgz" ""
570   WriteRegStr HKCR "$0\shell\edit\command" "" '"$INSTDIR\Inkscape.exe" "%1"'
571   IfErrors 0 +2
572     DetailPrint "Uups! Problems creating default editor"
573 SectionEnd
575 Section $(lng_ContextMenu) SecContextMenu
576   SectionIn 1 2 3
577   ; create file associations, test before if needed
578   DetailPrint "creating file associations"
579   ClearErrors
580   ReadRegStr $0 HKCR ".svg" ""
581   StrCmp $0 "" 0 +3
582     WriteRegStr HKCR ".svg" "" "svgfile"
583     WriteRegStr HKCR "svgfile" "" "Scalable Vector Graphics file"
584   ReadRegStr $0 HKCR ".svgz" ""
585   StrCmp $0 "" 0 +3
586     WriteRegStr HKCR ".svgz" "" "svgfile"
587     WriteRegStr HKCR "svgfile" "" "Scalable Vector Graphics file"
588   IfErrors 0 +2
589     DetailPrint "Uups! Problems creating file assoziations for context menu"
590   
591   DetailPrint "creating context menue"
592   ClearErrors
593   ReadRegStr $0 HKCR ".svg" ""
594   WriteRegStr HKCR "$0\shell\${PRODUCT_NAME}\command" "" '"$INSTDIR\Inkscape.exe" "%1"'
595   ReadRegStr $0 HKCR ".svgz" ""
596   WriteRegStr HKCR "$0\shell\${PRODUCT_NAME}\command" "" '"$INSTDIR\Inkscape.exe" "%1"'
597   IfErrors 0 +2
598     DetailPrint "Uups! Problems creating context menue integration"
600 SectionEnd
602 SectionGroupEnd
604 SectionGroup $(lng_Addfiles) SecAddfiles
606 Section $(lng_Examples) SecExamples
607   SectionIn 1 2
608   SetOutPath $INSTDIR\share
609   File /nonfatal /a /r /x "*.??*.???*" "..\..\inkscape\share\examples"
610 SectionEnd
612 Section $(lng_Tutorials) SecTutorials
613   SectionIn 1 2
614   SetOutPath $INSTDIR\share
615   File /nonfatal /a /r /x "*.??*.???*" "..\..\inkscape\share\tutorials"
616 SectionEnd
618 SectionGroupEnd
620 SectionGroup /e $(lng_Languages) SecLanguages
622 Section $(lng_am) SecAmharic
623   !insertmacro Language am am
624 SectionEnd
626 Section $(lng_az) SecAzerbaijani
627   !insertmacro Language az az
628 SectionEnd
630 Section $(lng_be) SecByelorussian
631   !insertmacro Language be be
632 SectionEnd
634 Section $(lng_ca) SecCatalan
635   !insertmacro Language ca ca
636 SectionEnd
638 Section $(lng_cs) SecCzech
639   !insertmacro Language cs cs
640 SectionEnd
642 Section $(lng_da) SecDanish
643   !insertmacro Language da da
644 SectionEnd
646 Section $(lng_de) SecGerman
647   !insertmacro Language 'de' 'de'
648 SectionEnd
650 Section $(lng_el) SecGreek
651   !insertmacro Language el el
652 SectionEnd
654 Section $(lng_en) SecEnglish
655   SectionIn 1 2 3 RO
656 SectionEnd
658 Section $(lng_es) SecSpanish
659   !insertmacro Language 'es' 'es'
660 SectionEnd
662 Section $(lng_es_MX) SecSpanishMexico
663   !insertmacro Language 'es_MX' 'es_MX'
664 SectionEnd
666 Section $(lng_et) SecEstonian
667   !insertmacro Language et et
668 SectionEnd
670 Section $(lng_fr) SecFrench
671   !insertmacro Language 'fr' 'fr'
672 SectionEnd
674 Section $(lng_ga) SecIrish
675   !insertmacro Language ga ga
676 SectionEnd
678 Section $(lng_gl) SecGallegan
679   !insertmacro Language gl gl
680   SectionIn 1 2 3
681 SectionEnd
683 Section $(lng_hu) SecHungarian
684   !insertmacro Language hu hu
685   SectionIn 1 2 3
686 SectionEnd
688 Section $(lng_it) SecItalian
689   !insertmacro Language it it
690   SectionIn 1 2 3
691 SectionEnd
693 Section $(lng_ja) SecJapanese
694   !insertmacro Language 'ja' 'jp'
695 SectionEnd
697 Section $(lng_ko) SecKorean
698   !insertmacro Language 'ko' 'ko'
699 SectionEnd
701 Section $(lng_lt) SecLithuanian
702   !insertmacro Language 'lt' 'lt'
703 SectionEnd
705 Section $(lng_mk) SecMacedonian
706   !insertmacro Language mk mk
707 SectionEnd
709 Section $(lng_nb) SecNorwegianBokmal
710   !insertmacro Language nb nb
711 SectionEnd
713 Section $(lng_nl) SecDutch
714   !insertmacro Language nl nl
715 SectionEnd
717 Section $(lng_nn) SecNorwegianNynorsk
718   !insertmacro Language nn nn
719 SectionEnd
721 Section $(lng_pa) SecPanjabi
722   !insertmacro Language pa pa
723 SectionEnd
725 Section $(lng_pl) SecPolish
726   !insertmacro Language pl pl
727 SectionEnd
729 Section $(lng_pt) SecPortuguese
730   !insertmacro Language pt pt
731 SectionEnd
733 Section $(lng_pt_BR) SecPortugueseBrazil
734   !insertmacro Language pt_BR pt_BR
735 SectionEnd
737 Section $(lng_ru) SecRussian
738   !insertmacro Language ru ru
739 SectionEnd
741 Section $(lng_sk) SecSlovak
742   !insertmacro Language sk sk
743 SectionEnd
745 Section $(lng_sl) SecSlovenian
746   !insertmacro Language sl sl
747 SectionEnd
749 Section $(lng_sr) SecSerbian
750   !insertmacro Language sr sr
751 SectionEnd
753 Section $(lng_sr@Latn) SecSerbianLatin
754   !insertmacro Language 'sr@Latn' 'sr@Latn'
755 SectionEnd
757 Section $(lng_sv) SecSwedish
758   !insertmacro Language sv sv
759 SectionEnd
761 Section $(lng_tr) SecTurkish
762   !insertmacro Language tr tr
763 SectionEnd
765 Section $(lng_uk) SecUkrainian
766   !insertmacro Language uk uk
767 SectionEnd
769 Section $(lng_zh_CN) SecChineseSimplified
770   !insertmacro Language zh_CN zh_CN
771 SectionEnd
773 Section $(lng_zh_TW) SecChineseTaiwan
774   !insertmacro Language zh_TW zh_TW
775 SectionEnd
777 SectionGroupEnd
780 Section -FinalizeInstallation
781   StrCmp $MultiUser "1" "" SingleUser
782     DetailPrint "admin mode, registry root will be HKLM"
783     SetShellVarContext all
784     Goto endSingleUser
785   SingleUser:
786     DetailPrint "single user mode, registry root will be HKCU"
787     SetShellVarContext current
788   endSingleUser:                
790   ; check for writing registry
791   ClearErrors
792   WriteRegStr SHCTX "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\inkscape.exe"  
793   ;IfErrors 0 +4
794   ;  DetailPrint "fatal: failed to write to ${PRODUCT_DIR_REGKEY}"
795   ;  DetailPrint "aborting installation"
796   ;     Abort
797   WriteRegStr SHCTX "${PRODUCT_DIR_REGKEY}" "MultiUser" "$MultiUser"  
798   WriteRegStr SHCTX "${PRODUCT_DIR_REGKEY}" "askMultiUser" "$askMultiUser"
799   WriteRegStr SHCTX "${PRODUCT_DIR_REGKEY}" "User" "$User"
800   IfErrors 0 +2
801     DetailPrint "fatal: failed to write to registry installation info"
803   ; start menu entries
804   ClearErrors
805   CreateDirectory "$SMPROGRAMS\Inkscape"
806   CreateShortCut "$SMPROGRAMS\Inkscape\Inkscape.lnk" "$INSTDIR\inkscape.exe"
807   CreateShortCut "$SMPROGRAMS\Inkscape\Uninstall Inkscape.lnk" "$INSTDIR\uninst.exe"
808   IfErrors 0 +2
809     DetailPrint "fatal: failed to write to start menu info"
811   ; uninstall settings
812   ClearErrors
813   WriteUninstaller "$INSTDIR\uninst.exe"
814   WriteRegExpandStr SHCTX "${PRODUCT_UNINST_KEY}" "UninstallString" '"$INSTDIR\uninst.exe"'
815   WriteRegExpandStr SHCTX "${PRODUCT_UNINST_KEY}" "InstallLocation" "$INSTDIR"
816   WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "DisplayName" "${PRODUCT_NAME} ${PRODUCT_VERSION}"
817   WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\Inkscape.exe,0"
818   WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"
819   WriteRegDWORD SHCTX "${PRODUCT_UNINST_KEY}" "NoModify" "1"
820   WriteRegDWORD SHCTX "${PRODUCT_UNINST_KEY}" "NoRepair" "1"
821   IfErrors 0 +2
822     DetailPrint "fatal: failed to write to registry un-installation info"
823 SectionEnd
824  
825 ; Last the Descriptions
826 !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
827   !insertmacro MUI_DESCRIPTION_TEXT ${SecCore} $(lng_CoreDesc)
828   !insertmacro MUI_DESCRIPTION_TEXT ${SecGTK} $(lng_GTKFilesDesc)
829   !insertmacro MUI_DESCRIPTION_TEXT ${SecShortcuts} $(lng_ShortcutsDesc)
830   !insertmacro MUI_DESCRIPTION_TEXT ${SecAlluser} $(lng_AlluserDesc) 
831   !insertmacro MUI_DESCRIPTION_TEXT ${SecDesktop} $(lng_DesktopDesc)
832   !insertmacro MUI_DESCRIPTION_TEXT ${SecQuicklaunch} $(lng_QuicklaunchDesc)
833   !insertmacro MUI_DESCRIPTION_TEXT ${SecSVGWriter} $(lng_SVGWriterDesc)
834   !insertmacro MUI_DESCRIPTION_TEXT ${SecContextMenu} $(lng_ContextMenuDesc)
835   !insertmacro MUI_DESCRIPTION_TEXT ${SecAddfiles} $(lng_AddfilesDesc)
836   !insertmacro MUI_DESCRIPTION_TEXT ${SecExamples} $(lng_ExamplesDesc)
837   !insertmacro MUI_DESCRIPTION_TEXT ${SecTutorials} $(lng_TutorialsDesc)
838   !insertmacro MUI_DESCRIPTION_TEXT ${SecLanguages} $(lng_LanguagesDesc)
839 !insertmacro MUI_FUNCTION_DESCRIPTION_END
841 !macro Parameter key Section
842   Push ${key}
843   Push ""
844   Call GetParameterValue
845   Pop $1
846   StrCmp $1 "OFF" 0 +5
847     SectionGetFlags ${Section} $0
848     IntOp $2 ${SF_SELECTED} ~
849     IntOp $0 $0 & $2
850     SectionSetFlags ${Section} $0
851   StrCmp $1 "ON" 0 +4
852     SectionGetFlags ${Section} $0
853     IntOp $0 $0 | ${SF_SELECTED}
854     SectionSetFlags ${Section} $0
855 !macroend
857 Function .onInit
858   ;Extract InstallOptions INI files
859   StrCpy $AskMultiUser "1"
860   StrCpy $MultiUser "0"
861   ; this resets AskMultiUser if Win95/98/ME
862   Call GetWindowsVersion
863   Pop $R0
864   DetailPrint "detected operating system $R0"
865   ;MessageBox MB_OK "operating system: $R0; AskMultiuser: $AskMultiUser"
866   
867   ; hide all user section if win98
868   StrCmp $AskMultiUser "1" +2
869     SectionSetText ${SecAlluser} ""
871   ; hide if quick launch if not available
872   StrCmp $QUICKLAUNCH $TEMP 0 +2
873     SectionSetText ${SecQuicklaunch} ""
875   ;check if user is admin
876   ClearErrors
877         UserInfo::GetName
878         IfErrors info_Win9x
879         Pop $0
880         StrCpy $User $0
881         UserInfo::GetAccountType
882         Pop $1
883         StrCmp $1 "Admin" info_done
885         MessageBox MB_OK|MB_ICONEXCLAMATION "$(lng_NO_ADMIN)"
887         Goto info_done
889         info_Win9x:
890                 # This one means you don't need to care about admin or
891                 # not admin because Windows 9x doesn't either
892                 MessageBox MB_OK|MB_ICONEXCLAMATION $(lng_NOT_SUPPORTED)
894         info_done:
896   ;check for previous installation
897   ReadRegStr $0 HKLM "${PRODUCT_DIR_REGKEY}" "User"
898   StrCmp $0 "" +1 +2
899   ReadRegStr $0 HKCU "${PRODUCT_DIR_REGKEY}" "User"
900   ;check user if applicable
901   StrCmp $0 "" +3
902     StrCmp $0 $User +2
903           MessageBox MB_OK|MB_ICONEXCLAMATION "$(lng_DIFFERENT_USER)"
904         
905   ; proccess command line parameter
906   !insertmacro Parameter "GTK" ${SecGTK}
907   !insertmacro Parameter "SHORTCUTS" ${secShortcuts}
908   !insertmacro Parameter "ALLUSER" ${SecAlluser}
909   !insertmacro Parameter "DESKTOP" ${SecDesktop}
910   !insertmacro Parameter "QUICKLAUNCH" ${SecQUICKlaunch}
911   !insertmacro Parameter "SVGEDITOR" ${SecSVGWriter}
912   !insertmacro Parameter "CONTEXTMENUE" ${SecContextMenu}
913   !insertmacro Parameter "ADDFILES" ${SecAddfiles}
914   !insertmacro Parameter "EXAMPLES" ${SecExamples}
915   !insertmacro Parameter "TUTORIALS" ${SecTutorials}
916   !insertmacro Parameter "LANGUAGES" ${SecLanguages}
917   !insertmacro Parameter "am" ${SecAmharic}
918   !insertmacro Parameter "az" ${SecAzerbaijani}
919   !insertmacro Parameter "be" ${SecByelorussian}
920   !insertmacro Parameter "ca" ${SecCatalan}
921   !insertmacro Parameter "cs" ${SecCzech}
922   !insertmacro Parameter "da" ${SecDanish}
923   !insertmacro Parameter "de" ${SecGerman}
924   !insertmacro Parameter "el" ${SecGreek}
925   !insertmacro Parameter "es" ${SecSpanish}
926   !insertmacro Parameter "es_MX" ${SecSpanishMexico}
927   !insertmacro Parameter "et" ${SecEstonian}
928   !insertmacro Parameter "fr" ${SecFrench}
929   !insertmacro Parameter "ga" ${SecIrish}
930   !insertmacro Parameter "gl" ${SecGallegan}
931   !insertmacro Parameter "hu" ${SecHungarian}
932   !insertmacro Parameter "it" ${SecItalian}
933   !insertmacro Parameter "ja" ${SecJapanese}
934   !insertmacro Parameter "ko" ${SecKorean}
935   !insertmacro Parameter "mk" ${SecMacedonian}
936   !insertmacro Parameter "nb" ${SecNorwegianBokmal}
937   !insertmacro Parameter "nl" ${SecDutch}
938   !insertmacro Parameter "nn" ${SecNorwegianNynorsk}
939   !insertmacro Parameter "pa" ${SecPanjabi}
940   !insertmacro Parameter "pl" ${SecPolish}
941   !insertmacro Parameter "pt" ${SecPortuguese}
942   !insertmacro Parameter "pt_BR" ${SecPortugueseBrazil}
943   !insertmacro Parameter "ru" ${SecRussian}
944   !insertmacro Parameter "sk" ${SecSlovak}
945   !insertmacro Parameter "sl" ${SecSlovenian}
946   !insertmacro Parameter "sr" ${SecSerbian}
947   !insertmacro Parameter "sr@Latn" ${SecSerbianLatin}
948   !insertmacro Parameter "sv" ${SecSwedish}
949   !insertmacro Parameter "tr" ${SecTurkish}
950   !insertmacro Parameter "uk" ${SecUkrainian}
951   !insertmacro Parameter "zh_CN" ${SecChineseSimplified}
952   !insertmacro Parameter "zh_TW" ${SecChineseTaiwan}
953   
954   Push "?"
955   Push "TEST"
956   Call GetParameterValue
957   Pop $1
958   StrCmp $1 "TEST" +3
959     MessageBox MB_OK "possible parameters for installer:$\r$\n \
960       /?: this help screen$\r$\n \
961       /S: silent$\r$\n \
962       /D=(directory): where to install inkscape$\r$\n \
963       /GTK=(OFF/ON): GTK+ Runtime environment$\r$\n \
964       /SHORTCUTS=(OFF/ON): shortcuts to start inkscape$\r$\n \
965       /ALLUSER=(OFF/ON): for all users on the computer$\r$\n \
966       /DESKTOP=(OFF/ON): Desktop icon$\r$\n \
967       /QUICKLAUNCH=(OFF/ON): quick launch icon$\r$\n \
968       /SVGEDITOR=(OFF/ON): default SVG editor$\r$\n \
969       /CONTEXTMENUE=(OFF/ON): context menue integration$\r$\n \
970       /ADDFILES=(OFF/ON): additional files$\r$\n \
971       /EXAMPLES=(OFF/ON): examples$\r$\n \
972       /TUTORIALS=(OFF/ON): tutorials$\r$\n \
973       /LANGUAGES=(OFF/ON): translated menues, examples, etc.$\r$\n \
974       /[locale code]=(OFF/ON): e.g am, es, es_MX as in Inkscape supported"
975     Abort
976 FunctionEnd
978 Function .onSelChange
979 FunctionEnd
981 ; --------------------------------------------------
983 Function un.CustomPageUninstall
984   !insertmacro MUI_HEADER_TEXT "$(lng_UInstOpt)" "$(lng_UInstOpt1)"
985   !insertmacro MUI_INSTALLOPTIONS_WRITE "inkscape.nsi.uninstall" "Field 1" "Text" "$APPDATA\Inkscape\preferences.xml"
986   !insertmacro MUI_INSTALLOPTIONS_WRITE "inkscape.nsi.uninstall" "Field 2" "Text" "$(lng_PurgePrefs)"
988   !insertmacro MUI_INSTALLOPTIONS_DISPLAY "inkscape.nsi.uninstall"
989   !insertmacro MUI_INSTALLOPTIONS_READ $MultiUser "inkscape.nsi.uninstall" "Field 2" "State"
990   DetailPrint "keepfiles = $MultiUser" 
991           ;MessageBox MB_OK "adminmode = $MultiUser MultiUserOS = $askMultiUser" 
993 FunctionEnd
996 Function un.onInit
998   ClearErrors
999   StrCpy $User ""
1000         UserInfo::GetName
1001         IfErrors +3
1002         Pop $0
1003         StrCpy $User $0
1005   StrCpy $askMultiUser "1"
1006   StrCpy $MultiUser "1"
1007  
1008   ; Test if this was a multiuser installation
1009   ReadRegStr $0 HKLM "${PRODUCT_DIR_REGKEY}" ""
1010   StrCmp $0  "$INSTDIR\inkscape.exe" 0 +5  
1011     ReadRegStr $MultiUser HKLM "${PRODUCT_DIR_REGKEY}" "MultiUser"
1012     ReadRegStr $askMultiUser HKLM "${PRODUCT_DIR_REGKEY}" "askMultiUser"
1013         ReadRegStr $0 HKLM "${PRODUCT_DIR_REGKEY}" "User"
1014         Goto +4
1015   ReadRegStr $MultiUser HKCU "${PRODUCT_DIR_REGKEY}" "MultiUser"
1016   ReadRegStr $askMultiUser HKCU "${PRODUCT_DIR_REGKEY}" "askMultiUser"
1017   ReadRegStr $0 HKCU "${PRODUCT_DIR_REGKEY}" "User"
1018   ;check user if applicable
1019   StrCmp $0 "" +3
1020     StrCmp $0 $User +2
1021           MessageBox MB_OK|MB_ICONEXCLAMATION "$(lng_DIFFERENT_USER)"
1022     
1023  !insertmacro MUI_INSTALLOPTIONS_EXTRACT "inkscape.nsi.uninstall"
1025  ;check whether Multi user installation ?
1026  SetShellVarContext all
1027  StrCmp $MultiUser "0" 0 +2 
1028  SetShellVarContext current
1029  ;MessageBox MB_OK "adminmode = $MultiUser MultiUserOS = $askMultiUser" 
1030    
1031 FunctionEnd
1033 Section Uninstall
1035   ; remove personal settings
1036   Delete "$APPDATA\Inkscape\extension-errors.log"
1037   StrCmp $MultiUser "0" 0 endPurge  ; multiuser assigned in dialog
1038     DetailPrint "purge personal settings in $APPDATA\Inkscape"
1039     RMDir /r "$APPDATA\Inkscape"
1040   endPurge:
1042   ; Remove file associations for svg editor
1043   DetailPrint "removing file associations for svg editor"
1044   ClearErrors
1045   ReadRegStr $0 HKCR ".svg" ""
1046   DetailPrint ".svg associated as $0"
1047   IfErrors endUninstSVGEdit  
1048     ReadRegStr $1 HKCR "$0\shell\edit\command" ""
1049         IfErrors 0 +2  
1050       DetailPrint "svg editor is $1"
1051     StrCmp $1 '"$INSTDIR\Inkscape.exe" "%1"' 0 +3
1052       DetailPrint "removing default .svg editor"
1053       DeleteRegKey HKCR "$0\shell\edit\command"
1054     DeleteRegKey /ifempty HKCR "$0\shell\edit"
1055     DeleteRegKey /ifempty HKCR "$0\shell"
1056     DeleteRegKey /ifempty HKCR "$0"
1057   endUninstSVGEdit:
1058   
1059   ClearErrors
1060   ReadRegStr $2 HKCR ".svgz" ""
1061   DetailPrint ".svgz associated as $2"
1062   IfErrors endUninstSVGZEdit  
1063     ReadRegStr $3 HKCR "$2\shell\edit\command" ""
1064     IfErrors 0 +2  
1065       DetailPrint "svgz editor is $1"
1066     StrCmp $3 '"$INSTDIR\Inkscape.exe" "%1"' 0 +3
1067       DetailPrint "removing default .svgz editor"
1068       DeleteRegKey HKCR "$2\shell\edit\command"
1069     DeleteRegKey /ifempty HKCR "$2\shell\edit"
1070     DeleteRegKey /ifempty HKCR "$2\shell"
1071     DeleteRegKey /ifempty HKCR "$2"
1072   endUninstSVGZEdit:
1073   
1074   ; Remove file associations for svg editor
1075   DetailPrint "removing file associations for svg editor"
1076   ClearErrors
1077   ReadRegStr $0 HKCR ".svg" ""
1078   IfErrors endUninstSVGView
1079     ReadRegStr $1 HKCR "$0\shell\open\command" ""
1080     IfErrors 0 +2  
1081       DetailPrint "svg viewer is $1"
1082     StrCmp $1 '"$INSTDIR\Inkscape.exe" "%1"' 0 +3
1083       DetailPrint "removing default .svg viewer"
1084       DeleteRegKey HKCR "$0\shell\open\command"
1085     DeleteRegKey /ifempty HKCR "$0\shell\open"
1086     DeleteRegKey /ifempty HKCR "$0\shell"
1087     DeleteRegKey /ifempty HKCR "$0"
1088   endUninstSVGView:
1089   
1090   ClearErrors
1091   ReadRegStr $2 HKCR ".svgz" ""
1092   IfErrors endUninstSVGZView
1093     ReadRegStr $3 HKCR "$2\shell\open\command" ""
1094     IfErrors 0 +2  
1095       DetailPrint "svgz viewer is $1"
1096     StrCmp $3 '"$INSTDIR\Inkscape.exe" "%1"' 0 +3
1097       DetailPrint "removing default .svgz viewer"
1098       DeleteRegKey HKCR "$2\shell\open\command"
1099     DeleteRegKey /ifempty HKCR "$2\shell\open"
1100     DeleteRegKey /ifempty HKCR "$2\shell"
1101     DeleteRegKey /ifempty HKCR "$2"
1102   endUninstSVGZView:
1103   
1104   ; Remove file associations for context menue
1105   DetailPrint "removing file associations for svg editor"
1106   ClearErrors
1107   ReadRegStr $0 HKCR ".svg" ""
1108   IfErrors endUninstSVGContext
1109   DetailPrint "removing default .svg context menue"
1110   DeleteRegKey HKCR "$0\shell\${PRODUCT_NAME}"
1111   DeleteRegKey /ifempty HKCR "$0\shell"
1112   DeleteRegKey /ifempty HKCR "$0"
1113   endUninstSVGContext:
1114   
1115   ClearErrors
1116   ReadRegStr $2 HKCR ".svgz" ""
1117   IfErrors endUninstSVGZContext
1118   DetailPrint "removing default .svgzcontext menue"
1119   DeleteRegKey HKCR "$2\shell\${PRODUCT_NAME}"
1120   DeleteRegKey /ifempty HKCR "$2\shell"
1121   DeleteRegKey /ifempty HKCR "$2"
1122   endUninstSVGZContext:
1124   ReadRegStr $1 HKCR "$0" ""
1125   StrCmp $1 "" 0 +3
1126     DetailPrint "removing filetype .svg $0"
1127     DeleteRegKey HKCR ".svg"
1128   
1129   ReadRegStr $3 HKCR "$2" ""
1130   StrCmp $3 "" 0 +3
1131     DetailPrint "removing filetype .svgz $2"
1132     DeleteRegKey HKCR ".svgz"
1133   
1134     
1135   SetShellVarContext all
1136   DetailPrint "removing product regkey"
1137   DeleteRegKey SHCTX "${PRODUCT_DIR_REGKEY}"
1138   DetailPrint "removing uninstall info"
1139   DeleteRegKey SHCTX "${PRODUCT_UNINST_KEY}"
1140   DetailPrint "removing shortcuts"
1141   Delete "$DESKTOP\Inkscape.lnk"
1142   Delete "$QUICKLAUNCH\Inkscape.lnk"
1143   Delete "$SMPROGRAMS\Inkscape\Uninstall Inkscape.lnk"
1144   Delete "$SMPROGRAMS\Inkscape\Inkscape.lnk"
1145   RMDir  "$SMPROGRAMS\Inkscape"
1147   SetShellVarContext current
1148   DetailPrint "removing product regkey"
1149   DeleteRegKey SHCTX "${PRODUCT_DIR_REGKEY}"
1150   DetailPrint "removing uninstall info"
1151   DeleteRegKey SHCTX "${PRODUCT_UNINST_KEY}"
1152   DetailPrint "removing shortcuts"
1153   Delete "$DESKTOP\Inkscape.lnk"
1154   Delete "$QUICKLAUNCH\Inkscape.lnk"
1155   Delete "$SMPROGRAMS\Inkscape\Uninstall Inkscape.lnk"
1156   Delete "$SMPROGRAMS\Inkscape\Inkscape.lnk"
1157   RMDir  "$SMPROGRAMS\Inkscape"
1159   DetailPrint "removing uninstall info"
1160   RMDir /r "$INSTDIR"
1162   SetAutoClose false
1164 SectionEnd