diff --git a/src/inst-sections.nsi b/src/inst-sections.nsi index e7ce3036..d057f3bc 100644 --- a/src/inst-sections.nsi +++ b/src/inst-sections.nsi @@ -1,1050 +1,1059 @@ # inst-sections.nsi - Installer for GPG4Win sections. -*- coding: latin-1; -*- # Copyright (C) 2005, 2006, 2007, 2008, 2009 g10 Code GmbH # # This file is part of GPG4Win. # # GPG4Win 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. # # GPG4Win 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, see . !include "inst-gpg4win.nsi" # The order of installation must be the same as the build order. You # can use tsort on the info in configure.ac, or just check out # gpg4win_build_list in config.nsi. The order determines also the # order in the packages selection dialog. !ifdef HAVE_PKG_BZIP2 !include "inst-bzip2.nsi" !endif !ifdef HAVE_PKG_LIBICONV !include "inst-libiconv.nsi" !endif !ifdef HAVE_PKG_LIBTASN1 !include "inst-libtasn1.nsi" !endif !ifdef HAVE_PKG_BREEZE_ICONS !include "inst-breeze-icons.nsi" !endif !ifdef HAVE_PKG_PKGCONFIG !include "inst-pkgconfig.nsi" !endif !ifdef HAVE_PKG_W32PTH !include "inst-w32pth.nsi" !endif !ifdef HAVE_PKG_ZLIB !include "inst-zlib.nsi" !endif !ifdef HAVE_PKG_QTBASE !include "inst-qtbase.nsi" !endif !ifdef HAVE_PKG_GETTEXT !include "inst-gettext.nsi" !endif !ifdef HAVE_PKG_LIBPNG !include "inst-libpng.nsi" !endif !ifdef HAVE_PKG_LIBASSUAN !include "inst-libassuan.nsi" !endif !ifdef HAVE_PKG_LIBGPG_ERROR !include "inst-libgpg-error.nsi" !endif !ifdef HAVE_PKG_LIBFFI !include "inst-libffi.nsi" !endif !ifdef HAVE_PKG_GLIB !include "inst-glib.nsi" !endif !ifdef HAVE_PKG_EXPAT !include "inst-expat.nsi" !endif !ifdef HAVE_PKG_FREETYPE !include "inst-freetype.nsi" !endif !ifdef HAVE_PKG_FONTCONFIG !include "inst-fontconfig.nsi" !endif !ifdef HAVE_PKG_CAIRO !include "inst-cairo.nsi" !endif !ifdef HAVE_PKG_PANGO !include "inst-pango.nsi" !endif !ifdef HAVE_PKG_ATK !include "inst-atk.nsi" !endif !ifdef HAVE_PKG_GDK_PIXBUF !include "inst-gdk-pixbuf.nsi" !endif !ifdef HAVE_PKG_GTK_ !include "inst-gtk+.nsi" !endif !ifdef HAVE_PKG_PINENTRY !include "inst-pinentry.nsi" !endif !ifdef HAVE_PKG_GNUPG_W32 !include "inst-gnupg-w32.nsi" !endif !ifdef HAVE_PKG_GPGME !include "inst-gpgme.nsi" !endif !ifdef HAVE_PKG_QTTOOLS !include "inst-qttools.nsi" !endif !ifdef HAVE_PKG_QTWINEXTRAS !include "inst-qtwinextras.nsi" !endif !ifdef HAVE_PKG_BOOST !include "inst-boost.nsi" !endif !ifdef HAVE_PKG_KCONFIG !include "inst-kconfig.nsi" !endif !ifdef HAVE_PKG_KI18N !include "inst-ki18n.nsi" !endif !ifdef HAVE_PKG_KWIDGETSADDONS !include "inst-kwidgetsaddons.nsi" !endif !ifdef HAVE_PKG_KCOMPLETION !include "inst-kcompletion.nsi" !endif !ifdef HAVE_PKG_KWINDOWSYSTEM !include "inst-kwindowsystem.nsi" !endif !ifdef HAVE_PKG_KCOREADDONS !include "inst-kcoreaddons.nsi" !endif !ifdef HAVE_PKG_KCODECS !include "inst-kcodecs.nsi" !endif !ifdef HAVE_PKG_KCONFIGWIDGETS !include "inst-kconfigwidgets.nsi" !endif !ifdef HAVE_PKG_KXMLGUI !include "inst-kxmlgui.nsi" !endif !ifdef HAVE_PKG_KGUIADDONS !include "inst-kguiaddons.nsi" !endif !ifdef HAVE_PKG_KMIME !include "inst-kmime.nsi" !endif !ifdef HAVE_PKG_KDE_L10N !include "inst-kde-l10n.nsi" !endif !ifdef HAVE_PKG_KICONTHEMES !include "inst-kiconthemes.nsi" !endif !ifdef HAVE_PKG_KARCHIVE !include "inst-karchive.nsi" !endif !ifdef HAVE_PKG_KITEMVIEWS !include "inst-kitemviews.nsi" !endif !ifdef HAVE_PKG_KITEMMODELS !include "inst-kitemmodels.nsi" !endif !ifdef HAVE_PKG_LIBKLEO !include "inst-libkleo.nsi" !endif !ifdef HAVE_PKG_EXTRA_CMAKE_MODULES !include "inst-extra-cmake-modules.nsi" !endif !ifdef HAVE_PKG_QTSVG !include "inst-qtsvg.nsi" !endif !ifdef HAVE_PKG_QTTRANSLATIONS !include "inst-qttranslations.nsi" !endif # These are displayed in the selection dialog. !ifdef HAVE_PKG_KLEOPATRA !include "inst-kleopatra.nsi" !endif !ifdef HAVE_PKG_GPA !include "inst-gpa.nsi" !endif !ifdef HAVE_PKG_GPGOL !include "inst-gpgol.nsi" !endif !ifdef HAVE_PKG_GPGEX !include "inst-gpgex.nsi" !endif !ifdef HAVE_PKG_PAPERKEY !include "inst-paperkey.nsi" !endif !ifdef HAVE_PKG_COMPENDIUM !include "inst-compendium.nsi" !endif !ifdef HAVE_PKG_MAN_NOVICE_EN !include "inst-man_novice_en.nsi" !endif !ifdef HAVE_PKG_MAN_ADVANCED_EN !include "inst-man_advanced_en.nsi" !endif !ifdef HAVE_PKG_MAN_NOVICE_DE !include "inst-man_novice_de.nsi" !endif !ifdef HAVE_PKG_MAN_ADVANCED_DE !include "inst-man_advanced_de.nsi" !endif !include "inst-final.nsi" # We have to invoke the uninstallers in reverse order! !ifdef HAVE_PKG_MAN_ADVANCED_DE !include "uninst-man_advanced_de.nsi" !endif !ifdef HAVE_PKG_MAN_NOVICE_DE !include "uninst-man_novice_de.nsi" !endif !ifdef HAVE_PKG_MAN_ADVANCED_EN !include "uninst-man_advanced_en.nsi" !endif !ifdef HAVE_PKG_MAN_NOVICE_EN !include "uninst-man_novice_en.nsi" !endif !ifdef HAVE_PKG_COMPENDIUM !include "uninst-compendium.nsi" !endif !ifdef HAVE_PKG_PAPERKEY !include "uninst-paperkey.nsi" !endif !ifdef HAVE_PKG_GPGEX !include "uninst-gpgex.nsi" !endif !ifdef HAVE_PKG_GPGOL !include "uninst-gpgol.nsi" !endif !ifdef HAVE_PKG_GPA !include "uninst-gpa.nsi" !endif !ifdef HAVE_PKG_KLEOPATRA !include "uninst-kleopatra.nsi" !endif !ifdef HAVE_PKG_GPGME !include "uninst-gpgme.nsi" !endif !ifdef HAVE_PKG_GNUPG_W32 !include "uninst-gnupg-w32.nsi" !endif !ifdef HAVE_PKG_PINENTRY !include "uninst-pinentry.nsi" !endif !ifdef HAVE_PKG_GNUTLS !include "uninst-gnutls.nsi" !endif !ifdef HAVE_PKG_CURL !include "uninst-curl.nsi" !endif !ifdef HAVE_PKG_GTK_ !include "uninst-gtk+.nsi" !endif !ifdef HAVE_PKG_GDK_PIXBUF !include "uninst-gdk-pixbuf.nsi" !endif !ifdef HAVE_PKG_ATK !include "uninst-atk.nsi" !endif !ifdef HAVE_PKG_PANGO !include "uninst-pango.nsi" !endif !ifdef HAVE_PKG_CAIRO !include "uninst-cairo.nsi" !endif !ifdef HAVE_PKG_FONTCONFIG !include "uninst-fontconfig.nsi" !endif !ifdef HAVE_PKG_FREETYPE !include "uninst-freetype.nsi" !endif !ifdef HAVE_PKG_EXPAT !include "uninst-expat.nsi" !endif !ifdef HAVE_PKG_GLIB !include "uninst-glib.nsi" !endif !ifdef HAVE_PKG_LIBFFI !include "uninst-libffi.nsi" !endif !ifdef HAVE_PKG_LIBGPG_ERROR !include "uninst-libgpg-error.nsi" !endif !ifdef HAVE_PKG_LIBASSUAN !include "uninst-libassuan.nsi" !endif !ifdef HAVE_PKG_LIBPNG !include "uninst-libpng.nsi" !endif !ifdef HAVE_PKG_GETTEXT !include "uninst-gettext.nsi" !endif !ifdef HAVE_PKG_QTBASE !include "uninst-qtbase.nsi" !endif !ifdef HAVE_PKG_ZLIB !include "uninst-zlib.nsi" !endif !ifdef HAVE_PKG_W32PTH !include "uninst-w32pth.nsi" !endif !ifdef HAVE_PKG_PKGCONFIG !include "uninst-pkgconfig.nsi" !endif !ifdef HAVE_PKG_BREEZE_ICONS !include "uninst-breeze-icons.nsi" !endif !ifdef HAVE_PKG_MAN_ADVANCED_DE !include "uninst-man_advanced_de.nsi" !endif !ifdef HAVE_PKG_MAN_NOVICE_DE !include "uninst-man_novice_de.nsi" !endif !ifdef HAVE_PKG_MAN_ADVANCED_EN !include "uninst-man_advanced_en.nsi" !endif !ifdef HAVE_PKG_MAN_NOVICE_EN !include "uninst-man_novice_en.nsi" !endif !ifdef HAVE_PKG_LIBICONV !include "uninst-libiconv.nsi" !endif !ifdef HAVE_PKG_QTTOOLS !include "uninst-qttools.nsi" !endif !ifdef HAVE_PKG_QTWINEXTRAS !include "uninst-qtwinextras.nsi" !endif !ifdef HAVE_PKG_BOOST !include "uninst-boost.nsi" !endif !ifdef HAVE_PKG_KCONFIG !include "uninst-kconfig.nsi" !endif !ifdef HAVE_PKG_KI18N !include "uninst-ki18n.nsi" !endif !ifdef HAVE_PKG_KWIDGETSADDONS !include "uninst-kwidgetsaddons.nsi" !endif !ifdef HAVE_PKG_KCOMPLETION !include "uninst-kcompletion.nsi" !endif !ifdef HAVE_PKG_KWINDOWSYSTEM !include "uninst-kwindowsystem.nsi" !endif !ifdef HAVE_PKG_KCOREADDONS !include "uninst-kcoreaddons.nsi" !endif !ifdef HAVE_PKG_KCODECS !include "uninst-kcodecs.nsi" !endif !ifdef HAVE_PKG_KCONFIGWIDGETS !include "uninst-kconfigwidgets.nsi" !endif !ifdef HAVE_PKG_KGUIADDONS !include "uninst-kguiaddons.nsi" !endif !ifdef HAVE_PKG_KXMLGUI !include "uninst-kxmlgui.nsi" !endif !ifdef HAVE_PKG_KICONTHEMES !include "uninst-kiconthemes.nsi" !endif !ifdef HAVE_PKG_KARCHIVE !include "uninst-karchive.nsi" !endif !ifdef HAVE_PKG_KITEMVIEWS !include "uninst-kitemviews.nsi" !endif !ifdef HAVE_PKG_KITEMMODELS !include "uninst-kitemmodels.nsi" !endif !ifdef HAVE_PKG_KMIME !include "uninst-kmime.nsi" !endif !ifdef HAVE_PKG_KDE_L10N !include "uninst-kde-l10n.nsi" !endif !ifdef HAVE_PKG_LIBKLEO !include "uninst-libkleo.nsi" !endif !ifdef HAVE_PKG_EXTRA_CMAKE_MODULES !include "uninst-extra-cmake-modules.nsi" !endif !ifdef HAVE_PKG_BZIP2 !include "uninst-bzip2.nsi" !endif !ifdef HAVE_PKG_QTSVG !include "uninst-qtsvg.nsi" !endif !ifdef HAVE_PKG_QTTRANSLATIONS !include "uninst-qttranslations.nsi" !endif !include "uninst-gpg4win.nsi" # Dependency Management ${MementoSectionDone} Function CalcDefaults !ifdef HAVE_PKG_KLEOPATRA g4wihelp::config_fetch_bool "inst_kleopatra" StrCmp $R0 "1" 0 calc_defaults_kleopatra_not_one !insertmacro SelectSection ${SEC_kleopatra} Goto calc_defaults_kleopatra_done calc_defaults_kleopatra_not_one: StrCmp $R0 "0" 0 calc_defaults_kleopatra_done !insertmacro UnselectSection ${SEC_kleopatra} calc_defaults_kleopatra_done: !endif !ifdef HAVE_PKG_GPGOL g4wihelp::config_fetch_bool "inst_gpgol" StrCmp $R0 "1" 0 calc_defaults_gpgol_not_one !insertmacro SelectSection ${SEC_gpgol} Goto calc_defaults_gpgol_done calc_defaults_gpgol_not_one: StrCmp $R0 "0" 0 calc_defaults_gpgol_done !insertmacro UnselectSection ${SEC_gpgol} calc_defaults_gpgol_done: !endif !ifdef HAVE_PKG_GPGEX g4wihelp::config_fetch_bool "inst_gpgex" StrCmp $R0 "1" 0 calc_defaults_gpgex_not_one !insertmacro SelectSection ${SEC_gpgex} Goto calc_defaults_gpgex_done calc_defaults_gpgex_not_one: StrCmp $R0 "0" 0 calc_defaults_gpgex_done !insertmacro UnselectSection ${SEC_gpgex} calc_defaults_gpgex_done: !endif !ifdef HAVE_PKG_PAPERKEY g4wihelp::config_fetch_bool "inst_paperkey" StrCmp $R0 "1" 0 calc_defaults_paperkey_not_one !insertmacro SelectSection ${SEC_paperkey} Goto calc_defaults_paperkey_done calc_defaults_paperkey_not_one: StrCmp $R0 "0" 0 calc_defaults_paperkey_done !insertmacro UnselectSection ${SEC_paperkey} calc_defaults_paperkey_done: !endif !ifdef HAVE_PKG_GPA g4wihelp::config_fetch_bool "inst_gpa" StrCmp $R0 "1" 0 calc_defaults_gpa_not_one !insertmacro SelectSection ${SEC_gpa} Goto calc_defaults_gpa_done calc_defaults_gpa_not_one: StrCmp $R0 "0" 0 calc_defaults_gpa_done !insertmacro UnselectSection ${SEC_gpa} calc_defaults_gpa_done: !endif !ifdef HAVE_PKG_COMPENDIUM g4wihelp::config_fetch_bool "inst_compendium" StrCmp $R0 "1" 0 calc_defaults_compendium_not_one !insertmacro SelectSection ${SEC_compendium} Goto calc_defaults_compendium_done calc_defaults_compendium_not_one: StrCmp $R0 "0" 0 calc_defaults_compendium_done !insertmacro UnselectSection ${SEC_compendium} calc_defaults_compendium_done: !endif !ifdef HAVE_PKG_MAN_NOVICE_DE g4wihelp::config_fetch_bool "inst_man_novice_de" StrCmp $R0 "1" 0 calc_defaults_man_novice_de_not_one !insertmacro SelectSection ${SEC_man_novice_de} Goto calc_defaults_man_novice_de_done calc_defaults_man_novice_de_not_one: StrCmp $R0 "0" 0 calc_defaults_man_novice_de_done !insertmacro UnselectSection ${SEC_man_novice_de} calc_defaults_man_novice_de_done: !endif !ifdef HAVE_PKG_MAN_NOVICE_EN g4wihelp::config_fetch_bool "inst_man_novice_en" StrCmp $R0 "1" 0 calc_defaults_man_novice_en_not_one !insertmacro SelectSection ${SEC_man_novice_en} Goto calc_defaults_man_novice_en_done calc_defaults_man_novice_en_not_one: StrCmp $R0 "0" 0 calc_defaults_man_novice_en_done !insertmacro UnselectSection ${SEC_man_novice_en} calc_defaults_man_novice_en_done: !endif !ifdef HAVE_PKG_MAN_ADVANCED_DE g4wihelp::config_fetch_bool "inst_man_advanced_de" StrCmp $R0 "1" 0 calc_defaults_man_advanced_de_not_one !insertmacro SelectSection ${SEC_man_advanced_de} Goto calc_defaults_man_advanced_de_done calc_defaults_man_advanced_de_not_one: StrCmp $R0 "0" 0 calc_defaults_man_advanced_de_done !insertmacro UnselectSection ${SEC_man_advanced_de} calc_defaults_man_advanced_de_done: !endif !ifdef HAVE_PKG_MAN_ADVANCED_EN g4wihelp::config_fetch_bool "inst_man_advanced_en" StrCmp $R0 "1" 0 calc_defaults_man_advanced_en_not_one !insertmacro SelectSection ${SEC_man_advanced_en} Goto calc_defaults_man_advanced_en_done calc_defaults_man_advanced_en_not_one: StrCmp $R0 "0" 0 calc_defaults_man_advanced_en_done !insertmacro UnselectSection ${SEC_man_advanced_en} calc_defaults_man_advanced_en_done: !endif # Check if minimal install was requested on the command line StrCmp $is_minimal '1' select_minimal continue select_minimal: !insertmacro UnselectSection ${SEC_kleopatra} !insertmacro UnselectSection ${SEC_gpgol} !insertmacro UnselectSection ${SEC_gpgex} !insertmacro UnselectSection ${SEC_gpa} !insertmacro UnselectSection ${SEC_compendium} # We only do pinentry and gnupg-w32 !insertmacro SelectSection ${SEC_paperkey} !insertmacro SelectSection ${SEC_gnupg_w32} !insertmacro SelectSection ${SEC_pinentry} continue: FunctionEnd Function CalcDepends # This section could very well be autogenerated from the # information in configure.ac. Note that it doesn't hurt to have # stuff here for packages that we don't include. # First clear all indirect dependencies. !ifdef HAVE_PKG_LIBICONV !insertmacro UnselectSection ${SEC_libiconv} !endif !ifdef HAVE_PKG_GETTEXT !insertmacro UnselectSection ${SEC_gettext} !endif !ifdef HAVE_PKG_ZLIB !insertmacro UnselectSection ${SEC_zlib} !endif !ifdef HAVE_PKG_LIBPNG !insertmacro UnselectSection ${SEC_libpng} !endif !ifdef HAVE_PKG_PKGCONFIG !insertmacro UnselectSection ${SEC_pkgconfig} !endif !ifdef HAVE_PKG_GLIB !insertmacro UnselectSection ${SEC_glib} !endif !ifdef HAVE_PKG_ATK !insertmacro UnselectSection ${SEC_atk} !endif !ifdef HAVE_PKG_PANGO !insertmacro UnselectSection ${SEC_pango} !endif !ifdef HAVE_PKG_EXPAT !insertmacro UnselectSection ${SEC_expat} !endif !ifdef HAVE_PKG_FREETYPE !insertmacro UnselectSection ${SEC_freetype} !endif !ifdef HAVE_PKG_FONTCONFIG !insertmacro UnselectSection ${SEC_fontconfig} !endif !ifdef HAVE_PKG_CAIRO !insertmacro UnselectSection ${SEC_cairo} !endif !ifdef HAVE_PKG_GTK_ !insertmacro UnselectSection ${SEC_gtk_} !endif !ifdef HAVE_PKG_BZIP2 !insertmacro UnselectSection ${SEC_bzip2} !endif !ifdef HAVE_PKG_LIBGPG_ERROR !insertmacro UnselectSection ${SEC_libgpg_error} !endif !ifdef HAVE_PKG_W32PTH !insertmacro UnselectSection ${SEC_w32pth} !endif !ifdef HAVE_PKG_LIBASSUAN !insertmacro UnselectSection ${SEC_libassuan} !endif !ifdef HAVE_PKG_PINENTRY !insertmacro UnselectSection ${SEC_pinentry} !endif !ifdef HAVE_PKG_GPGME !insertmacro UnselectSection ${SEC_gpgme} !endif !ifdef HAVE_PKG_LIBGSASL !insertmacro UnselectSection ${SEC_libgsasl} !endif !ifdef HAVE_PKG_LIBTASN1 !insertmacro UnselectSection ${SEC_libtasn1} !endif !ifdef HAVE_PKG_GNUTLS !insertmacro UnselectSection ${SEC_gnutls} !endif !ifdef HAVE_PKG_CURL !insertmacro UnselectSection ${SEC_curl} !endif !ifdef HAVE_PKG_QTBASE !insertmacro UnselectSection ${SEC_qtbase} !endif !ifdef HAVE_PKG_QTTOOLS !insertmacro UnselectSection ${SEC_qttools} !endif !ifdef HAVE_PKG_QTWINEXTRAS !insertmacro UnselectSection ${SEC_qtwinextras} !endif !ifdef HAVE_PKG_BREEZE_ICONS !insertmacro UnselectSection ${SEC_breeze_icons} !endif !ifdef HAVE_PKG_KCONFIG !insertmacro UnselectSection ${SEC_kconfig} !endif !ifdef HAVE_PKG_KI18N !insertmacro UnselectSection ${SEC_ki18n} !endif !ifdef HAVE_PKG_KWIDGETSADDONS !insertmacro UnselectSection ${SEC_kwidgetsaddons} !endif !ifdef HAVE_PKG_KCOMPLETION !insertmacro UnselectSection ${SEC_kcompletion} !endif !ifdef HAVE_PKG_KWINDOWSYSTEM !insertmacro UnselectSection ${SEC_kwindowsystem} !endif !ifdef HAVE_PKG_KCOREADDONS !insertmacro UnselectSection ${SEC_kcoreaddons} !endif !ifdef HAVE_PKG_KCODECS !insertmacro UnselectSection ${SEC_kcodecs} !endif !ifdef HAVE_PKG_KCONFIGWIDGETS !insertmacro UnselectSection ${SEC_kconfigwidgets} !endif !ifdef HAVE_PKG_KXMLGUI !insertmacro UnselectSection ${SEC_kxmlgui} !endif !ifdef HAVE_PKG_KICONTHEMES !insertmacro UnselectSection ${SEC_kiconthemes} !endif !ifdef HAVE_PKG_KARCHIVE !insertmacro UnselectSection ${SEC_karchive} !endif !ifdef HAVE_PKG_KITEMVIEWS !insertmacro UnselectSection ${SEC_kitemviews} !endif !ifdef HAVE_PKG_KITEMMODELS !insertmacro UnselectSection ${SEC_kitemmodels} !endif !ifdef HAVE_PKG_KGUIADDONS !insertmacro UnselectSection ${SEC_kguiaddons} !endif !ifdef HAVE_PKG_LIBKLEO !insertmacro UnselectSection ${SEC_libkleo} !endif !ifdef HAVE_PKG_KMIME !insertmacro UnselectSection ${SEC_kmime} !endif !ifdef HAVE_PKG_KDE_L10N !insertmacro UnselectSection ${SEC_kde-l10n} !endif !ifdef HAVE_PKG_QTSVG !insertmacro UnselectSection ${SEC_qtsvg} !endif !ifdef HAVE_PKG_QTTRANSLATIONS !insertmacro UnselectSection ${SEC_qttranslations} !endif # Always install gnupg2. This is also ensured by putting # these packages in the RO section and enabling them by default, but # it doesn't harm to add it explicitely here as well. # TODO: Handle newer / other gnupg versions !insertmacro SelectSection ${SEC_gnupg_w32} # Then enable all dependencies, mostly in reverse build list order! # First the explicitely installed packages. !ifdef HAVE_PKG_PAPERKEY !insertmacro SectionFlagIsSet ${SEC_paperkey} \ ${SF_SELECTED} have_paperkey skip_paperkey have_paperkey: # All dependencies are linked in statically. skip_paperkey: !endif !ifdef HAVE_PKG_GPGEX !insertmacro SectionFlagIsSet ${SEC_gpgex} \ ${SF_SELECTED} have_gpgex skip_gpgex have_gpgex: # This is not a build dependency, but it is a run-time dependency. !insertmacro SectionFlagIsSet ${SEC_gpa} \ ${SF_SELECTED} skipa_gpgex_dep_kleopatra need_gpgex_dep_kleopatra need_gpgex_dep_kleopatra: !insertmacro SelectSection ${SEC_kleopatra} skipa_gpgex_dep_kleopatra: # Other dependencies are linked in statically. skip_gpgex: !endif !ifdef HAVE_PKG_GPGOL !insertmacro SectionFlagIsSet ${SEC_gpgol} \ ${SF_SELECTED} have_gpgol skip_gpgol have_gpgol: !insertmacro SelectSection ${SEC_gpgme} # This is not a build dependency, but it is a run-time dependency. !insertmacro SectionFlagIsSet ${SEC_gpa} \ ${SF_SELECTED} skipa_gpgol_dep_kleopatra need_gpgol_dep_kleopatra need_gpgol_dep_kleopatra: !insertmacro SelectSection ${SEC_kleopatra} skipa_gpgol_dep_kleopatra: skip_gpgol: !endif !ifdef HAVE_PKG_KLEOPATRA !insertmacro SectionFlagIsSet ${SEC_kleopatra} ${SF_SELECTED} have_kleopatra skip_kleopatra have_kleopatra: !insertmacro SelectSection ${SEC_gpgme} # This drags in all the other KDE and Qt stuff. !insertmacro SelectSection ${SEC_kleopatra} skip_kleopatra: + ${IfNot} ${AtLeastWin7} + # Disable Kleo for Windows below 7 + SectionSetFlags ${SEC_kleopatra} 16 + !insertmacro SelectSection ${SEC_gpa} + ${Endif} !endif !ifdef HAVE_PKG_GNUPG_W32 !insertmacro SectionFlagIsSet ${SEC_gnupg_w32} ${SF_SELECTED} have_gnupg_w32 skip_gnupg_w32 have_gnupg_w32: !insertmacro SelectSection ${SEC_pinentry} skip_gnupg_w32: !endif !ifdef HAVE_PKG_GPA !insertmacro SectionFlagIsSet ${SEC_gpa} ${SF_SELECTED} have_gpa skip_gpa have_gpa: !insertmacro SelectSection ${SEC_libiconv} !insertmacro SelectSection ${SEC_gettext} !insertmacro SelectSection ${SEC_zlib} !insertmacro SelectSection ${SEC_gtk_} !insertmacro SelectSection ${SEC_libpng} !insertmacro SelectSection ${SEC_glib} !insertmacro SelectSection ${SEC_gpgme} skip_gpa: !endif # Now the implicitely installed packages. !ifdef HAVE_PKG_KLEOPATRA !insertmacro SectionFlagIsSet ${SEC_kleopatra} \ ${SF_SELECTED} have_kleopatra_libs skip_kleopatra_libs have_kleopatra_libs: !insertmacro SelectSection ${SEC_qtbase} !insertmacro SelectSection ${SEC_breeze_icons} !insertmacro SelectSection ${SEC_kconfig} !insertmacro SelectSection ${SEC_ki18n} !insertmacro SelectSection ${SEC_kwidgetsaddons} !insertmacro SelectSection ${SEC_kcompletion} !insertmacro SelectSection ${SEC_kwindowsystem} !insertmacro SelectSection ${SEC_kcoreaddons} !insertmacro SelectSection ${SEC_kcodecs} !insertmacro SelectSection ${SEC_kconfigwidgets} !insertmacro SelectSection ${SEC_kxmlgui} !insertmacro SelectSection ${SEC_kitemviews} !insertmacro SelectSection ${SEC_kitemmodels} !insertmacro SelectSection ${SEC_kiconthemes} !insertmacro SelectSection ${SEC_karchive} !insertmacro SelectSection ${SEC_kguiaddons} !insertmacro SelectSection ${SEC_qtsvg} !insertmacro SelectSection ${SEC_qttranslations} !insertmacro SelectSection ${SEC_kmime} !insertmacro SelectSection ${SEC_kde-l10n} !insertmacro SelectSection ${SEC_libkleo} !insertmacro SelectSection ${SEC_qttools} !insertmacro SelectSection ${SEC_qtwinextras} !insertmacro SelectSection ${SEC_boost} !insertmacro SelectSection ${SEC_extra-cmake-modules} skip_kleopatra_libs: !endif !ifdef HAVE_PKG_GPGME !insertmacro SectionFlagIsSet ${SEC_gpgme} \ ${SF_SELECTED} have_gpgme skip_gpgme have_gpgme: # GPGME does not depend on gnupg2. Do this in the # actual application instead. !insertmacro SelectSection ${SEC_libgpg_error} !insertmacro SelectSection ${SEC_libassuan} !ifdef HAVE_PKG_QTBASE !insertmacro SelectSection ${SEC_qtbase} !endif skip_gpgme: !endif !ifdef HAVE_PKG_PINENTRY !insertmacro SectionFlagIsSet ${SEC_pinentry} \ ${SF_SELECTED} have_pinentry skip_pinentry have_pinentry: !insertmacro SelectSection ${SEC_libiconv} !ifdef HAVE_PKG_QTBASE !insertmacro SelectSection ${SEC_qtbase} !endif !ifdef HAVE_PKG_GTK_ !insertmacro SelectSection ${SEC_gtk_} !endif skip_pinentry: !endif !ifdef HAVE_PKG_QTBASE + ${IfNot} ${AtLeastWin7} + # Disable qt for Windows below 7 + !insertmacro UnSelectSection ${SEC_qtbase} + ${Endif} !insertmacro SectionFlagIsSet ${SEC_qtbase} \ ${SF_SELECTED} have_qt skip_qt have_qt: !insertmacro SelectSection ${SEC_libpng} !insertmacro SelectSection ${SEC_zlib} !insertmacro SelectSection ${SEC_qttranslations} skip_qt: !endif !ifdef HAVE_PKG_LIBASSUAN !insertmacro SectionFlagIsSet ${SEC_libassuan} ${SF_SELECTED} have_libassuan skip_libassuan have_libassuan: !insertmacro SelectSection ${SEC_libgpg_error} !insertmacro SelectSection ${SEC_w32pth} skip_libassuan: !endif # Package "w32pth" has no dependencies. !ifdef HAVE_PKG_LIBGPG_ERROR !insertmacro SectionFlagIsSet ${SEC_libgpg_error} ${SF_SELECTED} have_libgpg_error skip_libgpg_error have_libgpg_error: !insertmacro SelectSection ${SEC_libiconv} !insertmacro SelectSection ${SEC_gettext} skip_libgpg_error: !endif # Package "bzip2" has no dependencies. !ifdef HAVE_PKG_GTK_ !insertmacro SectionFlagIsSet ${SEC_gtk_} \ ${SF_SELECTED} have_gtk_ skip_gtk_ have_gtk_: !insertmacro SelectSection ${SEC_libiconv} !insertmacro SelectSection ${SEC_gettext} !insertmacro SelectSection ${SEC_pkgconfig} !insertmacro SelectSection ${SEC_atk} !insertmacro SelectSection ${SEC_pango} !insertmacro SelectSection ${SEC_glib} !insertmacro SelectSection ${SEC_cairo} skip_gtk_: !endif !ifdef HAVE_PKG_CAIRO !insertmacro SectionFlagIsSet ${SEC_cairo} \ ${SF_SELECTED} have_cairo skip_cairo have_cairo: !insertmacro SelectSection ${SEC_glib} !insertmacro SelectSection ${SEC_pkgconfig} !insertmacro SelectSection ${SEC_expat} !insertmacro SelectSection ${SEC_freetype} !insertmacro SelectSection ${SEC_fontconfig} skip_cairo: !endif !ifdef HAVE_PKG_FONTCONFIG !insertmacro SectionFlagIsSet ${SEC_fontconfig} \ ${SF_SELECTED} have_fontconfig skip_fontconfig have_fontconfig: !insertmacro SelectSection ${SEC_pkgconfig} !insertmacro SelectSection ${SEC_freetype} skip_fontconfig: !endif !ifdef HAVE_PKG_FREETYPE !insertmacro SectionFlagIsSet ${SEC_freetype} \ ${SF_SELECTED} have_freetype skip_freetype have_freetype: !insertmacro SelectSection ${SEC_pkgconfig} !insertmacro SelectSection ${SEC_expat} skip_freetype: !endif # Package "expat" has no dependencies. !ifdef HAVE_PKG_PANGO !insertmacro SectionFlagIsSet ${SEC_pango} \ ${SF_SELECTED} have_pango skip_pango have_pango: !insertmacro SelectSection ${SEC_glib} !insertmacro SelectSection ${SEC_pkgconfig} skip_pango: !endif !ifdef HAVE_PKG_ATK !insertmacro SectionFlagIsSet ${SEC_atk} \ ${SF_SELECTED} have_atk skip_atk have_atk: !insertmacro SelectSection ${SEC_glib} !insertmacro SelectSection ${SEC_pkgconfig} skip_atk: !endif !ifdef HAVE_PKG_GLIB !insertmacro SectionFlagIsSet ${SEC_glib} \ ${SF_SELECTED} have_glib skip_glib have_glib: !insertmacro SelectSection ${SEC_libiconv} !insertmacro SelectSection ${SEC_gettext} !insertmacro SelectSection ${SEC_pkgconfig} skip_glib: !endif # Package "pkgconfig" has no dependencies. !ifdef HAVE_PKG_LIBPNG !insertmacro SectionFlagIsSet ${SEC_libpng} \ ${SF_SELECTED} have_libpng skip_libpng have_libpng: !insertmacro SelectSection ${SEC_pkgconfig} skip_libpng: !endif # Package "zlib" has no dependencies. !ifdef HAVE_PKG_GETTEXT !insertmacro SectionFlagIsSet ${SEC_gettext} \ ${SF_SELECTED} have_gettext skip_gettext have_gettext: !insertmacro SelectSection ${SEC_libiconv} skip_gettext: !endif # Package "libiconv" has no dependencies. FunctionEnd Function .onInstFailed Delete $TEMP\gpgspltmp.wav FunctionEnd Function .onInstSuccess ${MementoSectionSave} Delete $TEMP\gpgspltmp.wav FunctionEnd Function .onSelChange Call CalcDepends FunctionEnd # Note used anymore: # This function is run from the finish page. #Function RunOnFinish #!ifdef HAVE_PKG_GPA # SectionGetFlags ${SEC_gpa} $R0 # IntOp $R0 $R0 & ${SF_SELECTED} # IntCmp $R0 ${SF_SELECTED} 0 no_gpa_avail # Exec "$INSTDIR\gpa.exe" # Return # no_gpa_avail: #!endif # MessageBox MB_OK "$(T_NoKeyManager)" #FunctionEnd # This also must be in a central place. Also Urgs. Section "-startmenu" UserInfo::GetAccountType Pop $1 StrCmp $1 "Admin" is_admin is_no_admin is_admin: SetShellVarContext all is_no_admin: # NOT SetOutPath. StrCpy $OUTDIR "%HOMEDRIVE%%HOMEPATH%" # Check if the start menu entries where requested. g4wihelp::config_fetch_bool "inst_start_menu" StrCmp $R0 "0" no_start_menu !ifdef HAVE_PKG_GPA SectionGetFlags ${SEC_gpa} $R0 IntOp $R0 $R0 & ${SF_SELECTED} IntCmp $R0 ${SF_SELECTED} 0 no_gpa_menu CreateShortCut "$SMPROGRAMS\GPA.lnk" \ "$INSTDIR\bin\gpa.exe" \ "" "" "" SW_SHOWNORMAL "" $(DESC_Menu_gpa) no_gpa_menu: !endif !ifdef HAVE_PKG_KLEOPATRA SectionGetFlags ${SEC_kleopatra} $R0 IntOp $R0 $R0 & ${SF_SELECTED} IntCmp $R0 ${SF_SELECTED} 0 no_kleopatra_menu CreateShortCut "$SMPROGRAMS\Kleopatra.lnk" \ "$INSTDIR\bin\kleopatra.exe" \ "" "$INSTDIR\bin\kleopatra.exe" "" SW_SHOWNORMAL "" $(DESC_Menu_kleopatra) no_kleopatra_menu: !endif no_start_menu: # Check if the desktop entries where requested. g4wihelp::config_fetch_bool "inst_desktop" StrCmp $R0 "0" no_desktop !ifdef HAVE_PKG_GPA SectionGetFlags ${SEC_gpa} $R0 IntOp $R0 $R0 & ${SF_SELECTED} IntCmp $R0 ${SF_SELECTED} 0 no_gpa_desktop CreateShortCut "$DESKTOP\GPA.lnk" \ "$INSTDIR\bin\gpa.exe" \ "" "" "" SW_SHOWNORMAL "" $(DESC_Menu_gpa) no_gpa_desktop: !endif !ifdef HAVE_PKG_KLEOPATRA SectionGetFlags ${SEC_kleopatra} $R0 IntOp $R0 $R0 & ${SF_SELECTED} IntCmp $R0 ${SF_SELECTED} 0 no_kleopatra_desktop CreateShortCut "$DESKTOP\Kleopatra.lnk" \ "$INSTDIR\bin\kleopatra.exe" \ "" "$INSTDIR\bin\kleopatra.exe" "" SW_SHOWNORMAL "" $(DESC_Menu_kleopatra) no_kleopatra_desktop: !endif no_desktop: SectionEnd diff --git a/src/installer.nsi b/src/installer.nsi index 918b8228..5e52c8b9 100644 --- a/src/installer.nsi +++ b/src/installer.nsi @@ -1,762 +1,763 @@ # installer.nsi - Installer for GnuPG 4 Windows. -*- coding: latin-1; -*- # Copyright (C) 2005, 2007 g10 Code GmbH # Copyright (C) 2017 Intevation GmbH # # This file is part of GPG4Win. # # GPG4Win 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. # # GPG4Win 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA # No servicable parts beyond this line. Stay clear :) !ifdef REQUIRE_W32_NSIS !ifdef PACKAGE_LIBRARY !include "Library.nsh" !endif !else !macro InstallLib libtype shared install localfile destfile tempbasedir File "${localfile}" !macroend !endif !include "FileFunc.nsh" !include "WinMessages.nsh" !include "WinVer.nsh" # We use the modern UI 2. !include "MUI2.nsh" !ifdef DEBUG !undef DEBUG !endif # Set the package name. Note that this name should not be sufficed # with the version because this would get displayed in the start menu. Name "${PRETTY_PACKAGE}" OutFile "${PACKAGE}-${VERSION}.exe" BrandingText "${PRETTY_PACKAGE}-${VERSION}" # Details button conflicts with splashscreen ShowInstDetails nevershow # Set the installation directory. !ifndef INSTALL_DIR !define INSTALL_DIR "${PACKAGE}" !endif InstallDir "$PROGRAMFILES\${INSTALL_DIR}" # Add version information to the file properties. VIProductVersion "${PROD_VERSION}" VIAddVersionKey "ProductName" "${PRETTY_PACKAGE_SHORT} (${VERSION})" !ifdef LICENSE_GPL VIAddVersionKey "Comments" \ "${PRETTY_PACKAGE_SHORT} is Free Software; you can redistribute it \ and/or modify it under the terms of the GNU General Public License. \ You should have received a copy of the GNU General Public License \ along with this software; if not, write to the Free Software \ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, \ MA 02110-1301, USA" !else VIAddVersionKey "Comments" \ "${PRETTY_PACKAGE_SHORT} is Free Software; you can redistribute it \ and/or modify it under the terms of the GNU Lesser General Public \ License. You should have received a copy of the GNU Lesser General \ Public License along with this software; if not, write to the Free \ Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, \ MA 02110-1301, USA" !endif VIAddVersionKey "CompanyName" "${COMPANY}" VIAddVersionKey "LegalTrademarks" "" VIAddVersionKey "LegalCopyright" "${COPYRIGHT}" VIAddVersionKey "FileDescription" "${DESCRIPTION}" VIAddVersionKey "FileVersion" "${PROD_VERSION}" # Set to the name of another GnuPG installation if one has been detected Var OtherGnuPGDetected # Interface Settings # !define MUI_ABORTWARNING !define MUI_FINISHPAGE_NOAUTOCLOSE !define MUI_UNFINISHPAGE_NOAUTOCLOSE !define MUI_HEADERIMAGE !define MUI_HEADERIMAGE_BITMAP \ "${TOP_SRCDIR}/doc/logo/gpg4win-nsis-header-install-150x57.bmp" !define MUI_HEADERIMAGE_UNBITMAP \ "${TOP_SRCDIR}/doc/logo/gpg4win-nsis-header-uninstall-150x57.bmp" !define MUI_WELCOMEFINISHPAGE_BITMAP \ "${TOP_SRCDIR}/doc/logo/gpg4win-nsis-wizard-install-164x314.bmp" !define MUI_UNWELCOMEFINISHPAGE_BITMAP \ "${TOP_SRCDIR}/doc/logo/gpg4win-nsis-wizard-uninstall-164x314.bmp" !define MUI_ICON "${TOP_SRCDIR}/doc/logo/gpg4win-nsis-install.ico" !define MUI_UNICON "${TOP_SRCDIR}/doc/logo/gpg4win-nsis-uninstall.ico" # Remember the installer language !define MUI_LANGDLL_REGISTRY_ROOT "SHCTX" !define MUI_LANGDLL_REGISTRY_KEY "Software\${PRETTY_PACKAGE_SHORT}" !define MUI_LANGDLL_REGISTRY_VALUENAME "Installer Language" # No Umlaute, please! !define MUI_LANGDLL_INFO "Please choose a language for the setup.$\r$\n\ Bitte die Sprache des Installations-Vorgangs angeben." # The list of wizard pages. !define MUI_WELCOMEPAGE_TITLE "${WELCOME_TITLE_STR}" !define MUI_WELCOMEPAGE_TEXT "${ABOUT_STR}" !insertmacro MUI_PAGE_WELCOME #!define MUI_LICENSEPAGE_BUTTON "$(^NextBtn)" #!define MUI_PAGE_HEADER_SUBTEXT "$(T_GPLHeader)" #!insertmacro MUI_PAGE_LICENSE "license.blurb" !define MUI_PAGE_CUSTOMFUNCTION_SHOW PrintNonAdminWarning !insertmacro MUI_PAGE_COMPONENTS !define MUI_PAGE_CUSTOMFUNCTION_LEAVE CheckExistingVersion !insertmacro MUI_PAGE_DIRECTORY !define MUI_PAGE_CUSTOMFUNCTION_PRE BeforeInstallHooks !insertmacro MUI_PAGE_INSTFILES # Finish page !ifndef SOURCES !define MUI_PAGE_CUSTOMFUNCTION_PRE ShowFinalWarnings !define MUI_PAGE_CUSTOMFUNCTION_SHOW FinishFunction !define MUI_FINISHPAGE_RUN !define MUI_FINISHPAGE_RUN_FUNCTION RunAsUser !define MUI_FINISHPAGE_SHOWREADME "share\gpg4win\README.$(T_LangCode).txt" !define MUI_FINISHPAGE_SHOWREADME_TEXT "$(T_ShowReadme)" !define MUI_FINISHPAGE_SHOWREADME_NOTCHECKED !define MUI_FINISHPAGE_LINK "$(T_MoreInfo)" !define MUI_FINISHPAGE_LINK_LOCATION "$(T_MoreInfoURL)" !insertmacro MUI_PAGE_FINISH Function FinishFunction IfSilent leave !insertmacro SectionFlagIsSet ${SEC_kleopatra} \ ${SF_SELECTED} have_kleo check_gpa check_gpa: !insertmacro SectionFlagIsSet ${SEC_gpa} \ ${SF_SELECTED} have_gpa have_nothing have_nothing: ShowWindow $mui.FinishPage.Run ${SW_HIDE} goto leave have_kleo: SendMessage $mui.FinishPage.Run.Text ${WM_SETTEXT} 0 "STR:$(T_RunKleopatra)" goto leave have_gpa: SendMessage $mui.FinishPage.Run.Text ${WM_SETTEXT} 0 "STR:$(T_RunGPA)" leave: FunctionEnd Function RunAsUser !insertmacro SectionFlagIsSet ${SEC_kleopatra} \ ${SF_SELECTED} do_kleo skip_kleo do_kleo: g4wihelp::DesktopShellRun "$INSTDIR\bin\kleopatra.exe" goto leave skip_kleo: !insertmacro SectionFlagIsSet ${SEC_gpa} \ ${SF_SELECTED} do_gpa leave do_gpa: g4wihelp::DesktopShellRun "$INSTDIR\bin\gpa.exe" leave: FunctionEnd LangString T_RunKleopatra ${LANG_ENGLISH} \ "Run Kleopatra" LangString T_RunGPA ${LANG_ENGLISH} \ "Run GPA" # /SOURCES !endif # Uninstaller pages. !insertmacro MUI_UNPAGE_WELCOME !insertmacro MUI_UNPAGE_CONFIRM !ifndef SOURCES !define MUI_PAGE_CUSTOMFUNCTION_PRE un.CloseApps !endif !insertmacro MUI_UNPAGE_INSTFILES #!insertmacro MUI_UNPAGE_FINISH #Page license #Page components #Page directory #Page instfiles #UninstPage uninstConfirm #UninstPage instfiles # Language support. This has to be done after defining the pages, but # before defining the translation strings. Confusing. # Enable this to not filter languages for the current code page. Note # that languages which are then not filtered out may not be displayed # correctly in the Windows version the user is using. Not recommended, # but can be useful for testing. !ifdef DEBUG !define MUI_LANGDLL_ALLLANGUAGES !endif !insertmacro MUI_LANGUAGE "English" !define PO_HEADER !include "../po/catalogs.nsi" !undef PO_HEADER !insertmacro MUI_RESERVEFILE_LANGDLL ReserveFile "${BUILD_DIR}\g4wihelp.dll" !ifdef SOURCES ReserveFile "${TOP_SRCDIR}\doc\logo\gpg4win-logo-400px.bmp" ReserveFile "${TOP_SRCDIR}\src\gpg4win-splash.wav" !endif ReserveFile "${TOP_SRCDIR}\COPYING" ReserveFile "${TOP_SRCDIR}\doc\logo\gpg4win-logo-164x314.bmp" # Language support LangString T_LangCode ${LANG_ENGLISH} "en" # Startup page LangString T_GPLHeader ${LANG_ENGLISH} \ "This software is licensed under the terms of the GNU General Public \ License (GNU GPL)." LangString T_GPLShort ${LANG_ENGLISH} \ "In short: You are allowed to run this software for any purpose. \ You may distribute it as long as you give the recipients the same \ rights you have received." LangString T_MoreInfo ${LANG_ENGLISH} \ "Go to Gpg4win's webpage" LangString T_MoreInfoURL ${LANG_ENGLISH} "https://www.gpg4win.org" LangString T_ShowReadme ${LANG_ENGLISH} \ "Show the README file" LangString T_NoKeyManager ${LANG_ENGLISH} \ "No key manager has been installed, thus we can't run one now." # Used as subdirectory name in Start Menu. LangString DESC_Menu_manuals ${LANG_ENGLISH} \ "Documentation" LangString DESC_Menu_uninstall ${LANG_ENGLISH} \ "Uninstall" # Used as subdirectory name on Desktop. LangString DESC_Desktop_manuals ${LANG_ENGLISH} \ "Gpg4win Documentation" # Functions # Custom functions and macros for gpg4win. !include "g4wihelp.nsi" # Display a warning if this is a Beta version. #Function PrintBetaWarning # MessageBox MB_OK "$(T_BetaWarning)" #FunctionEnd # Display a warning if GnuPP has been detected and allow the user to abort # the installation. Function PrintGnuPPWarning MessageBox MB_YESNO "$(T_FoundOldGnuPP)" IDYES cont Abort cont: StrCpy $OtherGnuPGDetected "GnuPP" FunctionEnd # Display a warning if GnuPT has been detected and allow the user to abort # the installation. Function PrintGnuPTWarning MessageBox MB_YESNO "$(T_FoundOldGnuPT)" IDYES cont Abort cont: StrCpy $OtherGnuPGDetected "GnuPT" FunctionEnd # Display a warning if the Sourceforge WinPT has been detected and # allow the user to abort the installation. Function PrintWinPTSFWarning MessageBox MB_YESNO "$(T_FoundOldWinPTSF)" IDYES cont Abort cont: StrCpy $OtherGnuPGDetected "WinPT-SF" FunctionEnd # Display a warning if GnuPG Pack has been detected and abort the # the installation. This one clobbers our own Registry space. Function PrintGnuPackWarning MessageBox MB_OK "$(T_FoundOldGnuPack)" Abort FunctionEnd # Check whether one of the other GnuPG systems has already been # installed. We do this by looking at the registry. !ifndef SOURCES Function CheckOtherGnuPGApps StrCpy $OtherGnuPGDetected "" ClearErrors ReadRegStr $0 SHCTX "Software\GNU\GnuPP\Settings" "Path" IfErrors +2 0 Call PrintGnuPPWarning EnumRegKey $0 HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\MenuOrder\Start Menu\Programs\GnuPT" 0 StrCmp $0 "" +2 Call PrintGnuPTWarning ClearErrors ReadRegStr $0 SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\Windows Privacy Tools" "DisplayVersion" IfErrors +2 0 Call PrintWinPTSFWarning ReadRegStr $0 SHCTX "Software\GNU\GnuPG" "Install Directory" Push $0 Push "GnuPG-Pack" Call StrStr Pop $0 StrCmp $0 "" +2 Call PrintGnuPackWarning FunctionEnd !endif # Check whether gpg4win has already been installed. This is called as # a leave function from the directory page. A call to abort will get # back to the directory selection. Function CheckExistingVersion ClearErrors FileOpen $0 "$INSTDIR\VERSION" r IfErrors leave FileRead $0 $R0 FileRead $0 $R1 FileClose $0 Push $R1 Call TrimNewLines Pop $R1 # Extract major version. StrCpy $0 $R1 2 StrCmp $0 "1." 0 leave MessageBox MB_YESNO "$(T_FoundExistingOldVersion)" IDYES leave Abort leave: FunctionEnd # PrintNonAdminWarning # Check whether the current user is in the Administrator group or an # OS version without the need for an Administrator is in use. Print a # diagnostic if this is not the case and abort installation. Function PrintNonAdminWarning #Call PrintBetaWarning ClearErrors UserInfo::GetName IfErrors leave Pop $0 UserInfo::GetAccountType Pop $1 StrCmp $1 "Admin" leave +1 MessageBox MB_YESNO "$(T_AdminWanted)" IDNO exit goto leave exit: Quit leave: FunctionEnd # Check for claws mail installation which was shipped in Gpg4win # versions < 2.2.6 Function CheckClawsUninstall IfFileExists $INSTDIR\claws-mail.exe 0 leave MessageBox MB_YESNO "$(T_FoundOldClaws)" IDYES uninstall IDNO leave uninstall: !insertmacro SelectSection ${SecUninstClawsMail} leave: FunctionEnd # Check whether this is a reinstall and popup a message box to explain # that it is better to close other apps before continuing Function PrintCloseOtherApps g4wihelp::KillProc "kleopatra.exe" g4wihelp::KillProc "gpa.exe" goto leave # TODO check for running outlook and offer to kill it. print_warning: MessageBox MB_OK|MB_ICONEXCLAMATION "$(T_CloseOtherApps)" leave: FunctionEnd Function un.CloseApps g4wihelp::KillProc "kleopatra.exe" g4wihelp::KillProc "gpa.exe" FunctionEnd # Called right before installation Function BeforeInstallHooks Call PrintCloseOtherApps Call CheckClawsUninstall FunctionEnd # Called right before the final page to show more warnings. Function ShowFinalWarnings StrCmp $OtherGnupgDetected "" +2 MessageBox MB_OK "$(T_FoundOldSeeManual)" leave: FunctionEnd #----------------------------------------------- # Strings pertaining to the install options page #----------------------------------------------- # Installation options title LangString T_InstallOptions ${LANG_ENGLISH} "Install Options" # Installation options subtitle 1 LangString T_InstallOptLinks ${LANG_ENGLISH} "Start links" LangString T_InstOptLabelA ${LANG_ENGLISH} \ "Please select where Gpg4win shall install links:" LangString T_InstOptLabelB ${LANG_ENGLISH} \ "(Only programs will be linked into the quick launch bar.)" LangString T_InstOptFieldA ${LANG_ENGLISH} \ "Start Menu" LangString T_InstOptFieldB ${LANG_ENGLISH} \ "Desktop" LangString T_InstOptFieldC ${LANG_ENGLISH} \ "Quick Launch Bar" #------------------------------------------------ # String pertaining to the existing version check #------------------------------------------------ LangString T_FoundExistingVersion ${LANG_ENGLISH} \ "Version $R1 has already been installed. $\r$\n\ Do you want to overwrite it with version ${VERSION}?" LangString T_FoundExistingOldVersion ${LANG_ENGLISH} \ "An old version $R1 has already been installed. It is \ strongly recommended to deinstall previous versions on \ major upgrades. $\r$\n\ Do you want to continue installing Gpg4win ${VERSION} anyway?" LangString T_UninstallingOldVersion ${LANG_ENGLISH} \ "Uninstalling Gpg4win-" #--------------------------------------------- # From the old installation checking functions #--------------------------------------------- LangString T_FoundOldSeeManual ${LANG_ENGLISH} \ "Please see the Gpg4win user manual to learn how to migrate existing \ keys from other GnuPG based installations to Gpg4win." #--------- LangString T_FoundOldGnuPP ${LANG_ENGLISH} \ "An old installation of GnuPP (GNU Privacy Project) has been been \ detected. That software is not maintained anymore and thus should \ be removed. $\r$\n\ $\r$\n\ Do you want to continue installing Gpg4win and take care of the old \ installation later?" #--------- LangString T_FoundOldGnuPT ${LANG_ENGLISH} \ "An installation of GnuPT has been been detected. This may cause \ problems when used along with Gpg4win. $\r$\n\ $\r$\n\ Do you want to continue installing Gpg4win?" #--------- LangString T_FoundOldWinPTSF ${LANG_ENGLISH} \ "An old installation of the Sourceforge hosted WinPT has been been \ detected. That software is not maintained anymore and should \ be removed. $\r$\n\ $\r$\n\ Do you want to continue installing Gpg4win and take care of the old \ installation later?" #-------- LangString T_FoundOldGnuPack ${LANG_ENGLISH} \ "An installation of GnuPG-Pack has been been detected. You need to \ uninstall it before you can continue with Gpg4win installation. $\r$\n\ $\r$\n\ The installation will be aborted now!" # From Function PrintBetaWarning LangString T_BetaWarning ${LANG_ENGLISH} \ "Note: This is a BETA version of Gpg4win. $\r$\n\ $\r$\n\ Beta versions are only intended for testing and \ shall not be used in a production environment." # From Function PrintNonAdminWarning LangString T_AdminWanted ${LANG_ENGLISH} \ "Warning: It is recommended to install Gpg4win system-wide with \ administrator rights. \ $\r$\n\ $\r$\n\ Do you want to continue installing Gpg4win without administrator rights?" # From Function PrintCloseOtherApps LangString T_CloseOtherApps ${LANG_ENGLISH} \ "Please make sure that other applications are not running. \ In particular you should close Outlook and all Explorer \ windows. Gpg4win will try to install anyway but a reboot \ will be required then." LangString T_ShuttingDownWinPT ${LANG_ENGLISH} \ "Trying to shutdown a possible running instance of WinPT." # From Function CheckClawsUninstall LangString T_FoundOldClaws ${LANG_ENGLISH} \ "An old version of Claws Mail was found in your Installation directory. \ $\r$\nPlease note that Claws Mail is no longer bundled with Gpg4win \ and is now available as a standalone package.$\r$\n\ You should uninstall Claws Mail now, and if you wish to \ continue to use it, install an up-to-date version from:$\r$\n\ http://www.claws-mail.org/win32 $\r$\n$\r$\n\ Uninstall Claws Mail from Gpg4win now?" # From Function CheckClawsUninstall -LangString T_XPisDeprecated ${LANG_ENGLISH} \ - "Windows Versions before Windows Vista are no longer maintained by Gpg4win. \ - $\r$\nSupport for them may be removed in a future version." +LangString T_WinisDeprecated ${LANG_ENGLISH} \ + "Windows Versions before Windows 7 are no longer maintained by Gpg4win. \ + $\r$\nSupport for them may be removed in a future version.\ + $\r$\n$\r$\nKleopatra is disabled." # FIXME: The GetAfterChar function comes from the NSIS wiki. Function un.GetAfterChar Exch $0 ; chop char Exch Exch $1 ; input string Push $2 Push $3 StrCpy $2 0 loop: IntOp $2 $2 - 1 StrCpy $3 $1 1 $2 StrCmp $3 "" 0 +3 StrCpy $0 "" Goto exit2 StrCmp $3 $0 exit1 Goto loop exit1: IntOp $2 $2 + 1 StrCpy $0 $1 "" $2 exit2: Pop $3 Pop $2 Pop $1 Exch $0 ; output FunctionEnd Function un.SourceDelete Push "/" Call un.GetAfterChar Pop $R0 Delete "$INSTDIR\$R0" FunctionEnd # StrStr - taken from the NSIS reference # input, top of stack = string to search for # top of stack-1 = string to search in # output, top of stack (replaces with the portion of the string remaining) # modifies no other variables. # # Usage: # Push "this is a long ass string" # Push "ass" # Call StrStr # Pop $R0 # ($R0 at this point is "ass string") # !macro StrStr un Function ${un}StrStr Exch $R1 # st=haystack,old$R1, $R1=needle Exch # st=old$R1,haystack Exch $R2 # st=old$R1,old$R2, $R2=haystack Push $R3 Push $R4 Push $R5 StrLen $R3 $R1 StrCpy $R4 0 # $R1=needle # $R2=haystack # $R3=len(needle) # $R4=cnt # $R5=tmp loop: StrCpy $R5 $R2 $R3 $R4 StrCmp $R5 $R1 done StrCmp $R5 "" done IntOp $R4 $R4 + 1 Goto loop done: StrCpy $R1 $R2 "" $R4 Pop $R5 Pop $R4 Pop $R3 Pop $R2 Exch $R1 FunctionEnd !macroend # TrimNewlines - taken from the NSIS reference # input, top of stack (e.g. whatever$\r$\n) # output, top of stack (replaces, with e.g. whatever) # modifies no other variables. Function TrimNewlines Exch $R0 Push $R1 Push $R2 StrCpy $R1 0 loop: IntOp $R1 $R1 - 1 StrCpy $R2 $R0 1 $R1 StrCmp $R2 "$\r" loop StrCmp $R2 "$\n" loop IntOp $R1 $R1 + 1 IntCmp $R1 0 no_trim_needed StrCpy $R0 $R0 $R1 no_trim_needed: Pop $R2 Pop $R1 Exch $R0 FunctionEnd Function .onInit Call G4wRunOnce SetOutPath $TEMP !ifdef SOURCES File /oname=gpgspltmp.bmp "${TOP_SRCDIR}/doc/logo/gpg4win-logo-400px.bmp" # We play the tune only for the source installer File /oname=gpgspltmp.wav "${TOP_SRCDIR}/src/gpg4win-splash.wav" g4wihelp::playsound $TEMP\gpgspltmp.wav g4wihelp::showsplash 2500 $TEMP\gpgspltmp.bmp Delete $TEMP\gpgspltmp.bmp # Note that we delete gpgspltmp.wav in .onInst{Failed,Success} !else ${GetParameters} $R0 ClearErrors ${GetOptions} $R0 /MINIMAL= $is_minimal Var /GLOBAL changed_dir # Check if the install directory was modified on the command line StrCmp "$INSTDIR" "$PROGRAMFILES\${INSTALL_DIR}" unmodified 0 # It is modified. Save that value. StrCpy $changed_dir "$INSTDIR" # MULITUSER_INIT overwrites directory setting from command line !insertmacro MULTIUSER_INIT StrCpy $INSTDIR "$changed_dir" goto initDone unmodified: !insertmacro MULTIUSER_INIT !endif initDone: # Enable this to force a language selection dialog on every run (the # preferred language is the default). Otherwise, the preferred # language is stored in the registry, and the installer does not ask # on upgrades. !ifdef DEBUG !define MUI_LANGDLL_ALWAYSSHOW !endif !insertmacro MUI_LANGDLL_DISPLAY -${IfNot} ${AtLeastWinVista} - MessageBox MB_OK "$(T_XPisDeprecated)" +${IfNot} ${AtLeastWin7} + MessageBox MB_OK "$(T_WinisDeprecated)" ${Endif} ${MementoSectionRestore} Call CalcDefaults Call CalcDepends !ifndef SOURCES Call CheckOtherGnuPGApps !endif FunctionEnd Function un.onInit !ifndef SOURCES !insertmacro MULTIUSER_UNINIT !endif # Remove the language preference. !insertmacro MUI_UNGETLANGUAGE FunctionEnd # This must be in a central place. Urgs. !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN !ifdef HAVE_PKG_GNUPG_W32 !insertmacro MUI_DESCRIPTION_TEXT ${SEC_gnupg_w32} $(DESC_SEC_gnupg_w32) !endif !ifdef HAVE_PKG_GPGOL !insertmacro MUI_DESCRIPTION_TEXT ${SEC_gpgol} $(DESC_SEC_gpgol) !endif !ifdef HAVE_PKG_GPGEX !insertmacro MUI_DESCRIPTION_TEXT ${SEC_gpgex} $(DESC_SEC_gpgex) !endif !ifdef HAVE_PKG_PAPERKEY !insertmacro MUI_DESCRIPTION_TEXT ${SEC_paperkey} $(DESC_SEC_paperkey) !endif !ifdef HAVE_PKG_GPA !insertmacro MUI_DESCRIPTION_TEXT ${SEC_gpa} $(DESC_SEC_gpa) !endif !ifdef HAVE_PKG_KLEOPATRA !insertmacro MUI_DESCRIPTION_TEXT ${SEC_kleopatra} $(DESC_SEC_kleopatra) !endif !ifdef HAVE_PKG_MAN_NOVICE_EN !insertmacro MUI_DESCRIPTION_TEXT ${SEC_man_novice_en} $(DESC_SEC_man_novice_en) !endif !ifdef HAVE_PKG_MAN_ADVANCED_EN !insertmacro MUI_DESCRIPTION_TEXT ${SEC_man_advanced_en} $(DESC_SEC_man_advanced_en) !endif !ifdef HAVE_PKG_COMPENDIUM !insertmacro MUI_DESCRIPTION_TEXT ${SEC_compendium} $(DESC_SEC_compendium) !endif !ifdef HAVE_PKG_MAN_NOVICE_DE !insertmacro MUI_DESCRIPTION_TEXT ${SEC_man_novice_de} $(DESC_SEC_man_novice_de) !endif !ifdef HAVE_PKG_MAN_ADVANCED_DE !insertmacro MUI_DESCRIPTION_TEXT ${SEC_man_advanced_de} $(DESC_SEC_man_advanced_de) !endif !insertmacro MUI_FUNCTION_DESCRIPTION_END