index 3a9561a7e5f32fe4a1487a7dc4f31438edaf0749..6150a00f2f596c7708a282f2c8f11e8f2f56b462 100644 (file)
; DEFINES
; #######################################
!define PRODUCT_NAME "Inkscape"
-!define PRODUCT_VERSION "0.45+devel"
-!define PRODUCT_PUBLISHER "Inkscape Organization"
-!define PRODUCT_WEB_SITE "http://www.inkscape.org"
+!define PRODUCT_VERSION "0.47"
+!define PRODUCT_REVISION 3
+!define PRODUCT_VERSION_4 "0.47.0.3"
!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\inkscape.exe"
!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
-
-
+;!define DUMMYINSTALL ; Define this to make it build quickly, not including any of the files or code in the sections, for quick testing of features of the installer and development thereof.
; #######################################
; MUI SETTINGS
; #######################################
; MUI 1.67 compatible ------
SetCompressor /SOLID lzma
+SetCompressorDictSize 32
+RequestExecutionLevel admin
!include "MUI.nsh"
+!include "LogicLib.nsh"
!include "sections.nsh"
!define MUI_ABORTWARNING
-!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico"
+!define MUI_ICON "..\..\inkscape.ico";${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico"
!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico"
!define MUI_HEADERIMAGE
!define MUI_HEADERIMAGE_BITMAP "header.bmp"
+!define MUI_WELCOMEFINISHPAGE_BITMAP "welcomefinish.bmp"
!define MUI_COMPONENTSPAGE_SMALLDESC
;..................................................................................................
;store the language selection, store Start Menu folder etc.
;Enter the windows uninstall reg sub key to add uninstall information to Add/Remove Programs also.
-!define INSTDIR_REG_ROOT "HKLM"
-!define INSTDIR_REG_KEY PRODUCT_UNINST_KEY
+!define INSTDIR_REG_ROOT HKLM
+!define INSTDIR_REG_KEY ${PRODUCT_UNINST_KEY}
;include the Uninstall log header
!include AdvUninstLog.nsh
-
-;Specify the preferred uninstaller operation mode, either unattended or interactive.
-;You have to type either !insertmacro UNATTENDED_UNINSTALL, or !insertmacro INTERACTIVE_UNINSTALL.
-;Be aware only one of the following two macros has to be inserted, neither both, neither none.
-
-;!insertmacro UNATTENDED_UNINSTALL
!insertmacro INTERACTIVE_UNINSTALL
+;For md5dll and messagebox
+!addplugindir .
+
+!include FileFunc.nsh
+!insertmacro GetParameters
+!insertmacro GetOptions
+!insertmacro un.GetParent
; Welcome page
!insertmacro MUI_PAGE_WELCOME
; default language first
; Language files
-!include "english.nsh"
-; !include "catalan.nsh" the catalan support has been abandoned by NSIS as of version 2.28
-!include "czech.nsh"
-!include "finnish.nsh"
-!include "french.nsh"
-!include "german.nsh"
-!include "italian.nsh"
-!include "japanese.nsh"
-!include "polish.nsh"
-!include "russian.nsh"
-!include "slovak.nsh"
-!include "slovenian.nsh"
-!include "spanish.nsh"
+!insertmacro MUI_RESERVEFILE_LANGDLL
+!include English.nsh
+!include Breton.nsh
+!include Catalan.nsh
+!include Czech.nsh
+!include Finnish.nsh
+!include French.nsh
+!include Galician.nsh
+!include German.nsh
+!include Italian.nsh
+!include Japanese.nsh
+!include Polish.nsh
+!include Russian.nsh
+!include Slovak.nsh
+!include Slovenian.nsh
+!include Spanish.nsh
+!include SimpChinese.nsh
+!include TradChinese.nsh
ReserveFile "inkscape.nsi.uninstall"
-
+ReserveFile "${NSISDIR}\Plugins\UserInfo.dll"
+!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS
; #######################################
; SETTINGS
; #######################################
-Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
-Caption $(lng_Caption)
-OutFile "Inkscape-${PRODUCT_VERSION}-1.win32.exe"
+Name "${PRODUCT_NAME}"
+Caption "$(lng_Caption)"
+BrandingText "$(lng_Caption)"
+!ifndef PRODUCT_REVISION
+OutFile "Inkscape-${PRODUCT_VERSION}.exe"
+!else
+OutFile "Inkscape-${PRODUCT_VERSION}-${PRODUCT_REVISION}.exe"
+!endif
InstallDir "$PROGRAMFILES\Inkscape"
InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""
-ShowInstDetails hide
-ShowUnInstDetails hide
-var askMultiUser
+VIProductVersion "${PRODUCT_VERSION_4}"
+VIAddVersionKey ProductName "${PRODUCT_NAME}"
+VIAddVersionKey Comments "Licensed under the GNU GPL"
+VIAddVersionKey CompanyName "inkscape.org"
+VIAddVersionKey LegalCopyright "© 2009 Inkscape"
+VIAddVersionKey FileDescription "${PRODUCT_NAME}"
+VIAddVersionKey FileVersion "${PRODUCT_VERSION_4}"
+VIAddVersionKey ProductVersion "${PRODUCT_VERSION_4}"
+VIAddVersionKey InternalName "${PRODUCT_NAME}"
+
+Var askMultiUser
+Var filename
Var MultiUser
-var User
+Var User
+Var CMDARGS
; #######################################
; I N S T A L L E R S E C T I O N S
; #######################################
-; Turn off old selected section
-; GetWindowsVersion
-;
-; Based on Yazno's function, http://yazno.tripod.com/powerpimpit/
-; Updated by Joost Verburg
-; Updated for Windows 98 SE by Matthew Win Tibbals 5-21-03
-;
-; Returns on top of stack
-;
-; Windows Version (95, 98, ME, NT x.x, 2000, XP, 2003)
-; or
-; '' (Unknown Windows Version)
-;
-; Usage:
-; Call GetWindowsVersion
-; Pop $R0
-; ; at this point $R0 is "NT 4.0" or whatnot
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Function GetWindowsVersion
-
- Push $R0
- Push $R1
-
- ClearErrors
-
- ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion
-
- IfErrors 0 lbl_winnt
-
- ; we are not NT
- ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion" VersionNumber
-
- StrCpy $R1 $R0 1
- StrCmp $R1 '4' 0 lbl_error
-
- StrCpy $R1 $R0 3
-
- StrCmp $R1 '4.0' lbl_win32_95
- StrCmp $R1 '4.9' lbl_win32_ME lbl_win32_98
-
- lbl_win32_95:
- StrCpy $R0 '95'
- StrCpy $AskMultiUser "0"
- Goto lbl_done
-
- lbl_win32_98:
- StrCpy $R0 '98'
- StrCpy $AskMultiUser "0"
- Goto lbl_done
- lbl_win32_ME:
- StrCpy $R0 'ME'
- StrCpy $AskMultiUser "0"
- Goto lbl_done
-
- lbl_winnt:
-
- StrCpy $R1 $R0 1
-
- StrCmp $R1 '3' lbl_winnt_x
- StrCmp $R1 '4' lbl_winnt_x
-
- StrCpy $R1 $R0 3
-
- StrCmp $R1 '5.0' lbl_winnt_2000
- StrCmp $R1 '5.1' lbl_winnt_XP
- StrCmp $R1 '5.2' lbl_winnt_2003 lbl_error
-
- lbl_winnt_x:
- StrCpy $R0 "NT $R0" 6
- Goto lbl_done
-
- lbl_winnt_2000:
- Strcpy $R0 '2000'
- Goto lbl_done
-
- lbl_winnt_XP:
- Strcpy $R0 'XP'
- Goto lbl_done
-
- lbl_winnt_2003:
- Strcpy $R0 '2003'
- Goto lbl_done
-
- lbl_error:
- Strcpy $R0 ''
- lbl_done:
-
- Pop $R1
- Exch $R0
-
-FunctionEnd
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
- ; StrStr
- ; input, top of stack = string to search for
- ; top of stack-1 = string to search in
- ; output, top of stack (replaces with the portion of the string remaining)
- ; modifies no other variables.
- ;
- ; Usage:
- ; Push "this is a long ass string"
- ; Push "ass"
- ; Call StrStr
- ; Pop $R0
- ; ($R0 at this point is "ass string")
-
- Function StrStr
- Exch $R1 ; st=haystack,old$R1, $R1=needle
- Exch ; st=old$R1,haystack
- Exch $R2 ; st=old$R1,old$R2, $R2=haystack
- Push $R3
- Push $R4
- Push $R5
- StrLen $R3 $R1
- StrCpy $R4 0
- ; $R1=needle
- ; $R2=haystack
- ; $R3=len(needle)
- ; $R4=cnt
- ; $R5=tmp
- loop:
- StrCpy $R5 $R2 $R3 $R4
- StrCmp $R5 $R1 done
- StrCmp $R5 "" done
- IntOp $R4 $R4 + 1
- Goto loop
- done:
- StrCpy $R1 $R2 "" $R4
- Pop $R5
- Pop $R4
- Pop $R3
- Pop $R2
- Exch $R1
- FunctionEnd
-
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; GetParameters
- ; input, none
- ; output, top of stack (replaces, with e.g. whatever)
- ; modifies no other variables.
-
- Function GetParameters
-
- Push $R0
- Push $R1
- Push $R2
- Push $R3
-
- StrCpy $R2 1
- StrLen $R3 $CMDLINE
-
- ;Check for quote or space
- StrCpy $R0 $CMDLINE $R2
- StrCmp $R0 '"' 0 +3
- StrCpy $R1 '"'
- Goto loop
- StrCpy $R1 " "
-
- loop:
- IntOp $R2 $R2 + 1
- StrCpy $R0 $CMDLINE 1 $R2
- StrCmp $R0 $R1 get
- StrCmp $R2 $R3 get
- Goto loop
-
- get:
- IntOp $R2 $R2 + 1
- StrCpy $R0 $CMDLINE 1 $R2
- StrCmp $R0 " " get
- StrCpy $R0 $CMDLINE "" $R2
-
- Pop $R3
- Pop $R2
- Pop $R1
- Exch $R0
-
- FunctionEnd
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; GetParameterValue
-; Chris Morgan<cmorgan@alum.wpi.edu> 5/10/2004
-; -Updated 4/7/2005 to add support for retrieving a command line switch
-; and additional documentation
-;
-; Searches the command line input, retrieved using GetParameters, for the
-; value of an option given the option name. If no option is found the
-; default value is placed on the top of the stack upon function return.
-;
-; This function can also be used to detect the existence of just a
-; command line switch like /OUTPUT Pass the default and "OUTPUT"
-; on the stack like normal. An empty return string "" will indicate
-; that the switch was found, the default value indicates that
-; neither a parameter or switch was found.
-;
-; Inputs - Top of stack is default if parameter isn't found,
-; second in stack is parameter to search for, ex. "OUTPUT"
-; Outputs - Top of the stack contains the value of this parameter
-; So if the command line contained /OUTPUT=somedirectory, "somedirectory"
-; will be on the top of the stack when this function returns
-;
-; Register usage
-;$R0 - default return value if the parameter isn't found
-;$R1 - input parameter, for example OUTPUT from the above example
-;$R2 - the length of the search, this is the search parameter+2
-; as we have '/OUTPUT='
-;$R3 - the command line string
-;$R4 - result from StrStr calls
-;$R5 - search for ' ' or '"'
-
-Function GetParameterValue
- Exch $R0 ; get the top of the stack(default parameter) into R0
- Exch ; exchange the top of the stack(default) with
- ; the second in the stack(parameter to search for)
- Exch $R1 ; get the top of the stack(search parameter) into $R1
-
- ;Preserve on the stack the registers used in this function
- Push $R2
- Push $R3
- Push $R4
- Push $R5
-
- Strlen $R2 $R1+2 ; store the length of the search string into R2
-
- Call GetParameters ; get the command line parameters
- Pop $R3 ; store the command line string in R3
-
- # search for quoted search string
- StrCpy $R5 '"' ; later on we want to search for a open quote
- Push $R3 ; push the 'search in' string onto the stack
- Push '"/$R1=' ; push the 'search for'
- Call StrStr ; search for the quoted parameter value
- Pop $R4
- StrCpy $R4 $R4 "" 1 ; skip over open quote character, "" means no maxlen
- StrCmp $R4 "" "" next ; if we didn't find an empty string go to next
-
- # search for non-quoted search string
- StrCpy $R5 ' ' ; later on we want to search for a space since we
- ; didn't start with an open quote '"' we shouldn't
- ; look for a close quote '"'
- Push $R3 ; push the command line back on the stack for searching
- Push '/$R1=' ; search for the non-quoted search string
- Call StrStr
- Pop $R4
-
- ; $R4 now contains the parameter string starting at the search string,
- ; if it was found
-next:
- StrCmp $R4 "" check_for_switch ; if we didn't find anything then look for
- ; usage as a command line switch
- # copy the value after /$R1= by using StrCpy with an offset of $R2,
- # the length of '/OUTPUT='
- StrCpy $R0 $R4 "" $R2 ; copy commandline text beyond parameter into $R0
- # search for the next parameter so we can trim this extra text off
- Push $R0
- Push $R5 ; search for either the first space ' ', or the first
- ; quote '"'
- ; if we found '"/output' then we want to find the
- ; ending ", as in '"/output=somevalue"'
- ; if we found '/output' then we want to find the first
- ; space after '/output=somevalue'
- Call StrStr ; search for the next parameter
- Pop $R4
- StrCmp $R4 "" done ; if 'somevalue' is missing, we are done
- StrLen $R4 $R4 ; get the length of 'somevalue' so we can copy this
- ; text into our output buffer
- StrCpy $R0 $R0 -$R4 ; using the length of the string beyond the value,
- ; copy only the value into $R0
- goto done ; if we are in the parameter retrieval path skip over
- ; the check for a command line switch
-
-; See if the parameter was specified as a command line switch, like '/output'
-check_for_switch:
- Push $R3 ; push the command line back on the stack for searching
- Push '/$R1' ; search for the non-quoted search string
- Call StrStr
- Pop $R4
- StrCmp $R4 "" done ; if we didn't find anything then use the default
- StrCpy $R0 "" ; otherwise copy in an empty string since we found the
- ; parameter, just didn't find a value
-
-done:
- Pop $R5
- Pop $R4
- Pop $R3
- Pop $R2
- Pop $R1
- Exch $R0 ; put the value in $R0 at the top of the stack
-FunctionEnd
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-!macro Language polng lng
- SectionIn 1 2 3
- SetOutPath $INSTDIR
- !insertmacro UNINSTALL.LOG_OPEN_INSTALL
- File /nonfatal /a "..\..\inkscape\*.${lng}.txt"
- !insertmacro UNINSTALL.LOG_CLOSE_INSTALL
- SetOutPath $INSTDIR\locale
- !insertmacro UNINSTALL.LOG_OPEN_INSTALL
- File /nonfatal /a /r "..\..\inkscape\locale\${polng}"
- !insertmacro UNINSTALL.LOG_CLOSE_INSTALL
- SetOutPath $INSTDIR\lib\locale
- !insertmacro UNINSTALL.LOG_OPEN_INSTALL
- File /nonfatal /a /r "..\..\inkscape\lib\locale\${polng}"
- !insertmacro UNINSTALL.LOG_CLOSE_INSTALL
- SetOutPath $INSTDIR\share\clipart
- !insertmacro UNINSTALL.LOG_OPEN_INSTALL
- File /nonfatal /a /r "..\..\inkscape\share\clipart\*.${polng}.svg"
- !insertmacro UNINSTALL.LOG_CLOSE_INSTALL
- ; the keyboard tables
- SetOutPath $INSTDIR\share\screens
- !insertmacro UNINSTALL.LOG_OPEN_INSTALL
- File /nonfatal /a /r "..\..\inkscape\share\screens\*.${polng}.svg"
- !insertmacro UNINSTALL.LOG_CLOSE_INSTALL
- SetOutPath $INSTDIR\share\templates
- !insertmacro UNINSTALL.LOG_OPEN_INSTALL
- File /nonfatal /a /r "..\..\inkscape\share\templates\*.${polng}.svg"
- !insertmacro UNINSTALL.LOG_CLOSE_INSTALL
- SetOutPath $INSTDIR\doc
- !insertmacro UNINSTALL.LOG_OPEN_INSTALL
- File /nonfatal /a /r "..\..\inkscape\doc\keys.${polng}.xml"
- File /nonfatal /a /r "..\..\inkscape\doc\keys.${polng}.html"
- !insertmacro UNINSTALL.LOG_CLOSE_INSTALL
- SectionGetFlags ${SecTutorials} $R1
- IntOp $R1 $R1 & ${SF_SELECTED}
- IntCmp $R1 ${SF_SELECTED} 0 skip_tutorials
- SetOutPath $INSTDIR\share\tutorials
- !insertmacro UNINSTALL.LOG_OPEN_INSTALL
- File /nonfatal /a "..\..\inkscape\share\tutorials\*.${polng}.*"
- !insertmacro UNINSTALL.LOG_CLOSE_INSTALL
- skip_tutorials:
-!macroend
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
;;;;;;;;;;;;;;;;;;;;;;;;;;
; Delete prefs
-; code taken from the vlc project
+; code originally taken from the vlc project
;;;;;;;;;;;;;;;;;;;;;;;;;;
!macro delprefs
StrCpy $0 0
- DetailPrint "Delete personal preferences ..."
- DetailPrint "try to find all users ..."
- delprefs-Loop:
+ DetailPrint "Deleting personal preferences..."
+ DetailPrint "Finding all users..."
+ ${Do}
; FIXME
; this will loop through all the logged users and "virtual" windows users
; (it looks like users are only present in HKEY_USERS when they are logged in)
ClearErrors
EnumRegKey $1 HKU "" $0
- StrCmp $1 "" delprefs-End
+ ${IfThen} $1 == "" ${|} ${ExitDo} ${|}
IntOp $0 $0 + 1
ReadRegStr $2 HKU "$1\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" AppData
- StrCmp $2 "" delprefs-Loop
- DetailPrint "$2\Inkscape will be removed"
- RMDir /r "$2\Inkscape"
- Goto delprefs-Loop
- delprefs-End:
+ ${IfThen} $2 == "" ${|} ${Continue} ${|}
+ DetailPrint "Removing $2\Inkscape"
+ Delete "$2\Inkscape\preferences.xml"
+ Delete "$2\Inkscape\extension-errors.log"
+ RMDir "$2\Inkscape"
+ ${Loop}
!macroend
;--------------------------------
; Installer Sections
-; @todo better idea is to call the original uninstaller first
Section -removeInkscape
- ; check for an old installation and clean that dlls and stuff
- ClearErrors
- IfFileExists $INSTDIR\etc 0 doDeleteLib
- DetailPrint "$INSTDIR\etc exists, will be removed"
- RmDir /r $INSTDIR\etc
- IfErrors 0 +4
- DetailPrint "fatal: failed to delete $INSTDIR\etc"
- DetailPrint "aborting installation"
- Abort
- doDeleteLib:
-
- ClearErrors
- IfFileExists $INSTDIR\lib 0 doDeleteLocale
- DetailPrint "$INSTDIR\lib exists, will be removed"
- RmDir /r $INSTDIR\lib
- IfErrors 0 +4
- DetailPrint "fatal: failed to delete $INSTDIR\lib"
- DetailPrint "aborting installation"
- Abort
- doDeleteLocale:
-
- ClearErrors
- IfFileExists $INSTDIR\locale 0 doDeleteDll
- DetailPrint "$INSTDIR\locale exists, will be removed"
- RmDir /r $INSTDIR\locale
- IfErrors 0 +4
- DetailPrint "fatal: failed to delete $INSTDIR\locale"
- DetailPrint "aborting installation"
- Abort
- doDeleteDll:
-
- ClearErrors
- FindFirst $0 $1 $INSTDIR\*.dll
- FindNextLoop:
- StrCmp $1 "" FindNextDone
- DetailPrint "$INSTDIR\$1 exists, will be removed"
- Delete $INSTDIR\$1
- IfErrors 0 +4
- DetailPrint "fatal: failed to delete $INSTDIR\$1"
- DetailPrint "aborting installation"
- Abort
- FindNext $0 $1
- Goto FindNextLoop
- FindNextDone:
-
- ;remove the old inkscape shortcuts from the startmenu
+!ifndef DUMMYINSTALL
+ ;remove the old Inkscape shortcuts from the startmenu
;just in case they are still there
SetShellVarContext current
Delete "$SMPROGRAMS\Inkscape\Uninstall Inkscape.lnk"
Delete "$SMPROGRAMS\Inkscape\Inkscape.lnk"
RMDir "$SMPROGRAMS\Inkscape"
Delete "$SMPROGRAMS\Inkscape.lnk"
-
+!endif
SectionEnd
Section $(lng_Core) SecCore
-
- DetailPrint "Installing Inkscape Core Files ..."
-
SectionIn 1 2 3 RO
+!ifndef DUMMYINSTALL
+ DetailPrint "Installing Inkscape core files..."
SetOutPath $INSTDIR
!insertmacro UNINSTALL.LOG_OPEN_INSTALL
SetOverwrite on
File /a "..\..\inkscape\COPYING"
File /a "..\..\inkscape\COPYING.LIB"
File /a "..\..\inkscape\NEWS"
+ File /a "..\..\inkscape\gspawn-win32-helper.exe"
+ File /a "..\..\inkscape\gspawn-win32-helper-console.exe"
File /nonfatal /a "..\..\inkscape\HACKING.txt"
File /a "..\..\inkscape\README"
File /nonfatal /a "..\..\inkscape\README.txt"
SetOutPath $INSTDIR\share\clipart
!insertmacro UNINSTALL.LOG_OPEN_INSTALL
File /a "..\..\inkscape\share\clipart\inkscape.logo.svg"
- ;File /a "..\..\inkscape\share\clipart\inkscape.logo.classic.svg"
- !insertmacro UNINSTALL.LOG_CLOSE_INSTALL
- SetOutPath $INSTDIR\share\extensions
- !insertmacro UNINSTALL.LOG_OPEN_INSTALL
- File /a "..\..\inkscape\share\extensions\pdf_output.inx.txt"
- File /a "..\..\inkscape\share\extensions\pdf_output_via_gs_on_win32.inx.txt"
+ ;File /a "..\..\inkscape\share\clipart\inkscape.logo.classic.svg"
!insertmacro UNINSTALL.LOG_CLOSE_INSTALL
SetOutPath $INSTDIR\share\icons
!insertmacro UNINSTALL.LOG_OPEN_INSTALL
!insertmacro UNINSTALL.LOG_CLOSE_INSTALL
SetOutPath $INSTDIR\python
!insertmacro UNINSTALL.LOG_OPEN_INSTALL
- File /nonfatal /a /r "..\..\inkscape\python\*.*"
+ File /nonfatal /a /r "..\..\inkscape\python\*.*"
!insertmacro UNINSTALL.LOG_CLOSE_INSTALL
+!endif
SectionEnd
Section $(lng_GTKFiles) SecGTK
-
- DetailPrint "Installing GTK Files ..."
-
SectionIn 1 2 3 RO
+!ifndef DUMMYINSTALL
+ DetailPrint "Installing GTK files..."
SetOutPath $INSTDIR
!insertmacro UNINSTALL.LOG_OPEN_INSTALL
SetOverwrite on
File /a /r /x "locale" "..\..\inkscape\lib"
File /a /r "..\..\inkscape\etc"
!insertmacro UNINSTALL.LOG_CLOSE_INSTALL
+!endif
+SectionEnd
+
+Section -SetCurrentUserOnly
+!ifndef DUMMYINSTALL
+ StrCpy $MultiUser 0
+ SetShellVarContext current
+!endif
SectionEnd
Section $(lng_Alluser) SecAlluser
+ SectionIn 1 2 3
+!ifndef DUMMYINSTALL
; disable this option in Win95/Win98/WinME
- SectionIn 1 2 3
- StrCpy $MultiUser "1"
- StrCmp $MultiUser "1" "" SingleUser
- DetailPrint "admin mode, registry root will be HKLM"
- SetShellVarContext all
- Goto endSingleUser
- SingleUser:
- DetailPrint "single user mode, registry root will be HKCU"
- SetShellVarContext current
- endSingleUser:
+ StrCpy $MultiUser 1
+ DetailPrint "Installing in administrator mode (registry root will be HKLM)"
+ SetShellVarContext all
+!endif
SectionEnd
SectionGroup $(lng_Shortcuts) SecShortcuts
-Section /o $(lng_Desktop) SecDesktop
- ClearErrors
+Section $(lng_Desktop) SecDesktop
+!ifndef DUMMYINSTALL
CreateShortCut "$DESKTOP\Inkscape.lnk" "$INSTDIR\inkscape.exe"
- IfErrors 0 +2
- DetailPrint "Uups! Problems creating desktop shortcuts"
+!endif
SectionEnd
-Section /o $(lng_Quicklaunch) SecQuicklaunch
- ClearErrors
- StrCmp $QUICKLAUNCH $TEMP +2
- CreateShortCut "$QUICKLAUNCH\Inkscape.lnk" "$INSTDIR\inkscape.exe"
- IfErrors 0 +2
- DetailPrint "Uups! Problems creating quicklaunch shortcuts"
+Section $(lng_Quicklaunch) SecQuicklaunch
+!ifndef DUMMYINSTALL
+ ${IfThen} $QUICKLAUNCH != $TEMP ${|} CreateShortCut "$QUICKLAUNCH\Inkscape.lnk" "$INSTDIR\inkscape.exe" ${|}
+!endif
SectionEnd
-Section $(lng_SVGWriter) SecSVGWriter
+Section $(lng_SVGWriter) SecSVGWriter
SectionIn 1 2 3
- ; create file associations, test before if needed
- DetailPrint "creating file associations"
- ClearErrors
+!ifndef DUMMYINSTALL
+ DetailPrint "Associating SVG files with Inkscape"
ReadRegStr $0 HKCR ".svg" ""
- StrCmp $0 "" 0 +3
- WriteRegStr HKCR ".svg" "" "svgfile"
+ ${If} $0 == ""
+ StrCpy $0 svgfile
+ WriteRegStr HKCR ".svg" "" $0
WriteRegStr HKCR "svgfile" "" "Scalable Vector Graphics file"
+ ${EndIf}
+ WriteRegStr HKCR "$0\shell\edit\command" "" `"$INSTDIR\Inkscape.exe" "%1"`
+
ReadRegStr $0 HKCR ".svgz" ""
- StrCmp $0 "" 0 +3
- WriteRegStr HKCR ".svgz" "" "svgfile"
+ ${If} $0 == ""
+ StrCpy $0 svgfile
+ WriteRegStr HKCR ".svgz" "" $0
WriteRegStr HKCR "svgfile" "" "Scalable Vector Graphics file"
- IfErrors 0 +2
- DetailPrint "Uups! Problems creating file assoziations for svg writer"
-
- DetailPrint "creating default editor"
- ClearErrors
- ReadRegStr $0 HKCR ".svg" ""
- WriteRegStr HKCR "$0\shell\edit\command" "" '"$INSTDIR\Inkscape.exe" "%1"'
- ReadRegStr $0 HKCR ".svgz" ""
- WriteRegStr HKCR "$0\shell\edit\command" "" '"$INSTDIR\Inkscape.exe" "%1"'
- IfErrors 0 +2
- DetailPrint "Uups! Problems creating default editor"
+ ${EndIf}
+ WriteRegStr HKCR "$0\shell\edit\command" "" `"$INSTDIR\Inkscape.exe" "%1"`
+!endif
SectionEnd
Section $(lng_ContextMenu) SecContextMenu
SectionIn 1 2 3
- ; create file associations, test before if needed
- DetailPrint "creating file associations"
- ClearErrors
+!ifndef DUMMYINSTALL
+ DetailPrint "Adding Inkscape to SVG file context menu"
ReadRegStr $0 HKCR ".svg" ""
- StrCmp $0 "" 0 +3
- WriteRegStr HKCR ".svg" "" "svgfile"
+ ${If} $0 == ""
+ StrCpy $0 svgfile
+ WriteRegStr HKCR ".svg" "" $0
WriteRegStr HKCR "svgfile" "" "Scalable Vector Graphics file"
+ ${EndIf}
+ WriteRegStr HKCR "$0\shell\${PRODUCT_NAME}\command" "" `"$INSTDIR\Inkscape.exe" "%1"`
+
ReadRegStr $0 HKCR ".svgz" ""
- StrCmp $0 "" 0 +3
- WriteRegStr HKCR ".svgz" "" "svgfile"
+ ${If} $0 == ""
+ StrCpy $0 svgfile
+ WriteRegStr HKCR ".svgz" "" $0
WriteRegStr HKCR "svgfile" "" "Scalable Vector Graphics file"
- IfErrors 0 +2
- DetailPrint "Uups! Problems creating file assoziations for context menu"
-
- DetailPrint "creating context menue"
- ClearErrors
- ReadRegStr $0 HKCR ".svg" ""
- WriteRegStr HKCR "$0\shell\${PRODUCT_NAME}\command" "" '"$INSTDIR\Inkscape.exe" "%1"'
- ReadRegStr $0 HKCR ".svgz" ""
- WriteRegStr HKCR "$0\shell\${PRODUCT_NAME}\command" "" '"$INSTDIR\Inkscape.exe" "%1"'
- IfErrors 0 +2
- DetailPrint "Uups! Problems creating context menue integration"
-
+ ${EndIf}
+ WriteRegStr HKCR "$0\shell\${PRODUCT_NAME}\command" "" `"$INSTDIR\Inkscape.exe" "%1"`
+!endif
SectionEnd
SectionGroupEnd
Section /o $(lng_DeletePrefs) SecPrefs
- !insertmacro delprefs
+!ifndef DUMMYINSTALL
+ !insertmacro delprefs
+!endif
SectionEnd
SectionGroup $(lng_Addfiles) SecAddfiles
Section $(lng_Examples) SecExamples
SectionIn 1 2
+!ifndef DUMMYINSTALL
SetOutPath $INSTDIR\share
!insertmacro UNINSTALL.LOG_OPEN_INSTALL
File /nonfatal /a /r /x "*.??*.???*" "..\..\inkscape\share\examples"
!insertmacro UNINSTALL.LOG_CLOSE_INSTALL
+!endif
SectionEnd
Section $(lng_Tutorials) SecTutorials
SectionIn 1 2
+!ifndef DUMMYINSTALL
SetOutPath $INSTDIR\share
!insertmacro UNINSTALL.LOG_OPEN_INSTALL
File /nonfatal /a /r /x "*.??*.???*" "..\..\inkscape\share\tutorials"
!insertmacro UNINSTALL.LOG_CLOSE_INSTALL
+!endif
SectionEnd
SectionGroupEnd
-SectionGroup /e $(lng_Languages) SecLanguages
-
-Section $(lng_am) SecAmharic
- !insertmacro Language am am
-SectionEnd
-
-Section $(lng_az) SecAzerbaijani
- !insertmacro Language az az
-SectionEnd
-
-Section $(lng_be) SecByelorussian
- !insertmacro Language be be
-SectionEnd
-
-Section $(lng_bg) SecBulgarian
- !insertmacro Language bg bg
-SectionEnd
-
-Section $(lng_bn) SecBengali
- !insertmacro Language bn bn
-SectionEnd
-
-Section $(lng_ca) SecCatalan
- !insertmacro Language ca ca
-SectionEnd
-
-Section $(lng_cs) SecCzech
- !insertmacro Language cs cs
-SectionEnd
-
-Section $(lng_da) SecDanish
- !insertmacro Language da da
-SectionEnd
-
-Section $(lng_de) SecGerman
- !insertmacro Language 'de' 'de'
-SectionEnd
-
-Section $(lng_dz) SecDzongkha
- !insertmacro Language dz dz
-SectionEnd
-
-Section $(lng_el) SecGreek
- !insertmacro Language el el
-SectionEnd
-
-Section $(lng_en) SecEnglish
- SectionIn 1 2 3 RO
-SectionEnd
-
-Section $(lng_en_AU) SecEnglishAustralian
- !insertmacro Language en_AU en_AU
-SectionEnd
-
-Section $(lng_en_CA) SecEnglishCanadian
- !insertmacro Language en_CA en_CA
-SectionEnd
-
-Section $(lng_en_GB) SecEnglishBritain
- !insertmacro Language en_GB en_GB
-SectionEnd
-
-Section $(lng_en_US@piglatin) SecEnglishPiglatin
- !insertmacro Language en_US@piglatin en_US@Piglatin
-SectionEnd
-
-Section $(lng_eo) SecEsperanto
- !insertmacro Language eo eo
-SectionEnd
-
-Section $(lng_es) SecSpanish
- !insertmacro Language 'es' 'es'
-SectionEnd
-
-Section $(lng_es_MX) SecSpanishMexico
- !insertmacro Language 'es_MX' 'es_MX'
-SectionEnd
-
-Section $(lng_et) SecEstonian
- !insertmacro Language et et
-SectionEnd
-
-Section $(lng_eu) SecBasque
- !insertmacro Language eu eu
-SectionEnd
-
-Section $(lng_fr) SecFrench
- !insertmacro Language 'fr' 'fr'
-SectionEnd
-
-Section $(lng_fi) SecFinnish
- !insertmacro Language 'fi' 'fi'
-SectionEnd
-
-Section $(lng_ga) SecIrish
- !insertmacro Language ga ga
-SectionEnd
-
-Section $(lng_gl) SecGallegan
- !insertmacro Language gl gl
- SectionIn 1 2 3
-SectionEnd
-
-Section $(lng_he) SecHebrew
- !insertmacro Language he he
- SectionIn 1 2 3
-SectionEnd
-
-Section $(lng_hr) SecCroatian
- !insertmacro Language hr hr
- SectionIn 1 2 3
-SectionEnd
-
-Section $(lng_hu) SecHungarian
- !insertmacro Language hu hu
- SectionIn 1 2 3
-SectionEnd
-
-Section $(lng_id) SecIndonesian
- !insertmacro Language id id
- SectionIn 1 2 3
-SectionEnd
-
-Section $(lng_it) SecItalian
- !insertmacro Language it it
- SectionIn 1 2 3
-SectionEnd
-
-Section $(lng_ja) SecJapanese
- !insertmacro Language 'ja' 'jp'
-SectionEnd
-
-Section $(lng_km) SecKhmer
- !insertmacro Language km km
-SectionEnd
-
-Section $(lng_ko) SecKorean
- !insertmacro Language 'ko' 'ko'
-SectionEnd
-
-Section $(lng_lt) SecLithuanian
- !insertmacro Language 'lt' 'lt'
-SectionEnd
-
-Section $(lng_mn) SecMongolian
- !insertmacro Language mn mn
-SectionEnd
-
-Section $(lng_mk) SecMacedonian
- !insertmacro Language mk mk
-SectionEnd
-
-Section $(lng_nb) SecNorwegianBokmal
- !insertmacro Language nb nb
-SectionEnd
-
-Section $(lng_ne) SecNepali
- !insertmacro Language ne ne
-SectionEnd
-
-Section $(lng_nl) SecDutch
- !insertmacro Language nl nl
-SectionEnd
-
-Section $(lng_nn) SecNorwegianNynorsk
- !insertmacro Language nn nn
-SectionEnd
-
-Section $(lng_pa) SecPanjabi
- !insertmacro Language pa pa
-SectionEnd
-
-Section $(lng_pl) SecPolish
- !insertmacro Language pl pl
-SectionEnd
-
-Section $(lng_pt) SecPortuguese
- !insertmacro Language pt pt
-SectionEnd
-
-Section $(lng_pt_BR) SecPortugueseBrazil
- !insertmacro Language pt_BR pt_BR
-SectionEnd
-
-Section $(lng_ro) SecRomanian
- !insertmacro Language ro ro
-SectionEnd
-
-Section $(lng_ru) SecRussian
- !insertmacro Language ru ru
-SectionEnd
-
-Section $(lng_rw) SecKinyarwanda
- !insertmacro Language rw rw
-SectionEnd
-
-Section $(lng_sk) SecSlovak
- !insertmacro Language sk sk
-SectionEnd
-
-Section $(lng_sl) SecSlovenian
- !insertmacro Language sl sl
-SectionEnd
-
-Section $(lng_sq) SecAlbanian
- !insertmacro Language sq sq
-SectionEnd
-
-Section $(lng_sr) SecSerbian
- !insertmacro Language sr sr
-SectionEnd
-
-Section $(lng_sr@Latn) SecSerbianLatin
- !insertmacro Language 'sr@Latn' 'sr@Latn'
-SectionEnd
-
-Section $(lng_sv) SecSwedish
- !insertmacro Language sv sv
-SectionEnd
-
-Section $(lng_th) SecThai
- !insertmacro Language th th
-SectionEnd
-
-Section $(lng_tr) SecTurkish
- !insertmacro Language tr tr
-SectionEnd
-
-Section $(lng_uk) SecUkrainian
- !insertmacro Language uk uk
-SectionEnd
-
-Section $(lng_vi) SecVietnamese
- !insertmacro Language vi vi
-SectionEnd
-
-Section $(lng_zh_CN) SecChineseSimplified
- !insertmacro Language zh_CN zh_CN
-SectionEnd
-
-Section $(lng_zh_TW) SecChineseTaiwan
- !insertmacro Language zh_TW zh_TW
-SectionEnd
-
+SectionGroup $(lng_Languages) SecLanguages
+ !macro Language SecName lng
+ Section /o $(lng_${lng}) Sec${SecName}
+ ;SectionIn 1 2 3
+!ifndef DUMMYINSTALL
+ SetOutPath $INSTDIR
+ !insertmacro UNINSTALL.LOG_OPEN_INSTALL
+ File /nonfatal /a "..\..\inkscape\*.${lng}.txt" ; FIXME: remove this? No such files.
+ !insertmacro UNINSTALL.LOG_CLOSE_INSTALL
+ SetOutPath $INSTDIR\locale
+ !insertmacro UNINSTALL.LOG_OPEN_INSTALL
+ File /nonfatal /a /r "..\..\inkscape\locale\${lng}"
+ !insertmacro UNINSTALL.LOG_CLOSE_INSTALL
+ SetOutPath $INSTDIR\lib\locale
+ !insertmacro UNINSTALL.LOG_OPEN_INSTALL
+ File /nonfatal /a /r "..\..\inkscape\lib\locale\${lng}"
+ !insertmacro UNINSTALL.LOG_CLOSE_INSTALL
+ SetOutPath $INSTDIR\share\clipart
+ !insertmacro UNINSTALL.LOG_OPEN_INSTALL
+ File /nonfatal /a /r "..\..\inkscape\share\clipart\*.${lng}.svg"
+ !insertmacro UNINSTALL.LOG_CLOSE_INSTALL
+ ; the keyboard tables
+ SetOutPath $INSTDIR\share\screens
+ !insertmacro UNINSTALL.LOG_OPEN_INSTALL
+ File /nonfatal /a /r "..\..\inkscape\share\screens\*.${lng}.svg"
+ !insertmacro UNINSTALL.LOG_CLOSE_INSTALL
+ SetOutPath $INSTDIR\share\templates
+ !insertmacro UNINSTALL.LOG_OPEN_INSTALL
+ File /nonfatal /a /r "..\..\inkscape\share\templates\*.${lng}.svg"
+ !insertmacro UNINSTALL.LOG_CLOSE_INSTALL
+ SetOutPath $INSTDIR\doc
+ !insertmacro UNINSTALL.LOG_OPEN_INSTALL
+ File /nonfatal /a /r "..\..\inkscape\doc\keys.${lng}.xml"
+ File /nonfatal /a /r "..\..\inkscape\doc\keys.${lng}.html"
+ !insertmacro UNINSTALL.LOG_CLOSE_INSTALL
+ SectionGetFlags ${SecTutorials} $R1
+ IntOp $R1 $R1 & ${SF_SELECTED}
+ ${If} $R1 >= ${SF_SELECTED}
+ SetOutPath $INSTDIR\share\tutorials
+ !insertmacro UNINSTALL.LOG_OPEN_INSTALL
+ File /nonfatal /a "..\..\inkscape\share\tutorials\*.${lng}.*"
+ !insertmacro UNINSTALL.LOG_CLOSE_INSTALL
+ ${EndIf}
+ !endif
+ SectionEnd
+ !macroend
+
+ !insertmacro Language Amharic am
+ !insertmacro Language Arabic ar
+ !insertmacro Language Azerbaijani az
+ !insertmacro Language Byelorussian be
+ !insertmacro Language Bulgarian bg
+ !insertmacro Language Bengali bn
+ !insertmacro Language Breton br
+ !insertmacro Language Catalan ca
+ !insertmacro Language CatalanValencia ca@valencia
+ !insertmacro Language Czech cs
+ !insertmacro Language Danish da
+ !insertmacro Language German de
+ !insertmacro Language Dzongkha dz
+ !insertmacro Language Greek el
+ !insertmacro Language EnglishAustralian en_AU
+ !insertmacro Language EnglishCanadian en_CA
+ !insertmacro Language EnglishBritain en_GB
+ !insertmacro Language EnglishPiglatin en_US@piglatin
+ !insertmacro Language Esperanto eo
+ !insertmacro Language Spanish es
+ !insertmacro Language SpanishMexico es_MX
+ !insertmacro Language Estonian et
+ !insertmacro Language Basque eu
+ !insertmacro Language French fr
+ !insertmacro Language Finnish fi
+ !insertmacro Language Irish ga
+ !insertmacro Language Gallegan gl
+ !insertmacro Language Hebrew he
+ !insertmacro Language Croatian hr
+ !insertmacro Language Hungarian hu
+ !insertmacro Language Indonesian id
+ !insertmacro Language Italian it
+ !insertmacro Language Japanese ja
+ !insertmacro Language Khmer km
+ !insertmacro Language Korean ko
+ !insertmacro Language Lithuanian lt
+ !insertmacro Language Mongolian mn
+ !insertmacro Language Macedonian mk
+ !insertmacro Language NorwegianBokmal nb
+ !insertmacro Language Nepali ne
+ !insertmacro Language Dutch nl
+ !insertmacro Language NorwegianNynorsk nn
+ !insertmacro Language Panjabi pa
+ !insertmacro Language Polish pl
+ !insertmacro Language Portuguese pt
+ !insertmacro Language PortugueseBrazil pt_BR
+ !insertmacro Language Romanian ro
+ !insertmacro Language Russian ru
+ !insertmacro Language Kinyarwanda rw
+ !insertmacro Language Slovak sk
+ !insertmacro Language Slovenian sl
+ !insertmacro Language Albanian sq
+ !insertmacro Language Serbian sr
+ !insertmacro Language SerbianLatin sr@latin
+ !insertmacro Language Swedish sv
+ !insertmacro Language Thai th
+ !insertmacro Language Turkish tr
+ !insertmacro Language Ukrainian uk
+ !insertmacro Language Vietnamese vi
+ !insertmacro Language ChineseSimplified zh_CN
+ !insertmacro Language ChineseTaiwan zh_TW
SectionGroupEnd
Section -FinalizeInstallation
- StrCmp $MultiUser "1" "" SingleUser
- DetailPrint "admin mode, registry root will be HKLM"
- SetShellVarContext all
- Goto endSingleUser
- SingleUser:
- DetailPrint "single user mode, registry root will be HKCU"
- SetShellVarContext current
- endSingleUser:
-
- ; check for writing registry
- ClearErrors
- WriteRegStr SHCTX "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\inkscape.exe"
- ;IfErrors 0 +4
- ; DetailPrint "fatal: failed to write to ${PRODUCT_DIR_REGKEY}"
- ; DetailPrint "aborting installation"
- ; Abort
- WriteRegStr SHCTX "${PRODUCT_DIR_REGKEY}" "MultiUser" "$MultiUser"
- WriteRegStr SHCTX "${PRODUCT_DIR_REGKEY}" "askMultiUser" "$askMultiUser"
- WriteRegStr SHCTX "${PRODUCT_DIR_REGKEY}" "User" "$User"
- IfErrors 0 +2
- DetailPrint "fatal: failed to write to registry installation info"
+!ifndef DUMMYINSTALL
+ DetailPrint "Finalizing installation"
+ ${IfThen} $MultiUser = 1 ${|} SetShellVarContext all ${|}
+ ${IfThen} $MultiUser != 1 ${|} SetShellVarContext current ${|}
+
+ WriteRegStr SHCTX "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\inkscape.exe"
+ WriteRegStr SHCTX "${PRODUCT_DIR_REGKEY}" "MultiUser" $MultiUser
+ WriteRegStr SHCTX "${PRODUCT_DIR_REGKEY}" "askMultiUser" $askMultiUser
+ WriteRegStr SHCTX "${PRODUCT_DIR_REGKEY}" "User" $User
; start menu entries
- ClearErrors
- CreateShortCut "$SMPROGRAMS\Inkscape.lnk" "$INSTDIR\inkscape.exe"
- IfErrors 0 +2
- DetailPrint "fatal: failed to write to start menu info"
+ CreateShortcut "$SMPROGRAMS\Inkscape.lnk" "$INSTDIR\inkscape.exe"
; uninstall settings
- ClearErrors
- WriteUninstaller "$INSTDIR\uninst.exe"
- WriteRegExpandStr SHCTX "${PRODUCT_UNINST_KEY}" "UninstallString" '"$INSTDIR\uninst.exe"'
- WriteRegExpandStr SHCTX "${PRODUCT_UNINST_KEY}" "InstallLocation" "$INSTDIR"
+ ; WriteUninstaller "$INSTDIR\uninst.exe"
+ WriteRegExpandStr SHCTX "${PRODUCT_UNINST_KEY}" "UninstallString" "${UNINST_EXE}"
+ WriteRegExpandStr SHCTX "${PRODUCT_UNINST_KEY}" "InstallDir" $INSTDIR
+ WriteRegExpandStr SHCTX "${PRODUCT_UNINST_KEY}" "InstallLocation" $INSTDIR
WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "DisplayName" "${PRODUCT_NAME} ${PRODUCT_VERSION}"
WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\Inkscape.exe,0"
WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"
- WriteRegDWORD SHCTX "${PRODUCT_UNINST_KEY}" "NoModify" "1"
- WriteRegDWORD SHCTX "${PRODUCT_UNINST_KEY}" "NoRepair" "1"
- IfErrors 0 +2
- DetailPrint "fatal: failed to write to registry un-installation info"
+ WriteRegDWORD SHCTX "${PRODUCT_UNINST_KEY}" "NoModify" 1
+ WriteRegDWORD SHCTX "${PRODUCT_UNINST_KEY}" "NoRepair" 1
+
+ ;create/update log always within .onInstSuccess function
+ !insertmacro UNINSTALL.LOG_UPDATE_INSTALL
+
+ DetailPrint "Creating MD5 checksums"
+ ClearErrors
+ FileOpen $0 $INSTDIR\Uninstall.dat r
+ FileOpen $9 $INSTDIR\Uninstall.log w
+ ${IfNot} ${Errors}
+ ${Do}
+ ClearErrors
+ FileRead $0 $1
+ ${IfThen} ${Errors} ${|} ${ExitDo} ${|}
+ StrCpy $1 $1 -2
+ md5dll::GetMD5File /NOUNLOAD $1
+ Pop $2
+ ${IfThen} $2 != "" ${|} FileWrite $9 "$2 $1$\r$\n" ${|}
+ ${Loop}
+ ${EndIf}
+ FileClose $0
+ FileClose $9
+ ; Not needed any more
+ Delete $INSTDIR\Uninstall.dat
+!endif
SectionEnd
-
+
; Last the Descriptions
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
!insertmacro MUI_DESCRIPTION_TEXT ${SecCore} $(lng_CoreDesc)
!insertmacro MUI_DESCRIPTION_TEXT ${SecGTK} $(lng_GTKFilesDesc)
!insertmacro MUI_DESCRIPTION_TEXT ${SecShortcuts} $(lng_ShortcutsDesc)
- !insertmacro MUI_DESCRIPTION_TEXT ${SecAlluser} $(lng_AlluserDesc)
+ !insertmacro MUI_DESCRIPTION_TEXT ${SecAlluser} $(lng_AlluserDesc)
!insertmacro MUI_DESCRIPTION_TEXT ${SecDesktop} $(lng_DesktopDesc)
!insertmacro MUI_DESCRIPTION_TEXT ${SecQuicklaunch} $(lng_QuicklaunchDesc)
!insertmacro MUI_DESCRIPTION_TEXT ${SecSVGWriter} $(lng_SVGWriterDesc)
!insertmacro MUI_FUNCTION_DESCRIPTION_END
!macro Parameter key Section
- Push ${key}
- Push ""
- Call GetParameterValue
- Pop $1
- StrCmp $1 "OFF" 0 +5
+ ${GetOptions} $CMDARGS "/${key}=" $1
+ ${If} $1 == "OFF"
SectionGetFlags ${Section} $0
IntOp $2 ${SF_SELECTED} ~
IntOp $0 $0 & $2
SectionSetFlags ${Section} $0
- StrCmp $1 "ON" 0 +4
+ ${EndIf}
+ ${If} $1 == "ON"
SectionGetFlags ${Section} $0
IntOp $0 $0 | ${SF_SELECTED}
SectionSetFlags ${Section} $0
+ ${EndIf}
!macroend
Function .onInit
+ !insertmacro MUI_LANGDLL_DISPLAY
+
+ !macro LanguageAutoSelect SecName LocaleID
+ ${If} $LANGUAGE = ${LocaleID}
+ SectionGetFlags ${Sec${SecName}} $0
+ IntOp $0 $0 | ${SF_SELECTED}
+ SectionSetFlags ${Sec${SecName}} $0
+ ${EndIf}
+ !macroend
+
+ ;!insertmacro LanguageAutoSelect English 1033
+ !insertmacro LanguageAutoSelect Breton 1150
+ !insertmacro LanguageAutoSelect Catalan 1027
+ !insertmacro LanguageAutoSelect Czech 1029
+ !insertmacro LanguageAutoSelect Finnish 1035
+ !insertmacro LanguageAutoSelect French 1036
+ !insertmacro LanguageAutoSelect Gallegan 1110 ; Galician, but section is called Gallegan
+ !insertmacro LanguageAutoSelect German 1031
+ !insertmacro LanguageAutoSelect Italian 1040
+ !insertmacro LanguageAutoSelect Japanese 1041
+ !insertmacro LanguageAutoSelect Polish 1045
+ !insertmacro LanguageAutoSelect Russian 1049
+ !insertmacro LanguageAutoSelect Slovak 1051
+ !insertmacro LanguageAutoSelect Slovenian 1060
+ !insertmacro LanguageAutoSelect Spanish 1034
+ !insertmacro LanguageAutoSelect ChineseTaiwan 1028 ; TradChinese, but section is called ChineseTaiwan
+
+ ${GetParameters} $CMDARGS
;prepare log always within .onInit function
!insertmacro UNINSTALL.LOG_PREPARE_INSTALL
StrCpy $AskMultiUser "1"
StrCpy $MultiUser "0"
; this resets AskMultiUser if Win95/98/ME
- Call GetWindowsVersion
- Pop $R0
- DetailPrint "detected operating system $R0"
- ;MessageBox MB_OK "operating system: $R0; AskMultiuser: $AskMultiUser"
-
- ; hide all user section if win98
- StrCmp $AskMultiUser "1" +2
- SectionSetText ${SecAlluser} ""
+ ClearErrors
+ ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion
+ ${If} ${Errors}
+ ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion" VersionNumber
+ StrCpy $R0 $R0 1
+ ${IfThen} $R0 = 4 ${|} StrCpy $AskMultiUser 0 ${|}
+ ${EndIf}
+
+ ; hide all user section if ME/9x
+ ${IfThen} $AskMultiUser != 1 ${|} SectionSetText ${SecAlluser} "" ${|}
; hide if quick launch if not available
- StrCmp $QUICKLAUNCH $TEMP 0 +2
- SectionSetText ${SecQuicklaunch} ""
+ ${IfThen} $QUICKLAUNCH == $TEMP ${|} SectionSetText ${SecQuicklaunch} "" ${|}
;check if user is admin
ClearErrors
- UserInfo::GetName
- IfErrors info_Win9x
- Pop $0
- StrCpy $User $0
- UserInfo::GetAccountType
- Pop $1
- StrCmp $1 "Admin" info_done
-
- MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION "$(lng_NO_ADMIN)$(lng_OK_CANCEL_DESC)" /SD IDOK IDOK info_done IDCANCEL +1
- Quit
-
- Goto info_done
-
- info_Win9x:
- # This one means you don't need to care about admin or
- # not admin because Windows 9x doesn't either
- MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION "$(lng_NOT_SUPPORTED)$(lng_OK_CANCEL_DESC)" /SD IDOK IDOK info_done IDCANCEL +1
- Quit
-
- info_done:
+ UserInfo::GetName
+ ${If} ${Errors}
+ ; This one means you don't need to care about admin or
+ ; not admin because Windows 9x doesn't either
+ ${IfCmd} MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION "$(lng_NOT_SUPPORTED)$(lng_OK_CANCEL_DESC)" /SD IDOK IDCANCEL ${||} Quit ${|}
+ ${Else}
+ Pop $User
+ UserInfo::GetAccountType
+ Pop $1
+ ${If} $1 != "Admin"
+ ${AndIf} ${Cmd} ${|} MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION "$(lng_NO_ADMIN)$(lng_OK_CANCEL_DESC)" /SD IDOK IDCANCEL ${|}
+ Quit
+ ${EndIf}
+ ${EndIf}
;check for previous installation
ReadRegStr $0 HKLM "${PRODUCT_DIR_REGKEY}" "User"
- StrCmp $0 "" +1 +2
- ReadRegStr $0 HKCU "${PRODUCT_DIR_REGKEY}" "User"
+ ${IfThen} $0 == "" ${|} ReadRegStr $0 HKCU "${PRODUCT_DIR_REGKEY}" "User" ${|}
;check user if applicable
- StrCmp $0 "" diff_user_install_done
- StrCmp $0 $User diff_user_install_done
- MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION "$(lng_DIFFERENT_USER)$(lng_OK_CANCEL_DESC)" /SD IDOK IDOK diff_user_install_done IDCANCEL +1
- Quit
- diff_user_install_done:
-
+ ${If} $0 != ""
+ ${AndIf} $0 != $User
+ ${AndIf} ${Cmd} ${|} MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION "$(lng_DIFFERENT_USER)$(lng_OK_CANCEL_DESC)" /SD IDOK IDCANCEL ${|}
+ Quit
+ ${EndIf}
+
; call uninstall first
; code taken from the vlc project
ReadRegStr $R0 HKLM ${PRODUCT_UNINST_KEY} "UninstallString"
- ReadRegStr $R1 HKLM ${PRODUCT_UNINST_KEY} "DisplayName"
- StrCmp $R0 "" +1 +3
- ReadRegStr $R0 HKCU ${PRODUCT_UNINST_KEY} "UninstallString"
- ReadRegStr $R1 HKCU ${PRODUCT_UNINST_KEY} "DisplayName"
- StrCmp $R0 "" uninstall_before_done
-
- MessageBox MB_YESNO|MB_ICONEXCLAMATION $(lng_WANT_UNINSTALL_BEFORE) /SD IDNO IDYES +1 IDNO uninstall_before_done
- ;Run the uninstaller
- ;uninst:
- ClearErrors
- ExecWait '$R0 _?=$INSTDIR' ;Do not copy the uninstaller to a temp file
- uninstall_before_done:
-
+ ReadRegStr $R1 HKLM ${PRODUCT_UNINST_KEY} "DisplayName"
+ ${If} $R0 == ""
+ ReadRegStr $R0 HKCU ${PRODUCT_UNINST_KEY} "UninstallString"
+ ReadRegStr $R1 HKCU ${PRODUCT_UNINST_KEY} "DisplayName"
+ ${EndIf}
+ ${If} $R0 != ""
+ ${AndIf} ${Cmd} ${|} MessageBox MB_YESNO|MB_ICONEXCLAMATION $(lng_WANT_UNINSTALL_BEFORE) /SD IDNO IDYES ${|}
+ ExecWait $R0 ;Was '$R0 _?=$INSTDIR' but we do NOT want it leaving the uninstaller behind.
+ ${EndIf}
+
; proccess command line parameter
!insertmacro Parameter "GTK" ${SecGTK}
!insertmacro Parameter "SHORTCUTS" ${secShortcuts}
!insertmacro Parameter "TUTORIALS" ${SecTutorials}
!insertmacro Parameter "LANGUAGES" ${SecLanguages}
!insertmacro Parameter "am" ${SecAmharic}
+ !insertmacro Parameter "ar" ${SecArabic}
!insertmacro Parameter "az" ${SecAzerbaijani}
!insertmacro Parameter "be" ${SecByelorussian}
!insertmacro Parameter "bg" ${SecBulgarian}
!insertmacro Parameter "bn" ${SecBengali}
+ !insertmacro Parameter "br" ${SecBreton}
!insertmacro Parameter "ca" ${SecCatalan}
+ !insertmacro Parameter "ca@valencia" ${SecCatalanValencia}
!insertmacro Parameter "cs" ${SecCzech}
!insertmacro Parameter "da" ${SecDanish}
!insertmacro Parameter "de" ${SecGerman}
!insertmacro Parameter "sl" ${SecSlovenian}
!insertmacro Parameter "sq" ${SecAlbanian}
!insertmacro Parameter "sr" ${SecSerbian}
- !insertmacro Parameter "sr@Latn" ${SecSerbianLatin}
+ !insertmacro Parameter "sr@latin" ${SecSerbianLatin}
!insertmacro Parameter "sv" ${SecSwedish}
!insertmacro Parameter "th" ${SecThai}
!insertmacro Parameter "tr" ${SecTurkish}
!insertmacro Parameter "vi" ${SecVietnamese}
!insertmacro Parameter "zh_CN" ${SecChineseSimplified}
!insertmacro Parameter "zh_TW" ${SecChineseTaiwan}
-
- Push "?"
- Push "TEST"
- Call GetParameterValue
- Pop $1
- StrCmp $1 "TEST" +3
- MessageBox MB_OK "possible parameters for installer:$\r$\n \
+
+ ClearErrors
+ ${GetOptions} $CMDARGS "/?" $1
+ ${IfNot} ${Errors}
+ MessageBox MB_OK "Possible parameters for installer:$\r$\n \
/?: this help screen$\r$\n \
/S: silent$\r$\n \
- /D=(directory): where to install inkscape$\r$\n \
+ /D=(directory): where to install Inkscape$\r$\n \
/GTK=(OFF/ON): GTK+ Runtime environment$\r$\n \
- /SHORTCUTS=(OFF/ON): shortcuts to start inkscape$\r$\n \
+ /SHORTCUTS=(OFF/ON): shortcuts to start Inkscape$\r$\n \
/ALLUSER=(OFF/ON): for all users on the computer$\r$\n \
/DESKTOP=(OFF/ON): Desktop icon$\r$\n \
/QUICKLAUNCH=(OFF/ON): quick launch icon$\r$\n \
/LANGUAGES=(OFF/ON): translated menues, examples, etc.$\r$\n \
/[locale code]=(OFF/ON): e.g am, es, es_MX as in Inkscape supported"
Abort
-FunctionEnd
-
-Function .onSelChange
-FunctionEnd
-
-
-Function .onInstSuccess
- ;create/update log always within .onInstSuccess function
- !insertmacro UNINSTALL.LOG_UPDATE_INSTALL
+ ${EndIf}
FunctionEnd
; --------------------------------------------------
!insertmacro MUI_HEADER_TEXT "$(lng_UInstOpt)" "$(lng_UInstOpt1)"
!insertmacro MUI_INSTALLOPTIONS_WRITE "inkscape.nsi.uninstall" "Field 1" "Text" "$APPDATA\Inkscape\"
!insertmacro MUI_INSTALLOPTIONS_WRITE "inkscape.nsi.uninstall" "Field 2" "Text" "$(lng_PurgePrefs)"
-
!insertmacro MUI_INSTALLOPTIONS_DISPLAY "inkscape.nsi.uninstall"
!insertmacro MUI_INSTALLOPTIONS_READ $MultiUser "inkscape.nsi.uninstall" "Field 2" "State"
- DetailPrint "keepfiles = $MultiUser"
- ;MessageBox MB_OK "adminmode = $MultiUser MultiUserOS = $askMultiUser"
-
FunctionEnd
-
Function un.onInit
;begin uninstall, could be added on top of uninstall section instead
- !insertmacro UNINSTALL.LOG_BEGIN_UNINSTALL
-
+ ;!insertmacro UNINSTALL.LOG_BEGIN_UNINSTALL
+ ${IfNot} ${FileExists} $INSTDIR\uninstall.log
+ MessageBox MB_OK|MB_ICONEXCLAMATION "$(lng_UninstallLogNotFound)" /SD IDOK
+ Quit
+ ${EndIf}
ClearErrors
StrCpy $User ""
- UserInfo::GetName
- IfErrors +3
- Pop $0
- StrCpy $User $0
-
- StrCpy $askMultiUser "1"
- StrCpy $MultiUser "1"
-
+ UserInfo::GetName
+ ${IfNot} ${Errors}
+ Pop $0
+ StrCpy $User $0
+ ${EndIf}
+ StrCpy $askMultiUser 1
+ StrCpy $MultiUser 1
+
; Test if this was a multiuser installation
ReadRegStr $0 HKLM "${PRODUCT_DIR_REGKEY}" ""
- StrCmp $0 "$INSTDIR\inkscape.exe" 0 hkcu_user_uninstall
+ ${If} $0 == "$INSTDIR\inkscape.exe"
ReadRegStr $MultiUser HKLM "${PRODUCT_DIR_REGKEY}" "MultiUser"
ReadRegStr $askMultiUser HKLM "${PRODUCT_DIR_REGKEY}" "askMultiUser"
- ReadRegStr $0 HKLM "${PRODUCT_DIR_REGKEY}" "User"
- Goto check_user_uninstall
- hkcu_user_uninstall:
- ReadRegStr $MultiUser HKCU "${PRODUCT_DIR_REGKEY}" "MultiUser"
- ReadRegStr $askMultiUser HKCU "${PRODUCT_DIR_REGKEY}" "askMultiUser"
- ReadRegStr $0 HKCU "${PRODUCT_DIR_REGKEY}" "User"
+ ReadRegStr $0 HKLM "${PRODUCT_DIR_REGKEY}" "User"
+ ${Else}
+ ReadRegStr $MultiUser HKCU "${PRODUCT_DIR_REGKEY}" "MultiUser"
+ ReadRegStr $askMultiUser HKCU "${PRODUCT_DIR_REGKEY}" "askMultiUser"
+ ReadRegStr $0 HKCU "${PRODUCT_DIR_REGKEY}" "User"
+ ${EndIf}
;check user if applicable
- check_user_uninstall:
- StrCmp $0 "" diff_user_uninstall_done
- StrCmp $0 $User diff_user_uninstall_done
- MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION "$(lng_DIFFERENT_USER)$(lng_OK_CANCEL_DESC)" /SD IDOK IDOK diff_user_uninstall_done IDCANCEL +1
- Quit
- diff_user_uninstall_done:
-
- !insertmacro MUI_INSTALLOPTIONS_EXTRACT "inkscape.nsi.uninstall"
-
- ;check whether Multi user installation ?
- SetShellVarContext all
- StrCmp $MultiUser "0" 0 +2
- SetShellVarContext current
- ;MessageBox MB_OK "adminmode = $MultiUser MultiUserOS = $askMultiUser"
-
+ ${If} $0 != ""
+ ${AndIf} $0 != $User
+ ${AndIf} ${Cmd} ${|} MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION "$(lng_DIFFERENT_USER)$(lng_OK_CANCEL_DESC)" /SD IDOK IDCANCEL ${|}
+ Quit
+ ${EndIf}
+
+ !insertmacro MUI_INSTALLOPTIONS_EXTRACT "inkscape.nsi.uninstall"
+
+ SetShellVarContext all
+ ${IfThen} $MultiUser = 0 ${|} SetShellVarContext current ${|}
FunctionEnd
Section Uninstall
-
+!ifndef DUMMYINSTALL
; remove personal settings
Delete "$APPDATA\Inkscape\extension-errors.log"
- StrCmp $MultiUser "0" 0 endPurge ; multiuser assigned in dialog
- DetailPrint "purge personal settings in $APPDATA\Inkscape"
+ ${If} $MultiUser = 0
+ DetailPrint "Purging personal settings in $APPDATA\Inkscape"
;RMDir /r "$APPDATA\Inkscape"
- !insertmacro delprefs
- endPurge:
+ !insertmacro delprefs
+ ${EndIf}
; Remove file associations for svg editor
- DetailPrint "removing file associations for svg editor"
- ClearErrors
- ReadRegStr $0 HKCR ".svg" ""
- DetailPrint ".svg associated as $0"
- IfErrors endUninstSVGEdit
- ReadRegStr $1 HKCR "$0\shell\edit\command" ""
- IfErrors 0 +2
- DetailPrint "svg editor is $1"
- StrCmp $1 '"$INSTDIR\Inkscape.exe" "%1"' 0 +3
- DetailPrint "removing default .svg editor"
- DeleteRegKey HKCR "$0\shell\edit\command"
- DeleteRegKey /ifempty HKCR "$0\shell\edit"
- DeleteRegKey /ifempty HKCR "$0\shell"
- DeleteRegKey /ifempty HKCR "$0"
- endUninstSVGEdit:
-
- ClearErrors
- ReadRegStr $2 HKCR ".svgz" ""
- DetailPrint ".svgz associated as $2"
- IfErrors endUninstSVGZEdit
- ReadRegStr $3 HKCR "$2\shell\edit\command" ""
- IfErrors 0 +2
- DetailPrint "svgz editor is $1"
- StrCmp $3 '"$INSTDIR\Inkscape.exe" "%1"' 0 +3
- DetailPrint "removing default .svgz editor"
- DeleteRegKey HKCR "$2\shell\edit\command"
- DeleteRegKey /ifempty HKCR "$2\shell\edit"
- DeleteRegKey /ifempty HKCR "$2\shell"
- DeleteRegKey /ifempty HKCR "$2"
- endUninstSVGZEdit:
-
- ; Remove file associations for svg editor
- DetailPrint "removing file associations for svg editor"
- ClearErrors
- ReadRegStr $0 HKCR ".svg" ""
- IfErrors endUninstSVGView
- ReadRegStr $1 HKCR "$0\shell\open\command" ""
- IfErrors 0 +2
- DetailPrint "svg viewer is $1"
- StrCmp $1 '"$INSTDIR\Inkscape.exe" "%1"' 0 +3
- DetailPrint "removing default .svg viewer"
- DeleteRegKey HKCR "$0\shell\open\command"
- DeleteRegKey /ifempty HKCR "$0\shell\open"
- DeleteRegKey /ifempty HKCR "$0\shell"
- DeleteRegKey /ifempty HKCR "$0"
- endUninstSVGView:
-
- ClearErrors
- ReadRegStr $2 HKCR ".svgz" ""
- IfErrors endUninstSVGZView
- ReadRegStr $3 HKCR "$2\shell\open\command" ""
- IfErrors 0 +2
- DetailPrint "svgz viewer is $1"
- StrCmp $3 '"$INSTDIR\Inkscape.exe" "%1"' 0 +3
- DetailPrint "removing default .svgz viewer"
- DeleteRegKey HKCR "$2\shell\open\command"
- DeleteRegKey /ifempty HKCR "$2\shell\open"
- DeleteRegKey /ifempty HKCR "$2\shell"
- DeleteRegKey /ifempty HKCR "$2"
- endUninstSVGZView:
-
- ; Remove file associations for context menue
- DetailPrint "removing file associations for svg editor"
- ClearErrors
- ReadRegStr $0 HKCR ".svg" ""
- IfErrors endUninstSVGContext
- DetailPrint "removing default .svg context menue"
- DeleteRegKey HKCR "$0\shell\${PRODUCT_NAME}"
- DeleteRegKey /ifempty HKCR "$0\shell"
- DeleteRegKey /ifempty HKCR "$0"
- endUninstSVGContext:
-
- ClearErrors
- ReadRegStr $2 HKCR ".svgz" ""
- IfErrors endUninstSVGZContext
- DetailPrint "removing default .svgzcontext menue"
- DeleteRegKey HKCR "$2\shell\${PRODUCT_NAME}"
- DeleteRegKey /ifempty HKCR "$2\shell"
- DeleteRegKey /ifempty HKCR "$2"
- endUninstSVGZContext:
-
- ReadRegStr $1 HKCR "$0" ""
- StrCmp $1 "" 0 +3
- DetailPrint "removing filetype .svg $0"
- DeleteRegKey HKCR ".svg"
-
- ReadRegStr $3 HKCR "$2" ""
- StrCmp $3 "" 0 +3
- DetailPrint "removing filetype .svgz $2"
- DeleteRegKey HKCR ".svgz"
-
-
+ StrCpy $3 "svg"
+ ${For} $2 0 1
+ ${IfThen} $2 = 1 ${|} StrCpy $3 $3z ${|}
+ DetailPrint "Removing file associations for $3 editor"
+ ClearErrors
+ ReadRegStr $0 HKCR ".$3" ""
+ ${IfNot} ${Errors}
+ ReadRegStr $1 HKCR "$0\shell\edit\command" ""
+ ${If} $1 == `"$INSTDIR\Inkscape.exe" "%1"`
+ DeleteRegKey HKCR "$0\shell\edit\command"
+ ${EndIf}
+
+ ClearErrors
+ ReadRegStr $1 HKCR "$0\shell\open\command" ""
+ ${If} $1 == `"$INSTDIR\Inkscape.exe" "%1"`
+ DeleteRegKey HKCR "$0\shell\open\command"
+ ${EndIf}
+
+ DeleteRegKey HKCR "$0\shell\${PRODUCT_NAME}"
+ DeleteRegKey /ifempty HKCR "$0\shell\edit"
+ DeleteRegKey /ifempty HKCR "$0\shell\open"
+ DeleteRegKey /ifempty HKCR "$0\shell"
+ DeleteRegKey /ifempty HKCR "$0"
+ DeleteRegKey /ifempty HKCR ".$3"
+ ${EndIf}
+ ${Next}
+
SetShellVarContext all
- DetailPrint "removing product regkey"
DeleteRegKey SHCTX "${PRODUCT_DIR_REGKEY}"
- DetailPrint "removing uninstall info"
DeleteRegKey SHCTX "${PRODUCT_UNINST_KEY}"
- DetailPrint "removing shortcuts"
Delete "$DESKTOP\Inkscape.lnk"
Delete "$QUICKLAUNCH\Inkscape.lnk"
Delete "$SMPROGRAMS\Inkscape.lnk"
RMDir "$SMPROGRAMS\Inkscape"
SetShellVarContext current
- DetailPrint "removing product regkey"
DeleteRegKey SHCTX "${PRODUCT_DIR_REGKEY}"
- DetailPrint "removing uninstall info"
DeleteRegKey SHCTX "${PRODUCT_UNINST_KEY}"
- DetailPrint "removing shortcuts"
Delete "$DESKTOP\Inkscape.lnk"
Delete "$QUICKLAUNCH\Inkscape.lnk"
Delete "$SMPROGRAMS\Inkscape.lnk"
Delete "$SMPROGRAMS\Inkscape\Inkscape.lnk"
RMDir "$SMPROGRAMS\Inkscape"
- DetailPrint "removing uninstall info"
-
- ;uninstall from path, must be repeated for every install logged path individual
- !insertmacro UNINSTALL.LOG_UNINSTALL "$INSTDIR\lib\locale"
- !insertmacro UNINSTALL.LOG_UNINSTALL "$INSTDIR\locale"
- !insertmacro UNINSTALL.LOG_UNINSTALL "$INSTDIR\doc"
- !insertmacro UNINSTALL.LOG_UNINSTALL "$INSTDIR\share\tutorials"
- !insertmacro UNINSTALL.LOG_UNINSTALL "$INSTDIR\share\templates"
- !insertmacro UNINSTALL.LOG_UNINSTALL "$INSTDIR\share\screens"
- !insertmacro UNINSTALL.LOG_UNINSTALL "$INSTDIR\share\clipart"
- !insertmacro UNINSTALL.LOG_UNINSTALL "$INSTDIR\share\extensions"
- !insertmacro UNINSTALL.LOG_UNINSTALL "$INSTDIR\share\icons"
- !insertmacro UNINSTALL.LOG_UNINSTALL "$INSTDIR\share"
- !insertmacro UNINSTALL.LOG_UNINSTALL "$INSTDIR\modules"
- !insertmacro UNINSTALL.LOG_UNINSTALL "$INSTDIR\python"
- !insertmacro UNINSTALL.LOG_UNINSTALL "$INSTDIR"
-
- ;end uninstall, after uninstall from all logged paths has been performed
- !insertmacro UNINSTALL.LOG_END_UNINSTALL
-
- ;RMDir /r "$INSTDIR"
+ InitPluginsDir
+ SetPluginUnload manual
+ ClearErrors
+ FileOpen $0 $INSTDIR\uninstall.log r
+ ${If} ${Errors} ;else uninstallnotfound
+ MessageBox MB_OK|MB_ICONEXCLAMATION "$(lng_UninstallLogNotFound)" /SD IDOK
+ ${Else}
+ ${Do}
+ ClearErrors
+ FileRead $0 $1
+ ${IfThen} ${Errors} ${|} ${ExitDo} ${|}
+ ; cat the line into md5 and filename
+ StrLen $2 $1
+ ${IfThen} $2 <= 35 ${|} ${Continue} ${|}
+ StrCpy $3 $1 32
+ StrCpy $filename $1 $2-36 34 ;remove trailing CR/LF
+ StrCpy $filename $filename -2
+ ; $3 = MD5 when installed, then deletion choice
+ ; $filename = file
+ ; $5 = MD5 now
+ ; $6 = "always"/"never" remove files touched by user
+
+ ${If} ${FileExists} $filename
+ ${If} $6 == "always"
+ StrCpy $3 2
+ ${Else}
+ md5dll::GetMD5File /NOUNLOAD $filename
+ Pop $5 ;md5 of file
+ ${If} $3 != $5
+ ${AndIf} $6 != "never"
+ ; the md5 sums does not match so we ask
+ messagebox::show MB_DEFBUTTON3|MB_TOPMOST "" "0,103" \
+ "$(lng_FileChanged)" "$(lng_Yes)" "$(lng_AlwaysYes)" "$(lng_No)" "$(lng_AlwaysNo)"
+ Pop $3
+ ${IfThen} $3 = 2 ${|} StrCpy $6 "always" ${|}
+ ${IfThen} $3 = 4 ${|} StrCpy $6 "never" ${|}
+ ${EndIf}
+ ${EndIf}
+
+ ${If} $3 = 1 ; yes
+ ${OrIf} $3 = 2 ; always
+ ; Remove File
+ ClearErrors
+ Delete $filename
+ ;now recursivly remove the path
+ ${Do}
+ ClearErrors
+ ${un.GetParent} $filename $filename
+ ${IfThen} ${Errors} ${|} ${ExitDo} ${|}
+ RMDir $filename
+ ${IfThen} ${Errors} ${|} ${ExitDo} ${|}
+ ${Loop}
+ ${EndIf}
+ ${EndIf}
+ ${Loop}
+ ${EndIf}
+ FileClose $0
+ Delete "$INSTDIR\uninstall.log"
+ Delete "$INSTDIR\uninstall.exe"
+ ; remove empty directories
+ RMDir "$INSTDIR\data"
+ RMDir "$INSTDIR\doc"
+ RMDir "$INSTDIR\modules"
+ RMDir "$INSTDIR\plugins"
+ RMDir $INSTDIR
SetAutoClose false
-
+!endif
SectionEnd
-