grim/guifications2
Clone
Summary
Browse
Changes
Graph
Adding a .mtn-ignore
org.guifications.gf2
2007-05-05, Gary Kramlich
a4ac9ef1893d
Adding a .mtn-ignore
; 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
; Uses NSIS v2.0
;--------------------------------
;Include Modern UI
!include
"MUI.nsh"
;--------------------------------
;General
Name
"Pidgin Guifications ${GUIFICATIONS_VERSION}"
;Do A CRC Check
CRCCheck
On
;Output File Name
OutFile
"pidgin-guifications-${GUIFICATIONS_VERSION}.exe"
;The Default Installation Directory
InstallDir
"
$PROGRAMFILES
\pidgin"
InstallDirRegKey
HKLM
SOFTWARE
\
pidgin
""
ShowInstDetails
show
ShowUnInstDetails
show
SetCompressor
/SOLID
lzma
!define
GUIFICATIONS_UNINST_EXE
"pidgin-guifications-uninst.exe"
!define
GUIFICATIONS_DLL
"guifications.dll"
!define
GUIFICATIONS_UNINSTALL_LNK
"Guifications Uninstall.lnk"
;--------------------------------
; Registry keys:
!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
;--------------------------------
; Pages
;Welcome Page
!define
MUI_WELCOMEPAGE_TITLE
$(
WELCOME_TITLE
)
!define
MUI_WELCOMEPAGE_TEXT
$(
WELCOME_TEXT
)
!insertmacro
MUI_PAGE_WELCOME
;License Page
!define
MUI_LICENSEPAGE_RADIOBUTTONS
!insertmacro
MUI_PAGE_LICENSE
".\COPYING"
;Directory Page
!define
MUI_DIRECTORYPAGE_TEXT_TOP
$(
DIR_SUBTITLE
)
!define
MUI_DIRECTORYPAGE_TEXT_DESTINATION
$(
DIR_INNERTEXT
)
!insertmacro
MUI_PAGE_DIRECTORY
;Installation Page
!insertmacro
MUI_PAGE_INSTFILES
;Finish Page
!define
MUI_FINISHPAGE_TITLE
$(
FINISH_TITLE
)
!define
MUI_FINISHPAGE_TEXT
$(
FINISH_TEXT
)
!insertmacro
MUI_PAGE_FINISH
;--------------------------------
; Languages
!insertmacro
MUI_LANGUAGE
"English"
!insertmacro
MUI_LANGUAGE
"Italian"
!insertmacro
MUI_LANGUAGE
"Spanish"
;Translations
!include
"nsis\translations\english.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
Pop
$R0
StrCmp
$R0
"HKLM"
rights_hklm
StrCmp
$R0
"HKCU"
rights_hkcu
done
rights_hkcu
:
ReadRegStr
$R1
HKCU
"${GUIFICATIONS_REG_KEY}"
""
ReadRegStr
$R2
HKCU
"${GUIFICATIONS_REG_KEY}"
"Version"
ReadRegStr
$R3
HKCU
"${GUIFICATIONS_UNINSTALL_KEY}"
"UninstallString"
Goto
try_uninstall
rights_hklm
:
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
try_uninstall
:
StrCmp
$R1
""
done
StrCmp
$R2
""
uninstall_problem
IfFileExists
$R3
0
uninstall_problem
; Have uninstall string.. go ahead and uninstall.
SetOverwrite
on
; Need to copy uninstaller outside of the install dir
ClearErrors
CopyFiles
/SILENT
$R3
"
$TEMP
\${GUIFICATIONS_UNINST_EXE}"
SetOverwrite
off
IfErrors
uninstall_problem
; Ready to uninstall..
ClearErrors
ExecWait
'"$TEMP\${GUIFICATIONS_UNINST_EXE}" /S _?=$R1'
IfErrors
exec_error
Delete
"
$TEMP
\${GUIFICATIONS_UNINST_EXE}"
Goto
done
exec_error
:
Delete
"
$TEMP
\${GUIFICATIONS_UNINST_EXE}"
Goto
uninstall_problem
uninstall_problem
:
; Just delete the plugin and uninstaller, and remove Registry key
MessageBox
MB_YESNO
$(
GUIFICATIONS_PROMPT_WIPEOUT
)
IDYES
do_wipeout
IDNO
cancel_install
cancel_install
:
Quit
do_wipeout
:
StrCmp
$R0
"HKLM"
del_lm_reg
del_cu_reg
del_cu_reg
:
DeleteRegKey
HKCU
${GUIFICATIONS_REG_KEY}
Goto
uninstall_prob_cont
del_lm_reg
:
DeleteRegKey
HKLM
${GUIFICATIONS_REG_KEY}
uninstall_prob_cont
:
; plugin DLL
Delete
"
$R1
\plugins\${GUIFICATIONS_DLL}"
; pixmaps
RMDir
/r
"
$R1
\pixmaps\pidgin\guifications"
Delete
"
$R3
"
done
:
SectionEnd
Section
"Install"
Call
CheckUserInstallRights
Pop
$R0
StrCmp
$R0
"NONE"
instrights_none
StrCmp
$R0
"HKLM"
instrights_hklm
instrights_hkcu
instrights_hklm
:
; 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"
Goto
install_files
instrights_hkcu
:
; 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}"
Goto
install_files
instrights_none
:
; No registry keys for us...
install_files
:
SetOutPath
"
$INSTDIR
\plugins"
SetCompress
Auto
SetOverwrite
on
File
"src\${GUIFICATIONS_DLL}"
SetOutPath
"
$INSTDIR
\pixmaps\pidgin\guifications\conf"
File
"pixmaps\*.png"
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
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
StrCmp
$R0
"NONE"
done
CreateShortCut
"
$SMPROGRAMS
\Pidgin\${GUIFICATIONS_UNINSTALL_LNK}"
"
$INSTDIR
\${GUIFICATIONS_UNINST_EXE}"
WriteUninstaller
"
$INSTDIR
\${GUIFICATIONS_UNINST_EXE}"
SetOverWrite
off
done
:
SectionEnd
Section
Uninstall
Call
un.CheckUserInstallRights
Pop
$R0
StrCmp
$R0
"NONE"
no_rights
StrCmp
$R0
"HKCU"
try_hkcu
try_hklm
try_hkcu
:
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}"
Goto
cont_uninstall
try_hklm
:
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"
cont_uninstall
:
; plugin
Delete
"
$INSTDIR
\plugins\${GUIFICATIONS_DLL}"
; pixmaps
RMDir
/r
"
$INSTDIR
\pixmaps\pidgin\guifications"
; translations
; loop through locale dirs and try to delete any guifications translations
ClearErrors
FindFirst
$R1
$R2
"
$INSTDIR
\locale\*"
IfErrors
doneFindingTranslations
processCurrentTranslationDir
:
;Ignore "." and ".."
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"
ClearErrors
readNextTranslationDir
:
FindNext
$R1
$R2
IfErrors
doneFindingTranslations
processCurrentTranslationDir
doneFindingTranslations
:
FindClose
$R1
RMDir
"
$INSTDIR
\locale"
; uninstaller
Delete
"
$INSTDIR
\${GUIFICATIONS_UNINST_EXE}"
; uninstaller shortcut
Delete
"
$SMPROGRAMS
\Pidgin\${GUIFICATIONS_UNINSTALL_LNK}"
; try to delete the Pidgin directories, in case it has already uninstalled
RMDir
"
$INSTDIR
\plugins"
RMDir
"
$INSTDIR
"
RMDir
"
$SMPROGRAMS
\Pidgin"
Goto
done
cant_uninstall
:
MessageBox
MB_OK
$(
un.GUIFICATIONS_UNINSTALL_ERROR_1
)
IDOK
Quit
no_rights
:
MessageBox
MB_OK
$(
un.GUIFICATIONS_UNINSTALL_ERROR_2
)
IDOK
Quit
done
:
SectionEnd
; Check that the selected installation dir contains pidgin.exe
Function
.onVerifyInstDir
IfFileExists
$INSTDIR
\
pidgin.exe
+
2
Abort
FunctionEnd
; Check that the currently installed pidgin version is compatible with the version of guifications we are installing
Function
gf_checkPidginVersion
Push
$R0
Push
${PIDGIN_VERSION}
Call
CheckPidginVersion
Pop
$R0
StrCmp
$R0
${PIDGIN_VERSION_OK}
gf_checkPidginVersion_OK
StrCmp
$R0
${PIDGIN_VERSION_INCOMPATIBLE}
+
1
+
6
Call
GetPidginVersion
IfErrors
+
3
Pop
$R0
MessageBox
MB_OK
|
MB_ICONSTOP
"$(BAD_PIDGIN_VERSION_1) $R0 $(BAD_PIDGIN_VERSION_2)"
goto
+
2
MessageBox
MB_OK
|
MB_ICONSTOP
"$(NO_PIDGIN_VERSION)"
Quit
gf_checkPidginVersion_OK
:
Pop
$R0
FunctionEnd
Function
CheckUserInstallRights
ClearErrors
UserInfo
::
GetName
IfErrors
Win9x
Pop
$0
UserInfo
::
GetAccountType
Pop
$1
StrCmp
$1
"Admin"
0
+
3
StrCpy
$1
"HKLM"
Goto
done
StrCmp
$1
"Power"
0
+
3
StrCpy
$1
"HKLM"
Goto
done
StrCmp
$1
"User"
0
+
3
StrCpy
$1
"HKCU"
Goto
done
StrCmp
$1
"Guest"
0
+
3
StrCpy
$1
"NONE"
Goto
done
; Unknown error
StrCpy
$1
"NONE"
Goto
done
Win9x
:
StrCpy
$1
"HKLM"
done
:
Push
$1
FunctionEnd
; This is necessary because the uninstaller doesn't have access to installer functions
; (it is identical to CheckUserInstallRights)
Function
un.CheckUserInstallRights
ClearErrors
UserInfo
::
GetName
IfErrors
Win9x
Pop
$0
UserInfo
::
GetAccountType
Pop
$1
StrCmp
$1
"Admin"
0
+
3
StrCpy
$1
"HKLM"
Goto
done
StrCmp
$1
"Power"
0
+
3
StrCpy
$1
"HKLM"
Goto
done
StrCmp
$1
"User"
0
+
3
StrCpy
$1
"HKCU"
Goto
done
StrCmp
$1
"Guest"
0
+
3
StrCpy
$1
"NONE"
Goto
done
; Unknown error
StrCpy
$1
"NONE"
Goto
done
Win9x
:
StrCpy
$1
"HKLM"
done
:
Push
$1
FunctionEnd