X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;ds=sidebyside;f=packaging%2Fwin32%2Finkscape.nsi;h=6a9b7d736e204d5b4c2d2fcb93a3b716a8a7e016;hb=4a9f35d31fc1cc72bb3e7e40f5b9f63b4c4ad52b;hp=3bc6ea9e922f8eb272fae23ced3ce894891eff8f;hpb=28dc7bd16acbeb415dc46cbe70c20ccc76227425;p=inkscape.git diff --git a/packaging/win32/inkscape.nsi b/packaging/win32/inkscape.nsi index 3bc6ea9e9..6a9b7d736 100644 --- a/packaging/win32/inkscape.nsi +++ b/packaging/win32/inkscape.nsi @@ -7,11 +7,12 @@ ; DEFINES ; ####################################### !define PRODUCT_NAME "Inkscape" -!define PRODUCT_VERSION "0.43+devel" +!define PRODUCT_VERSION "0.45+devel" !define PRODUCT_PUBLISHER "Inkscape Organization" !define PRODUCT_WEB_SITE "http://www.inkscape.org" !define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\inkscape.exe" !define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" +;!define UNINST_EXE "uninstall.exe" @@ -29,6 +30,29 @@ SetCompressor /SOLID lzma !define MUI_HEADERIMAGE_BITMAP "header.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 + +;Specify the preferred uninstaller operation mode, either unattended or interactive. +;You have to type either !insertmacro UNATTENDED_UNINSTALL, or !insertmacro INTERACTIVE_UNINSTALL. +;Be aware only one of the following two macros has to be inserted, neither both, neither none. + +;!insertmacro UNATTENDED_UNINSTALL +!insertmacro INTERACTIVE_UNINSTALL + +!addplugindir . +!include "FileFunc.nsh" +!insertmacro un.GetParent + ; Welcome page !insertmacro MUI_PAGE_WELCOME @@ -69,14 +93,24 @@ ShowUninstDetails hide ; Language files !include "english.nsh" -;!include "catalan.nsh" +!include "breton.nsh" +!include "catalan.nsh" !include "czech.nsh" -;!include "french.nsh" +!include "finnish.nsh" +!include "french.nsh" +!include "galician.nsh" !include "german.nsh" !include "italian.nsh" -;!include "polish.nsh" +!include "japanese.nsh" +!include "polish.nsh" +!include "russian.nsh" +!include "slovak.nsh" +!include "slovenian.nsh" +!include "spanish.nsh" ReserveFile "inkscape.nsi.uninstall" +ReserveFile "${NSISDIR}\Plugins\UserInfo.dll" +!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS ;InstallOptions ; ####################################### @@ -395,80 +429,107 @@ FunctionEnd !macro Language polng lng SectionIn 1 2 3 SetOutPath $INSTDIR + !insertmacro UNINSTALL.LOG_OPEN_INSTALL File /nonfatal /a "..\..\inkscape\*.${lng}.txt" + !insertmacro UNINSTALL.LOG_CLOSE_INSTALL SetOutPath $INSTDIR\locale + !insertmacro UNINSTALL.LOG_OPEN_INSTALL File /nonfatal /a /r "..\..\inkscape\locale\${polng}" + !insertmacro UNINSTALL.LOG_CLOSE_INSTALL SetOutPath $INSTDIR\lib\locale + !insertmacro UNINSTALL.LOG_OPEN_INSTALL File /nonfatal /a /r "..\..\inkscape\lib\locale\${polng}" + !insertmacro UNINSTALL.LOG_CLOSE_INSTALL + SetOutPath $INSTDIR\share\clipart + !insertmacro UNINSTALL.LOG_OPEN_INSTALL + File /nonfatal /a /r "..\..\inkscape\share\clipart\*.${polng}.svg" + !insertmacro UNINSTALL.LOG_CLOSE_INSTALL ; the keyboard tables SetOutPath $INSTDIR\share\screens - File /nonfatal /a /r "..\..\inkscape\share\screens\keys.${polng}.svg" + !insertmacro UNINSTALL.LOG_OPEN_INSTALL + File /nonfatal /a /r "..\..\inkscape\share\screens\*.${polng}.svg" + !insertmacro UNINSTALL.LOG_CLOSE_INSTALL SetOutPath $INSTDIR\share\templates - File /nonfatal /a /r "..\..\inkscape\share\templates\default.${polng}.svg" + !insertmacro UNINSTALL.LOG_OPEN_INSTALL + File /nonfatal /a /r "..\..\inkscape\share\templates\*.${polng}.svg" + !insertmacro UNINSTALL.LOG_CLOSE_INSTALL SetOutPath $INSTDIR\doc + !insertmacro UNINSTALL.LOG_OPEN_INSTALL File /nonfatal /a /r "..\..\inkscape\doc\keys.${polng}.xml" File /nonfatal /a /r "..\..\inkscape\doc\keys.${polng}.html" + !insertmacro UNINSTALL.LOG_CLOSE_INSTALL SectionGetFlags ${SecTutorials} $R1 IntOp $R1 $R1 & ${SF_SELECTED} IntCmp $R1 ${SF_SELECTED} 0 skip_tutorials SetOutPath $INSTDIR\share\tutorials + !insertmacro UNINSTALL.LOG_OPEN_INSTALL File /nonfatal /a "..\..\inkscape\share\tutorials\*.${polng}.*" + !insertmacro UNINSTALL.LOG_CLOSE_INSTALL skip_tutorials: !macroend ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - +;;;;;;;;;;;;;;;;;;;;;;;;;; +; Delete prefs +; code taken from the vlc project +;;;;;;;;;;;;;;;;;;;;;;;;;; +!macro delprefs + StrCpy $0 0 + DetailPrint "Delete personal preferences ..." + DetailPrint "try to find all users ..." + delprefs-Loop: + ; FIXME + ; this will loop through all the logged users and "virtual" windows users + ; (it looks like users are only present in HKEY_USERS when they are logged in) + ClearErrors + EnumRegKey $1 HKU "" $0 + StrCmp $1 "" delprefs-End + IntOp $0 $0 + 1 + ReadRegStr $2 HKU "$1\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" AppData + StrCmp $2 "" delprefs-Loop + DetailPrint "$2\Inkscape will be removed" + Delete "$2\Inkscape\preferences.xml" + Delete "$2\Inkscape\extension-errors.log" + RMDir "$2\Inkscape" + Goto delprefs-Loop + delprefs-End: +!macroend ;-------------------------------- ; Installer Sections - Section -removeInkscape ; check for an old installation and clean that dlls and stuff - ClearErrors - IfFileExists $INSTDIR\etc 0 doDeleteLib - DetailPrint "$INSTDIR\etc exists, will be removed" - RmDir /r $INSTDIR\etc - IfErrors 0 +4 - DetailPrint "fatal: failed to delete $INSTDIR\etc" - DetailPrint "aborting installation" - Abort - doDeleteLib: - - ClearErrors - IfFileExists $INSTDIR\lib 0 doDeleteLocale - DetailPrint "$INSTDIR\lib exists, will be removed" - RmDir /r $INSTDIR\lib - IfErrors 0 +4 - DetailPrint "fatal: failed to delete $INSTDIR\lib" - DetailPrint "aborting installation" - Abort - doDeleteLocale: - - ClearErrors - IfFileExists $INSTDIR\locale 0 doDeleteDll - DetailPrint "$INSTDIR\locale exists, will be removed" - RmDir /r $INSTDIR\locale - IfErrors 0 +4 - DetailPrint "fatal: failed to delete $INSTDIR\locale" - DetailPrint "aborting installation" - Abort - doDeleteDll: - ClearErrors - FindFirst $0 $1 $INSTDIR\*.dll - FindNextLoop: - StrCmp $1 "" FindNextDone - DetailPrint "$INSTDIR\$1 exists, will be removed" - Delete $INSTDIR\$1 - IfErrors 0 +4 - DetailPrint "fatal: failed to delete $INSTDIR\$1" - DetailPrint "aborting installation" - Abort +FindFirstINSTDIR: + FindFirst $0 $1 $INSTDIR\*.* +FindINSTDIR: + StrCmp $1 "" FindNextDoneINSTDIR + StrCmp $1 "." FindNextINSTDIR + StrCmp $1 ".." FindNextINSTDIR + Goto FoundSomethingINSTDIR +FindNextINSTDIR: FindNext $0 $1 - Goto FindNextLoop - FindNextDone: + Goto FindINSTDIR +FoundSomethingINSTDIR: + MessageBox MB_RETRYCANCEL|MB_ICONEXCLAMATION "$(lng_ClearDirectoryBefore)" /SD IDCANCEL IDRETRY FindFirstINSTDIR + Quit +FindNextDoneINSTDIR: + + ;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 @@ -477,6 +538,7 @@ Section $(lng_Core) SecCore SectionIn 1 2 3 RO SetOutPath $INSTDIR + !insertmacro UNINSTALL.LOG_OPEN_INSTALL SetOverwrite on SetAutoClose false @@ -485,27 +547,41 @@ Section $(lng_Core) SecCore File /a "..\..\inkscape\COPYING" File /a "..\..\inkscape\COPYING.LIB" File /a "..\..\inkscape\NEWS" - File /a "..\..\inkscape\HACKING.txt" + 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 /a "..\..\inkscape\README.txt" + 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" + ;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 - File /nonfatal /a /r "..\..\inkscape\python\*.*" - - + !insertmacro UNINSTALL.LOG_OPEN_INSTALL + File /nonfatal /a /r "..\..\inkscape\python\*.*" + !insertmacro UNINSTALL.LOG_CLOSE_INSTALL SectionEnd Section $(lng_GTKFiles) SecGTK @@ -514,30 +590,38 @@ Section $(lng_GTKFiles) SecGTK 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 $(lng_Desktop) SecDesktop - SectionIn 1 2 3 +Section /o $(lng_Desktop) SecDesktop ClearErrors CreateShortCut "$DESKTOP\Inkscape.lnk" "$INSTDIR\inkscape.exe" IfErrors 0 +2 DetailPrint "Uups! Problems creating desktop shortcuts" SectionEnd -Section $(lng_Quicklaunch) SecQuicklaunch - SectionIn 1 2 3 +Section /o $(lng_Quicklaunch) SecQuicklaunch ClearErrors StrCmp $QUICKLAUNCH $TEMP +2 CreateShortCut "$QUICKLAUNCH\Inkscape.lnk" "$INSTDIR\inkscape.exe" @@ -600,18 +684,26 @@ 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 @@ -622,6 +714,10 @@ Section $(lng_am) SecAmharic !insertmacro Language am am SectionEnd +Section $(lng_ar) SecArabic + !insertmacro Language ar ar +SectionEnd + Section $(lng_az) SecAzerbaijani !insertmacro Language az az SectionEnd @@ -630,10 +726,26 @@ 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_br) SecBreton + !insertmacro Language br br +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 @@ -646,6 +758,10 @@ 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 @@ -654,6 +770,26 @@ 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 @@ -666,10 +802,18 @@ 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 @@ -679,11 +823,26 @@ Section $(lng_gl) SecGallegan 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 @@ -693,6 +852,10 @@ 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 @@ -701,6 +864,10 @@ 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 @@ -709,6 +876,10 @@ 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 @@ -733,10 +904,18 @@ 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 @@ -745,18 +924,26 @@ 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' +Section $(lng_sr@latin) SecSerbianLatin + !insertmacro Language 'sr@latin' 'sr@latin' 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 @@ -765,6 +952,10 @@ 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 @@ -777,6 +968,7 @@ SectionGroupEnd Section -FinalizeInstallation + DetailPrint "finalize installation" StrCmp $MultiUser "1" "" SingleUser DetailPrint "admin mode, registry root will be HKLM" SetShellVarContext all @@ -801,16 +993,15 @@ Section -FinalizeInstallation ; start menu entries ClearErrors - CreateDirectory "$SMPROGRAMS\Inkscape" - CreateShortCut "$SMPROGRAMS\Inkscape\Inkscape.lnk" "$INSTDIR\inkscape.exe" - CreateShortCut "$SMPROGRAMS\Inkscape\Uninstall Inkscape.lnk" "$INSTDIR\uninst.exe" + 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" '"$INSTDIR\uninst.exe"' + ; 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" @@ -819,6 +1010,33 @@ Section -FinalizeInstallation 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 @@ -831,6 +1049,7 @@ SectionEnd !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) @@ -854,6 +1073,9 @@ SectionEnd !macroend Function .onInit + ;prepare log always within .onInit function + !insertmacro UNINSTALL.LOG_PREPARE_INSTALL + ;Extract InstallOptions INI files StrCpy $AskMultiUser "1" StrCpy $MultiUser "0" @@ -881,15 +1103,17 @@ Function .onInit Pop $1 StrCmp $1 "Admin" info_done - MessageBox MB_OK|MB_ICONEXCLAMATION "$(lng_NO_ADMIN)" - + 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_OK|MB_ICONEXCLAMATION $(lng_NOT_SUPPORTED) - + 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 @@ -897,10 +1121,29 @@ Function .onInit StrCmp $0 "" +1 +2 ReadRegStr $0 HKCU "${PRODUCT_DIR_REGKEY}" "User" ;check user if applicable - StrCmp $0 "" +3 - StrCmp $0 $User +2 - MessageBox MB_OK|MB_ICONEXCLAMATION "$(lng_DIFFERENT_USER)" - + 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} @@ -909,44 +1152,70 @@ Function .onInit !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@Latn" ${SecSerbianLatin} + !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} @@ -966,6 +1235,7 @@ Function .onInit /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 \ @@ -977,23 +1247,33 @@ 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\preferences.xml" + !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" + ;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 @@ -1006,18 +1286,22 @@ Function un.onInit ; Test if this was a multiuser installation ReadRegStr $0 HKLM "${PRODUCT_DIR_REGKEY}" "" - StrCmp $0 "$INSTDIR\inkscape.exe" 0 +5 + 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 +4 + 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 - StrCmp $0 "" +3 - StrCmp $0 $User +2 - MessageBox MB_OK|MB_ICONEXCLAMATION "$(lng_DIFFERENT_USER)" + 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" @@ -1029,14 +1313,68 @@ Function un.onInit 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" - endPurge: + ;RMDir /r "$APPDATA\Inkscape" + !insertmacro delprefs + endPurge: ; Remove file associations for svg editor DetailPrint "removing file associations for svg editor" @@ -1139,6 +1477,8 @@ Section Uninstall 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" @@ -1151,12 +1491,71 @@ Section Uninstall 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" - RMDir /r "$INSTDIR" + + ;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