inkscape.nsi revision 1facf02179f7927c959d0a34a9b05cce4500c442
; #######################################
; Inkscape NSIS installer project file
; Used as of 0.40
; #######################################
; #######################################
; DEFINES
; #######################################
!define PRODUCT_NAME "Inkscape"
!define PRODUCT_VERSION "0.46+devel"
!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 proper sections, for quick testing of pre-install features of the installer
; #######################################
; MUI SETTINGS
; #######################################
; MUI 1.67 compatible ------
SetCompressor /SOLID lzma
RequestExecutionLevel highest
!include "MUI.nsh"
!include "LogicLib.nsh"
!include "sections.nsh"
!define MUI_ABORTWARNING
!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
;..................................................................................................
;Following two definitions required. Uninstall log will use these definitions.
;You may use these definitions also, when you want to set up the InstallDirRagKey,
;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}
;include the Uninstall log header
!include AdvUninstLog.nsh
!insertmacro INTERACTIVE_UNINSTALL
;For md5dll and messagebox
!addplugindir .
!include FileFunc.nsh
!insertmacro GetParameters
!insertmacro GetOptions
!insertmacro un.GetParent
; Welcome page
!insertmacro MUI_PAGE_WELCOME
; License page
; !define MUI_LICENSEPAGE_RADIOBUTTONS
LicenseForceSelection off
!define MUI_LICENSEPAGE_BUTTON $(lng_LICENSE_BUTTON)
!define MUI_LICENSEPAGE_TEXT_BOTTOM $(lng_LICENSE_BOTTOM_TEXT)
!insertmacro MUI_PAGE_LICENSE "..\..\Copying"
!insertmacro MUI_PAGE_COMPONENTS
; InstType $(lng_Full)
; InstType $(lng_Optimal)
; InstType $(lng_Minimal)
; Directory page
!insertmacro MUI_PAGE_DIRECTORY
; Instfiles page
!insertmacro MUI_PAGE_INSTFILES
; Finish page
!define MUI_FINISHPAGE_RUN "$INSTDIR\inkscape.exe"
!insertmacro MUI_PAGE_FINISH
; Uninstaller pages
!insertmacro MUI_UNPAGE_CONFIRM
UninstPage custom un.CustomPageUninstall
!insertmacro MUI_UNPAGE_INSTFILES
ShowUninstDetails hide
!insertmacro MUI_UNPAGE_FINISH
; #######################################
; STRING LOCALIZATION
; #######################################
; Thanks to Adib Taraben and Luca Bruno for getting this started
; Add your translation here! :-)
; I had wanted to list the languages alphabetically, but apparently
; the first is the default. So putting English first is just being
; practical. It is not chauvinism or hubris, I swear! ;-)
; default language first
; Language files
!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 "tradchinese.nsh"
ReserveFile "inkscape.nsi.uninstall"
ReserveFile "${NSISDIR}\Plugins\UserInfo.dll"
!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS
; #######################################
; SETTINGS
; #######################################
Name "${PRODUCT_NAME}"
Caption "$(lng_Caption)"
BrandingText "$(lng_Caption)"
OutFile "Inkscape-${PRODUCT_VERSION}-1.win32.exe"
InstallDir "$PROGRAMFILES\Inkscape"
InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""
Var askMultiUser
Var filename
Var MultiUser
Var User
Var CMDARGS
; #######################################
; I N S T A L L E R S E C T I O N S
; #######################################
!ifndef DUMMYINSTALL
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;
; Delete prefs
; code originally taken from the vlc project
;;;;;;;;;;;;;;;;;;;;;;;;;;
!macro delprefs
StrCpy $0 0
DetailPrint "Delete personal preferences ..."
DetailPrint "try to find 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
${IfThen} $1 == "" ${|} ${ExitDo} ${|}
IntOp $0 $0 + 1
ReadRegStr $2 HKU "$1\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" AppData
${IfThen} $2 == "" ${|} ${Continue} ${|}
DetailPrint "$2\Inkscape will be removed"
Delete "$2\Inkscape\preferences.xml"
Delete "$2\Inkscape\extension-errors.log"
RMDir "$2\Inkscape"
${Loop}
!macroend
;--------------------------------
; Installer Sections
Section -removeInkscape
; check for an old installation and clean its DLLs etc.
FindFirst $0 $1 $INSTDIR\*.*
${Do}
${IfThen} $1 == "" ${|} ${ExitDo} ${|}
${If} $1 == "."
${OrIf} $1 == ".."
FindNext $0 $1
${Continue}
${EndIf}
${If} ${Cmd} ${|} MessageBox MB_RETRYCANCEL|MB_ICONEXCLAMATION "$(lng_ClearDirectoryBefore)" /SD IDCANCEL IDCANCEL ${|}
FindFirst $0 $1 $INSTDIR\*.*
${Continue}
${Else}
${EndIf}
${Loop}
;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"
SetShellVarContext all
Delete "$SMPROGRAMS\Inkscape\Uninstall Inkscape.lnk"
Delete "$SMPROGRAMS\Inkscape\Inkscape.lnk"
RMDir "$SMPROGRAMS\Inkscape"
Delete "$SMPROGRAMS\Inkscape.lnk"
SectionEnd
Section $(lng_Core) SecCore
SectionIn 1 2 3 RO
DetailPrint "Installing Inkscape Core Files ..."
SetOutPath $INSTDIR
!insertmacro UNINSTALL.LOG_OPEN_INSTALL
SetOverwrite on
SetAutoClose false
File /a "..\..\inkscape\ink*.exe"
File /a "..\..\inkscape\AUTHORS"
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"
File /a "..\..\inkscape\TRANSLATORS"
File /nonfatal /a /r "..\..\inkscape\data"
File /nonfatal /a /r "..\..\inkscape\doc"
File /nonfatal /a /r "..\..\inkscape\plugins"
File /nonfatal /a /r /x *.??*.???* /x "examples" /x "tutorials" "..\..\inkscape\share"
!insertmacro UNINSTALL.LOG_CLOSE_INSTALL
; this files are added because it slips through the filter
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\icons
!insertmacro UNINSTALL.LOG_OPEN_INSTALL
File /a "..\..\inkscape\share\icons\inkscape.file.png"
File /a "..\..\inkscape\share\icons\inkscape.file.svg"
!insertmacro UNINSTALL.LOG_CLOSE_INSTALL
SetOutPath $INSTDIR\modules
!insertmacro UNINSTALL.LOG_OPEN_INSTALL
File /nonfatal /a /r "..\..\inkscape\modules\*.*"
!insertmacro UNINSTALL.LOG_CLOSE_INSTALL
SetOutPath $INSTDIR\python
!insertmacro UNINSTALL.LOG_OPEN_INSTALL
File /nonfatal /a /r "..\..\inkscape\python\*.*"
!insertmacro UNINSTALL.LOG_CLOSE_INSTALL
SectionEnd
Section $(lng_GTKFiles) SecGTK
SectionIn 1 2 3 RO
DetailPrint "Installing GTK Files ..."
SetOutPath $INSTDIR
!insertmacro UNINSTALL.LOG_OPEN_INSTALL
SetOverwrite on
File /a /r "..\..\inkscape\*.dll"
File /a /r /x "locale" "..\..\inkscape\lib"
File /a /r "..\..\inkscape\etc"
!insertmacro UNINSTALL.LOG_CLOSE_INSTALL
SectionEnd
Section -SetCurrentUserOnly
StrCpy $MultiUser 0
SetShellVarContext current
SectionEnd
Section $(lng_Alluser) SecAlluser
; disable this option in Win95/Win98/WinME
SectionIn 1 2 3
StrCpy $MultiUser 1
DetailPrint "admin mode, registry root will be HKLM"
SetShellVarContext all
SectionEnd
SectionGroup $(lng_Shortcuts) SecShortcuts
Section /o $(lng_Desktop) SecDesktop
ClearErrors
CreateShortCut "$DESKTOP\Inkscape.lnk" "$INSTDIR\inkscape.exe"
${IfThen} ${Errors} ${|} DetailPrint "Uups! Problems creating desktop shortcuts" ${|}
SectionEnd
Section /o $(lng_Quicklaunch) SecQuicklaunch
ClearErrors
${IfThen} $QUICKLAUNCH != $TEMP ${|} CreateShortCut "$QUICKLAUNCH\Inkscape.lnk" "$INSTDIR\inkscape.exe" ${|}
${IfThen} ${Errors} ${|} DetailPrint "Uups! Problems creating quicklaunch shortcuts" ${|}
SectionEnd
Section $(lng_SVGWriter) SecSVGWriter
SectionIn 1 2 3
; create file associations, test before if needed
DetailPrint "creating file associations"
ClearErrors
ReadRegStr $0 HKCR ".svg" ""
${If} $0 == ""
WriteRegStr HKCR ".svg" "" "svgfile"
WriteRegStr HKCR "svgfile" "" "Scalable Vector Graphics file"
${EndIf}
ReadRegStr $0 HKCR ".svgz" ""
${If} $0 == ""
WriteRegStr HKCR ".svgz" "" "svgfile"
WriteRegStr HKCR "svgfile" "" "Scalable Vector Graphics file"
${EndIf}
${IfThen} ${Errors} ${|} 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"'
${IfThen} ${Errors} ${|} DetailPrint "Uups! Problems creating default editor" ${|}
SectionEnd
Section $(lng_ContextMenu) SecContextMenu
SectionIn 1 2 3
; create file associations, test before if needed
DetailPrint "creating file associations"
ClearErrors
ReadRegStr $0 HKCR ".svg" ""
${If} $0 == ""
WriteRegStr HKCR ".svg" "" "svgfile"
WriteRegStr HKCR "svgfile" "" "Scalable Vector Graphics file"
${EndIf}
ReadRegStr $0 HKCR ".svgz" ""
${If} $0 == ""
WriteRegStr HKCR ".svgz" "" "svgfile"
WriteRegStr HKCR "svgfile" "" "Scalable Vector Graphics file"
${EndIf}
${IfThen} ${Errors} ${|} 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"'
${IfThen} ${Errors} ${|} DetailPrint "Uups! Problems creating context menue integration" ${|}
SectionEnd
SectionGroupEnd
Section /o $(lng_DeletePrefs) SecPrefs
!insertmacro delprefs
SectionEnd
SectionGroup $(lng_Addfiles) SecAddfiles
Section $(lng_Examples) SecExamples
SectionIn 1 2
SetOutPath $INSTDIR\share
!insertmacro UNINSTALL.LOG_OPEN_INSTALL
File /nonfatal /a /r /x "*.??*.???*" "..\..\inkscape\share\examples"
!insertmacro UNINSTALL.LOG_CLOSE_INSTALL
SectionEnd
Section $(lng_Tutorials) SecTutorials
SectionIn 1 2
SetOutPath $INSTDIR\share
!insertmacro UNINSTALL.LOG_OPEN_INSTALL
File /nonfatal /a /r /x "*.??*.???*" "..\..\inkscape\share\tutorials"
!insertmacro UNINSTALL.LOG_CLOSE_INSTALL
SectionEnd
SectionGroupEnd
SectionGroup $(lng_Languages) SecLanguages
!macro Language SecName lng
Section $(lng_${lng}) Sec${SecName}
SectionIn 1 2 3
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}
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
DetailPrint "finalize installation"
${If} $MultiUser = 1
DetailPrint "admin mode, registry root will be HKLM"
SetShellVarContext all
${Else}
DetailPrint "single user mode, registry root will be HKCU"
SetShellVarContext current
${EndIf}
; check for writing registry
ClearErrors
WriteRegStr SHCTX "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\inkscape.exe"
;${If} ${Errors}
; DetailPrint "fatal: failed to write to ${PRODUCT_DIR_REGKEY}"
; DetailPrint "aborting installation"
; Abort
;${EndIf}
WriteRegStr SHCTX "${PRODUCT_DIR_REGKEY}" "MultiUser" $MultiUser
WriteRegStr SHCTX "${PRODUCT_DIR_REGKEY}" "askMultiUser" $askMultiUser
WriteRegStr SHCTX "${PRODUCT_DIR_REGKEY}" "User" $User
${IfThen} ${Errors} ${|} DetailPrint "Fatal: failed to write to registry installation info" ${|}
; start menu entries
ClearErrors
CreateShortCut "$SMPROGRAMS\Inkscape.lnk" "$INSTDIR\inkscape.exe"
${IfThen} ${Errors} ${|} DetailPrint "Fatal: failed to write to start menu info" ${|}
; uninstall settings
ClearErrors
; 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"
${IfThen} ${Errors} ${|} DetailPrint "fatal: failed to write to registry un-installation info" ${|}
;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
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 ${SecDesktop} $(lng_DesktopDesc)
!insertmacro MUI_DESCRIPTION_TEXT ${SecQuicklaunch} $(lng_QuicklaunchDesc)
!insertmacro MUI_DESCRIPTION_TEXT ${SecSVGWriter} $(lng_SVGWriterDesc)
!insertmacro MUI_DESCRIPTION_TEXT ${SecContextMenu} $(lng_ContextMenuDesc)
!insertmacro MUI_DESCRIPTION_TEXT ${SecPrefs} $(lng_DeletePrefsDesc)
!insertmacro MUI_DESCRIPTION_TEXT ${SecAddfiles} $(lng_AddfilesDesc)
!insertmacro MUI_DESCRIPTION_TEXT ${SecExamples} $(lng_ExamplesDesc)
!insertmacro MUI_DESCRIPTION_TEXT ${SecTutorials} $(lng_TutorialsDesc)
!insertmacro MUI_DESCRIPTION_TEXT ${SecLanguages} $(lng_LanguagesDesc)
!insertmacro MUI_FUNCTION_DESCRIPTION_END
!macro Parameter key Section
${GetOptions} $CMDARGS "/${key}=" $1
${If} $1 == "OFF"
SectionGetFlags ${Section} $0
IntOp $2 ${SF_SELECTED} ~
IntOp $0 $0 & $2
SectionSetFlags ${Section} $0
${EndIf}
${If} $1 == "ON"
SectionGetFlags ${Section} $0
IntOp $0 $0 | ${SF_SELECTED}
SectionSetFlags ${Section} $0
${EndIf}
!macroend
Function .onInit
${GetParameters} $CMDARGS
;prepare log always within .onInit function
!insertmacro UNINSTALL.LOG_PREPARE_INSTALL
;Extract InstallOptions INI files
StrCpy $AskMultiUser "1"
StrCpy $MultiUser "0"
; this resets AskMultiUser if Win95/98/ME
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
${IfThen} $QUICKLAUNCH == $TEMP ${|} SectionSetText ${SecQuicklaunch} "" ${|}
;check if user is admin
ClearErrors
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"
${IfThen} $0 == "" ${|} ReadRegStr $0 HKCU "${PRODUCT_DIR_REGKEY}" "User" ${|}
;check user if applicable
${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"
${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 ${|}
;Run the uninstaller
DetailPrint "Execute $R0 in $INSTDIR"
ClearErrors
ExecWait '$R0 _?=$INSTDIR' ;Do not copy the uninstaller to a temp file
${EndIf}
; proccess command line parameter
!insertmacro Parameter "GTK" ${SecGTK}
!insertmacro Parameter "SHORTCUTS" ${secShortcuts}
!insertmacro Parameter "ALLUSER" ${SecAlluser}
!insertmacro Parameter "DESKTOP" ${SecDesktop}
!insertmacro Parameter "QUICKLAUNCH" ${SecQUICKlaunch}
!insertmacro Parameter "SVGEDITOR" ${SecSVGWriter}
!insertmacro Parameter "CONTEXTMENUE" ${SecContextMenu}
!insertmacro Parameter "PREFERENCES" ${SecPrefs}
!insertmacro Parameter "ADDFILES" ${SecAddfiles}
!insertmacro Parameter "EXAMPLES" ${SecExamples}
!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 "dz" ${SecDzongkha}
!insertmacro Parameter "el" ${SecGreek}
!insertmacro Parameter "en_AU" ${SecEnglishAustralian}
!insertmacro Parameter "en_CA" ${SecEnglishCanadian}
!insertmacro Parameter "en_GB" ${SecEnglishBritain}
!insertmacro Parameter "en_US@piglatin" ${SecEnglishPiglatin}
!insertmacro Parameter "eo" ${SecEsperanto}
!insertmacro Parameter "es" ${SecSpanish}
!insertmacro Parameter "es_MX" ${SecSpanishMexico}
!insertmacro Parameter "et" ${SecEstonian}
!insertmacro Parameter "eu" ${SecBasque}
!insertmacro Parameter "fi" ${SecFinnish}
!insertmacro Parameter "fr" ${SecFrench}
!insertmacro Parameter "ga" ${SecIrish}
!insertmacro Parameter "gl" ${SecGallegan}
!insertmacro Parameter "he" ${SecHebrew}
!insertmacro Parameter "hr" ${SecCroatian}
!insertmacro Parameter "hu" ${SecHungarian}
!insertmacro Parameter "id" ${SecIndonesian}
!insertmacro Parameter "it" ${SecItalian}
!insertmacro Parameter "ja" ${SecJapanese}
!insertmacro Parameter "km" ${SecKhmer}
!insertmacro Parameter "ko" ${SecKorean}
!insertmacro Parameter "lt" ${SecLithuanian}
!insertmacro Parameter "mk" ${SecMacedonian}
!insertmacro Parameter "mn" ${SecMongolian}
!insertmacro Parameter "nb" ${SecNorwegianBokmal}
!insertmacro Parameter "ne" ${SecNepali}
!insertmacro Parameter "nl" ${SecDutch}
!insertmacro Parameter "nn" ${SecNorwegianNynorsk}
!insertmacro Parameter "pa" ${SecPanjabi}
!insertmacro Parameter "pl" ${SecPolish}
!insertmacro Parameter "pt" ${SecPortuguese}
!insertmacro Parameter "pt_BR" ${SecPortugueseBrazil}
!insertmacro Parameter "ro" ${SecRomanian}
!insertmacro Parameter "ru" ${SecRussian}
!insertmacro Parameter "rw" ${SecKinyarwanda}
!insertmacro Parameter "sk" ${SecSlovak}
!insertmacro Parameter "sl" ${SecSlovenian}
!insertmacro Parameter "sq" ${SecAlbanian}
!insertmacro Parameter "sr" ${SecSerbian}
!insertmacro Parameter "sr@latin" ${SecSerbianLatin}
!insertmacro Parameter "sv" ${SecSwedish}
!insertmacro Parameter "th" ${SecThai}
!insertmacro Parameter "tr" ${SecTurkish}
!insertmacro Parameter "uk" ${SecUkrainian}
!insertmacro Parameter "vi" ${SecVietnamese}
!insertmacro Parameter "zh_CN" ${SecChineseSimplified}
!insertmacro Parameter "zh_TW" ${SecChineseTaiwan}
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 \
/GTK=(OFF/ON): GTK+ Runtime environment$\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 \
/SVGEDITOR=(OFF/ON): default SVG editor$\r$\n \
/CONTEXTMENUE=(OFF/ON): context menue integration$\r$\n \
/PREFERENCES=(OFF/ON): delete users preference files$\r$\n \
/ADDFILES=(OFF/ON): additional files$\r$\n \
/EXAMPLES=(OFF/ON): examples$\r$\n \
/TUTORIALS=(OFF/ON): tutorials$\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
${EndIf}
FunctionEnd
; --------------------------------------------------
Function un.CustomPageUninstall
!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
${IfNot} ${FileExists} $INSTDIR\uninstall.log
MessageBox MB_OK|MB_ICONEXCLAMATION "$(lng_UninstallLogNotFound)" /SD IDOK
Quit
${EndIf}
ClearErrors
StrCpy $User ""
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}" ""
${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"
${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
${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
; remove personal settings
Delete "$APPDATA\Inkscape\extension-errors.log"
${If} $MultiUser = 0
DetailPrint "purge personal settings in $APPDATA\Inkscape"
;RMDir /r "$APPDATA\Inkscape"
!insertmacro delprefs
${EndIf}
; Remove file associations for svg editor
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" ""
DetailPrint ".$3 associated as $0"
${IfNot} ${Errors}
ReadRegStr $1 HKCR "$0\shell\edit\command" ""
${IfNotThen} ${Errors} ${|} DetailPrint "$3 editor is $1" ${|}
${If} $1 == '"$INSTDIR\Inkscape.exe" "%1"'
DetailPrint "removing default .$3 editor"
DeleteRegKey HKCR "$0\shell\edit\command"
${EndIf}
ClearErrors
ReadRegStr $1 HKCR "$0\shell\open\command" ""
${IfNotThen} ${Errors} ${|} DetailPrint "$3 viewer is $1" ${|}
${If} $1 == '"$INSTDIR\Inkscape.exe" "%1"'
DetailPrint "removing default .$3 viewer"
DeleteRegKey HKCR "$0\shell\open\command"
${EndIf}
DetailPrint "removing default .$3 context menu"
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"
ClearErrors
ReadRegStr $1 HKCR $0 ""
${If} ${Errors} ; Formerly ${If} $1 == ""
DetailPrint "removing filetype .$3 $0"
DeleteRegKey HKCR ".$3"
${EndIf}
${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"
;just in case they are still there
Delete "$SMPROGRAMS\Inkscape\Uninstall Inkscape.lnk"
Delete "$SMPROGRAMS\Inkscape\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"
;just in case they are still there
Delete "$SMPROGRAMS\Inkscape\Uninstall Inkscape.lnk"
Delete "$SMPROGRAMS\Inkscape\Inkscape.lnk"
RMDir "$SMPROGRAMS\Inkscape"
DetailPrint "removing uninstall info"
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} ; complaining there's no opening if
${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
SectionEnd
!else
Section "This is a dummy section, which doesn't do anything" null
SectionEnd
!endif