inkscape.nsi revision 8a5b7aa04ab737c22c2f8881fa4a181c93d27bfb
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; #######################################
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; Inkscape NSIS installer project file
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; Used as of 0.40
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; #######################################
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; #######################################
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; DEFINES
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; #######################################
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!define PRODUCT_NAME "Inkscape"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!define PRODUCT_VERSION "0.45+devel"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!define PRODUCT_PUBLISHER "Inkscape Organization"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!define PRODUCT_WEB_SITE "http://www.inkscape.org"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\inkscape.exe"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass;!define UNINST_EXE "uninstall.exe"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; #######################################
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; MUI SETTINGS
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; #######################################
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; MUI 1.67 compatible ------
4eeb28ea335313c708fe2730312f94978b07dd04Dav GlassSetCompressor /SOLID lzma
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!include "MUI.nsh"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!include "sections.nsh"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!define MUI_ABORTWARNING
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!define MUI_HEADERIMAGE
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!define MUI_HEADERIMAGE_BITMAP "header.bmp"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!define MUI_COMPONENTSPAGE_SMALLDESC
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass;..................................................................................................
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass;Following two definitions required. Uninstall log will use these definitions.
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass;You may use these definitions also, when you want to set up the InstallDirRagKey,
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass;store the language selection, store Start Menu folder etc.
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass;Enter the windows uninstall reg sub key to add uninstall information to Add/Remove Programs also.
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!define INSTDIR_REG_ROOT "HKLM"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!define INSTDIR_REG_KEY ${PRODUCT_UNINST_KEY}
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass;include the Uninstall log header
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!include AdvUninstLog.nsh
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass;Specify the preferred uninstaller operation mode, either unattended or interactive.
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass;You have to type either !insertmacro UNATTENDED_UNINSTALL, or !insertmacro INTERACTIVE_UNINSTALL.
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass;Be aware only one of the following two macros has to be inserted, neither both, neither none.
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass;!insertmacro UNATTENDED_UNINSTALL
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!insertmacro INTERACTIVE_UNINSTALL
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!addplugindir .
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!include "FileFunc.nsh"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!insertmacro un.GetParent
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; Welcome page
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!insertmacro MUI_PAGE_WELCOME
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; License page
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; !define MUI_LICENSEPAGE_RADIOBUTTONS
4eeb28ea335313c708fe2730312f94978b07dd04Dav GlassLicenseForceSelection off
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!define MUI_LICENSEPAGE_BUTTON $(lng_LICENSE_BUTTON)
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!define MUI_LICENSEPAGE_TEXT_BOTTOM $(lng_LICENSE_BOTTOM_TEXT)
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!insertmacro MUI_PAGE_LICENSE "..\..\Copying"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!insertmacro MUI_PAGE_COMPONENTS
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; InstType $(lng_Full)
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; InstType $(lng_Optimal)
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; InstType $(lng_Minimal)
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; Directory page
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!insertmacro MUI_PAGE_DIRECTORY
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; Instfiles page
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!insertmacro MUI_PAGE_INSTFILES
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; Finish page
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!define MUI_FINISHPAGE_RUN "$INSTDIR\inkscape.exe"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!insertmacro MUI_PAGE_FINISH
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; Uninstaller pages
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!insertmacro MUI_UNPAGE_CONFIRM
4eeb28ea335313c708fe2730312f94978b07dd04Dav GlassUninstPage custom un.CustomPageUninstall
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!insertmacro MUI_UNPAGE_INSTFILES
4eeb28ea335313c708fe2730312f94978b07dd04Dav GlassShowUninstDetails hide
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!insertmacro MUI_UNPAGE_FINISH
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; #######################################
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; STRING LOCALIZATION
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; #######################################
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; Thanks to Adib Taraben and Luca Bruno for getting this started
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; Add your translation here! :-)
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; I had wanted to list the languages alphabetically, but apparently
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; the first is the default. So putting English first is just being
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; practical. It is not chauvinism or hubris, I swear! ;-)
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; default language first
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; Language files
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!include "english.nsh"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!include "catalan.nsh"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!include "czech.nsh"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!include "finnish.nsh"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!include "french.nsh"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!include "galician.nsh"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!include "german.nsh"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!include "italian.nsh"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!include "japanese.nsh"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!include "polish.nsh"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!include "russian.nsh"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!include "slovak.nsh"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!include "slovenian.nsh"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!include "spanish.nsh"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav GlassReserveFile "inkscape.nsi.uninstall"
4eeb28ea335313c708fe2730312f94978b07dd04Dav GlassReserveFile "${NSISDIR}\Plugins\UserInfo.dll"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS ;InstallOptions
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; #######################################
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; SETTINGS
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; #######################################
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav GlassName "${PRODUCT_NAME} ${PRODUCT_VERSION}"
4eeb28ea335313c708fe2730312f94978b07dd04Dav GlassCaption $(lng_Caption)
4eeb28ea335313c708fe2730312f94978b07dd04Dav GlassOutFile "Inkscape-${PRODUCT_VERSION}-1.win32.exe"
4eeb28ea335313c708fe2730312f94978b07dd04Dav GlassInstallDir "$PROGRAMFILES\Inkscape"
4eeb28ea335313c708fe2730312f94978b07dd04Dav GlassInstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""
4eeb28ea335313c708fe2730312f94978b07dd04Dav GlassShowInstDetails hide
4eeb28ea335313c708fe2730312f94978b07dd04Dav GlassShowUnInstDetails hide
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glassvar askMultiUser
4eeb28ea335313c708fe2730312f94978b07dd04Dav GlassVar MultiUser
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glassvar User
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; #######################################
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; I N S T A L L E R S E C T I O N S
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; #######################################
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; Turn off old selected section
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; GetWindowsVersion
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass;
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; Based on Yazno's function, http://yazno.tripod.com/powerpimpit/
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; Updated by Joost Verburg
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; Updated for Windows 98 SE by Matthew Win Tibbals 5-21-03
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass;
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; Returns on top of stack
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass;
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; Windows Version (95, 98, ME, NT x.x, 2000, XP, 2003)
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; or
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; '' (Unknown Windows Version)
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass;
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; Usage:
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; Call GetWindowsVersion
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; Pop $R0
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; ; at this point $R0 is "NT 4.0" or whatnot
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4eeb28ea335313c708fe2730312f94978b07dd04Dav GlassFunction GetWindowsVersion
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Push $R0
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Push $R1
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ClearErrors
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass IfErrors 0 lbl_winnt
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; we are not NT
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion" VersionNumber
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCpy $R1 $R0 1
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCmp $R1 '4' 0 lbl_error
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCpy $R1 $R0 3
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCmp $R1 '4.0' lbl_win32_95
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCmp $R1 '4.9' lbl_win32_ME lbl_win32_98
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass lbl_win32_95:
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCpy $R0 '95'
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCpy $AskMultiUser "0"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Goto lbl_done
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass lbl_win32_98:
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCpy $R0 '98'
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCpy $AskMultiUser "0"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Goto lbl_done
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass lbl_win32_ME:
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCpy $R0 'ME'
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCpy $AskMultiUser "0"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Goto lbl_done
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass lbl_winnt:
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCpy $R1 $R0 1
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCmp $R1 '3' lbl_winnt_x
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCmp $R1 '4' lbl_winnt_x
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCpy $R1 $R0 3
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCmp $R1 '5.0' lbl_winnt_2000
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCmp $R1 '5.1' lbl_winnt_XP
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCmp $R1 '5.2' lbl_winnt_2003 lbl_error
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass lbl_winnt_x:
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCpy $R0 "NT $R0" 6
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Goto lbl_done
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass lbl_winnt_2000:
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Strcpy $R0 '2000'
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Goto lbl_done
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass lbl_winnt_XP:
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Strcpy $R0 'XP'
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Goto lbl_done
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass lbl_winnt_2003:
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Strcpy $R0 '2003'
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Goto lbl_done
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass lbl_error:
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Strcpy $R0 ''
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass lbl_done:
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Pop $R1
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Exch $R0
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav GlassFunctionEnd
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; StrStr
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; input, top of stack = string to search for
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; top of stack-1 = string to search in
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; output, top of stack (replaces with the portion of the string remaining)
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; modifies no other variables.
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ;
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; Usage:
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; Push "this is a long ass string"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; Push "ass"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; Call StrStr
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; Pop $R0
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; ($R0 at this point is "ass string")
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Function StrStr
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Exch $R1 ; st=haystack,old$R1, $R1=needle
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Exch ; st=old$R1,haystack
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Exch $R2 ; st=old$R1,old$R2, $R2=haystack
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Push $R3
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Push $R4
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Push $R5
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrLen $R3 $R1
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCpy $R4 0
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; $R1=needle
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; $R2=haystack
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; $R3=len(needle)
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; $R4=cnt
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; $R5=tmp
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass loop:
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCpy $R5 $R2 $R3 $R4
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCmp $R5 $R1 done
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCmp $R5 "" done
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass IntOp $R4 $R4 + 1
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Goto loop
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass done:
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCpy $R1 $R2 "" $R4
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Pop $R5
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Pop $R4
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Pop $R3
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Pop $R2
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Exch $R1
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass FunctionEnd
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; GetParameters
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; input, none
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; output, top of stack (replaces, with e.g. whatever)
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; modifies no other variables.
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Function GetParameters
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Push $R0
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Push $R1
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Push $R2
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Push $R3
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCpy $R2 1
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrLen $R3 $CMDLINE
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ;Check for quote or space
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCpy $R0 $CMDLINE $R2
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCmp $R0 '"' 0 +3
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCpy $R1 '"'
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Goto loop
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCpy $R1 " "
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass loop:
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass IntOp $R2 $R2 + 1
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCpy $R0 $CMDLINE 1 $R2
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCmp $R0 $R1 get
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCmp $R2 $R3 get
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Goto loop
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass get:
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass IntOp $R2 $R2 + 1
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCpy $R0 $CMDLINE 1 $R2
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCmp $R0 " " get
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCpy $R0 $CMDLINE "" $R2
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Pop $R3
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Pop $R2
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Pop $R1
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Exch $R0
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass FunctionEnd
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; GetParameterValue
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; Chris Morgan<cmorgan@alum.wpi.edu> 5/10/2004
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; -Updated 4/7/2005 to add support for retrieving a command line switch
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; and additional documentation
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass;
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; Searches the command line input, retrieved using GetParameters, for the
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; value of an option given the option name. If no option is found the
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; default value is placed on the top of the stack upon function return.
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass;
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; This function can also be used to detect the existence of just a
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; command line switch like /OUTPUT Pass the default and "OUTPUT"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; on the stack like normal. An empty return string "" will indicate
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; that the switch was found, the default value indicates that
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; neither a parameter or switch was found.
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass;
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; Inputs - Top of stack is default if parameter isn't found,
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; second in stack is parameter to search for, ex. "OUTPUT"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; Outputs - Top of the stack contains the value of this parameter
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; So if the command line contained /OUTPUT=somedirectory, "somedirectory"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; will be on the top of the stack when this function returns
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass;
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; Register usage
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass;$R0 - default return value if the parameter isn't found
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass;$R1 - input parameter, for example OUTPUT from the above example
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass;$R2 - the length of the search, this is the search parameter+2
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; as we have '/OUTPUT='
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass;$R3 - the command line string
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass;$R4 - result from StrStr calls
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass;$R5 - search for ' ' or '"'
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav GlassFunction GetParameterValue
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Exch $R0 ; get the top of the stack(default parameter) into R0
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Exch ; exchange the top of the stack(default) with
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; the second in the stack(parameter to search for)
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Exch $R1 ; get the top of the stack(search parameter) into $R1
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ;Preserve on the stack the registers used in this function
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Push $R2
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Push $R3
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Push $R4
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Push $R5
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Strlen $R2 $R1+2 ; store the length of the search string into R2
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Call GetParameters ; get the command line parameters
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Pop $R3 ; store the command line string in R3
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass # search for quoted search string
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCpy $R5 '"' ; later on we want to search for a open quote
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Push $R3 ; push the 'search in' string onto the stack
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Push '"/$R1=' ; push the 'search for'
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Call StrStr ; search for the quoted parameter value
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Pop $R4
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCpy $R4 $R4 "" 1 ; skip over open quote character, "" means no maxlen
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCmp $R4 "" "" next ; if we didn't find an empty string go to next
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass # search for non-quoted search string
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCpy $R5 ' ' ; later on we want to search for a space since we
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; didn't start with an open quote '"' we shouldn't
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; look for a close quote '"'
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Push $R3 ; push the command line back on the stack for searching
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Push '/$R1=' ; search for the non-quoted search string
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Call StrStr
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Pop $R4
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; $R4 now contains the parameter string starting at the search string,
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; if it was found
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glassnext:
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCmp $R4 "" check_for_switch ; if we didn't find anything then look for
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; usage as a command line switch
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass # copy the value after /$R1= by using StrCpy with an offset of $R2,
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass # the length of '/OUTPUT='
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCpy $R0 $R4 "" $R2 ; copy commandline text beyond parameter into $R0
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass # search for the next parameter so we can trim this extra text off
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Push $R0
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Push $R5 ; search for either the first space ' ', or the first
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; quote '"'
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; if we found '"/output' then we want to find the
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; ending ", as in '"/output=somevalue"'
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; if we found '/output' then we want to find the first
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; space after '/output=somevalue'
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Call StrStr ; search for the next parameter
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Pop $R4
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCmp $R4 "" done ; if 'somevalue' is missing, we are done
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrLen $R4 $R4 ; get the length of 'somevalue' so we can copy this
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; text into our output buffer
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCpy $R0 $R0 -$R4 ; using the length of the string beyond the value,
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; copy only the value into $R0
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass goto done ; if we are in the parameter retrieval path skip over
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; the check for a command line switch
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; See if the parameter was specified as a command line switch, like '/output'
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glasscheck_for_switch:
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Push $R3 ; push the command line back on the stack for searching
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Push '/$R1' ; search for the non-quoted search string
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Call StrStr
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Pop $R4
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCmp $R4 "" done ; if we didn't find anything then use the default
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCpy $R0 "" ; otherwise copy in an empty string since we found the
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; parameter, just didn't find a value
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glassdone:
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Pop $R5
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Pop $R4
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Pop $R3
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Pop $R2
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Pop $R1
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Exch $R0 ; put the value in $R0 at the top of the stack
4eeb28ea335313c708fe2730312f94978b07dd04Dav GlassFunctionEnd
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!macro Language polng lng
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass SectionIn 1 2 3
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass SetOutPath $INSTDIR
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass !insertmacro UNINSTALL.LOG_OPEN_INSTALL
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass File /nonfatal /a "..\..\inkscape\*.${lng}.txt"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass !insertmacro UNINSTALL.LOG_CLOSE_INSTALL
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass SetOutPath $INSTDIR\locale
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass !insertmacro UNINSTALL.LOG_OPEN_INSTALL
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass File /nonfatal /a /r "..\..\inkscape\locale\${polng}"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass !insertmacro UNINSTALL.LOG_CLOSE_INSTALL
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass SetOutPath $INSTDIR\lib\locale
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass !insertmacro UNINSTALL.LOG_OPEN_INSTALL
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass File /nonfatal /a /r "..\..\inkscape\lib\locale\${polng}"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass !insertmacro UNINSTALL.LOG_CLOSE_INSTALL
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass SetOutPath $INSTDIR\share\clipart
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass !insertmacro UNINSTALL.LOG_OPEN_INSTALL
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass File /nonfatal /a /r "..\..\inkscape\share\clipart\*.${polng}.svg"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass !insertmacro UNINSTALL.LOG_CLOSE_INSTALL
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; the keyboard tables
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass SetOutPath $INSTDIR\share\screens
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass !insertmacro UNINSTALL.LOG_OPEN_INSTALL
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass File /nonfatal /a /r "..\..\inkscape\share\screens\*.${polng}.svg"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass !insertmacro UNINSTALL.LOG_CLOSE_INSTALL
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass SetOutPath $INSTDIR\share\templates
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass !insertmacro UNINSTALL.LOG_OPEN_INSTALL
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass File /nonfatal /a /r "..\..\inkscape\share\templates\*.${polng}.svg"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass !insertmacro UNINSTALL.LOG_CLOSE_INSTALL
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass SetOutPath $INSTDIR\doc
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass !insertmacro UNINSTALL.LOG_OPEN_INSTALL
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass File /nonfatal /a /r "..\..\inkscape\doc\keys.${polng}.xml"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass File /nonfatal /a /r "..\..\inkscape\doc\keys.${polng}.html"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass !insertmacro UNINSTALL.LOG_CLOSE_INSTALL
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass SectionGetFlags ${SecTutorials} $R1
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass IntOp $R1 $R1 & ${SF_SELECTED}
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass IntCmp $R1 ${SF_SELECTED} 0 skip_tutorials
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass SetOutPath $INSTDIR\share\tutorials
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass !insertmacro UNINSTALL.LOG_OPEN_INSTALL
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass File /nonfatal /a "..\..\inkscape\share\tutorials\*.${polng}.*"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass !insertmacro UNINSTALL.LOG_CLOSE_INSTALL
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass skip_tutorials:
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!macroend
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass;;;;;;;;;;;;;;;;;;;;;;;;;;
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; Delete prefs
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; code taken from the vlc project
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass;;;;;;;;;;;;;;;;;;;;;;;;;;
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!macro delprefs
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCpy $0 0
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass DetailPrint "Delete personal preferences ..."
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass DetailPrint "try to find all users ..."
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass delprefs-Loop:
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; FIXME
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; this will loop through all the logged users and "virtual" windows users
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; (it looks like users are only present in HKEY_USERS when they are logged in)
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ClearErrors
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass EnumRegKey $1 HKU "" $0
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCmp $1 "" delprefs-End
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass IntOp $0 $0 + 1
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ReadRegStr $2 HKU "$1\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" AppData
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCmp $2 "" delprefs-Loop
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass DetailPrint "$2\Inkscape will be removed"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Delete "$2\Inkscape\preferences.xml"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Delete "$2\Inkscape\extension-errors.log"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass RMDir "$2\Inkscape"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Goto delprefs-Loop
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass delprefs-End:
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!macroend
b0169b44d41a48049d06f32a6807f81dbcf1f328Dav Glass
b0169b44d41a48049d06f32a6807f81dbcf1f328Dav Glass
b0169b44d41a48049d06f32a6807f81dbcf1f328Dav Glass;--------------------------------
b0169b44d41a48049d06f32a6807f81dbcf1f328Dav Glass; Installer Sections
b0169b44d41a48049d06f32a6807f81dbcf1f328Dav GlassSection -removeInkscape
b0169b44d41a48049d06f32a6807f81dbcf1f328Dav Glass ; check for an old installation and clean that dlls and stuff
b0169b44d41a48049d06f32a6807f81dbcf1f328Dav Glass
b0169b44d41a48049d06f32a6807f81dbcf1f328Dav GlassFindFirstINSTDIR:
b0169b44d41a48049d06f32a6807f81dbcf1f328Dav Glass FindFirst $0 $1 $INSTDIR\*.*
118b2b253667c51a1cff0367ecde38cb69f7b2ebDav GlassFindINSTDIR:
118b2b253667c51a1cff0367ecde38cb69f7b2ebDav Glass StrCmp $1 "" FindNextDoneINSTDIR
118b2b253667c51a1cff0367ecde38cb69f7b2ebDav Glass StrCmp $1 "." FindNextINSTDIR
118b2b253667c51a1cff0367ecde38cb69f7b2ebDav Glass StrCmp $1 ".." FindNextINSTDIR
118b2b253667c51a1cff0367ecde38cb69f7b2ebDav Glass Goto FoundSomethingINSTDIR
118b2b253667c51a1cff0367ecde38cb69f7b2ebDav GlassFindNextINSTDIR:
118b2b253667c51a1cff0367ecde38cb69f7b2ebDav Glass FindNext $0 $1
118b2b253667c51a1cff0367ecde38cb69f7b2ebDav Glass Goto FindINSTDIR
118b2b253667c51a1cff0367ecde38cb69f7b2ebDav GlassFoundSomethingINSTDIR:
118b2b253667c51a1cff0367ecde38cb69f7b2ebDav Glass MessageBox MB_RETRYCANCEL|MB_ICONEXCLAMATION "$(lng_ClearDirectoryBefore)" /SD IDCANCEL IDRETRY FindFirstINSTDIR
118b2b253667c51a1cff0367ecde38cb69f7b2ebDav Glass Quit
4eeb28ea335313c708fe2730312f94978b07dd04Dav GlassFindNextDoneINSTDIR:
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ;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
DetailPrint "Installing Inkscape Core Files ..."
SectionIn 1 2 3 RO
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\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"
!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
DetailPrint "Installing GTK Files ..."
SectionIn 1 2 3 RO
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 $(lng_Alluser) SecAlluser
; 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:
SectionEnd
SectionGroup $(lng_Shortcuts) SecShortcuts
Section /o $(lng_Desktop) SecDesktop
ClearErrors
CreateShortCut "$DESKTOP\Inkscape.lnk" "$INSTDIR\inkscape.exe"
IfErrors 0 +2
DetailPrint "Uups! Problems creating desktop shortcuts"
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"
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" ""
StrCmp $0 "" 0 +3
WriteRegStr HKCR ".svg" "" "svgfile"
WriteRegStr HKCR "svgfile" "" "Scalable Vector Graphics file"
ReadRegStr $0 HKCR ".svgz" ""
StrCmp $0 "" 0 +3
WriteRegStr HKCR ".svgz" "" "svgfile"
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"
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" ""
StrCmp $0 "" 0 +3
WriteRegStr HKCR ".svg" "" "svgfile"
WriteRegStr HKCR "svgfile" "" "Scalable Vector Graphics file"
ReadRegStr $0 HKCR ".svgz" ""
StrCmp $0 "" 0 +3
WriteRegStr HKCR ".svgz" "" "svgfile"
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"
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 /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_ca@valencia) SecCatalanValencia
!insertmacro Language ca@valencia ca@valencia
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
SectionGroupEnd
Section -FinalizeInstallation
DetailPrint "finalize installation"
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"
; start menu entries
ClearErrors
CreateShortCut "$SMPROGRAMS\Inkscape.lnk" "$INSTDIR\inkscape.exe"
IfErrors 0 +2
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"
IfErrors 0 +2
DetailPrint "fatal: failed to write to registry un-installation info"
;create/update log always within .onInstSuccess function
!insertmacro UNINSTALL.LOG_UPDATE_INSTALL
DetailPrint "create MD5 sums"
ClearErrors
FileOpen $0 $INSTDIR\uninstall.dat r
FileOpen $9 $INSTDIR\uninstall.log w
IfErrors doneinstall
readnextlineinstall:
ClearErrors
FileRead $0 $1
IfErrors doneinstall
StrCpy $1 $1 -2
;DetailPrint $1
md5dll::GetMD5File /NOUNLOAD $1
Pop $2
;DetailPrint $2
StrCmp $2 "" +2
FileWrite $9 "$2 $1$\r$\n"
Goto readnextlineinstall
doneinstall:
FileClose $0
FileClose $9
; this file is not needed anymore
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
Push ${key}
Push ""
Call GetParameterValue
Pop $1
StrCmp $1 "OFF" 0 +5
SectionGetFlags ${Section} $0
IntOp $2 ${SF_SELECTED} ~
IntOp $0 $0 & $2
SectionSetFlags ${Section} $0
StrCmp $1 "ON" 0 +4
SectionGetFlags ${Section} $0
IntOp $0 $0 | ${SF_SELECTED}
SectionSetFlags ${Section} $0
!macroend
Function .onInit
;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
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} ""
; hide if quick launch if not available
StrCmp $QUICKLAUNCH $TEMP 0 +2
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:
;check for previous installation
ReadRegStr $0 HKLM "${PRODUCT_DIR_REGKEY}" "User"
StrCmp $0 "" +1 +2
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:
; 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 IDNO uninstall_before_done
;Run the uninstaller
;uninst:
DetailPrint "execute $R0 in $INSTDIR"
ClearErrors
ExecWait '$R0 _?=$INSTDIR' ;Do not copy the uninstaller to a temp file
uninstall_before_done:
; 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 "az" ${SecAzerbaijani}
!insertmacro Parameter "be" ${SecByelorussian}
!insertmacro Parameter "bg" ${SecBulgarian}
!insertmacro Parameter "bn" ${SecBengali}
!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@Latn" ${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}
Push "?"
Push "TEST"
Call GetParameterValue
Pop $1
StrCmp $1 "TEST" +3
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
FunctionEnd
Function .onSelChange
FunctionEnd
Function .onInstSuccess
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
IfFileExists $INSTDIR\uninstall.log uninstalllogpresent
MessageBox MB_OK|MB_ICONEXCLAMATION "$(lng_UninstallLogNotFound)" /SD IDOK
Quit
uninstalllogpresent:
ClearErrors
StrCpy $User ""
UserInfo::GetName
IfErrors +3
Pop $0
StrCpy $User $0
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
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"
;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"
FunctionEnd
# removes a file and if the directory is empty afterwards the directory also
# push md5, push filename, call unremovefilename
Function un.RemoveFile
Var /Global filename
Var /Global md5sum
Var /Global ismd5sum
Var /Global removenever ; never remove a touched file
Var /Global removealways ; always remove files touched by user
Pop $filename
Pop $md5sum
IfFileExists $filename +2 0
Return
StrCmp $removealways "always" unremovefile 0
md5dll::GetMD5File /NOUNLOAD $filename
Pop $ismd5sum ;md5 of file
StrCmp $md5sum $ismd5sum unremovefile 0
;DetailPrint "uups MD5 does not match"
StrCmp $removenever "never" 0 +2
Return
; 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)"
;DetailPrint "messagebox finished"
Pop $md5sum
;DetailPrint "messagebox call returned... $md5sum"
StrCmp $md5sum "1" unremovefile 0 ; Yes
StrCmp $md5sum "2" 0 unremoveno ; Yes always
StrCpy $removealways "always"
;DetailPrint "removealways"
Goto unremovefile
unremoveno:
StrCmp $md5sum "3" 0 unremovenever ; No
;DetailPrint "No remove"
Return
unremovenever:
StrCpy $removenever "never"
;DetailPrint "removenever"
Return
unremovefile:
;DetailPrint "removefile"
ClearErrors
Delete $filename
;now recursivly remove the path
unrmdir:
${un.GetParent} $filename $filename
IfErrors 0 +2
Return
RMDir $filename
IfErrors +2
Goto unrmdir
FunctionEnd
Section Uninstall
; 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"
;RMDir /r "$APPDATA\Inkscape"
!insertmacro delprefs
endPurge:
; 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"
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"
;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"
StrCpy $removenever ""
StrCpy $removealways ""
InitPluginsDir
SetPluginUnload manual
ClearErrors
FileOpen $0 $INSTDIR\uninstall.log r
IfErrors uninstallnotfound
readnextline:
ClearErrors
FileRead $0 $1
IfErrors done
; cat the line into md5 and filename
StrLen $2 $1
IntCmp $2 35 readnextline readnextline
StrCpy $3 $1 32
StrCpy $4 $1 $2-36 34 #remove trailing CR/LF
StrCpy $4 $4 -2
Push $3
Push $4
Call un.RemoveFile
Goto readnextline
uninstallnotfound:
MessageBox MB_OK|MB_ICONEXCLAMATION "$(lng_UninstallLogNotFound)" /SD IDOK
done:
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