; 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_BITMAP
"nsis\header.bmp" !define MUI_CUSTOMFUNCTION_GUIINIT
gf_checkPidginVersion
!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
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} 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}" ; 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.. 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" IfErrors doneFindingTranslations
processCurrentTranslationDir
Delete "$INSTDIR\${GUIFICATIONS_UNINST_EXE}" Delete "$SMPROGRAMS\Pidgin\${GUIFICATIONS_UNINSTALL_LNK}" ; try to delete the Pidgin directories, in case it has already uninstalled 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
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
; This is necessary because the uninstaller doesn't have access to installer functions ; (it is identical to CheckUserInstallRights) Function un.CheckUserInstallRights