Sun, 01 Nov 2009 03:34:32 +0000
Use a private GTK+ Runtime copy on Windows.
We've resisted doing this for a while, but this it has become the norm and is
the safest thing to do.
There are now two installers; an "offline" installer and an "online" installer.
* The "offline" installer will contain the GTK+ runtime (very similar to the
current default installer).
* The "online" installer will not contain GTK+, but will download it during
the installation process if it is selected(mandatory if not already present)
* Both installers have an option to download debug symbols during installation
(Not selected by default).
(Another set of updates to support the external debug symbols will follow)
--- a/ChangeLog.win32 Sat Oct 31 20:03:26 2009 +0000 +++ b/ChangeLog.win32 Sun Nov 01 03:34:32 2009 +0000 @@ -1,5 +1,6 @@ version 2.7.0 (??/??/????): * Minimum required GTK+ version increased to 2.14.0 + * Private GTK+ Runtime now used (GTK+ Installer no longer supported) * Win9x no longer supported. version 2.6.3 (10/16/2009):
--- a/Makefile.mingw Sat Oct 31 20:03:26 2009 +0000 +++ b/Makefile.mingw Sun Nov 01 03:34:32 2009 +0000 @@ -37,6 +37,7 @@ ) STRIPPED_RELEASE_DIR = $(PIDGIN_TREE_TOP)/pidgin-$(PIDGIN_VERSION)-win32bin +DEBUG_SYMBOLS_DIR = $(PIDGIN_TREE_TOP)/pidgin-$(PIDGIN_VERSION)-dbgsym # Any *.dll or *.exe files included in win32-install-dir that we don't compile @@ -71,7 +72,7 @@ #build an expression for `find` to use to ignore the above files EXTERNAL_DLLS_FIND_EXP = $(patsubst %,-o -name %,$(EXTERNAL_DLLS)) -.PHONY: all docs install installer installer_nogtk installer_debug installers clean uninstall create_release_install_dir +.PHONY: all docs install installer installer_offline installer_zip debug_symbols_zip installers clean uninstall create_release_install_dir $(PIDGIN_REVISION_H) $(PIDGIN_REVISION_RAW_TXT) all: $(PIDGIN_CONFIG_H) $(PIDGIN_REVISION_H) $(MAKE) -C $(PURPLE_TOP) -f $(MINGW_MAKEFILE) @@ -96,22 +97,27 @@ -not \( -false $(EXTERNAL_DLLS_FIND_EXP) \) -exec $(STRIP) --strip-unneeded {} ';' installer: create_release_install_dir - $(MAKENSIS) $(MAKENSISOPT)V3 $(MAKENSISOPT)DPIDGIN_VERSION="$(PIDGIN_VERSION)" $(MAKENSISOPT)DPIDGIN_PRODUCT_VERSION="$(PIDGIN_PRODUCT_VERSION)" $(MAKENSISOPT)DWITH_GTK $(MAKENSISOPT)DPIDGIN_INSTALL_DIR="$(STRIPPED_RELEASE_DIR)" $(MAKENSISOPT)DGTK_INSTALL_VERSION="$(GTK_INSTALL_VERSION)" pidgin/win32/nsis/pidgin-installer.nsi + + $(MAKENSIS) $(MAKENSISOPT)V3 $(MAKENSISOPT)DPIDGIN_VERSION="$(PIDGIN_VERSION)" $(MAKENSISOPT)DPIDGIN_PRODUCT_VERSION="$(PIDGIN_PRODUCT_VERSION)" $(MAKENSISOPT)DPIDGIN_INSTALL_DIR="$(STRIPPED_RELEASE_DIR)" $(MAKENSISOPT)DGTK_INSTALL_VERSION="$(GTK_INSTALL_VERSION)" pidgin/win32/nsis/pidgin-installer.nsi mv pidgin/win32/nsis/pidgin-$(PIDGIN_VERSION).exe ./ -installer_nogtk: create_release_install_dir - $(MAKENSIS) $(MAKENSISOPT)V3 $(MAKENSISOPT)DPIDGIN_VERSION="$(PIDGIN_VERSION)" $(MAKENSISOPT)DPIDGIN_PRODUCT_VERSION="$(PIDGIN_PRODUCT_VERSION)" $(MAKENSISOPT)DPIDGIN_INSTALL_DIR="$(STRIPPED_RELEASE_DIR)" $(MAKENSISOPT)DGTK_INSTALL_VERSION="$(GTK_INSTALL_VERSION)" pidgin/win32/nsis/pidgin-installer.nsi - mv pidgin/win32/nsis/pidgin-$(PIDGIN_VERSION)-no-gtk.exe ./ - -installer_debug: install - $(MAKENSIS) $(MAKENSISOPT)V3 $(MAKENSISOPT)DPIDGIN_VERSION="$(PIDGIN_VERSION)" $(MAKENSISOPT)DPIDGIN_PRODUCT_VERSION="$(PIDGIN_PRODUCT_VERSION)" $(MAKENSISOPT)DPIDGIN_INSTALL_DIR="$(PIDGIN_INSTALL_DIR)" $(MAKENSISOPT)DDEBUG $(MAKENSISOPT)DGTK_INSTALL_VERSION="$(GTK_INSTALL_VERSION)" pidgin/win32/nsis/pidgin-installer.nsi - mv pidgin/win32/nsis/pidgin-$(PIDGIN_VERSION)-debug.exe ./ +installer_offline: create_release_install_dir debug_symbols_zip + $(MAKENSIS) $(MAKENSISOPT)V3 $(MAKENSISOPT)DPIDGIN_VERSION="$(PIDGIN_VERSION)" $(MAKENSISOPT)DPIDGIN_PRODUCT_VERSION="$(PIDGIN_PRODUCT_VERSION)" $(MAKENSISOPT)DOFFLINE_INSTALLER $(MAKENSISOPT)DPIDGIN_INSTALL_DIR="$(STRIPPED_RELEASE_DIR)" $(MAKENSISOPT)DGTK_INSTALL_VERSION="$(GTK_INSTALL_VERSION)" pidgin/win32/nsis/pidgin-installer.nsi + mv pidgin/win32/nsis/pidgin-$(PIDGIN_VERSION)-offline.exe ./ installer_zip: create_release_install_dir rm -f pidgin-$(PIDGIN_VERSION)-win32-bin.zip zip -9 -r pidgin-$(PIDGIN_VERSION)-win32-bin.zip $(STRIPPED_RELEASE_DIR) -installers: installer installer_nogtk installer_debug installer_zip +debug_symbols_zip: install + rm -rf $(DEBUG_SYMBOLS_DIR) $(DEBUG_SYMBOLS_DIR).zip + mkdir $(DEBUG_SYMBOLS_DIR) + tar -cf - `find $(PIDGIN_INSTALL_DIR) \( -name '*.dll' -o -name '*.exe' \) \ + -not \( -false $(EXTERNAL_DLLS_FIND_EXP) \) -print` \ + | tar --strip 2 --xform s/$$/.dbgsym/ -xC $(DEBUG_SYMBOLS_DIR) -f - + zip -9 -r $(DEBUG_SYMBOLS_DIR).zip $(DEBUG_SYMBOLS_DIR) + +installers: installer installer_offline debug_symbols_zip installer_zip Doxyfile.mingw: Doxyfile.in sed -e "s/@PACKAGE@/pidgin/" -e "s/@VERSION@/$(PIDGIN_VERSION)/" -e "s/@top_srcdir@/$(PIDGIN_TREE_TOP)/g" -e "s/@enable_dot@/NO/" Doxyfile.in > Doxyfile.mingw @@ -125,13 +131,12 @@ $(MAKE) -C $(PIDGIN_TOP) -f $(MINGW_MAKEFILE) clean $(MAKE) -C $(PURPLE_TOP) -f $(MINGW_MAKEFILE) clean $(MAKE) -C share/ca-certs -f $(MINGW_MAKEFILE) clean - rm -f $(PIDGIN_CONFIG_H) $(PIDGIN_REVISION_H) $(PIDGIN_REVISION_RAW_TXT) ./VERSION pidgin-$(PIDGIN_VERSION)*.exe pidgin-$(PIDGIN_VERSION)-win32-bin.zip + rm -f $(PIDGIN_CONFIG_H) $(PIDGIN_REVISION_H) $(PIDGIN_REVISION_RAW_TXT) ./VERSION pidgin-$(PIDGIN_VERSION)*.exe pidgin-$(PIDGIN_VERSION)-win32-bin.zip $(DEBUG_SYMBOLS_DIR).zip rm -rf doc/html Doxyfile.mingw uninstall: - rm -rf $(PURPLE_INSTALL_PERL_DIR) $(PIDGIN_INSTALL_PLUGINS_DIR) $(PURPLE_INSTALL_PO_DIR) $(PIDGIN_INSTALL_DIR) $(STRIPPED_RELEASE_DIR) + rm -rf $(PURPLE_INSTALL_PERL_DIR) $(PIDGIN_INSTALL_PLUGINS_DIR) $(PURPLE_INSTALL_PO_DIR) $(PIDGIN_INSTALL_DIR) $(STRIPPED_RELEASE_DIR) $(DEBUG_SYMBOLS_DIR) rm -f ./VERSION include $(PIDGIN_COMMON_TARGETS) -.PHONY: $(PIDGIN_REVISION_H) $(PIDGIN_REVISION_RAW_TXT)
--- a/pidgin/win32/nsis/langmacros.nsh Sat Oct 31 20:03:26 2009 +0000 +++ b/pidgin/win32/nsis/langmacros.nsh Sun Nov 01 03:34:32 2009 +0000 @@ -31,7 +31,6 @@ ; Startup checks !insertmacro PIDGIN_MACRO_LANGSTRING_INSERT INSTALLER_IS_RUNNING ${CUR_LANG} !insertmacro PIDGIN_MACRO_LANGSTRING_INSERT PIDGIN_IS_RUNNING ${CUR_LANG} - !insertmacro PIDGIN_MACRO_LANGSTRING_INSERT GTK_INSTALLER_NEEDED ${CUR_LANG} ; License Page !insertmacro PIDGIN_MACRO_LANGSTRING_INSERT PIDGIN_LICENSE_BUTTON ${CUR_LANG} @@ -48,9 +47,7 @@ !insertmacro PIDGIN_MACRO_LANGSTRING_INSERT PIDGIN_SHORTCUTS_SECTION_DESCRIPTION ${CUR_LANG} !insertmacro PIDGIN_MACRO_LANGSTRING_INSERT PIDGIN_DESKTOP_SHORTCUT_DESC ${CUR_LANG} !insertmacro PIDGIN_MACRO_LANGSTRING_INSERT PIDGIN_STARTMENU_SHORTCUT_DESC ${CUR_LANG} - - ; GTK+ Directory Page - !insertmacro PIDGIN_MACRO_LANGSTRING_INSERT GTK_UPGRADE_PROMPT ${CUR_LANG} + !insertmacro PIDGIN_MACRO_LANGSTRING_INSERT DEBUG_SYMBOLS_SECTION_TITLE ${CUR_LANG} ; Installer Finish Page !insertmacro PIDGIN_MACRO_LANGSTRING_INSERT PIDGIN_FINISH_VISIT_WEB_SITE ${CUR_LANG} @@ -58,10 +55,6 @@ ; Pidgin Section Prompts and Texts !insertmacro PIDGIN_MACRO_LANGSTRING_INSERT PIDGIN_PROMPT_CONTINUE_WITHOUT_UNINSTALL ${CUR_LANG} - ; GTK+ Section Prompts - !insertmacro PIDGIN_MACRO_LANGSTRING_INSERT GTK_INSTALL_ERROR ${CUR_LANG} - !insertmacro PIDGIN_MACRO_LANGSTRING_INSERT GTK_BAD_INSTALL_PATH ${CUR_LANG} - ; URI Handler section !insertmacro PIDGIN_MACRO_LANGSTRING_INSERT URI_HANDLERS_SECTION_TITLE ${CUR_LANG} @@ -98,6 +91,9 @@ !insertmacro PIDGIN_MACRO_LANGSTRING_INSERT PIDGIN_SPELLCHECK_SWEDISH ${CUR_LANG} !insertmacro PIDGIN_MACRO_LANGSTRING_INSERT PIDGIN_SPELLCHECK_UKRAINIAN ${CUR_LANG} + !insertmacro PIDGIN_MACRO_LANGSTRING_INSERT PIDGIN_DEBUGSYMBOLS_ERROR ${CUR_LANG} + !insertmacro PIDGIN_MACRO_LANGSTRING_INSERT PIDGIN_GTK_DOWNLOAD_ERROR ${CUR_LANG} + !undef CUR_LANG !macroend
--- a/pidgin/win32/nsis/pidgin-installer.nsi Sat Oct 31 20:03:26 2009 +0000 +++ b/pidgin/win32/nsis/pidgin-installer.nsi Sun Nov 01 03:34:32 2009 +0000 @@ -8,7 +8,6 @@ ;-------------------------------- ;Global Variables Var name -Var GTK_FOLDER Var ISSILENT Var STARTUP_RUN_KEY Var SPELLCHECK_SEL @@ -19,14 +18,10 @@ ;The name var is set in .onInit Name $name -!ifdef WITH_GTK -OutFile "pidgin-${PIDGIN_VERSION}.exe" +!ifdef OFFLINE_INSTALLER +OutFile "pidgin-${PIDGIN_VERSION}-offline.exe" !else -!ifdef DEBUG -OutFile "pidgin-${PIDGIN_VERSION}-debug.exe" -!else -OutFile "pidgin-${PIDGIN_VERSION}-no-gtk.exe" -!endif +OutFile "pidgin-${PIDGIN_VERSION}.exe" !endif SetCompressor /SOLID lzma @@ -51,6 +46,8 @@ !insertmacro WordFind !insertmacro un.WordFind +!include "TextFunc.nsh" + ;-------------------------------- ;Defines @@ -70,11 +67,8 @@ !define PIDGIN_UNINST_EXE "pidgin-uninst.exe" !define GTK_MIN_VERSION "2.14.0" -!define GTK_REG_KEY "SOFTWARE\GTK\2.0" !define PERL_REG_KEY "SOFTWARE\Perl" !define PERL_DLL "perl510.dll" -!define GTK_DEFAULT_INSTALL_PATH "$COMMONFILES\GTK\2.0" -!define GTK_RUNTIME_INSTALLER "..\..\..\..\gtk_installer\gtk-runtime-${GTK_INSTALL_VERSION}*.exe" !define ASPELL_REG_KEY "SOFTWARE\Aspell" !define DOWNLOADER_URL "http://pidgin.im/win32/download_redir.php" @@ -86,14 +80,10 @@ VIAddVersionKey "FileVersion" "${PIDGIN_VERSION}" VIAddVersionKey "ProductVersion" "${PIDGIN_VERSION}" VIAddVersionKey "LegalCopyright" "" -!ifdef WITH_GTK -VIAddVersionKey "FileDescription" "Pidgin Installer (w/ GTK+ Installer)" +!ifdef OFFLINE_INSTALLER +VIAddVersionKey "FileDescription" "Pidgin Installer (Offline)" !else -!ifdef DEBUG -VIAddVersionKey "FileDescription" "Pidgin Installer (Debug Version)" -!else -VIAddVersionKey "FileDescription" "Pidgin Installer (w/o GTK+ Installer)" -!endif +VIAddVersionKey "FileDescription" "Pidgin Installer" !endif ;-------------------------------- @@ -138,14 +128,6 @@ !insertmacro MUI_PAGE_LICENSE "../../../COPYING" !insertmacro MUI_PAGE_COMPONENTS -!ifdef WITH_GTK - ; GTK+ install dir page - !define MUI_PAGE_CUSTOMFUNCTION_PRE preGtkDirPage - !define MUI_PAGE_CUSTOMFUNCTION_LEAVE postGtkDirPage - !define MUI_DIRECTORYPAGE_VARIABLE $GTK_FOLDER - !insertmacro MUI_PAGE_DIRECTORY -!endif - ; Pidgin install dir page !insertmacro MUI_PAGE_DIRECTORY @@ -314,7 +296,7 @@ IfErrors uninstall_problem ; Ready to uninstall.. ClearErrors - ExecWait '"$TEMP\$R6" /S _?=$R1' + ExecWait '"$TEMP\$R6" /S /KEEPGTK=1 _?=$R1' IfErrors exec_error Delete "$TEMP\$R6" Goto done @@ -345,77 +327,38 @@ ;-------------------------------- ;GTK+ Runtime Install Section -!ifdef WITH_GTK Section $(GTK_SECTION_TITLE) SecGtk - Call CheckUserInstallRights - Pop $R1 - - SetOutPath $TEMP - SetOverwrite on - File /oname=gtk-runtime.exe ${GTK_RUNTIME_INSTALLER} - SetOverwrite off - - Call DoWeNeedGtk - Pop $R0 - Pop $R6 + InitPluginsDir + StrCpy $R1 "$PLUGINSDIR\gtk.zip" +!ifdef OFFLINE_INSTALLER - StrCmp $R0 "0" have_gtk - StrCmp $R0 "1" upgrade_gtk - StrCmp $R0 "2" upgrade_gtk - ;StrCmp $R0 "3" no_gtk no_gtk + SetOutPath $PLUGINSDIR + File /oname=gtk.zip "..\..\..\..\gtk_installer\gtk-runtime-${GTK_INSTALL_VERSION}.zip" - ;no_gtk: - StrCmp $R1 "NONE" gtk_no_install_rights - ClearErrors - ExecWait '"$TEMP\gtk-runtime.exe" /L=$LANGUAGE $ISSILENT /D=$GTK_FOLDER' - IfErrors gtk_install_error done - - upgrade_gtk: - StrCpy $GTK_FOLDER $R6 - StrCmp $R0 "2" +2 ; Upgrade isn't optional - MessageBox MB_YESNO $(GTK_UPGRADE_PROMPT) /SD IDYES IDNO done - ClearErrors - ExecWait '"$TEMP\gtk-runtime.exe" /L=$LANGUAGE $ISSILENT /D=$GTK_FOLDER' - IfErrors gtk_install_error done +!else - gtk_install_error: - Delete "$TEMP\gtk-runtime.exe" - MessageBox MB_OK $(GTK_INSTALL_ERROR) /SD IDOK - Quit - - have_gtk: - StrCpy $GTK_FOLDER $R6 - StrCmp $R1 "NONE" done ; If we have no rights, we can't re-install - ; Even if we have a sufficient version of GTK+, we give user choice to re-install. - ClearErrors - ExecWait '"$TEMP\gtk-runtime.exe" /L=$LANGUAGE $ISSILENT' - IfErrors gtk_install_error - Goto done + ; We need to download the GTK+ runtime + retry: + StrCpy $R2 "${DOWNLOADER_URL}?version=${PIDGIN_VERSION}>k_version=${GTK_INSTALL_VERSION}&dl_pkg=gtk" + DetailPrint "Downloading GTK+ Runtime ... ($R2)" + NSISdl::download /TIMEOUT=10000 $R2 $R1 + Pop $R0 + StrCmp $R0 "cancel" done + StrCmp $R0 "success" +2 + MessageBox MB_RETRYCANCEL "$(PIDGIN_GTK_DOWNLOAD_ERROR) : $R1" /SD IDCANCEL IDRETRY retry IDCANCEL done - ;;;;;;;;;;;;;;;;;;;;;;;;;;;; - ; end got_install rights +!endif + + SetOutPath "$INSTDIR" - gtk_no_install_rights: - ; Install GTK+ to Pidgin install dir - StrCpy $GTK_FOLDER $INSTDIR - ClearErrors - ExecWait '"$TEMP\gtk-runtime.exe" /L=$LANGUAGE $ISSILENT /D=$GTK_FOLDER' - IfErrors gtk_install_error - SetOverwrite on - ClearErrors - CopyFiles /FILESONLY "$GTK_FOLDER\bin\*.dll" $GTK_FOLDER - SetOverwrite off - IfErrors gtk_install_error - Delete "$GTK_FOLDER\bin\*.dll" - Goto done - ;;;;;;;;;;;;;;;;;;;;;;;;;;;; - ; end gtk_no_install_rights + nsisunz::UnzipToLog $R1 "$INSTDIR" + Pop $R0 + StrCmp $R0 "success" +2 + DetailPrint "$R0" ;print error message to log done: - Delete "$TEMP\gtk-runtime.exe" SectionEnd ; end of GTK+ section -!endif ;-------------------------------- ;Pidgin Install Section @@ -427,15 +370,12 @@ Call CheckUserInstallRights Pop $R0 - ; Get GTK+ lib dir if we have it.. - - StrCmp $R0 "NONE" pidgin_none + StrCmp $R0 "NONE" pidgin_install_files StrCmp $R0 "HKLM" pidgin_hklm pidgin_hkcu pidgin_hklm: - ReadRegStr $R1 HKLM ${GTK_REG_KEY} "Path" WriteRegStr HKLM "${HKLM_APP_PATHS_KEY}" "" "$INSTDIR\pidgin.exe" - WriteRegStr HKLM "${HKLM_APP_PATHS_KEY}" "Path" "$R1\bin" + WriteRegStr HKLM "${HKLM_APP_PATHS_KEY}" "Path" "$INSTDIR\Gtk\bin" WriteRegStr HKLM ${PIDGIN_REG_KEY} "" "$INSTDIR" WriteRegStr HKLM ${PIDGIN_REG_KEY} "Version" "${PIDGIN_VERSION}"