--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/purple-plugin-pack-installer.nsi Wed Sep 29 22:57:55 2010 -0400
@@ -0,0 +1,446 @@
+; NSIS Script For Guifications Plugin +; Author Daniel A. Atallah +; Based on the Pidgin installer by Herman Bloggs and the Pidgin-Encryption installer by Bill Tompkins +;-------------------------------- +!insertmacro GetParameters +;-------------------------------- + Name "Pidgin Guifications ${GUIFICATIONS_VERSION}" + OutFile "pidgin-guifications-${GUIFICATIONS_VERSION}.exe" + ;The Default Installation Directory + InstallDir "$PROGRAMFILES\pidgin" + InstallDirRegKey HKLM SOFTWARE\pidgin "" + SetCompressor /SOLID lzma +;Reserve files used in .onInit for faster start-up +!insertmacro MUI_RESERVEFILE_LANGDLL + !define GUIFICATIONS_UNINST_EXE "pidgin-guifications-uninst.exe" + !define GUIFICATIONS_DLL "guifications.dll" + !define GUIFICATIONS_UNINSTALL_LNK "Guifications Uninstall.lnk" +;-------------------------------- + !define GUIFICATIONS_REG_KEY "SOFTWARE\pidgin-guifications" + !define GUIFICATIONS_UNINSTALL_KEY "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\pidgin-guifications" +;------------------------------- +; Pidgin Plugin installer helper stuff + !addincludedir "${PIDGIN_TREE_TOP}\pidgin\win32\nsis" + !include "pidgin-plugin.nsh" +;-------------------------------- +; Modern UI Configuration + !define MUI_ICON .\nsis\install.ico + !define MUI_UNICON .\nsis\install.ico + !define MUI_HEADERIMAGE + !define MUI_HEADERIMAGE_BITMAP "nsis\header.bmp" + !define MUI_CUSTOMFUNCTION_GUIINIT gf_checkPidginVersion + !define MUI_ABORTWARNING + !define MUI_LANGDLL_REGISTRY_ROOT "HKCU" + !define MUI_LANGDLL_REGISTRY_KEY ${GUIFICATIONS_REG_KEY} + !define MUI_LANGDLL_REGISTRY_VALUENAME "Installer Language" +;-------------------------------- + !define MUI_WELCOMEPAGE_TITLE $(WELCOME_TITLE) + !define MUI_WELCOMEPAGE_TEXT $(WELCOME_TEXT) + !insertmacro MUI_PAGE_WELCOME + !define MUI_LICENSEPAGE_RADIOBUTTONS + !insertmacro MUI_PAGE_LICENSE ".\COPYING" + !define MUI_DIRECTORYPAGE_TEXT_TOP $(DIR_SUBTITLE) + !define MUI_DIRECTORYPAGE_TEXT_DESTINATION $(DIR_INNERTEXT) + !insertmacro MUI_PAGE_DIRECTORY + !insertmacro MUI_PAGE_INSTFILES + !define MUI_FINISHPAGE_TITLE $(FINISH_TITLE) + !define MUI_FINISHPAGE_TEXT $(FINISH_TEXT) + !insertmacro MUI_PAGE_FINISH +;-------------------------------- + !insertmacro MUI_LANGUAGE "English" + !insertmacro MUI_LANGUAGE "French" + !insertmacro MUI_LANGUAGE "Italian" + !insertmacro MUI_LANGUAGE "Spanish" + !include "nsis\translations\english.nsh" + !include "nsis\translations\french.nsh" + !include "nsis\translations\italian.nsh" + !include "nsis\translations\spanish.nsh" +; Uninstall the previous version if it exists +Section -SecUninstallOldPlugin + ; Check install rights.. + Call CheckUserInstallRights + StrCmp $R0 "HKLM" rights_hklm + StrCmp $R0 "HKCU" rights_hkcu done + ReadRegStr $R1 HKCU "${GUIFICATIONS_REG_KEY}" "" + ReadRegStr $R2 HKCU "${GUIFICATIONS_REG_KEY}" "Version" + ReadRegStr $R3 HKCU "${GUIFICATIONS_UNINSTALL_KEY}" "UninstallString" + ReadRegStr $R1 HKLM "${GUIFICATIONS_REG_KEY}" "" + ReadRegStr $R2 HKLM "${GUIFICATIONS_REG_KEY}" "Version" + ReadRegStr $R3 HKLM "${GUIFICATIONS_UNINSTALL_KEY}" "UninstallString" + ; If previous version exists .. remove + StrCmp $R2 "" uninstall_problem + IfFileExists $R3 0 uninstall_problem + ; Have uninstall string.. go ahead and uninstall. + ; Need to copy uninstaller outside of the install dir + CopyFiles /SILENT $R3 "$TEMP\${GUIFICATIONS_UNINST_EXE}" + IfErrors uninstall_problem + ExecWait '"$TEMP\${GUIFICATIONS_UNINST_EXE}" /S _?=$R1' + Delete "$TEMP\${GUIFICATIONS_UNINST_EXE}" + Delete "$TEMP\${GUIFICATIONS_UNINST_EXE}" + ; Just delete the plugin and uninstaller, and remove Registry key + MessageBox MB_YESNO $(GUIFICATIONS_PROMPT_WIPEOUT) IDYES do_wipeout IDNO cancel_install + StrCmp $R0 "HKLM" del_lm_reg del_cu_reg + DeleteRegKey HKCU ${GUIFICATIONS_REG_KEY} + Goto uninstall_prob_cont + DeleteRegKey HKLM ${GUIFICATIONS_REG_KEY} + Delete "$R1\plugins\${GUIFICATIONS_DLL}" + RMDir /r "$R1\pixmaps\pidgin\guifications" + SetOutPath "$INSTDIR\locale\${LANG}\LC_MESSAGES" + File /oname=guifications.mo po\${LANG}.gmo + Call CheckUserInstallRights + StrCmp $R0 "NONE" instrights_none + StrCmp $R0 "HKLM" instrights_hklm instrights_hkcu + ; Write the version registry keys: + WriteRegStr HKLM ${GUIFICATIONS_REG_KEY} "" "$INSTDIR" + WriteRegStr HKLM ${GUIFICATIONS_REG_KEY} "Version" "${GUIFICATIONS_VERSION}" + ; Write the uninstall keys for Windows + WriteRegStr HKLM ${GUIFICATIONS_UNINSTALL_KEY} "DisplayName" "$(GUIFICATIONS_UNINSTALL_DESC)" + WriteRegStr HKLM ${GUIFICATIONS_UNINSTALL_KEY} "UninstallString" "$INSTDIR\${GUIFICATIONS_UNINST_EXE}" + SetShellVarContext "all" + ; Write the version registry keys: + WriteRegStr HKCU ${GUIFICATIONS_REG_KEY} "" "$INSTDIR" + WriteRegStr HKCU ${GUIFICATIONS_REG_KEY} "Version" "${GUIFICATIONS_VERSION}" + ; Write the uninstall keys for Windows + WriteRegStr HKCU ${GUIFICATIONS_UNINSTALL_KEY} "DisplayName" "$(GUIFICATIONS_UNINSTALL_DESC)" + WriteRegStr HKCU ${GUIFICATIONS_UNINSTALL_KEY} "UninstallString" "$INSTDIR\${GUIFICATIONS_UNINST_EXE}" + ; No registry keys for us... + SetOutPath "$INSTDIR\plugins" + File "src\${GUIFICATIONS_DLL}" + SetOutPath "$INSTDIR\pixmaps\pidgin\guifications\conf" + SetOutPath "$INSTDIR\pixmaps\pidgin\guifications\themes\default" + File "themes\default\theme.xml" + File "themes\default\background.png" + SetOutPath "$INSTDIR\pixmaps\pidgin\guifications\themes\mini" + File "themes\mini\theme.xml" + File "themes\mini\background.png" + SetOutPath "$INSTDIR\pixmaps\pidgin\guifications\themes\Penguins" + File "themes\Penguins\theme.xml" + File "themes\Penguins\penguin.png" + ; translations - if there is a way to automate this, i can't find it + !insertmacro INSTALL_GMO "bn" + !insertmacro INSTALL_GMO "cs" + !insertmacro INSTALL_GMO "de" + !insertmacro INSTALL_GMO "en_AU" + !insertmacro INSTALL_GMO "en_GB" + !insertmacro INSTALL_GMO "es" + !insertmacro INSTALL_GMO "fr" + !insertmacro INSTALL_GMO "gl" + !insertmacro INSTALL_GMO "he" + !insertmacro INSTALL_GMO "hu" + !insertmacro INSTALL_GMO "it" + !insertmacro INSTALL_GMO "ja" + !insertmacro INSTALL_GMO "mk" + !insertmacro INSTALL_GMO "nl" + !insertmacro INSTALL_GMO "no" + !insertmacro INSTALL_GMO "pt" + !insertmacro INSTALL_GMO "pt_BR" + !insertmacro INSTALL_GMO "ru" + !insertmacro INSTALL_GMO "sk" + !insertmacro INSTALL_GMO "sr" + !insertmacro INSTALL_GMO "sr@Latn" + !insertmacro INSTALL_GMO "sv" + !insertmacro INSTALL_GMO "uk" + !insertmacro INSTALL_GMO "zh_CN" + !insertmacro INSTALL_GMO "zh_TW" + CreateShortCut "$SMPROGRAMS\Pidgin\${GUIFICATIONS_UNINSTALL_LNK}" "$INSTDIR\${GUIFICATIONS_UNINST_EXE}" + WriteUninstaller "$INSTDIR\${GUIFICATIONS_UNINST_EXE}" + Call un.CheckUserInstallRights + StrCmp $R0 "NONE" no_rights + StrCmp $R0 "HKCU" try_hkcu try_hklm + ReadRegStr $R0 HKCU "${GUIFICATIONS_REG_KEY}" "" + StrCmp $R0 $INSTDIR 0 cant_uninstall + ; HKCU install path matches our INSTDIR.. so uninstall + DeleteRegKey HKCU "${GUIFICATIONS_REG_KEY}" + DeleteRegKey HKCU "${GUIFICATIONS_UNINSTALL_KEY}" + ReadRegStr $R0 HKLM "${GUIFICATIONS_REG_KEY}" "" + StrCmp $R0 $INSTDIR 0 try_hkcu + ; HKLM install path matches our INSTDIR.. so uninstall + DeleteRegKey HKLM "${GUIFICATIONS_REG_KEY}" + DeleteRegKey HKLM "${GUIFICATIONS_UNINSTALL_KEY}" + ; Sets start menu and desktop scope to all users.. + SetShellVarContext "all" + Delete "$INSTDIR\plugins\${GUIFICATIONS_DLL}" + RMDir /r "$INSTDIR\pixmaps\pidgin\guifications" + ; loop through locale dirs and try to delete any guifications translations + FindFirst $R1 $R2 "$INSTDIR\locale\*" + IfErrors doneFindingTranslations + processCurrentTranslationDir: + StrCmp $R2 "." readNextTranslationDir + StrCmp $R2 ".." readNextTranslationDir + IfFileExists "$INSTDIR\locale\$R2\LC_MESSAGES\guifications.mo" +1 readNextTranslationDir + Delete "$INSTDIR\locale\$R2\LC_MESSAGES\guifications.mo" + RMDir "$INSTDIR\locale\$R2\LC_MESSAGES" + RMDir "$INSTDIR\locale\$R2" + readNextTranslationDir: + IfErrors doneFindingTranslations processCurrentTranslationDir + doneFindingTranslations: + RMDir "$INSTDIR\locale" + Delete "$INSTDIR\${GUIFICATIONS_UNINST_EXE}" + Delete "$SMPROGRAMS\Pidgin\${GUIFICATIONS_UNINSTALL_LNK}" + ; try to delete the Pidgin directories, in case it has already uninstalled + RMDir "$INSTDIR\plugins" + RMDir "$SMPROGRAMS\Pidgin" + MessageBox MB_OK $(un.GUIFICATIONS_UNINSTALL_ERROR_1) IDOK + MessageBox MB_OK $(un.GUIFICATIONS_UNINSTALL_ERROR_2) IDOK + ${GetOptions} $R0 "/L=" $R0 + ; Display Language selection dialog + !insertmacro MUI_LANGDLL_DISPLAY + ; Get stored language preference + !insertmacro MUI_UNGETLANGUAGE +; Check that the selected installation dir contains pidgin.exe +Function .onVerifyInstDir + IfFileExists $INSTDIR\pidgin.exe +2 +; Check that the currently installed pidgin version is compatible with the version of guifications we are installing +Function gf_checkPidginVersion + Call CheckPidginVersion + StrCmp $R0 ${PIDGIN_VERSION_OK} gf_checkPidginVersion_OK + StrCmp $R0 ${PIDGIN_VERSION_INCOMPATIBLE} +1 +6 + MessageBox MB_OK|MB_ICONSTOP "$(BAD_PIDGIN_VERSION_1) $R0 $(BAD_PIDGIN_VERSION_2)" + MessageBox MB_OK|MB_ICONSTOP "$(NO_PIDGIN_VERSION)" + gf_checkPidginVersion_OK: +Function CheckUserInstallRights + UserInfo::GetAccountType +; This is necessary because the uninstaller doesn't have access to installer functions +; (it is identical to CheckUserInstallRights) +Function un.CheckUserInstallRights + UserInfo::GetAccountType