;Copyright (C) 2004-2007 John T. Haller ;Website: http://PortableApps.com/PidginPortable ;This software is OSI Certified Open Source Software. ;OSI Certified is a certification mark of the Open Source Initiative. ;This program is free software; you can redistribute it and/or ;modify it under the terms of the GNU General Public License ;as published by the Free Software Foundation; either version 2 ;of the License, or (at your option) any later version. ;This program is distributed in the hope that it will be useful, ;but WITHOUT ANY WARRANTY; without even the implied warranty of ;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;GNU General Public License for more details. ;You should have received a copy of the GNU General Public License ;along with this program; if not, write to the Free Software ;Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. !define NAME "PidginPortable" !define FRIENDLYNAME "Pidgin Portable" !define APP "Pidgin" !define VER "1.5.1.0" !define WEBSITE "PortableApps.com/PidginPortable" !define DEFAULTEXE "Pidgin.exe" !define DEFAULTAPPDIR "Pidgin" !define DEFAULTGTKDIR "gtk" !define DEFAULTSETTINGSDIR "settings" ;=== Program Details Name "${NAME}" OutFile "${NAME}.exe" Caption "${FRIENDLYNAME} | PortableApps.com" VIProductVersion "${VER}" VIAddVersionKey ProductName "${FRIENDLYNAME}" VIAddVersionKey Comments "Allows ${APP} to be run from a removable drive. For additional details, visit ${WEBSITE}" VIAddVersionKey CompanyName "PortableApps.com (John T. Haller)" VIAddVersionKey LegalCopyright "John T. Haller" VIAddVersionKey FileDescription "${FRIENDLYNAME}" VIAddVersionKey FileVersion "${VER}" VIAddVersionKey ProductVersion "${VER}" VIAddVersionKey InternalName "${FRIENDLYNAME}" VIAddVersionKey LegalTrademarks "PortableApps.com is a Trademark of Rare Ideas, LLC." VIAddVersionKey OriginalFilename "${NAME}.exe" ;VIAddVersionKey PrivateBuild "" ;VIAddVersionKey SpecialBuild "" ;=== Runtime Switches CRCCheck On WindowIcon Off SilentInstall Silent AutoCloseWindow True RequestExecutionLevel user ;=== Include !include "GetParameters.nsh" !include "FileFunc.nsh" !insertmacro GetParent !insertmacro GetRoot !include "ReplaceInFile.nsh" !include "StrRep.nsh" !include "GetWindowsVersion.nsh" ;=== Program Icon Icon "${NAME}.ico" Var PROGRAMDIRECTORY Var GTKDIRECTORY Var ASPELLDIRECTORY Var SETTINGSDIRECTORY Var ADDITIONALPARAMETERS Var EXECSTRING Var WAITFORPROGRAM Var PROGRAMEXECUTABLE Var DISABLESPLASHSCREEN Var ISDEFAULTDIRECTORY Var PidginLANGUAGE Var WINDOWSVERSION Section "Main" ;ReadINI: ReadINIStr $ADDITIONALPARAMETERS "$EXEDIR\${NAME}.ini" "${NAME}" "AdditionalParameters" ReadINIStr $WAITFORPROGRAM "$EXEDIR\${NAME}.ini" "${NAME}" "WaitFor${APP}" ReadINIStr $DISABLESPLASHSCREEN "$EXEDIR\${NAME}.ini" "${NAME}" "DisableSplashScreen" ;=== Any missing unrequired INI entries will be an empty string, ignore associated errors ClearErrors StrCpy "$PROGRAMEXECUTABLE" "${DEFAULTEXE}" IfFileExists "$EXEDIR\App\${DEFAULTAPPDIR}\${DEFAULTEXE}" "" NoProgramEXE StrCpy "$PROGRAMDIRECTORY" "$EXEDIR\App\${DEFAULTAPPDIR}" StrCpy "$GTKDIRECTORY" "$EXEDIR\App\${DEFAULTGTKDIR}" StrCpy "$ASPELLDIRECTORY" "$EXEDIR\App\aspell" StrCpy "$SETTINGSDIRECTORY" "$EXEDIR\Data\${DEFAULTSETTINGSDIR}" StrCpy "$ISDEFAULTDIRECTORY" "true" Call GetWindowsVersion Pop $WINDOWSVERSION StrCpy $WINDOWSVERSION $WINDOWSVERSION 2 StrCmp $WINDOWSVERSION '95' GTKLegacy StrCmp $WINDOWSVERSION '98' GTKLegacy StrCmp $WINDOWSVERSION 'ME' GTKLegacy StrCmp $WINDOWSVERSION 'NT' GTKLegacy ;=== Check GTK directory IfFileExists "$EXEDIR\App\${DEFAULTGTKDIR}\*.*" "" GTKCommonFiles StrCpy $GTKDIRECTORY "$EXEDIR\App\${DEFAULTGTKDIR}" Goto EndINI GTKCommonFiles: ${GetParent} "$EXEDIR" $0 StrCpy $GTKDIRECTORY "$0\CommonFiles\GTK" GoTo EndINI GTKLegacy: ;=== Check GTK directory IfFileExists "$EXEDIR\App\${DEFAULTGTKDIR}Legacy\*.*" "" GTKLegacyCommonFiles StrCpy $GTKDIRECTORY "$EXEDIR\App\${DEFAULTGTKDIR}Legacy" Goto EndINI GTKLegacyCommonFiles: ${GetParent} "$EXEDIR" $0 StrCpy $GTKDIRECTORY "$0\CommonFiles\GTKLegacy" GoTo EndINI EndINI: IfFileExists "$GTKDIRECTORY\*.*" "" GTKNotFound IfFileExists "$PROGRAMDIRECTORY\$PROGRAMEXECUTABLE" FoundProgramEXE GTKNotFound: MessageBox MB_OK|MB_ICONEXCLAMATION `$GTKDIRECTORY was not found. Please check your configuration` Abort NoProgramEXE: ;=== Program executable not where expected MessageBox MB_OK|MB_ICONEXCLAMATION `$PROGRAMEXECUTABLE was not found. Please check your configuration` Abort FoundProgramEXE: StrCmp $DISABLESPLASHSCREEN "true" SkipSplashScreen ;=== Show the splash screen before processing the files InitPluginsDir File /oname=$PLUGINSDIR\splash.jpg "${NAME}.jpg" StrCmp $WAITFORPROGRAM "true" ShortSplashScreen newadvsplash::show /NOUNLOAD 30000 400 0 -1 /L $PLUGINSDIR\splash.jpg GoTo SkipSplashScreen ShortSplashScreen: newadvsplash::show /NOUNLOAD 2000 200 0 -1 /L $PLUGINSDIR\splash.jpg SkipSplashScreen: ;=== Get any passed parameters Call GetParameters Pop $0 StrCmp "'$0'" "''" "" LaunchProgramParameters ;=== No parameters StrCpy $EXECSTRING `"$PROGRAMDIRECTORY\$PROGRAMEXECUTABLE"` Goto AdditionalParameters LaunchProgramParameters: StrCpy $EXECSTRING `"$PROGRAMDIRECTORY\$PROGRAMEXECUTABLE" $0` AdditionalParameters: StrCmp $ADDITIONALPARAMETERS "" PidginEnvironment ;=== Additional Parameters StrCpy $EXECSTRING `$EXECSTRING $ADDITIONALPARAMETERS` PidginEnvironment: ;=== Set the %PidginHOME% directory if we have a path StrCmp $SETTINGSDIRECTORY "" PidginSettingsNotFound IfFileExists "$SETTINGSDIRECTORY\*.*" PidginSettingsFound PidginSettingsNotFound: StrCmp $ISDEFAULTDIRECTORY "true" SetupDefaultSettings MessageBox MB_OK|MB_ICONEXCLAMATION `$SETTINGSDIRECTORY was not found. Please check your configuration` Abort SetupDefaultSettings: CreateDirectory "$EXEDIR\Data\settings" CopyFiles /SILENT $EXEDIR\App\DefaultData\settings\*.* $EXEDIR\Data\settings PidginSettingsFound: System::Call 'Kernel32::SetEnvironmentVariableA(t, t) i("PURPLEHOME", "$SETTINGSDIRECTORY").r0' ;=== Add GTK to the %PATH% directory if we have a path, otherwise, skip it StrCpy $0 "$GTKDIRECTORY\bin;$PROGRAMDIRECTORY" System::Call 'Kernel32::SetEnvironmentVariableA(t, t) i("PATH", "$0").r0' System::Call 'Kernel32::SetEnvironmentVariableA(t, t) i("GTK_BASEPATH", "$GTKDIRECTORY").r0' ;PidginLanguage: ReadINIStr $0 "$SETTINGSDIRECTORY\${NAME}Settings.ini" "Language" "PidginLANG" StrCpy "$PIDGINLANGUAGE" $0 ClearErrors ;if any StrCmp $PidginLANGUAGE "" AdjustSettings System::Call 'Kernel32::SetEnvironmentVariableA(t, t) i("PIDGINLANG", "$PIDGINLANGUAGE").r0' AdjustSettings: ${GetRoot} $EXEDIR $0 ReadINIStr $1 "$SETTINGSDIRECTORY\${NAME}Settings.ini" "${NAME}Settings" "LastDriveLetter" StrCmp $1 "" StoreCurrentDriveLetter StrCmp $1 $0 AspellEnvironment IfFileExists "$SETTINGSDIRECTORY\.purple\prefs.xml" "" StoreCurrentDriveLetter ${ReplaceInFile} "$SETTINGSDIRECTORY\.purple\prefs.xml" "'$1\" "'$0\" Delete "$SETTINGSDIRECTORY\.purple\prefs.xml.old" StoreCurrentDriveLetter: WriteINIStr "$SETTINGSDIRECTORY\${NAME}Settings.ini" "${NAME}Settings" "LastDriveLetter" "$0" AspellEnvironment: IfFileExists "$ASPELLDIRECTORY\bin\*.*" "" LaunchNow System::Call 'Kernel32::SetEnvironmentVariableA(t, t) i("PIDGIN_ASPELL_DIR", "$ASPELLDIRECTORY\bin").r0' System::Call 'Kernel32::SetEnvironmentVariableA(t, t) i("PURPLE_ASPELL_DIR", "$ASPELLDIRECTORY\bin").r0' LaunchNow: System::Call 'Kernel32::SetEnvironmentVariableA(t, t) i("PIDGIN_NO_DLL_CHECK", "true").r0' System::Call 'Kernel32::SetEnvironmentVariableA(t, t) i("GAIM_NO_DLL_CHECK", "true").r0' System::Call 'Kernel32::SetEnvironmentVariableA(t, t) i("PURPLE_NO_DLL_CHECK", "true").r0' StrCmp $WAITFORPROGRAM "true" LaunchAndWait LaunchAndClose LaunchAndWait: ExecWait $EXECSTRING GoTo TheEnd LaunchAndClose: Exec $EXECSTRING Sleep 2000 ;=== allow the splash screen to show for at least 2 seconds after starting TheEnd: newadvsplash::stop SectionEnd