; NSIS Script For Guifications Plugin ; Author Daniel A. Atallah ; Based on the Gaim installer by Herman Bloggs and the Gaim-Encryption installer by Bill Tompkins ;-------------------------------- ;-------------------------------- Name "Gaim Guifications ${GUIFICATIONS_VERSION}" OutFile "gaim-guifications-${GUIFICATIONS_VERSION}.exe" ;The Default Installation Directory InstallDir "$PROGRAMFILES\gaim" InstallDirRegKey HKLM SOFTWARE
\gaim
"" SetCompressor /SOLID lzma !define GUIFICATIONS_UNINST_EXE
"gaim-guifications-uninst.exe" !define GUIFICATIONS_DLL
"guifications.dll" !define GUIFICATIONS_UNINSTALL_LNK
"Guifications Uninstall.lnk" ;-------------------------------- !define GUIFICATIONS_REG_KEY
"SOFTWARE\gaim-guifications" !define GUIFICATIONS_UNINSTALL_KEY
"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\gaim-guifications" ;------------------------------- ; Gaim Plugin installer helper stuff !addincludedir "../../win32/nsis" !include "gaim-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_checkGaimVersion
;-------------------------------- !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
"Italian" !insertmacro MUI_LANGUAGE
"Spanish" !include "nsis\translations\english.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\gaim\guifications" 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\gaim\guifications\conf" SetOutPath "$INSTDIR\pixmaps\gaim\guifications\themes\default" File "themes\default\theme.xml" File "themes\default\background.png" SetOutPath "$INSTDIR\pixmaps\gaim\guifications\themes\mini" File "themes\mini\theme.xml" File "themes\mini\background.png" SetOutPath "$INSTDIR\pixmaps\gaim\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 SetOutPath "$INSTDIR\locale\de\LC_MESSAGES" File /oname=guifications.mo
po
\de.gmo
SetOutPath "$INSTDIR\locale\en_AU\LC_MESSAGES" File /oname=guifications.mo
po
\en_AU.gmo
SetOutPath "$INSTDIR\locale\en_GB\LC_MESSAGES" File /oname=guifications.mo
po
\en_GB.gmo
SetOutPath "$INSTDIR\locale\es\LC_MESSAGES" File /oname=guifications.mo
po
\es.gmo
SetOutPath "$INSTDIR\locale\fr\LC_MESSAGES" File /oname=guifications.mo
po
\fr.gmo
SetOutPath "$INSTDIR\locale\he\LC_MESSAGES" File /oname=guifications.mo
po
\he.gmo
SetOutPath "$INSTDIR\locale\it\LC_MESSAGES" File /oname=guifications.mo
po
\it.gmo
SetOutPath "$INSTDIR\locale\ja\LC_MESSAGES" File /oname=guifications.mo
po
\ja.gmo
SetOutPath "$INSTDIR\locale\nl\LC_MESSAGES" File /oname=guifications.mo
po
\nl.gmo
SetOutPath "$INSTDIR\locale\no\LC_MESSAGES" File /oname=guifications.mo
po
\no.gmo
SetOutPath "$INSTDIR\locale\pt\LC_MESSAGES" File /oname=guifications.mo
po
\pt.gmo
SetOutPath "$INSTDIR\locale\sk\LC_MESSAGES" file /oname=guifications.mo
po
\sk.gmo
SetOutPath "$INSTDIR\locale\sv\LC_MESSAGES" File /oname=guifications.mo
po
\sv.gmo
SetOutPath "$INSTDIR\locale\zh_CN\LC_MESSAGES" File /oname=guifications.mo
po
\zh_CN.gmo
SetOutPath "$INSTDIR\locale\zh_TW\LC_MESSAGES" File /oname=guifications.mo
po
\zh_TW.gmo
CreateShortCut "$SMPROGRAMS\Gaim\${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\gaim\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\Gaim\${GUIFICATIONS_UNINSTALL_LNK}" ; try to delete the Gaim directories, in case it has already uninstalled MessageBox MB_OK $(un.GUIFICATIONS_UNINSTALL_ERROR_1
) IDOK MessageBox MB_OK $(un.GUIFICATIONS_UNINSTALL_ERROR_2
) IDOK ; Check that the selected installation dir contains gaim.exe Function .onVerifyInstDir
IfFileExists $INSTDIR\gaim.exe
+2
; Check that the currently installed gaim version is compatible with the version of guifications we are installing Function gf_checkGaimVersion
StrCmp $R0 ${GAIM_VERSION_OK} gf_checkGaimVersion_OK
StrCmp $R0 ${GAIM_VERSION_INCOMPATIBLE} +1
+6
MessageBox MB_OK|MB_ICONSTOP "$(BAD_GAIM_VERSION_1) $R0 $(BAD_GAIM_VERSION_2)" MessageBox MB_OK|MB_ICONSTOP "$(NO_GAIM_VERSION)" Function CheckUserInstallRights
; This is necessary because the uninstaller doesn't have access to installer functions ; (it is identical to CheckUserInstallRights) Function un.CheckUserInstallRights