diff --git a/build-aux/speedo.mk b/build-aux/speedo.mk index 005add722..8a2053a7d 100644 --- a/build-aux/speedo.mk +++ b/build-aux/speedo.mk @@ -1,1083 +1,1108 @@ # speedo.mk - Speedo rebuilds speedily. # Copyright (C) 2008, 2014 g10 Code GmbH # # speedo 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 3 of the License, or # (at your option) any later version. # # speedo 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 . # speedo builds gnupg-related packages from GIT and installs them in a # user directory, thereby providing a non-obstrusive test environment. # speedo does only work with GNU make. The build system is similar to # that of gpg4win. The following commands are supported: # # make -f speedo.mk all pkg2rep=/dir/with/tarballs # or # make -f speedo.mk # # Builds all packages and installs them under PLAY/inst. At the end, # speedo prints commands that can be executed in the local shell to # make use of the installed packages. # # make -f speedo.mk clean # or # make -f speedo.mk clean-PACKAGE # # Removes all packages or the package PACKAGE from the installation # and build tree. A subsequent make will rebuild these (and only # these) packages. # # make -f speedo.mk report # or # make -f speedo.mk report-PACKAGE # # Lists packages and versions. # # We need to know our own name. SPEEDO_MK := $(realpath $(lastword $(MAKEFILE_LIST))) .PHONY : help native native-gui w32-installer w32-source .PHONY : git-native git-native-gui git-w32-installer git-w32-source .PHONY : this-native this-native-gui this-w32-installer this-w32-source help: @echo 'usage: make -f speedo.mk TARGET' @echo ' with TARGET being one of:' @echo ' help This help' @echo ' native Native build of the GnuPG core' @echo ' native-gui Ditto but with pinentry and GPA' @echo ' w32-installer Build a Windows installer' @echo ' w32-source Pack a source archive' @echo @echo 'You may append INSTALL_PREFIX= for native builds.' @echo 'Prepend TARGET with "git-" to build from GIT repos.' @echo 'Prepend TARGET with "this-" to build from the source tarball.' @echo 'Use CUSTOM_SWDB=1 for an already downloaded swdb.lst.' SPEEDOMAKE := $(MAKE) -f $(SPEEDO_MK) UPD_SWDB=1 native: check-tools $(SPEEDOMAKE) TARGETOS=native WHAT=release WITH_GUI=0 all git-native: check-tools $(SPEEDOMAKE) TARGETOS=native WHAT=git WITH_GUI=0 all this-native: check-tools $(SPEEDOMAKE) TARGETOS=native WHAT=this WITH_GUI=0 all native-gui: check-tools $(SPEEDOMAKE) TARGETOS=native WHAT=release WITH_GUI=1 all git-native-gui: check-tools $(SPEEDOMAKE) TARGETOS=native WHAT=git WITH_GUI=1 all this-native-gui: check-tools $(SPEEDOMAKE) TARGETOS=native WHAT=this WITH_GUI=1 all w32-installer: check-tools - $(SPEEDOMAKE) TARGETOS=w32 WHAT=release WITH_GUI=1 installer + $(SPEEDOMAKE) TARGETOS=w32 WHAT=release WITH_GUI=0 installer git-w32-installer: check-tools - $(SPEEDOMAKE) TARGETOS=w32 WHAT=git WITH_GUI=1 installer + $(SPEEDOMAKE) TARGETOS=w32 WHAT=git WITH_GUI=0 installer this-w32-installer: check-tools - $(SPEEDOMAKE) TARGETOS=w32 WHAT=this WITH_GUI=1 installer + $(SPEEDOMAKE) TARGETOS=w32 WHAT=this WITH_GUI=0 installer w32-source: check-tools - $(SPEEDOMAKE) TARGETOS=w32 WHAT=release WITH_GUI=1 dist-source + $(SPEEDOMAKE) TARGETOS=w32 WHAT=release WITH_GUI=0 dist-source git-w32-source: check-tools - $(SPEEDOMAKE) TARGETOS=w32 WHAT=git WITH_GUI=1 dist-source + $(SPEEDOMAKE) TARGETOS=w32 WHAT=git WITH_GUI=0 dist-source this-w32-source: check-tools - $(SPEEDOMAKE) TARGETOS=w32 WHAT=git WITH_GUI=1 dist-source + $(SPEEDOMAKE) TARGETOS=w32 WHAT=git WITH_GUI=0 dist-source # Set this to "git" to build from git, # to "release" from tarballs, # to "this" from the unpacked sources. WHAT=git # Set target to "native" or "w32" TARGETOS= # Set to 1 to build the GUI tools WITH_GUI=0 # Set to 1 to use a pre-installed swdb.lst instead of the online version. CUSTOM_SWDB=0 # Set to 1 to really download the swdb. UPD_SWDB=0 # Set to the location of the directory with tarballs of # external packages. TARBALLS=$(shell pwd)/../tarballs # Number of parallel make jobs MAKE_J=3 # Name to use for the w32 installer and sources INST_NAME=gnupg-w32 # Use this to override the installaion directory for native builds. INSTALL_PREFIX=none # Directory names. # They must be absolute, as we switch directories pretty often. root := $(shell pwd)/PLAY sdir := $(root)/src bdir := $(root)/build bdir6:= $(root)/build-w64 ifeq ($(INSTALL_PREFIX),none) idir := $(root)/inst else idir := $(abspath $(INSTALL_PREFIX)) endif idir6:= $(root)/inst-w64 stampdir := $(root)/stamps topsrc := $(shell cd $(dir $(SPEEDO_MK)).. && pwd) auxsrc := $(topsrc)/build-aux/speedo patdir := $(topsrc)/build-aux/speedo/patches w32src := $(topsrc)/build-aux/speedo/w32 # =====BEGIN LIST OF PACKAGES===== # The packages that should be built. The order is also the build order. # Fixme: Do we need to build pkg-config for cross-building? speedo_spkgs = \ libgpg-error npth libgcrypt ifeq ($(TARGETOS),w32) speedo_spkgs += \ - zlib bzip2 adns libiconv gettext + zlib bzip2 adns libiconv +ifeq ($(WITH_GUI),1) +speedo_spkgs += gettext +endif endif speedo_spkgs += \ libassuan libksba gnupg ifeq ($(TARGETOS),w32) +ifeq ($(WITH_GUI),1) speedo_spkgs += \ libffi glib pkg-config endif +endif speedo_spkgs += \ gpgme ifeq ($(TARGETOS),w32) +ifeq ($(WITH_GUI),1) speedo_spkgs += \ libpng \ gdk-pixbuf atk pixman cairo pango gtk+ endif +endif ifeq ($(WITH_GUI),1) speedo_spkgs += \ pinentry gpa -endif - ifeq ($(TARGETOS),w32) speedo_spkgs += \ gpgex endif +endif + # =====END LIST OF PACKAGES===== -# Packages which are additionally build for 64 bit Windows -speedo_w64_spkgs = \ - libgpg-error libiconv gettext libassuan gpgex +# Packages which are additionally build for 64 bit Windows. They are +# only used for gpgex and thus we need to build them only if we want +# a full installer. +speedo_w64_spkgs = +ifeq ($(WITH_GUI),1) +speedo_w64_spkgs += ibgpg-error libiconv gettext libassuan gpgex +endif # Packages which use the gnupg autogen.sh build style speedo_gnupg_style = \ libgpg-error npth libgcrypt \ libassuan libksba gnupg gpgme \ pinentry gpa gpgex # Packages which use only make and no build directory speedo_make_only_style = \ zlib bzip2 # Get the content of the software DB. ifeq ($(CUSTOM_SWDB),1) getswdb_options = --skip-download --skip-verify else getswdb_options = endif ifeq ($(UPD_SWDB),1) SWDB := $(shell $(topsrc)/build-aux/getswdb.sh $(getswdb_options) && echo okay) ifeq ($(strip $(SWDB)),) +ifneq ($(WHAT),git) $(error Error getting GnuPG software version database) endif +endif # Version numbers of the released packages gnupg_ver = $(shell cat $(topsrc)/VERSION) libgpg_error_ver := $(shell awk '$$1=="libgpg_error_ver" {print $$2}' swdb.lst) libgpg_error_sha1:= $(shell awk '$$1=="libgpg_error_sha1" {print $$2}' swdb.lst) npth_ver := $(shell awk '$$1=="npth_ver" {print $$2}' swdb.lst) npth_sha1 := $(shell awk '$$1=="npth_sha1" {print $$2}' swdb.lst) libgcrypt_ver := $(shell awk '$$1=="libgcrypt_ver" {print $$2}' swdb.lst) libgcrypt_sha1 := $(shell awk '$$1=="libgcrypt_sha1" {print $$2}' swdb.lst) libassuan_ver := $(shell awk '$$1=="libassuan_ver" {print $$2}' swdb.lst) libassuan_sha1 := $(shell awk '$$1=="libassuan_sha1" {print $$2}' swdb.lst) libksba_ver := $(shell awk '$$1=="libksba_ver" {print $$2}' swdb.lst) libksba_sha1 := $(shell awk '$$1=="libksba_sha1" {print $$2}' swdb.lst) gpgme_ver := $(shell awk '$$1=="gpgme_ver" {print $$2}' swdb.lst) gpgme_sha1 := $(shell awk '$$1=="gpgme_sha1" {print $$2}' swdb.lst) pinentry_ver := $(shell awk '$$1=="pinentry_ver" {print $$2}' swdb.lst) pinentry_sha1 := $(shell awk '$$1=="pinentry_sha1" {print $$2}' swdb.lst) gpa_ver := $(shell awk '$$1=="gpa_ver" {print $$2}' swdb.lst) gpa_sha1 := $(shell awk '$$1=="gpa_sha1" {print $$2}' swdb.lst) gpgex_ver := $(shell awk '$$1=="gpgex_ver" {print $$2}' swdb.lst) gpgex_sha1 := $(shell awk '$$1=="gpgex_sha1" {print $$2}' swdb.lst) zlib_ver := $(shell awk '$$1=="zlib_ver" {print $$2}' swdb.lst) zlib_sha1 := $(shell awk '$$1=="zlib_sha1_gz" {print $$2}' swdb.lst) bzip2_ver := $(shell awk '$$1=="bzip2_ver" {print $$2}' swdb.lst) bzip2_sha1 := $(shell awk '$$1=="bzip2_sha1_gz" {print $$2}' swdb.lst) adns_ver := $(shell awk '$$1=="adns_ver" {print $$2}' swdb.lst) adns_sha1 := $(shell awk '$$1=="adns_sha1" {print $$2}' swdb.lst) $(info Information from the version database) $(info GnuPG ..........: $(gnupg_ver)) $(info Libgpg-error ...: $(libgpg_error_ver)) $(info Npth ...........: $(npth_ver)) $(info Libgcrypt ......: $(libgcrypt_ver)) $(info Libassuan ......: $(libassuan_ver)) $(info Zlib ...........: $(zlib_ver)) $(info Bzip2 ..........: $(bzip2_ver)) $(info ADNS ...........: $(adns_ver)) $(info GPGME ..........: $(gpgme_ver)) $(info Pinentry .......: $(pinentry_ver)) $(info GPA ............: $(gpa_ver)) $(info GpgEX.... ......: $(gpgex_ver)) endif # Version number for external packages pkg_config_ver = 0.23 libiconv_ver = 1.14 gettext_ver = 0.18.2.1 libffi_ver = 3.0.13 glib_ver = 2.34.3 libpng_ver = 1.4.12 gdk_pixbuf_ver = 2.26.5 atk_ver = 1.32.0 pango_ver = 1.29.4 pixman_ver = 0.32.4 cairo_ver = 1.12.16 gtk__ver = 2.24.17 # The GIT repository. Using a local repo is much faster. #gitrep = git://git.gnupg.org gitrep = ${HOME}/s # The tarball directories pkgrep = ftp://ftp.gnupg.org/gcrypt pkg10rep = ftp://ftp.g10code.com/g10code pkg2rep = $(TARBALLS) # For each package, the following variables can be defined: # # speedo_pkg_PACKAGE_git: The GIT repository that should be built. # speedo_pkg_PACKAGE_gitref: The GIT revision to checkout # # speedo_pkg_PACKAGE_tar: URL to the tar file that should be built. # # Exactly one of the above variables is required. Note that this # version of speedo does not cache repositories or tar files, and does # not test the integrity of the downloaded software. If you care # about this, you can also specify filenames to locally verified files. # Filenames are differentiated from URLs by starting with a slash '/'. # # speedo_pkg_PACKAGE_configure: Extra arguments to configure. # # speedo_pkg_PACKAGE_make_args: Extra arguments to make. # # speedo_pkg_PACKAGE_make_args_inst: Extra arguments to make install. # # Note that you can override the defaults in this file in a local file # "config.mk" ifeq ($(WHAT),this) else ifeq ($(WHAT),git) speedo_pkg_libgpg_error_git = $(gitrep)/libgpg-error speedo_pkg_libgpg_error_gitref = master speedo_pkg_npth_git = $(gitrep)/npth speedo_pkg_npth_gitref = master speedo_pkg_libassuan_git = $(gitrep)/libassuan speedo_pkg_libassuan_gitref = master speedo_pkg_libgcrypt_git = $(gitrep)/libgcrypt - speedo_pkg_libgcrypt_gitref = LIBGCRYPT-1-6-BRANCH + speedo_pkg_libgcrypt_gitref = master speedo_pkg_libksba_git = $(gitrep)/libksba speedo_pkg_libksba_gitref = master speedo_pkg_gpgme_git = $(gitrep)/gpgme speedo_pkg_gpgme_gitref = master speedo_pkg_pinentry_git = $(gitrep)/pinentry speedo_pkg_pinentry_gitref = master speedo_pkg_gpa_git = $(gitrep)/gpa speedo_pkg_gpa_gitref = master speedo_pkg_gpgex_git = $(gitrep)/gpgex speedo_pkg_gpgex_gitref = master else ifeq ($(WHAT),release) speedo_pkg_libgpg_error_tar = \ $(pkgrep)/libgpg-error/libgpg-error-$(libgpg_error_ver).tar.bz2 speedo_pkg_npth_tar = \ $(pkgrep)/npth/npth-$(npth_ver).tar.bz2 speedo_pkg_libassuan_tar = \ $(pkgrep)/libassuan/libassuan-$(libassuan_ver).tar.bz2 speedo_pkg_libgcrypt_tar = \ $(pkgrep)/libgcrypt/libgcrypt-$(libgcrypt_ver).tar.bz2 speedo_pkg_libksba_tar = \ $(pkgrep)/libksba/libksba-$(libksba_ver).tar.bz2 speedo_pkg_gpgme_tar = \ $(pkgrep)/gpgme/gpgme-$(gpgme_ver).tar.bz2 speedo_pkg_pinentry_tar = \ $(pkgrep)/pinentry/pinentry-$(pinentry_ver).tar.bz2 speedo_pkg_gpa_tar = \ $(pkgrep)/gpa/gpa-$(gpa_ver).tar.bz2 speedo_pkg_gpgex_tar = \ $(pkg10rep)/gpgex/gpgex-$(gpgex_ver).tar.bz2 else $(error invalid value for WHAT (use on of: git release this)) endif speedo_pkg_pkg_config_tar = $(pkg2rep)/pkg-config-$(pkg_config_ver).tar.gz speedo_pkg_zlib_tar = $(pkgrep)/zlib/zlib-$(zlib_ver).tar.gz speedo_pkg_bzip2_tar = $(pkgrep)/bzip2/bzip2-$(bzip2_ver).tar.gz speedo_pkg_adns_tar = $(pkg10rep)/adns/adns-$(adns_ver).tar.bz2 speedo_pkg_libiconv_tar = $(pkg2rep)/libiconv-$(libiconv_ver).tar.gz speedo_pkg_gettext_tar = $(pkg2rep)/gettext-$(gettext_ver).tar.gz speedo_pkg_libffi_tar = $(pkg2rep)/libffi-$(libffi_ver).tar.gz speedo_pkg_glib_tar = $(pkg2rep)/glib-$(glib_ver).tar.xz speedo_pkg_libpng_tar = $(pkg2rep)/libpng-$(libpng_ver).tar.bz2 speedo_pkg_gdk_pixbuf_tar = $(pkg2rep)/gdk-pixbuf-$(gdk_pixbuf_ver).tar.xz speedo_pkg_atk_tar = $(pkg2rep)/atk-$(atk_ver).tar.bz2 speedo_pkg_pango_tar = $(pkg2rep)/pango-$(pango_ver).tar.bz2 speedo_pkg_pixman_tar = $(pkg2rep)/pixman-$(pixman_ver).tar.gz speedo_pkg_cairo_tar = $(pkg2rep)/cairo-$(cairo_ver).tar.xz speedo_pkg_gtk__tar = $(pkg2rep)/gtk+-$(gtk__ver).tar.xz # # Package build options # speedo_pkg_libgpg_error_configure = --enable-static speedo_pkg_w64_libgpg_error_configure = --enable-static speedo_pkg_libassuan_configure = --enable-static speedo_pkg_w64_libassuan_configure = --enable-static speedo_pkg_libgcrypt_configure = --disable-static speedo_pkg_libksba_configure = --disable-static ifeq ($(TARGETOS),w32) speedo_pkg_gnupg_configure = --enable-gpg2-is-gpg --disable-g13 --disable-ntbtls else speedo_pkg_gnupg_configure = --disable-g13 endif speedo_pkg_gnupg_extracflags = -g # Create the version info files only for W32 so that they won't get # installed if for example INSTALL_PREFIX=/usr/local is used. ifeq ($(TARGETOS),w32) define speedo_pkg_gnupg_post_install (set -e; \ sed -n 's/.*PACKAGE_VERSION "\(.*\)"/\1/p' config.h >$(idir)/INST_VERSION; \ sed -n 's/.*W32INFO_VI_PRODUCTVERSION \(.*\)/\1/p' common/w32info-rc.h \ |sed 's/,/./g' >$(idir)/INST_PROD_VERSION ) endef endif # The LDFLAGS is needed for -lintl for glib. +ifeq ($(WITH_GUI),1) speedo_pkg_gpgme_configure = \ --enable-static --enable-w32-glib --disable-w32-qt \ --with-gpg-error-prefix=$(idir) \ LDFLAGS=-L$(idir)/lib +else +speedo_pkg_gpgme_configure = \ + --disable-static --disable-w32-glib --disable-w32-qt \ + --with-gpg-error-prefix=$(idir) \ + LDFLAGS=-L$(idir)/lib +endif speedo_pkg_pinentry_configure = \ --disable-pinentry-qt --disable-pinentry-qt4 --disable-pinentry-gtk \ --enable-pinentry-gtk2 \ --with-glib-prefix=$(idir) --with-gtk-prefix=$(idir) \ CPPFLAGS=-I$(idir)/include \ LDFLAGS=-L$(idir)/lib \ CXXFLAGS=-static-libstdc++ speedo_pkg_gpa_configure = \ --with-libiconv-prefix=$(idir) --with-libintl-prefix=$(idir) \ --with-gpgme-prefix=$(idir) --with-zlib=$(idir) \ --with-libassuan-prefix=$(idir) --with-gpg-error-prefix=$(idir) speedo_pkg_gpgex_configure = \ --with-gpg-error-prefix=$(idir) \ --with-libassuan-prefix=$(idir) \ --enable-gpa-only speedo_pkg_w64_gpgex_configure = \ --with-gpg-error-prefix=$(idir6) \ --with-libassuan-prefix=$(idir6) \ --enable-gpa-only # # External packages # ifeq ($(TARGETOS),w32) speedo_pkg_zlib_make_args = \ -fwin32/Makefile.gcc PREFIX=$(host)- IMPLIB=libz.dll.a speedo_pkg_zlib_make_args_inst = \ -fwin32/Makefile.gcc \ BINARY_PATH=$(idir)/bin INCLUDE_PATH=$(idir)/include \ LIBRARY_PATH=$(idir)/lib SHARED_MODE=1 IMPLIB=libz.dll.a # Zlib needs some special magic to generate a libtool file. # We also install the pc file here. define speedo_pkg_zlib_post_install (set -e; mkdir $(idir)/lib/pkgconfig || true; \ cp $(auxsrc)/zlib.pc $(idir)/lib/pkgconfig/; \ cd $(idir); \ echo "# Generated by libtool" > lib/libz.la \ echo "dlname='../bin/zlib1.dll'" >> lib/libz.la; \ echo "library_names='libz.dll.a'" >> lib/libz.la; \ echo "old_library='libz.a'" >> lib/libz.la; \ echo "dependency_libs=''" >> lib/libz.la; \ echo "current=1" >> lib/libz.la; \ echo "age=2" >> lib/libz.la; \ echo "revision=5" >> lib/libz.la; \ echo "installed=yes" >> lib/libz.la; \ echo "shouldnotlink=no" >> lib/libz.la; \ echo "dlopen=''" >> lib/libz.la; \ echo "dlpreopen=''" >> lib/libz.la; \ echo "libdir=\"$(idir)/lib\"" >> lib/libz.la) endef endif ifeq ($(TARGETOS),w32) speedo_pkg_bzip2_make_args = \ CC="$(host)-gcc" AR="$(host)-ar" RANLIB="$(host)-ranlib" speedo_pkg_bzip2_make_args_inst = \ PREFIX=$(idir) CC="$(host)-gcc" AR="$(host)-ar" RANLIB="$(host)-ranlib" endif speedo_pkg_w64_libiconv_configure = \ --enable-shared=no --enable-static=yes speedo_pkg_gettext_configure = \ --with-lib-prefix=$(idir) --with-libiconv-prefix=$(idir) \ CPPFLAGS=-I$(idir)/include LDFLAGS=-L$(idir)/lib speedo_pkg_w64_gettext_configure = \ --with-lib-prefix=$(idir) --with-libiconv-prefix=$(idir) \ CPPFLAGS=-I$(idir6)/include LDFLAGS=-L$(idir6)/lib speedo_pkg_gettext_extracflags = -O2 # We only need gettext-runtime and there is sadly no top level # configure option for this speedo_pkg_gettext_make_dir = gettext-runtime speedo_pkg_glib_configure = \ --disable-modular-tests \ --with-libiconv=gnu \ CPPFLAGS=-I$(idir)/include \ LDFLAGS=-L$(idir)/lib \ CCC=$(host)-g++ \ LIBFFI_CFLAGS=-I$(idir)/lib/libffi-$(libffi_ver)/include \ LIBFFI_LIBS=\"-L$(idir)/lib -lffi\" ifeq ($(TARGETOS),w32) speedo_pkg_glib_extracflags = -march=i486 endif ifeq ($(TARGETOS),w32) speedo_pkg_libpng_configure = \ CPPFLAGS=\"-I$(idir)/include -DPNG_BUILD_DLL\" \ LDFLAGS=\"-L$(idir)/lib\" LIBPNG_DEFINES=\"-DPNG_BUILD_DLL\" else speedo_pkg_libpng_configure = \ CPPFLAGS=\"-I$(idir)/include\" \ LDFLAGS=\"-L$(idir)/lib\" endif ifneq ($(TARGETOS),w32) speedo_pkg_gdk_pixbuf_configure = --without-libtiff --without-libjpeg endif speedo_pkg_pixman_configure = \ CPPFLAGS=-I$(idir)/include \ LDFLAGS=-L$(idir)/lib ifeq ($(TARGETOS),w32) speedo_pkg_cairo_configure = \ --disable-qt --disable-ft --disable-fc \ --enable-win32 --enable-win32-font \ CPPFLAGS=-I$(idir)/include \ LDFLAGS=-L$(idir)/lib else speedo_pkg_cairo_configure = \ --disable-qt \ CPPFLAGS=-I$(idir)/include \ LDFLAGS=-L$(idir)/lib endif speedo_pkg_pango_configure = \ --disable-gtk-doc \ CPPFLAGS=-I$(idir)/include \ LDFLAGS=-L$(idir)/lib speedo_pkg_gtk__configure = \ --disable-cups \ CPPFLAGS=-I$(idir)/include \ LDFLAGS=-L$(idir)/lib # --------- all: all-speedo report: report-speedo clean: clean-speedo ifeq ($(TARGETOS),w32) STRIP = i686-w64-mingw32-strip else STRIP = strip endif W32CC = i686-w64-mingw32-gcc -include config.mk # # The generic speedo code # MKDIR=mkdir MAKENSIS=makensis SHA1SUM := $(shell $(topsrc)/build-aux/getswdb.sh --find-sha1sum) ifeq ($(SHA1SUM),false) $(error The sha1sum tool is missing) endif BUILD_ISODATE=$(shell date -u +%Y-%m-%d) BUILD_DATESTR=$(subst -,,$(BUILD_ISODATE)) # The next two macros will work only after gnupg has been build. ifeq ($(TARGETOS),w32) INST_VERSION=$(shell head -1 $(idir)/INST_VERSION) INST_PROD_VERSION=$(shell head -1 $(idir)/INST_PROD_VERSION) endif # List with packages speedo_build_list = $(speedo_spkgs) speedo_w64_build_list = $(speedo_w64_spkgs) # To avoid running external commands during the read phase (":=" style # assignments), we check that the targetos has been given ifneq ($(TARGETOS),) # Determine build and host system build := $(shell $(topsrc)/autogen.sh --silent --print-build) ifeq ($(TARGETOS),w32) speedo_autogen_buildopt := --build-w32 speedo_autogen_buildopt6 := --build-w64 host := $(shell $(topsrc)/autogen.sh --silent --print-host --build-w32) host6:= $(shell $(topsrc)/autogen.sh --silent --print-host --build-w64) speedo_host_build_option := --host=$(host) --build=$(build) speedo_host_build_option6 := --host=$(host6) --build=$(build) speedo_w32_cflags := -mms-bitfields else speedo_autogen_buildopt := host := speedo_host_build_option := speedo_w32_cflags := endif ifeq ($(MAKE_J),) speedo_makeopt= else speedo_makeopt=-j$(MAKE_J) endif # End non-empty TARGETOS endif # The playground area is our scratch area, where we unpack, build and # install the packages. $(stampdir)/stamp-directories: $(MKDIR) $(root) || true $(MKDIR) $(stampdir) || true $(MKDIR) $(sdir) || true $(MKDIR) $(bdir) || true $(MKDIR) $(idir) || true ifeq ($(TARGETOS),w32) $(MKDIR) $(bdir6) || true $(MKDIR) $(idir6) || true endif touch $(stampdir)/stamp-directories # Frob the name $1 by converting all '-' and '+' characters to '_'. define FROB_macro $(subst +,_,$(subst -,_,$(1))) endef # Get the variable $(1) (which may contain '-' and '+' characters). define GETVAR $($(call FROB_macro,$(1))) endef # Set a couple of common variables. define SETVARS pkg="$(1)"; \ git="$(call GETVAR,speedo_pkg_$(1)_git)"; \ gitref="$(call GETVAR,speedo_pkg_$(1)_gitref)"; \ tar="$(call GETVAR,speedo_pkg_$(1)_tar)"; \ sha1="$(call GETVAR,$(1)_sha1)"; \ pkgsdir="$(sdir)/$(1)"; \ if [ "$(1)" = "gnupg" ]; then \ git=''; \ gitref=''; \ tar=''; \ pkgsdir="$(topsrc)"; \ fi; \ pkgbdir="$(bdir)/$(1)"; \ pkgcfg="$(call GETVAR,speedo_pkg_$(1)_configure)"; \ tmp="$(speedo_w32_cflags) \ $(call GETVAR,speedo_pkg_$(1)_extracflags)"; \ if [ x$$$$(echo "$$$$tmp" | tr -d '[:space:]')x != xx ]; then \ pkgextracflags="CFLAGS=\"$$$$tmp\""; \ else \ pkgextracflags=; \ fi; \ pkgmkdir="$(call GETVAR,speedo_pkg_$(1)_make_dir)"; \ pkgmkargs="$(call GETVAR,speedo_pkg_$(1)_make_args)"; \ pkgmkargs_inst="$(call GETVAR,speedo_pkg_$(1)_make_args_inst)"; \ pkgmkargs_uninst="$(call GETVAR,speedo_pkg_$(1)_make_args_uninst)"; \ export PKG_CONFIG="/usr/bin/pkg-config"; \ export PKG_CONFIG_PATH="$(idir)/lib/pkgconfig"; \ [ "$(TARGETOS)" != native ] && export PKG_CONFIG_LIBDIR=""; \ export SYSROOT="$(idir)"; \ export PATH="$(idir)/bin:$${PATH}"; \ export LD_LIBRARY_PATH="$(idir)/lib:$${LD_LIBRARY_PATH}" endef define SETVARS_W64 pkg="$(1)"; \ git="$(call GETVAR,speedo_pkg_$(1)_git)"; \ gitref="$(call GETVAR,speedo_pkg_$(1)_gitref)"; \ tar="$(call GETVAR,speedo_pkg_$(1)_tar)"; \ sha1="$(call GETVAR,$(1)_sha1)"; \ pkgsdir="$(sdir)/$(1)"; \ if [ "$(1)" = "gnupg" ]; then \ git=''; \ gitref=''; \ tar=''; \ pkgsdir="$(topsrc)"; \ fi; \ pkgbdir="$(bdir6)/$(1)"; \ pkgcfg="$(call GETVAR,speedo_pkg_w64_$(1)_configure)"; \ tmp="$(speedo_w32_cflags) \ $(call GETVAR,speedo_pkg_$(1)_extracflags)"; \ if [ x$$$$(echo "$$$$tmp" | tr -d '[:space:]')x != xx ]; then \ pkgextracflags="CFLAGS=\"$$$$tmp\""; \ else \ pkgextracflags=; \ fi; \ pkgmkdir="$(call GETVAR,speedo_pkg_$(1)_make_dir)"; \ pkgmkargs="$(call GETVAR,speedo_pkg_$(1)_make_args)"; \ pkgmkargs_inst="$(call GETVAR,speedo_pkg_$(1)_make_args_inst)"; \ pkgmkargs_uninst="$(call GETVAR,speedo_pkg_$(1)_make_args_uninst)"; \ export PKG_CONFIG="/usr/bin/pkg-config"; \ export PKG_CONFIG_PATH="$(idir6)/lib/pkgconfig"; \ [ "$(TARGETOS)" != native ] && export PKG_CONFIG_LIBDIR=""; \ export SYSROOT="$(idir6)"; \ export PATH="$(idir6)/bin:$${PATH}"; \ export LD_LIBRARY_PATH="$(idir6)/lib:$${LD_LIBRARY_PATH}" endef # Template for source packages. # Note that the gnupg package is special: The package source dir is # the same as the topsrc dir and thus we need to detect the gnupg # package and cd to that directory. We also test that no in-source build # has been done. autogen.sh is not run for gnupg. # define SPKG_template $(stampdir)/stamp-$(1)-00-unpack: $(stampdir)/stamp-directories @echo "speedo: /*" @echo "speedo: * $(1)" @echo "speedo: */" @(set -e; cd $(sdir); \ $(call SETVARS,$(1)); \ if [ "$(WHAT)" = "this" ]; then \ echo "speedo: using included source"; \ elif [ "$(1)" = "gnupg" ]; then \ cd $$$${pkgsdir}; \ if [ -f config.log ]; then \ echo "GnuPG has already been build in-source" >&2 ;\ echo "Please run \"make distclean\" and retry" >&2 ;\ exit 1 ; \ fi; \ echo "speedo: unpacking gnupg not needed"; \ elif [ -n "$$$${git}" ]; then \ echo "speedo: unpacking $(1) from $$$${git}:$$$${gitref}"; \ git clone -b "$$$${gitref}" "$$$${git}" "$$$${pkg}"; \ cd "$$$${pkg}"; \ AUTOGEN_SH_SILENT=1 ./autogen.sh; \ elif [ -n "$$$${tar}" ]; then \ echo "speedo: unpacking $(1) from $$$${tar}"; \ case "$$$${tar}" in \ *.gz) pretar=zcat ;; \ *.bz2) pretar=bzcat ;; \ *.xz) pretar=xzcat ;; \ *) pretar=cat ;; \ esac; \ [ -f tmp.tgz ] && rm tmp.tgz; \ case "$$$${tar}" in \ /*) $$$${pretar} < $$$${tar} | tar xf - ;; \ *) wget -q -O - $$$${tar} | tee tmp.tgz \ | $$$${pretar} | tar x$$$${opt}f - ;; \ esac; \ if [ -f tmp.tgz ]; then \ if [ -n "$$$${sha1}" ]; then \ tmp=$$$$($(SHA1SUM) /dev/null && \ $(MAKE) --no-print-directory \ $$$${pkgmkargs_uninst} uninstall V=0 ) || true;\ if [ "$(1)" = "gnupg" ]; then \ rm -fR "$$$${pkgbdir}" || true ;\ else \ rm -fR "$$$${pkgsdir}" "$$$${pkgbdir}" || true;\ fi) -rm -f $(stampdir)/stamp-final-$(1) $(stampdir)/stamp-$(1)-* .PHONY : build-$(1) build-$(1): $(stampdir)/stamp-final-$(1) .PHONY : report-$(1) report-$(1): @($(call SETVARS,$(1)); \ echo -n $(1):\ ; \ if [ -n "$$$${git}" ]; then \ if [ -e "$$$${pkgsdir}/.git" ]; then \ cd "$$$${pkgsdir}" && \ git describe ; \ else \ echo missing; \ fi \ elif [ -n "$$$${tar}" ]; then \ base=`echo "$$$${tar}" | sed -e 's,^.*/,,' \ | sed -e 's,\.tar.*$$$$,,'`; \ echo $$$${base} ; \ fi) endef # Insert the template for each source package. $(foreach spkg, $(speedo_spkgs), $(eval $(call SPKG_template,$(spkg)))) $(stampdir)/stamp-final: $(stampdir)/stamp-directories ifeq ($(TARGETOS),w32) $(stampdir)/stamp-final: $(addprefix $(stampdir)/stamp-w64-final-,$(speedo_w64_build_list)) endif $(stampdir)/stamp-final: $(addprefix $(stampdir)/stamp-final-,$(speedo_build_list)) touch $(stampdir)/stamp-final all-speedo: $(stampdir)/stamp-final report-speedo: $(addprefix report-,$(speedo_build_list)) # Just to check if we catched all stamps. clean-stamps: $(RM) -fR $(stampdir) clean-speedo: $(RM) -fR PLAY # # Windows installer # # {{{ ifeq ($(TARGETOS),w32) dist-source: all for i in 00 01 02 03; do sleep 1;touch PLAY/stamps/stamp-*-${i}-*;done (set -e;\ tarname="$(INST_NAME)-$(INST_VERSION)_$(BUILD_DATESTR).tar" ;\ [ -f "$$tarname" ] && rm "$$tarname" ;\ tar -C $(topsrc) -cf "$$tarname" --exclude-backups --exclude-vc \ --transform='s,^\./,$(INST_NAME)-$(INST_VERSION)/,' \ --anchored --exclude './PLAY' . ;\ tar --totals -rf "$$tarname" --exclude-backups --exclude-vc \ --transform='s,^,$(INST_NAME)-$(INST_VERSION)/,' \ PLAY/stamps/stamp-*-00-unpack PLAY/src ;\ xz "$$tarname" ;\ ) # Extract the two latest news entries. */ $(bdir)/NEWS.tmp: $(topsrc)/NEWS awk '/^Notewo/ {if(okay>1){exit}; okay++};okay {print $0}' \ <$(topsrc)/NEWS >$(bdir)/NEWS.tmp $(bdir)/README.txt: $(bdir)/NEWS.tmp $(topsrc)/README $(w32src)/README.txt \ $(w32src)/pkg-copyright.txt sed -e '/^;.*/d;' \ -e '/!NEWSFILE!/{r $(bdir)/NEWS.tmp' -e 'd;}' \ -e '/!GNUPGREADME!/{r $(topsrc)/README' -e 'd;}' \ -e '/!PKG-COPYRIGHT!/{r $(w32src)/pkg-copyright.txt' -e 'd;}' \ -e 's,!VERSION!,$(INST_VERSION),g' \ < $(w32src)/README.txt \ | sed -e '/^#/d' \ | awk '{printf "%s\r\n", $$0}' >$(bdir)/README.txt $(bdir)/g4wihelp.dll: $(w32src)/g4wihelp.c $(w32src)/exdll.h (set -e; cd $(bdir); \ $(W32CC) -I. -shared -O2 -o g4wihelp.dll $(w32src)/g4wihelp.c \ -lwinmm -lgdi32; \ $(STRIP) g4wihelp.dll) w32_insthelpers: $(bdir)/g4wihelp.dll $(bdir)/inst-options.ini: $(w32src)/inst-options.ini cat $(w32src)/inst-options.ini >$(bdir)/inst-options.ini +extra_installer_options = +ifeq ($(WITH_GUI),1) +extra_installer_options += -DWITH_GUI=1 +endif + installer: all w32_insthelpers $(w32src)/inst-options.ini $(bdir)/README.txt $(MAKENSIS) -V2 \ -DINST_DIR=$(idir) \ -DINST6_DIR=$(idir6) \ -DBUILD_DIR=$(bdir) \ -DTOP_SRCDIR=$(topsrc) \ -DW32_SRCDIR=$(w32src) \ -DBUILD_ISODATE=$(BUILD_ISODATE) \ -DBUILD_DATESTR=$(BUILD_DATESTR) \ -DNAME=$(INST_NAME) \ -DVERSION=$(INST_VERSION) \ -DPROD_VERSION=$(INST_PROD_VERSION) \ - $(w32src)/inst.nsi + $(extra_installer_options) $(w32src)/inst.nsi @echo "Ready: $(idir)/$(INST_NAME)-$(INST_VERSION)_$(BUILD_DATESTR).exe" endif # }}} W32 # # Check availibility of standard tools # check-tools: # # Mark phony targets # .PHONY: all all-speedo report-speedo clean-stamps clean-speedo installer \ w32_insthelpers check-tools diff --git a/build-aux/speedo/w32/inst.nsi b/build-aux/speedo/w32/inst.nsi index 8c6495384..e88a91c5c 100644 --- a/build-aux/speedo/w32/inst.nsi +++ b/build-aux/speedo/w32/inst.nsi @@ -1,1309 +1,1361 @@ # inst.nsi - Installer for GnuPG on Windows. -*- coding: latin-1; -*- # Copyright (C) 2005, 2014 g10 Code GmbH # # This file is part of GnuPG. # # GnuPG 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 3 of the License, or # (at your option) any later version. # # GnuPG 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 . # Macros to provide for invocation: # INST_DIR # INST6_DIR # BUILD_DIR # TOP_SRCDIR # W32_SRCDIR # BUILD_ISODATE - the build date, e.g. "2014-10-31" # BUILD_DATESTR - ditto w/o '-', e.g. "20141031" # NAME # VERSION # PROD_VERSION +# +# WITH_GUI - Include the GPA GUI !cd "${INST_DIR}" !addincludedir "${W32_SRCDIR}" !addplugindir "${BUILD_DIR}" # The package name and version. PRETTY_PACKAGE is a user visible name # only while PACKAGE is useful for filenames etc. PROD_VERSION is the # product version and needs to be in the format "MAJ.MIN.MIC.BUILDNR". !define PACKAGE "gnupg" !define PACKAGE_SHORT "gnupg" !define PRETTY_PACKAGE "GNU Privacy Guard" !define PRETTY_PACKAGE_SHORT "GnuPG" !define COMPANY "The GnuPG Project" -!define COPYRIGHT "Copyright (C) 2014 The GnuPG Project" +!define COPYRIGHT "Copyright (C) 2015 The GnuPG Project" !define DESCRIPTION "GnuPG: The GNU Privacy Guard for Windows" !define INSTALL_DIR "GnuPG" !define WELCOME_TITLE_ENGLISH \ "Welcome to the installation of GnuPG" !define WELCOME_TITLE_GERMAN \ "Willkommen bei der Installation von GnuPG" !define ABOUT_ENGLISH \ "GnuPG is the mostly used software for mail and data encryption. \ GnuPG can be used to encrypt data and to create digital signatures. \ GnuPG includes an advanced key management facility and is compliant \ with the OpenPGP Internet standard as described in RFC-4880. \ \r\n\r\n$_CLICK \ \r\n\r\n\r\n\r\n\r\nThis is GnuPG version ${VERSION}.\r\n\ File version: ${PROD_VERSION}\r\n\ Release date: ${BUILD_ISODATE}" !define ABOUT_GERMAN \ "GnuPG is die häufigst verwendete Software zur Mail- und Datenverschlüsselung.\ \r\n\r\n$_CLICK \ \r\n\r\n\r\n\r\n\r\nDies ist GnuPG Version ${VERSION}.\r\n\ Dateiversion: ${PROD_VERSION}\r\n\ Releasedatum: ${BUILD_ISODATE}" # The copyright license of the package. Define only one of these. !define LICENSE_GPL # Select the best compression algorithm available. The dictionary # size is the default (8 MB). !ifndef SOURCES SetCompressor lzma # SetCompressorDictSize 8 !endif # Include the generic parts. !define HAVE_STARTMENU # We use the modern UI. !include "MUI.nsh" # Some helper some !include "LogicLib.nsh" !include "x64.nsh" # Set the package name. Note that this name should not be suffixed # with the version because this would get displayed in the start menu. # Given that a slash in the name troubles Windows startmenu creation # we set the Startmenu explicit below. Name "${PRETTY_PACKAGE}" # Set the output filename. OutFile "${NAME}-${VERSION}_${BUILD_DATESTR}.exe" #Fixme: Do we need a logo? #Icon "${TOP_SRCDIR}/doc/logo/gnupg-logo-icon.ico" #UninstallIcon "${TOP_SRCDIR}/doc/logo/gnupg-logo-icon.ico" # Set the installation directory. !ifndef INSTALL_DIR !define INSTALL_DIR "GnuPG" !endif -InstallDir "$PROGRAMFILES\GNU\${INSTALL_DIR}" +InstallDir "$PROGRAMFILES\${INSTALL_DIR}" -InstallDirRegKey HKLM "Software\GNU\${PACKAGE_SHORT}" "Install Directory" +InstallDirRegKey HKLM "Software\${PACKAGE_SHORT}" "Install Directory" # Add version information to the file properties. VIProductVersion "${PROD_VERSION}" VIAddVersionKey "ProductName" "${PRETTY_PACKAGE_SHORT} (${VERSION})" VIAddVersionKey "Comments" \ "GnuPG 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" VIAddVersionKey "CompanyName" "${COMPANY}" VIAddVersionKey "LegalTrademarks" "" VIAddVersionKey "LegalCopyright" "${COPYRIGHT}" VIAddVersionKey "FileDescription" "${DESCRIPTION}" VIAddVersionKey "FileVersion" "${PROD_VERSION}" # Interface Settings # !define MUI_ABORTWARNING !define MUI_FINISHPAGE_NOAUTOCLOSE !define MUI_UNFINISHPAGE_NOAUTOCLOSE !define MUI_HEADERIMAGE !define MUI_HEADERIMAGE_BITMAP "${W32_SRCDIR}\gnupg-logo-150x57.bmp" !define MUI_WELCOMEFINISHPAGE_BITMAP "${W32_SRCDIR}\gnupg-logo-164x314.bmp" # Remember the installer language !define MUI_LANGDLL_REGISTRY_ROOT "HKCU" -!define MUI_LANGDLL_REGISTRY_KEY "Software\GNU\GnuPG" +!define MUI_LANGDLL_REGISTRY_KEY "Software\GnuPG" !define MUI_LANGDLL_REGISTRY_VALUENAME "Installer Language" # # The list of wizard pages. # !define MUI_WELCOMEPAGE_TITLE "$(T_WelcomeTitle)" !define MUI_WELCOMEPAGE_TEXT "$(T_About)" !insertmacro MUI_PAGE_WELCOME !define MUI_LICENSEPAGE_BUTTON "$(^NextBtn)" !define MUI_PAGE_HEADER_SUBTEXT "$(T_GPLHeader)" !define MUI_LICENSEPAGE_TEXT_BOTTOM "$(T_GPLShort)" !insertmacro MUI_PAGE_LICENSE "${TOP_SRCDIR}/COPYING" !define MUI_PAGE_CUSTOMFUNCTION_SHOW PrintNonAdminWarning !insertmacro MUI_PAGE_COMPONENTS !define MUI_PAGE_CUSTOMFUNCTION_LEAVE CheckExistingVersion !insertmacro MUI_PAGE_DIRECTORY !ifdef HAVE_STARTMENU Page custom CustomPageOptions Var STARTMENU_FOLDER !define MUI_PAGE_CUSTOMFUNCTION_PRE CheckIfStartMenuWanted !define MUI_STARTMENUPAGE_NODISABLE !define MUI_STARTMENUPAGE_REGISTRY_ROOT "HKCU" -!define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\GNU\GnuPG" +!define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\GnuPG" !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder" # We need to set the Startmenu name explicitly because a slash in the # name is not possible. !define MUI_STARTMENUPAGE_DEFAULTFOLDER "GnuPG" !insertmacro MUI_PAGE_STARTMENU Application $STARTMENU_FOLDER !endif !define MUI_PAGE_CUSTOMFUNCTION_PRE PrintCloseOtherApps !insertmacro MUI_PAGE_INSTFILES #!define MUI_PAGE_CUSTOMFUNCTION_PRE ShowFinalWarnings !define MUI_FINISHPAGE_SHOWREADME "README.txt" !define MUI_FINISHPAGE_SHOWREADME_TEXT "$(T_ShowReadme)" #!define MUI_FINISHPAGE_RUN #!define MUI_FINISHPAGE_RUN_FUNCTION RunOnFinish #!define MUI_FINISHPAGE_RUN_TEXT "$(T_RunKeyManager)" #!define MUI_FINISHPAGE_RUN_NOTCHECKED !define MUI_FINISHPAGE_LINK "$(T_MoreInfo)" !define MUI_FINISHPAGE_LINK_LOCATION "$(T_MoreInfoURL)" !insertmacro MUI_PAGE_FINISH # Uninstaller pages. !insertmacro MUI_UNPAGE_CONFIRM !insertmacro MUI_UNPAGE_INSTFILES #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. !insertmacro MUI_LANGUAGE "English" !insertmacro MUI_LANGUAGE "German" !insertmacro MUI_RESERVEFILE_LANGDLL !insertmacro MUI_RESERVEFILE_INSTALLOPTIONS ReserveFile "${BUILD_DIR}\g4wihelp.dll" ReserveFile "${W32_SRCDIR}\gnupg-logo-150x57.bmp" ReserveFile "${W32_SRCDIR}\gnupg-logo-164x314.bmp" ReserveFile "${TOP_SRCDIR}\COPYING" ReserveFile "${W32_SRCDIR}\inst-options.ini" # Language support LangString T_LangCode ${LANG_ENGLISH} "en" LangString T_LangCode ${LANG_GERMAN} "de" # The WelcomeTitle is displayed on the first page. LangString T_WelcomeTitle ${LANG_ENGLISH} "${WELCOME_TITLE_ENGLISH}" LangString T_WelcomeTitle ${LANG_GERMAN} "${WELCOME_TITLE_GERMAN}" # The About string as displayed on the first page. LangString T_About ${LANG_ENGLISH} "${ABOUT_ENGLISH}" LangString T_About ${LANG_GERMAN} "${ABOUT_GERMAN}" # Startup page LangString T_GPLHeader ${LANG_ENGLISH} \ "This software is licensed under the terms of the GNU General Public \ License (GNU GPL)." LangString T_GPLHeader ${LANG_GERMAN}} \ "Diese Software ist unter der GNU General Public License \ (GNU GPL) lizensiert." 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_GPLShort ${LANG_GERMAN} \ "In aller Kürze: Sie haben das Recht, die Software zu jedem Zweck \ einzusetzen. Sie können die Software weitergeben, sofern Sie dem \ Empfänger dieselben Rechte einräumen, die auch Sie erhalten haben." LangString T_RunKeyManager ${LANG_ENGLISH} \ "Run the key manager" LangString T_RunKeyManager ${LANG_GERMAN} \ "Die Schlüsselverwaltung aufrufen" LangString T_MoreInfo ${LANG_ENGLISH} \ "Click here for GnuPG's website" LangString T_MoreInfo ${LANG_GERMAN} \ "Hier klicken um zur GnuPG Homepage zu gelangen" LangString T_MoreInfoURL ${LANG_ENGLISH} "https://gnupg.org" LangString T_MoreInfoURL ${LANG_GERMAN} "https://gnupg.org" LangString T_ShowReadme ${LANG_ENGLISH} \ "Show the README file" LangString T_ShowReadme ${LANG_GERMAN} \ "Die README Datei anzeigen" LangString T_NoKeyManager ${LANG_ENGLISH} \ "No key manager has been installed, thus we can't run one now." LangString T_NoKeyManager ${LANG_GERMAN} \ "Es wurde keine Schlüsselverwaltung installiert. \ Deswegen kann sie jetzt auch nicht ausgeführt werden." # Functions # Custom functions and macros for this installer. LangString T_AlreadyRunning ${LANG_ENGLISH} \ "An instance of this installer is already running." LangString T_AlreadyRunning ${LANG_GERMAN} \ "Ein Exemplar dieses Installers läuft bereits." Function G4wRunOnce Push $R0 StrCpy $R0 "gnupg" g4wihelp::runonce StrCmp $R0 0 +3 MessageBox MB_OK $(T_AlreadyRunning) Abort Pop $R0 FunctionEnd # # Control function for the Custom page to select special # install options. # Function CustomPageOptions !insertmacro MUI_HEADER_TEXT "$(T_InstallOptions)" "$(T_InstallOptLinks)" # Note, that the default selection is done in the ini file !insertmacro MUI_INSTALLOPTIONS_WRITE "${W32_SRCDIR}/inst-options.ini" \ "Field 1" "Text" "$(T_InstOptLabelA)" !insertmacro MUI_INSTALLOPTIONS_WRITE "${W32_SRCDIR}/inst-options.ini" \ "Field 2" "Text" "$(T_InstOptFieldA)" !insertmacro MUI_INSTALLOPTIONS_WRITE "${W32_SRCDIR}/inst-options.ini" \ "Field 3" "Text" "$(T_InstOptFieldB)" !insertmacro MUI_INSTALLOPTIONS_WRITE "${W32_SRCDIR}/inst-options.ini" \ "Field 4" "Text" "$(T_InstOptFieldC)" !insertmacro MUI_INSTALLOPTIONS_WRITE "${W32_SRCDIR}/inst-options.ini" \ "Field 5" "Text" "$(T_InstOptLabelB)" !insertmacro MUI_INSTALLOPTIONS_DISPLAY "${W32_SRCDIR}/inst-options.ini" FunctionEnd # Check whether GnuPG 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 nexttest FileRead $0 $R0 FileRead $0 $R1 FileClose $0 Push $R1 Call TrimNewLines Pop $R1 MessageBox MB_YESNO "$(T_FoundExistingVersion)" IDYES leave Abort nexttest: ClearErrors ReadRegStr $0 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\GnuPG" "DisplayVersion" IfErrors leave 0 MessageBox MB_YESNO "$(T_FoundExistingVersionB)" 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 ClearErrors UserInfo::GetName IfErrors leave Pop $0 UserInfo::GetAccountType Pop $1 StrCmp $1 "Admin" leave +1 MessageBox MB_OK "$(T_AdminNeeded)" Quit leave: FunctionEnd # Check whether the start menu is actually wanted. Function CheckIfStartMenuWanted !insertmacro MUI_INSTALLOPTIONS_READ $R0 "${W32_SRCDIR}/inst-options.ini" \ "Field 2" "State" IntCmp $R0 1 +2 Abort 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 IfFileExists $INSTDIR\bin\gpg.exe print_warning IfFileExists $INSTDIR\bin\gpa.exe print_warning Return print_warning: MessageBox MB_OK|MB_ICONEXCLAMATION "$(T_CloseOtherApps)" FunctionEnd # Called right before the final page to show more warnings. #Function ShowFinalWarnings # leave: #FunctionEnd #----------------------------------------------- # Strings pertaining to the install options page #----------------------------------------------- # Installation options title LangString T_InstallOptions ${LANG_ENGLISH} "Install Options" LangString T_InstallOptions ${LANG_GERMAN} "Installationsoptionen" # Installation options subtitle 1 LangString T_InstallOptLinks ${LANG_ENGLISH} "Start links" LangString T_InstallOptLinks ${LANG_GERMAN} "Startlinks" LangString T_InstOptLabelA ${LANG_ENGLISH} \ "Please select where GnuPG shall install links:" LangString T_InstOptLabelA ${LANG_GERMAN} \ "Bitte wählen Sie, welche Verknüpfungen angelegt werden sollen:" LangString T_InstOptLabelB ${LANG_ENGLISH} \ "(Only programs will be linked into the quick launch bar.)" LangString T_InstOptLabelB ${LANG_GERMAN} \ "(In die Schnellstartleiste werden nur Verknüpfungen für \ Programme angelegt.) " LangString T_InstOptFieldA ${LANG_ENGLISH} \ "Start Menu" LangString T_InstOptFieldA ${LANG_GERMAN} \ "Startmenü" LangString T_InstOptFieldB ${LANG_ENGLISH} \ "Desktop" LangString T_InstOptFieldB ${LANG_GERMAN} \ "Arbeitsfläche" LangString T_InstOptFieldC ${LANG_ENGLISH} \ "Quick Launch Bar" LangString T_InstOptFieldC ${LANG_GERMAN} \ "Schnellstartleiste" #------------------------------------------------ # 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_FoundExistingVersion ${LANG_GERMAN} \ "Version $R1 ist hier bereits installiert. $\r$\n\ Möchten Sie diese mit Version ${VERSION} überschreiben? $\r$\n\ $\r$\n\ (Sie können in jedem Fall mit JA antworten, falls es sich um \ eine neuere oder dieselbe Version handelt.)" LangString T_FoundExistingVersionB ${LANG_ENGLISH} \ "A version of GnuPG has already been installed on the system. \ There will be no problem installing and thus overwriting this \ Version. $\r$\n\ $\r$\n\ Do you want to continue installing GnuPG?" LangString T_FoundExistingVersionB ${LANG_GERMAN} \ "Eine Version von GnuPG ist hier bereits installiert. \ Es ist problemlos möglich, die Installation fortzuführen. $\r$\n\ $\r$\n\ Möchten die die Installation von GnuPG fortführen?" # From Function PrintNonAdminWarning LangString T_AdminNeeded ${LANG_ENGLISH} \ "Warning: Administrator permissions required for a successful installation" LangString T_AdminNeeded ${LANG_GERMAN} \ "Achtung: Für eine erfolgreiche Installation werden \ Administratorrechte benötigt." # From Function PrintCloseOtherApps LangString T_CloseOtherApps ${LANG_ENGLISH} \ "Please make sure that other applications are not running. \ GnuPG will try to install anyway but a reboot may be required." LangString T_CloseOtherApps ${LANG_GERMAN} \ "Bitte stellen Sie sicher, daß alle anderen Anwendugen geschlossen \ sind. GnuPG wird auf jeden Fall versuchen, eine Installation \ durchzuführen; es ist dann aber u.U. notwendig, das System neu zu starten." # 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 + +# AddToPath - Adds the given dir to the search path. +# Input - head of the stack +Function AddToPath + Exch $0 + g4wihelp::path_add "$0" + StrCmp $R5 "0" add_to_path_done + SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000 + add_to_path_done: + Pop $0 +FunctionEnd + + +# RemoveFromPath - Remove a given dir from the path +# Input: head of the stack +Function un.RemoveFromPath + Exch $0 + g4wihelp::path_remove "$0" + StrCmp $R5 "0" remove_from_path_done + SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000 + remove_from_path_done: + Pop $0 +FunctionEnd + + # # Define the installer sections. # Section "-gnupginst" SetOutPath "$INSTDIR" File "${BUILD_DIR}/README.txt" # Write a version file. FileOpen $0 "$INSTDIR\VERSION" w FileWrite $0 "${PACKAGE}$\r$\n" FileWrite $0 "${VERSION}$\r$\n" FileClose $0 - WriteRegStr HKLM "Software\GNU\GnuPG" "Install Directory" $INSTDIR + WriteRegStr HKLM "Software\GnuPG" "Install Directory" $INSTDIR # If we are reinstalling, try to kill a possible running gpa using # an already installed gpa. ifFileExists "$INSTDIR\bin\launch-gpa.exe" 0 no_uiserver ExecWait '"$INSTDIR\bin\launch-gpa" --stop-server' no_uiserver: # If we are reinstalling, try to kill a possible running agent using # an already installed gpgconf. ifFileExists "$INSTDIR\bin\gpgconf.exe" 0 no_gpgconf ExecWait '"$INSTDIR\bin\gpgconf" --kill dirmngr' ExecWait '"$INSTDIR\bin\gpgconf" --kill gpg-agent' no_gpgconf: + + # Add the bin directory to the PATH + Push "$INSTDIR\bin" + Call AddToPath + DetailPrint "Added $INSTDIR\bin to PATH" SectionEnd LangString DESC_Menu_gnupg_readme ${LANG_ENGLISH} \ "General information on GnuPG" LangString DESC_Menu_gnupg_readme ${LANG_GERMAN} \ "Allgemeine Informationen zu GnuPG" Section "GnuPG" SEC_gnupg SectionIn RO SetOutPath "$INSTDIR\bin" File /oname=gpg.exe "bin/gpg2.exe" File /oname=gpgv.exe "bin/gpgv2.exe" File "bin/gpgsm.exe" File "bin/gpgconf.exe" File "bin/gpg-connect-agent.exe" File "bin/gpgtar.exe" ClearErrors SetOverwrite try File "bin/gpg-agent.exe" SetOverwrite lastused ifErrors 0 +3 File /oname=gpg-agent.exe.tmp "bin/gpg-agent.exe" Rename /REBOOTOK gpg-agent.exe.tmp gpg-agent.exe ClearErrors SetOverwrite try - File "libexec/scdaemon.exe" + File "bin/dirmngr.exe" SetOverwrite lastused ifErrors 0 +3 - File /oname=scdaemon.exe.tmp "libexec/scdaemon.exe" - Rename /REBOOTOK scdaemon.exe.tmp scdaemon.exe + File /oname=dirmngr.exe.tmp "bin/dirmngr.exe" + Rename /REBOOTOK dirmngr.exe.tmp dirmngr.exe ClearErrors SetOverwrite try - File "bin/dirmngr.exe" + File "libexec/scdaemon.exe" SetOverwrite lastused ifErrors 0 +3 - File /oname=dirmngr.exe.tmp "bin/dirmngr.exe" - Rename /REBOOTOK dirmngr.exe.tmp dirmngr.exe + File /oname=scdaemon.exe.tmp "libexec/scdaemon.exe" + Rename /REBOOTOK scdaemon.exe.tmp scdaemon.exe SetOutPath "$INSTDIR\share\gnupg" File "share/gnupg/gpg-conf.skel" SectionEnd LangString DESC_SEC_gnupg ${LANG_ENGLISH} \ "The GnuPG Core is the actual encrypt core and a set of command \ line utilities." LangString DESC_SEC_gnupg ${LANG_GERMAN} \ "Der GnuPG Core ist, wie der Name schon sagt, der Kernbestandteil \ dieser Software. Der GnuPG Core stellt die eigentliche \ Verschlüsselung sowie die Verwaltung der Schlüssel bereit." LangString DESC_Menu_gnupg_manual ${LANG_ENGLISH} \ "Show the manual for the GnuPG Core" LangString DESC_Menu_gnupg_manual ${LANG_GERMAN} \ "Das Handbuch zum GnuPG Kern anzeigen" Section "-libgpg-error" SEC_libgpg_error SetOutPath "$INSTDIR\bin" File bin/libgpg-error-0.dll SetOutPath "$INSTDIR\lib" File /oname=libgpg-error.imp lib/libgpg-error.dll.a SetOutPath "$INSTDIR\include" File include/gpg-error.h SectionEnd Section "-libiconv" SEC_libiconv SetOutPath "$INSTDIR\bin" File bin/libiconv-2.dll SectionEnd Section "-zlib" SEC_zlib SetOutPath "$INSTDIR\bin" File bin/zlib1.dll SectionEnd Section "-adns" SEC_adns SetOutPath "$INSTDIR\bin" File bin/libadns-1.dll SetOutPath "$INSTDIR\lib" File /oname=libadns.imp lib/libadns.dll.a SetOutPath "$INSTDIR\include" File include/adns.h SectionEnd Section "-npth" SEC_npth SetOutPath "$INSTDIR\bin" File bin/libnpth-0.dll SetOutPath "$INSTDIR\lib" File /oname=libnpth.imp lib/libnpth.dll.a SetOutPath "$INSTDIR\include" File include/npth.h SectionEnd Section "-gcrypt" SEC_gcrypt SetOutPath "$INSTDIR\bin" File bin/libgcrypt-20.dll SetOutPath "$INSTDIR\lib" File /oname=libgcrypt.imp lib/libgcrypt.dll.a SetOutPath "$INSTDIR\include" File include/gcrypt.h SectionEnd Section "-assuan" SEC_assuan SetOutPath "$INSTDIR\bin" File bin/libassuan-0.dll SetOutPath "$INSTDIR\lib" File /oname=libassuan.imp lib/libassuan.dll.a SetOutPath "$INSTDIR\include" File include/assuan.h SectionEnd Section "-ksba" SEC_ksba SetOutPath "$INSTDIR\bin" File bin/libksba-8.dll SetOutPath "$INSTDIR\lib" File /oname=libksba.imp lib/libksba.dll.a SetOutPath "$INSTDIR\include" File include/ksba.h SectionEnd Section "-gpgme" SEC_gpgme SetOutPath "$INSTDIR\bin" File bin/libgpgme-11.dll - File bin/libgpgme-glib-11.dll + File /nonfatal bin/libgpgme-glib-11.dll File libexec/gpgme-w32spawn.exe SetOutPath "$INSTDIR\lib" File /oname=libgpgme.imp lib/libgpgme.dll.a - File /oname=libgpgme-glib.imp lib/libgpgme-glib.dll.a + File /nonfatal /oname=libgpgme-glib.imp lib/libgpgme-glib.dll.a SetOutPath "$INSTDIR\include" File include/gpgme.h SectionEnd +!ifdef WITH_GUI Section "-gettext" SEC_gettext SetOutPath "$INSTDIR\bin" File bin/libintl-8.dll SectionEnd Section "-glib" SEC_glib SetOutPath "$INSTDIR\bin" File bin/libgio-2.0-0.dll File bin/libglib-2.0-0.dll File bin/libgmodule-2.0-0.dll File bin/libgobject-2.0-0.dll File bin/libgthread-2.0-0.dll File bin/gspawn-win32-helper.exe File bin/gspawn-win32-helper-console.exe File bin/libffi-6.dll SectionEnd Section "-libpng" SEC_libpng SetOutPath "$INSTDIR\bin" File bin/libpng14-14.dll SectionEnd #Section "-jpeg" SEC_jpeg # SetOutPath "$INSTDIR" # File bin/jpeg62.dll #SectionEnd Section "-cairo" SEC_cairo SetOutPath "$INSTDIR\bin" File bin/libcairo-gobject-2.dll File bin/libpangocairo-1.0-0.dll File bin/libcairo-2.dll File bin/libcairo-script-interpreter-2.dll SectionEnd Section "-pixman" SEC_pixman SetOutPath "$INSTDIR\bin" File bin/libpixman-1-0.dll SectionEnd Section "-pango" SEC_pango SetOutPath "$INSTDIR\bin" File bin/pango-querymodules.exe File bin/libpango-1.0-0.dll File bin/libpangowin32-1.0-0.dll SetOutPath "$INSTDIR\lib\pango\1.6.0\modules" File lib/pango/1.6.0/modules/pango-basic-win32.dll File lib/pango/1.6.0/modules/pango-arabic-lang.dll File lib/pango/1.6.0/modules/pango-indic-lang.dll SetOutPath "$INSTDIR\etc\pango" File ${W32_SRCDIR}/pango.modules SectionEnd Section "-atk" SEC_atk SetOutPath "$INSTDIR\bin" File bin/libatk-1.0-0.dll SectionEnd Section "-gtk+" SEC_gtk_ SetOutPath "$INSTDIR\bin" File bin/libgdk_pixbuf-2.0-0.dll File bin/libgdk-win32-2.0-0.dll File bin/libgtk-win32-2.0-0.dll SetOutPath "$INSTDIR\lib\gdk-pixbuf-2.0\2.10.0" File /oname=loaders.cache ${W32_SRCDIR}/gdk-pixbuf-loaders.cache SetOutPath "$INSTDIR\lib\gdk-pixbuf-2.0\2.10.0\loaders" File lib/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-ani.dll File lib/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-gdip-bmp.dll File lib/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-gdip-emf.dll File lib/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-gdip-gif.dll File lib/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-gdip-ico.dll File lib/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-gdip-jpeg.dll File lib/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-gdip-tiff.dll File lib/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-gdip-wmf.dll File lib/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-icns.dll File lib/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-pcx.dll File lib/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-png.dll File lib/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-pnm.dll File lib/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-qtif.dll File lib/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-ras.dll File lib/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-tga.dll File lib/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-wbmp.dll File lib/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-xbm.dll File lib/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-xpm.dll SetOutPath "$INSTDIR\lib\gtk-2.0\2.10.0\engines" File lib/gtk-2.0/2.10.0/engines/libwimp.dll File lib/gtk-2.0/2.10.0/engines/libpixmap.dll SetOutPath "$INSTDIR\lib\gtk-2.0\2.10.0\immodules" File lib/gtk-2.0/2.10.0/immodules/im-thai.dll File lib/gtk-2.0/2.10.0/immodules/im-cyrillic-translit.dll File lib/gtk-2.0/2.10.0/immodules/im-multipress.dll File lib/gtk-2.0/2.10.0/immodules/im-ti-er.dll File lib/gtk-2.0/2.10.0/immodules/im-am-et.dll File lib/gtk-2.0/2.10.0/immodules/im-cedilla.dll File lib/gtk-2.0/2.10.0/immodules/im-inuktitut.dll File lib/gtk-2.0/2.10.0/immodules/im-viqr.dll File lib/gtk-2.0/2.10.0/immodules/im-ti-et.dll File lib/gtk-2.0/2.10.0/immodules/im-ipa.dll File lib/gtk-2.0/2.10.0/immodules/im-ime.dll SetOutPath "$INSTDIR\share\themes\Default\gtk-2.0-key" File share/themes/Default/gtk-2.0-key/gtkrc SetOutPath "$INSTDIR\share\themes\MS-Windows\gtk-2.0" File share/themes/MS-Windows/gtk-2.0/gtkrc SetOutPath "$INSTDIR\etc\gtk-2.0" File etc/gtk-2.0/im-multipress.conf SectionEnd +!endif +!ifdef WITH_GUI Section "-pinentry" SEC_pinentry SetOutPath "$INSTDIR\bin" File /oname=pinentry.exe "bin/pinentry-gtk-2.exe" SectionEnd +!endif +!ifdef WITH_GUI Section "gpa" SEC_gpa SectionIn RO SetOutPath "$INSTDIR\bin" File bin/gpa.exe File bin/launch-gpa.exe SectionEnd LangString DESC_SEC_gpa ${LANG_ENGLISH} \ "The GnuPG Assistant is the graphical interface of GnuPG" LangString DESC_SEC_gpa ${LANG_GERMAN} \ "Der GnuPG Assistent ist die graphische Oberfläche von GnuPG." LangString DESC_Menu_gpa ${LANG_ENGLISH} \ "Run the GnuGP Assistant." LangString DESC_Menu_gpa ${LANG_GERMAN} \ "Den GnuPG Assistenten starten." Section "gpgex" SEC_gpgex SetOutPath "$INSTDIR\bin" ClearErrors SetOverwrite try File bin/gpgex.dll SetOverwrite lastused ifErrors 0 do_reg File /oname=gpgex.dll.tmp bin/gpgex.dll Rename /REBOOTOK gpgex.dll.tmp gpgex.dll do_reg: ClearErrors RegDLL "$INSTDIR\bin\gpgex.dll" ifErrors 0 +2 MessageBox MB_OK "$(T_GPGEX_RegFailed)" ${If} ${RunningX64} # Install the 64 bit version of the plugin. # Note that we install this in addition to the 32 bit version so that # the 32 bit version can be used by file dialogs of 32 bit programs. ClearErrors SetOverwrite try File /oname=gpgex6.dll "${INST6_DIR}/bin/gpgex.dll" SetOverwrite lastused ifErrors 0 do_reg64 File /oname=gpgex6.dll.tmp "${INST6_DIR}/bin/gpgex.dll" Rename /REBOOTOK gpgex6.dll.tmp gpgex6.dll do_reg64: # Register the DLL. We need to register both versions. However # RegDLL can't be used for 64 bit and InstallLib seems to be a # registry hack. ClearErrors ExecWait '"$SYSDIR\regsvr32" /s "$INSTDIR\bin\gpgex6.dll"' ifErrors 0 +2 MessageBox MB_OK "$(T_GPGEX_RegFailed) (64 bit)" # Note: There is no need to install the help an mo files because # they are identical to those installed by the 32 bit version. ${EndIf} SectionEnd LangString T_GPGEX_RegFailed ${LANG_ENGLISH} \ "Warning: Registration of the Explorer plugin failed." LangString DESC_SEC_gpgex ${LANG_ENGLISH} \ "GnuPG Explorer Extension" +!endif + Section "-gnupglast" SEC_gnupglast SetOutPath "$INSTDIR" SectionEnd # # Define the uninstaller sections. # # (reverse order of the installer sections!) # Section "-un.gnupglast" ifFileExists "$INSTDIR\bin\launch-gpa.exe" 0 no_uiserver ExecWait '"$INSTDIR\bin\launch-gpa" --stop-server' no_uiserver: ifFileExists "$INSTDIR\bin\gpgconf.exe" 0 no_gpgconf ExecWait '"$INSTDIR\bin\gpgconf" --kill gpg-agent' no_gpgconf: SectionEnd Section "-un.gpgex" UnRegDLL "$INSTDIR\bin\gpgex.dll" Delete /REBOOTOK "$INSTDIR\bin\gpgex.dll" ${If} ${RunningX64} ExecWait '"$SYSDIR\regsvr32" /u /s "$INSTDIR\bin\gpgex6.dll"' Delete /REBOOTOK "$INSTDIR\bin\gpgex6.dll" ${EndIf} SectionEnd - +!ifdef WITH_GUI Section "-un.gpa" Delete "$INSTDIR\bin\gpa.exe" Delete "$INSTDIR\bin\launch-gpa.exe" RMDir "$INSTDIR\share\gpa" SectionEnd +!endif +!ifdef WITH_GUI Section "-un.pinentry" Delete "$INSTDIR\bin\pinentry.exe" SectionEnd +!endif - +!ifdef WITH_GUI Section "-un.gtk+" Delete "$INSTDIR\bin\libgdk_pixbuf-2.0-0.dll" Delete "$INSTDIR\bin\libgdk-win32-2.0-0.dll" Delete "$INSTDIR\bin\libgtk-win32-2.0-0.dll" Delete "$INSTDIR\lib\gdk-pixbuf-2.0\2.10.0\loaders.cache" Delete "$INSTDIR\lib\gdk-pixbuf-2.0\2.10.0\loaders\libpixbufloader-ani.dll" Delete "$INSTDIR\lib\gdk-pixbuf-2.0\2.10.0\loaders\libpixbufloader-gdip-bmp.dll" Delete "$INSTDIR\lib\gdk-pixbuf-2.0\2.10.0\loaders\libpixbufloader-gdip-emf.dll" Delete "$INSTDIR\lib\gdk-pixbuf-2.0\2.10.0\loaders\libpixbufloader-gdip-gif.dll" Delete "$INSTDIR\lib\gdk-pixbuf-2.0\2.10.0\loaders\libpixbufloader-gdip-ico.dll" Delete "$INSTDIR\lib\gdk-pixbuf-2.0\2.10.0\loaders\libpixbufloader-gdip-jpeg.dll" Delete "$INSTDIR\lib\gdk-pixbuf-2.0\2.10.0\loaders\libpixbufloader-gdip-tiff.dll" Delete "$INSTDIR\lib\gdk-pixbuf-2.0\2.10.0\loaders\libpixbufloader-gdip-wmf.dll" Delete "$INSTDIR\lib\gdk-pixbuf-2.0\2.10.0\loaders\libpixbufloader-icns.dll" Delete "$INSTDIR\lib\gdk-pixbuf-2.0\2.10.0\loaders\libpixbufloader-pcx.dll" Delete "$INSTDIR\lib\gdk-pixbuf-2.0\2.10.0\loaders\libpixbufloader-png.dll" Delete "$INSTDIR\lib\gdk-pixbuf-2.0\2.10.0\loaders\libpixbufloader-pnm.dll" Delete "$INSTDIR\lib\gdk-pixbuf-2.0\2.10.0\loaders\libpixbufloader-qtif.dll" Delete "$INSTDIR\lib\gdk-pixbuf-2.0\2.10.0\loaders\libpixbufloader-ras.dll" Delete "$INSTDIR\lib\gdk-pixbuf-2.0\2.10.0\loaders\libpixbufloader-tga.dll" Delete "$INSTDIR\lib\gdk-pixbuf-2.0\2.10.0\loaders\libpixbufloader-wbmp.dll" Delete "$INSTDIR\lib\gdk-pixbuf-2.0\2.10.0\loaders\libpixbufloader-xbm.dll" Delete "$INSTDIR\lib\gdk-pixbuf-2.0\2.10.0\loaders\libpixbufloader-xpm.dll" RMDir "$INSTDIR\lib\gdk-pixbuf-2.0\2.10.0\loaders" RMDir "$INSTDIR\lib\gdk-pixbuf-2.0\2.10.0" RMDir "$INSTDIR\lib\gdk-pixbuf-2.0" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\engines\libwimp.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\engines\libpixmap.dll" RMDir "$INSTDIR\lib\gtk-2.0\2.10.0\engines" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\immodules\im-thai.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\immodules\im-cyrillic-translit.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\immodules\im-multipress.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\immodules\im-ti-er.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\immodules\im-am-et.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\immodules\im-cedilla.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\immodules\im-inuktitut.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\immodules\im-viqr.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\immodules\im-ti-et.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\immodules\im-ipa.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\immodules\im-ime.dll" RMDir "$INSTDIR\lib\gtk-2.0\2.10.0\immodules" RMDir "$INSTDIR\lib\gtk-2.0\2.10.0" RMDir "$INSTDIR\lib\gtk-2.0" Delete "$INSTDIR\share\themes\Default\gtk-2.0-key\gtkrc" RMDir "$INSTDIR\share\themes\Default\gtk-2.0-key" RMDir "$INSTDIR\share\themes\Default" Delete "$INSTDIR\share\themes\MS-Windows\gtk-2.0\gtkrc" RMDir "$INSTDIR\share\themes\MS-Windows\gtk-2.0" RMDir "$INSTDIR\share\themes\MS-Windows" RMDir "$INSTDIR\share\themes" Delete "$INSTDIR\etc\gtk-2.0\im-multipress.conf" RMDir "$INSTDIR\etc\gtk-2.0" SectionEnd Section "-un.atk" Delete "$INSTDIR\bin\libatk-1.0-0.dll" SectionEnd Section "-un.pango" Delete "$INSTDIR\bin\pango-querymodules.exe" Delete "$INSTDIR\bin\libpango-1.0-0.dll" Delete "$INSTDIR\bin\libpangowin32-1.0-0.dll" Delete "$INSTDIR\lib\pango\1.6.0\modules\pango-basic-win32.dll" Delete "$INSTDIR\lib\pango\1.6.0\modules\pango-arabic-lang.dll" Delete "$INSTDIR\lib\pango\1.6.0\modules\pango-indic-lang.dll" RMDir "$INSTDIR\lib\pango\1.6.0\modules" RMDir "$INSTDIR\lib\pango\1.6.0" RMDir "$INSTDIR\lib\pango" Delete "$INSTDIR\etc\pango\pango.modules" RMDir "$INSTDIR\etc\pango" SectionEnd Section "-un.pixman" Delete "$INSTDIR\bin\libpixman-1-0.dll" SectionEnd Section "-un.cairo" Delete "$INSTDIR\bin\libcairo-gobject-2.dll" Delete "$INSTDIR\bin\libpangocairo-1.0-0.dll" Delete "$INSTDIR\bin\libcairo-2.dll" Delete "$INSTDIR\bin\libcairo-script-interpreter-2.dll" SectionEnd Section "-un.libpng" Delete "$INSTDIR\bin\libpng14-14.dll" SectionEnd Section "-un.glib" Delete "$INSTDIR\bin\libgio-2.0-0.dll" Delete "$INSTDIR\bin\libglib-2.0-0.dll" Delete "$INSTDIR\bin\libgmodule-2.0-0.dll" Delete "$INSTDIR\bin\libgobject-2.0-0.dll" Delete "$INSTDIR\bin\libgthread-2.0-0.dll" Delete "$INSTDIR\bin\gspawn-win32-helper.exe" Delete "$INSTDIR\bin\gspawn-win32-helper-console.exe" Delete "$INSTDIR\bin\libffi-6.dll" SectionEnd +!endif + Section "-un.gettext" Delete "$INSTDIR\bin\libintl-8.dll" SectionEnd Section "-un.gpgme" Delete "$INSTDIR\bin\libgpgme-11.dll" Delete "$INSTDIR\bin\libgpgme-glib-11.dll" Delete "$INSTDIR\bin\gpgme-w32spawn.exe" Delete "$INSTDIR\lib\libgpgme.imp" Delete "$INSTDIR\lib\libgpgme-glib.imp" Delete "$INSTDIR\include\gpgme.h" SectionEnd Section "-un.ksba" Delete "$INSTDIR\bin\libksba-8.dll" Delete "$INSTDIR\lib\libksba.imp" Delete "$INSTDIR\include\ksba.h" SectionEnd Section "-un.assuan" Delete "$INSTDIR\bin\libassuan-0.dll" Delete "$INSTDIR\lib\libassuan.imp" Delete "$INSTDIR\include\assuan.h" SectionEnd Section "-un.gcrypt" Delete "$INSTDIR\bin\libgcrypt-20.dll" Delete "$INSTDIR\lib\libgcrypt.imp" Delete "$INSTDIR\include\gcrypt.h" SectionEnd Section "-un.npth" Delete "$INSTDIR\bin\libnpth-0.dll" Delete "$INSTDIR\lib\libnpth.imp" Delete "$INSTDIR\include\npth.h" SectionEnd Section "-un.adns" Delete "$INSTDIR\bin\libadns-1.dll" Delete "$INSTDIR\lib\libadns.imp" Delete "$INSTDIR\include\adns.h" SectionEnd Section "-un.zlib" Delete "$INSTDIR\bin\zlib1.dll" SectionEnd Section "-un.libiconv" Delete "$INSTDIR\bin\libiconv-2.dll" SectionEnd Section "-un.libgpg-error" Delete "$INSTDIR\bin\libgpg-error-0.dll" Delete "$INSTDIR\lib\libgpg-error.imp" Delete "$INSTDIR\include\gpg-error.h" SectionEnd Section "-un.gnupg" Delete "$INSTDIR\bin\gpg.exe" Delete "$INSTDIR\bin\gpgv.exe" Delete "$INSTDIR\bin\gpgsm.exe" Delete "$INSTDIR\bin\gpg-agent.exe" Delete "$INSTDIR\bin\scdaemon.exe" Delete "$INSTDIR\bin\dirmngr.exe" Delete "$INSTDIR\bin\gpgconf.exe" Delete "$INSTDIR\bin\gpg-connect-agent.exe" Delete "$INSTDIR\bin\gpgtar.exe" Delete "$INSTDIR\share\gnupg\gpg-conf.skel" RMDir "$INSTDIR\share\gnupg" SectionEnd Section "-un.gnupginst" # Delete standard stuff. Delete "$INSTDIR\README.txt" Delete "$INSTDIR\VERSION" + # Remove the bin directory from the PATH + Push "$INSTDIR\bin" + Call un.RemoveFromPath + # Try to remove the top level directories. RMDir "$INSTDIR\bin" RMDir "$INSTDIR\lib" RMDir "$INSTDIR\include" RMDir "$INSTDIR\share" RMDir "$INSTDIR\etc" RMDir "$INSTDIR" # Clean the registry. DeleteRegValue HKLM "Software\GNU\GnuPG" "Install Directory" SectionEnd Function .onInit ;;!define MUI_LANGDLL_ALWAYSSHOW !insertmacro MUI_LANGDLL_DISPLAY Call G4wRunOnce SetOutPath $TEMP #!ifdef SOURCES # File /oname=gpgspltmp.bmp "${TOP_SRCDIR}/doc/logo/gnupg-logo-400px.bmp" # # We play the tune only for the soruce installer # File /oname=gpgspltmp.wav "${TOP_SRCDIR}/src/gnupg-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} #!endif # We can't use TOP_SRCDIR dir as the name of the file needs to be # the same while building and running the installer. Thus we # generate the file from a template. !insertmacro MUI_INSTALLOPTIONS_EXTRACT "${W32_SRCDIR}/inst-options.ini" #Call CalcDepends FunctionEnd #Function .onInstFailed # Delete $TEMP\gpgspltmp.wav #FunctionEnd #Function .onInstSuccess # Delete $TEMP\gpgspltmp.wav #FunctionEnd #Function .onSelChange # Call CalcDepends #FunctionEnd # This must be in a central place. Urgs. !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN !insertmacro MUI_DESCRIPTION_TEXT ${SEC_gnupg} $(DESC_SEC_gnupg) !insertmacro MUI_DESCRIPTION_TEXT ${SEC_gpa} $(DESC_SEC_gpa) !insertmacro MUI_DESCRIPTION_TEXT ${SEC_gpgex} $(DESC_SEC_gpgex) !insertmacro MUI_FUNCTION_DESCRIPTION_END # This also must be in a central place. Also Urgs. +!ifdef WITH_GUI Section "-startmenu" !ifdef HAVE_STARTMENU # Make sure that the context of the automatic variables has been set to # the "all users" shell folder. This guarantees that the menu gets written # for all users. We have already checked that we are running as Admin; or # we printed a warning that installation will not succeed. SetShellVarContext all # Check if the start menu entries where requested. !insertmacro MUI_INSTALLOPTIONS_READ $R0 "${W32_SRCDIR}/inst-options.ini" \ "Field 2" "State" IntCmp $R0 0 no_start_menu !insertmacro MUI_STARTMENU_WRITE_BEGIN Application CreateDirectory "$SMPROGRAMS\$STARTMENU_FOLDER" SectionGetFlags ${SEC_gpa} $R0 IntOp $R0 $R0 & ${SF_SELECTED} IntCmp $R0 ${SF_SELECTED} 0 no_gpa_menu CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\GPA.lnk" \ "$INSTDIR\bin\launch-gpa.exe" \ "" "" "" SW_SHOWNORMAL "" $(DESC_Menu_gpa) no_gpa_menu: CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\GnuPG Manual.lnk" \ "$INSTDIR\share\gnupg\gnupg.html" \ "" "" "" SW_SHOWNORMAL "" $(DESC_Menu_gnupg_manual) CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\GnuPG README.lnk" \ "$INSTDIR\README.txt" \ "" "" "" SW_SHOWNORMAL "" $(DESC_Menu_gnupg_readme) !insertmacro MUI_STARTMENU_WRITE_END no_start_menu: # Check if the desktop entries where requested. !insertmacro MUI_INSTALLOPTIONS_READ $R0 "${W32_SRCDIR}/inst-options.ini" \ "Field 3" "State" IntCmp $R0 0 no_desktop SectionGetFlags ${SEC_gpa} $R0 IntOp $R0 $R0 & ${SF_SELECTED} IntCmp $R0 ${SF_SELECTED} 0 no_gpa_desktop CreateShortCut "$DESKTOP\GPA.lnk" \ "$INSTDIR\bin\launch-gpa.exe" \ "" "" "" SW_SHOWNORMAL "" $(DESC_Menu_gpa) no_gpa_desktop: CreateShortCut "$DESKTOP\GPA Manual.lnk" \ "$INSTDIR\share\gpa\gpa.html" \ "" "" "" SW_SHOWNORMAL "" $(DESC_Menu_gpa_manual) no_desktop: # Check if the quick launch bar entries where requested. !insertmacro MUI_INSTALLOPTIONS_READ $R0 "${W32_SRCDIR}/inst-options.ini" \ "Field 4" "State" IntCmp $R0 0 no_quick_launch StrCmp $QUICKLAUNCH $TEMP no_quick_launch SectionGetFlags ${SEC_gpa} $R0 IntOp $R0 $R0 & ${SF_SELECTED} IntCmp $R0 ${SF_SELECTED} 0 no_gpa_quicklaunch CreateShortCut "$QUICKLAUNCH\GPA.lnk" \ "$INSTDIR\bin\launch-gpa.exe" \ "" "" "" SW_SHOWNORMAL "" $(DESC_Menu_gpa) no_gpa_quicklaunch: no_quick_launch: !endif SectionEnd - +!endif # # Now for the generic parts to end the installation. # Var MYTMP # Last section is a hidden one. Section WriteUninstaller "$INSTDIR\gnupg-uninstall.exe" # Windows Add/Remove Programs support StrCpy $MYTMP "Software\Microsoft\Windows\CurrentVersion\Uninstall\GnuPG" WriteRegExpandStr HKLM $MYTMP "UninstallString" '"$INSTDIR\gnupg-uninstall.exe"' WriteRegExpandStr HKLM $MYTMP "InstallLocation" "$INSTDIR" WriteRegStr HKLM $MYTMP "DisplayName" "${PRETTY_PACKAGE}" +!ifdef WITH_GUI WriteRegStr HKLM $MYTMP "DisplayIcon" "$INSTDIR\bin\gpa.exe,0" +!endif WriteRegStr HKLM $MYTMP "DisplayVersion" "${VERSION}" WriteRegStr HKLM $MYTMP "Publisher" "The GnuPG Project" WriteRegStr HKLM $MYTMP "URLInfoAbout" "https://gnupg.org" WriteRegDWORD HKLM $MYTMP "NoModify" "1" WriteRegDWORD HKLM $MYTMP "NoRepair" "1" SectionEnd Section Uninstall +!ifdef WITH_GUI !ifdef HAVE_STARTMENU # Make sure that the context of the automatic variables has been set to # the "all users" shell folder. This guarantees that the menu gets written # for all users. We have already checked that we are running as Admin; or # we printed a warning that installation will not succeed. SetShellVarContext all #--------------------------------------------------- # Delete the menu entries and any empty parent menus #--------------------------------------------------- !insertmacro MUI_STARTMENU_GETFOLDER Application $MYTMP Delete "$SMPROGRAMS\$MYTMP\GPA.lnk" Delete "$SMPROGRAMS\$MYTMP\GnuPG Manual.lnk" Delete "$SMPROGRAMS\$MYTMP\GnuPG README.lnk" Delete "$SMPROGRAMS\$MYTMP\*.lnk" StrCpy $MYTMP "$SMPROGRAMS\$MYTMP" startMenuDeleteLoop: ClearErrors RMDir $MYTMP GetFullPathName $MYTMP "$MYTMP\.." IfErrors startMenuDeleteLoopDone StrCmp $MYTMP $SMPROGRAMS startMenuDeleteLoopDone startMenuDeleteLoop startMenuDeleteLoopDone: DeleteRegValue HKLM "Software\GNU\GnuPG" "Start Menu Folder" # Delete Desktop links. Delete "$DESKTOP\GPA.lnk" Delete "$DESKTOP\GnuPG Manual.lnk" Delete "$DESKTOP\GnuPG README.lnk" # Delete Quick Launch Bar links. StrCmp $QUICKLAUNCH $TEMP no_quick_launch_uninstall Delete "$QUICKLAUNCH\GPA.lnk" no_quick_launch_uninstall: !endif - +!endif Delete "$INSTDIR\gnupg-uninstall.exe" RMDir "$INSTDIR" # Clean the registry. - DeleteRegValue HKLM "Software\GNU\GnuPG" "Install Directory" - DeleteRegKey /ifempty HKLM "Software\GNU\GnuPG" + DeleteRegValue HKLM "Software\GnuPG" "Install Directory" + DeleteRegKey /ifempty HKLM "Software\GnuPG" # Remove Windows Add/Remove Programs support. DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\GnuPG" SectionEnd