diff --git a/build-aux/speedo.mk b/build-aux/speedo.mk index 820b0a862..db78afa50 100644 --- a/build-aux/speedo.mk +++ b/build-aux/speedo.mk @@ -1,1570 +1,1569 @@ # speedo.mk - Speedo rebuilds speedily. # Copyright (C) 2008, 2014, 2019 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. # # The information required to sign the tarballs and binaries # are expected in the developer specific file ~/.gnupg-autogen.rc". # Here is an example: #--8<---------------cut here---------------start------------->8--- # # Location of the released tarball archives. Note that this is an # # internal archive and before uploading this to the public server, # # manual tests should be run and the git release tagged and pushed. # # This is greped by the Makefile. # RELEASE_ARCHIVE=foo@somehost:tarball-archive # # # The key used to sign the released sources. # # This is greped by the Makefile. # RELEASE_SIGNKEY=6DAA6E64A76D2840571B4902528897B826403ADA # # # For signing Windows binaries we need to employ a Windows machine. # # We connect to this machine via ssh and take the connection # # parameters via .ssh/config. For example a VM could be specified # # like this: # # # # Host authenticode-signhost # # HostName localhost # # Port 27042 # # User gpgsign # # # # Depending on the used token it might be necessary to allow single # # signon and unlock the token before running the make. The following # # variable references this entry. This is greped by the Makefile. # AUTHENTICODE_SIGNHOST=authenticode-signhost # # # The name of the signtool as used on Windows. # # This is greped by the Makefile. # AUTHENTICODE_TOOL="C:\Program Files (x86)\Windows Kits\10\bin\signtool.exe" # # # To use osslsigncode the follwing entries are required and # # an empty string must be given for AUTHENTICODE_SIGNHOST. # # They are greped by the Makefile. # AUTHENTICODE_KEY=/home/foo/.gnupg/my-authenticode-key.p12 # AUTHENTICODE_CERTS=/home/foo/.gnupg/my-authenticode-certs.pem # # # If a smartcard is used for the Authenticode signature these # # entries are required instead: # AUTHENTICODE_KEY=card # AUTHENTICODE_CERTS=/home/foo/.gnupg/my_authenticode_cert.pem # OSSLSIGNCODE=/usr/bin/osslsigncode # OSSLPKCS11ENGINE=/usr/lib/x86_64-linux-gnu/engines-1.1/pkcs11.so # SCUTEMODULE=/usr/local/lib/scute.so # #--8<---------------cut here---------------end--------------->8--- # We need to know our own name. SPEEDO_MK := $(realpath $(lastword $(MAKEFILE_LIST))) .PHONY : help native native-gui w32-installer w32-source w32-wixlib .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 ' w32-release Build a Windows release' @echo ' w32-wixlib Build a wixlib for MSI packages' @echo ' w32-sign-installer Sign the installer' @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 STATIC=1 to build with statically linked libraries.' @echo 'Use SELFCHECK=0 for a non-released version.' @echo 'Use CUSTOM_SWDB=1 for an already downloaded swdb.lst.' @echo 'Use WIXPREFIX to provide the WIX binaries for the MSI package.' @echo ' Using WIX also requires wine with installed wine mono.' @echo ' See help-wixlib for more information' help-wixlib: @echo 'The buildsystem can create a wixlib to build MSI packages.' @echo '' @echo 'On debian install the packages "wine"' @echo ' apt-get install wine' @echo '' @echo 'Download the wine-mono msi:' @echo ' https://dl.winehq.org/wine/wine-mono/' @echo '' @echo 'Install it:' @echo ' wine msiexec /i ~/Downloads/wine-mono-4.9.4.msi' @echo '' @echo 'Download the wix toolset binary zip from:' @echo ' https://github.com/wixtoolset/wix3/releases' @echo 'The default folder searches for ~/w32root/wixtools' @echo 'Alternative locations can be passed by WIXPREFIX variable' @echo ' unzip -d ~/w32root/wixtools ~/Downloads/wix311-binaries.zip' @echo '' @echo 'Afterwards w32-msi-release will also build a wixlib.' # NB: we can't use +$(MAKE) here because we would need to define the # dependencies of our packages. This does not make much sense given that # we have a clear order in how they are build and concurrent builds # would anyway clutter up the logs. 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=0 installer git-w32-installer: check-tools $(SPEEDOMAKE) TARGETOS=w32 WHAT=git WITH_GUI=0 installer this-w32-installer: check-tools $(SPEEDOMAKE) TARGETOS=w32 WHAT=this WITH_GUI=0 \ CUSTOM_SWDB=1 installer w32-wixlib: check-tools $(SPEEDOMAKE) TARGETOS=w32 WHAT=release WITH_GUI=0 wixlib git-w32-wixlib: check-tools $(SPEEDOMAKE) TARGETOS=w32 WHAT=git WITH_GUI=0 wixlib this-w32-wixlib: check-tools $(SPEEDOMAKE) TARGETOS=w32 WHAT=this WITH_GUI=0 \ CUSTOM_SWDB=1 wixlib w32-source: check-tools $(SPEEDOMAKE) TARGETOS=w32 WHAT=release WITH_GUI=0 dist-source git-w32-source: check-tools $(SPEEDOMAKE) TARGETOS=w32 WHAT=git WITH_GUI=0 dist-source this-w32-source: check-tools $(SPEEDOMAKE) TARGETOS=w32 WHAT=this WITH_GUI=0 \ CUSTOM_SWDB=1 dist-source w32-release: check-tools $(SPEEDOMAKE) TARGETOS=w32 WHAT=release WITH_GUI=0 SELFCHECK=0 \ installer-from-source w32-msi-release: check-tools $(SPEEDOMAKE) TARGETOS=w32 WHAT=release WITH_GUI=0 SELFCHECK=0 \ WITH_WIXLIB=1 installer-from-source w32-sign-installer: check-tools $(SPEEDOMAKE) TARGETOS=w32 WHAT=release WITH_GUI=0 SELFCHECK=0 \ sign-installer w32-release-offline: check-tools $(SPEEDOMAKE) TARGETOS=w32 WHAT=release WITH_GUI=0 SELFCHECK=0 \ CUSTOM_SWDB=1 pkgrep=${HOME}/b pkg10rep=${HOME}/b \ installer-from-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 0 to skip the GnuPG version self-check SELFCHECK=1 # Set to 1 to build with statically linked libraries. STATIC=0 # Set to the location of the directory with tarballs of # external packages. TARBALLS=$(shell pwd)/../tarballs # Number of parallel make jobs for each package 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 # Set this to the location of wixtools WIXPREFIX=$(shell readlink -f ~/w32root/wixtools) # Read signing information from ~/.gnupg-autogen.rc define READ_AUTOGEN_template $(1) = $$(shell grep '^$(1)=' $$$$HOME/.gnupg-autogen.rc|cut -d= -f2) endef $(eval $(call READ_AUTOGEN_template,AUTHENTICODE_SIGNHOST)) $(eval $(call READ_AUTOGEN_template,AUTHENTICODE_TOOL)) $(eval $(call READ_AUTOGEN_template,AUTHENTICODE_KEY)) $(eval $(call READ_AUTOGEN_template,AUTHENTICODE_CERTS)) $(eval $(call READ_AUTOGEN_template,OSSLSIGNCODE)) $(eval $(call READ_AUTOGEN_template,OSSLPKCS11ENGINE)) $(eval $(call READ_AUTOGEN_template,SCUTEMODULE)) $(eval $(call READ_AUTOGEN_template,OVERRIDE_TARBALLS)) # All files given in AUTHENTICODE_FILES are signed before # they are put into the installer. AUTHENTICODE_FILES= \ dirmngr.exe \ dirmngr_ldap.exe \ gpg-agent.exe \ gpg-connect-agent.exe \ gpg-preset-passphrase.exe \ gpg-check-pattern.exe \ gpg-wks-client.exe \ gpg.exe \ gpgconf.exe \ gpgme-w32spawn.exe \ gpgsm.exe \ gpgtar.exe \ gpgv.exe \ gpg-card.exe \ libassuan-0.dll \ libgcrypt-20.dll \ libgpg-error-0.dll \ libgpgme-11.dll \ libksba-8.dll \ libnpth-0.dll \ libsqlite3-0.dll \ pinentry-w32.exe \ scdaemon.exe \ zlib1.dll # 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 sqlite ifeq ($(WITH_GUI),1) speedo_spkgs += gettext libiconv endif endif speedo_spkgs += \ libassuan libksba ifeq ($(TARGETOS),w32) speedo_spkgs += \ ntbtls endif speedo_spkgs += \ gnupg ifeq ($(TARGETOS),w32) ifeq ($(WITH_GUI),1) speedo_spkgs += \ libffi glib pkg-config endif endif ifeq ($(STATIC),0) speedo_spkgs += \ gpgme endif ifeq ($(TARGETOS),w32) ifeq ($(WITH_GUI),1) speedo_spkgs += \ libpng \ gdk-pixbuf atk pixman cairo pango gtk+ endif endif ifeq ($(TARGETOS),w32) speedo_spkgs += pinentry ifeq ($(WITH_GUI),1) speedo_spkgs += gpa gpgex endif else ifeq ($(WITH_GUI),1) speedo_spkgs += pinentry gpa endif endif # =====END LIST OF PACKAGES===== # 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 += libgpg-error libiconv gettext libassuan gpgex endif # Packages which use the gnupg autogen.sh build style speedo_gnupg_style = \ libgpg-error npth libgcrypt \ libassuan libksba ntbtls 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 ($(SELFCHECK),0) getswdb_options += --skip-selfcheck 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_this = $(shell cat $(topsrc)/VERSION) gnupg_ver := $(shell awk '$$1=="gnupg24_ver" {print $$2}' swdb.lst) 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) libgpg_error_sha2:= $(shell awk '$$1=="libgpg_error_sha2" {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) npth_sha2 := $(shell awk '$$1=="npth_sha2" {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) libgcrypt_sha2 := $(shell awk '$$1=="libgcrypt_sha2" {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) libassuan_sha2 := $(shell awk '$$1=="libassuan_sha2" {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) libksba_sha2 := $(shell awk '$$1=="libksba_sha2" {print $$2}' swdb.lst) ntbtls_ver := $(shell awk '$$1=="ntbtls_ver" {print $$2}' swdb.lst) ntbtls_sha1 := $(shell awk '$$1=="ntbtls_sha1" {print $$2}' swdb.lst) ntbtls_sha2 := $(shell awk '$$1=="ntbtls_sha2" {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) gpgme_sha2 := $(shell awk '$$1=="gpgme_sha2" {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) pinentry_sha2 := $(shell awk '$$1=="pinentry_sha2" {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) gpa_sha2 := $(shell awk '$$1=="gpa_sha2" {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) gpgex_sha2 := $(shell awk '$$1=="gpgex_sha2" {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) zlib_sha2 := $(shell awk '$$1=="zlib_sha2_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) bzip2_sha2 := $(shell awk '$$1=="bzip2_sha2_gz" {print $$2}' swdb.lst) sqlite_ver := $(shell awk '$$1=="sqlite_ver" {print $$2}' swdb.lst) sqlite_sha1 := $(shell awk '$$1=="sqlite_sha1_gz" {print $$2}' swdb.lst) sqlite_sha2 := $(shell awk '$$1=="sqlite_sha2_gz" {print $$2}' swdb.lst) $(info Information from the version database) $(info GnuPG ..........: $(gnupg_ver) (building $(gnupg_ver_this))) $(info Libgpg-error ...: $(libgpg_error_ver)) $(info Npth ...........: $(npth_ver)) $(info Libgcrypt ......: $(libgcrypt_ver)) $(info Libassuan ......: $(libassuan_ver)) $(info Libksba ........: $(libksba_ver)) $(info Zlib ...........: $(zlib_ver)) $(info Bzip2 ..........: $(bzip2_ver)) $(info SQLite .........: $(sqlite_ver)) $(info NtbTLS .. ......: $(ntbtls_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 = https://gnupg.org/ftp/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 = master speedo_pkg_libksba_git = $(gitrep)/libksba speedo_pkg_libksba_gitref = master speedo_pkg_ntbtls_git = $(gitrep)/ntbtls speedo_pkg_ntbtls_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_ntbtls_tar = \ $(pkgrep)/ntbtls/ntbtls-$(ntbtls_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_sqlite_tar = $(pkgrep)/sqlite/sqlite-autoconf-$(sqlite_ver).tar.gz 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_npth_configure = --enable-static speedo_pkg_libgpg_error_configure = --enable-static --enable-install-gpg-error-config speedo_pkg_w64_libgpg_error_configure = --enable-static --enable-install-gpg-error-config 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 speedo_pkg_ntbtls_configure = --enable-static ifeq ($(STATIC),1) speedo_pkg_npth_configure += --disable-shared speedo_pkg_libgpg_error_configure += --disable-shared speedo_pkg_libassuan_configure += --disable-shared speedo_pkg_libgcrypt_configure += --disable-shared speedo_pkg_libksba_configure += --disable-shared endif # For now we build ntbtls only static speedo_pkg_ntbtls_configure = --disable-shared ifeq ($(TARGETOS),w32) speedo_pkg_gnupg_configure = \ --disable-g13 --enable-ntbtls --disable-tpm2d else speedo_pkg_gnupg_configure = --disable-g13 --enable-wks-tools 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 \ --with-gpg-error-prefix=$(idir) \ LDFLAGS=-L$(idir)/lib else speedo_pkg_gpgme_configure = \ --disable-static --disable-w32-glib \ --with-gpg-error-prefix=$(idir) \ LDFLAGS=-L$(idir)/lib endif ifeq ($(TARGETOS),w32) speedo_pkg_pinentry_configure = --disable-pinentry-gtk2 else speedo_pkg_pinentry_configure = --enable-pinentry-gtk2 endif speedo_pkg_pinentry_configure += \ --disable-pinentry-qt5 \ --disable-pinentry-qt \ --disable-pinentry-fltk \ --disable-pinentry-tty \ 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 # # gcc 10.2 takes __udivdi3 from the exception handler DLL and thus # requires it. This is a regression from gcc 8.3 and earlier. To fix # this we need to pass -static-libgcc. ifeq ($(TARGETOS),w32) speedo_pkg_zlib_make_args = \ -fwin32/Makefile.gcc PREFIX=$(host)- IMPLIB=libz.dll.a \ LDFLAGS=-static-libgcc 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 WINE=wine SHA1SUM := $(shell $(topsrc)/build-aux/getswdb.sh --find-sha1sum) ifeq ($(SHA1SUM),false) $(error The sha1sum tool is missing) endif SHA2SUM := $(shell $(topsrc)/build-aux/getswdb.sh --find-sha256sum) ifeq ($(SHA2SUM),false) $(error The sha256sum 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) -p $(root) $(MKDIR) -p $(stampdir) $(MKDIR) -p $(sdir) $(MKDIR) -p $(bdir) $(MKDIR) -p $(idir) ifeq ($(TARGETOS),w32) $(MKDIR) -p $(bdir6) $(MKDIR) -p $(idir6) 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)"; \ ver="$(call GETVAR,$(1)_ver)"; \ sha2="$(call GETVAR,$(1)_sha2)"; \ 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)"; \ ver="$(call GETVAR,$(1)_ver)"; \ sha2="$(call GETVAR,$(1)_sha2)"; \ 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 \ tar2="$(OVERRIDE_TARBALLS)/$$$$(basename $$$${tar})";\ if [ -f "$$$${tar2}" ]; then \ tar="$$$$tar2"; \ echo "speedo: /*"; \ echo "speedo: * Note: using an override"; \ echo "speedo: */"; \ fi; \ 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 "$$$${sha2}" ]; then \ tmp=$$$$($(SHA2SUM) > $(bdir)/pkg-versions.txt) @echo "speedo: $(1) done" @touch $(stampdir)/stamp-final-$(1) $(stampdir)/stamp-w64-final-$(1): $(stampdir)/stamp-w64-$(1)-03-install @echo "speedo: $(1) (64 bit) done" @touch $(stampdir)/stamp-w64-final-$(1) .PHONY : clean-$(1) clean-$(1): @echo "speedo: uninstalling $(1)" @($(call SETVARS,$(1)); \ (cd "$$$${pkgbdir}" 2>/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 clean-pkg-versions 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 clean-pkg-versions: @: >$(bdir)/pkg-versions.txt all-speedo: $(stampdir)/stamp-final report-speedo: $(addprefix report-,$(speedo_build_list)) # Just to check if we caught all stamps. clean-stamps: $(RM) -fR $(stampdir) clean-speedo: $(RM) -fR PLAY # # Windows installer # # {{{ ifeq ($(TARGETOS),w32) dist-source: installer 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-vcs \ --transform='s,^\./,$(INST_NAME)-$(INST_VERSION)/,' \ --anchored --exclude './PLAY' . ;\ tar --totals -rf "$$tarname" --exclude-backups --exclude-vcs \ --transform='s,^,$(INST_NAME)-$(INST_VERSION)/,' \ PLAY/stamps/stamp-*-00-unpack PLAY/src swdb.lst swdb.lst.sig ;\ [ -f "$$tarname".xz ] && rm "$$tarname".xz;\ xz -T0 "$$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 # Sort the file with the package versions. $(bdir)/pkg-versions.sorted: $(bdir)/pkg-versions.txt grep -v '^gnupg ' <$(bdir)/pkg-versions.txt \ | sort | uniq >$(bdir)/pkg-versions.sorted $(bdir)/README.txt: $(bdir)/NEWS.tmp $(topsrc)/README $(w32src)/README.txt \ $(w32src)/pkg-copyright.txt $(bdir)/pkg-versions.sorted 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 '/!PKG-VERSIONS!/{r $(bdir)/pkg-versions.sorted' -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 $(w32src)/exdll.c (set -e; cd $(bdir); \ $(W32CC) -DUNICODE -static-libgcc -I . -O2 -c \ -o exdll.o $(w32src)/exdll.c; \ $(W32CC) -DUNICODE -static-libgcc -I. -shared -O2 \ -o g4wihelp.dll $(w32src)/g4wihelp.c exdll.o \ -lwinmm -lgdi32 -luserenv \ -lshell32 -loleaut32 -lshlwapi -lmsimg32; \ $(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 # Note that we sign only when doing the final installer. installer: all w32_insthelpers $(w32src)/inst-options.ini $(bdir)/README.txt (set -e;\ cd "$(idir)"; \ if echo "$(idir)" | grep -q '/PLAY-release/' ; then \ for f in $(AUTHENTICODE_FILES); do \ if [ -f "bin/$$f" ]; then \ $(call AUTHENTICODE_sign,"bin/$$f","bin/$$f");\ elif [ -f "libexec/$$f" ]; then \ $(call AUTHENTICODE_sign,"libexec/$$f","libexec/$$f");\ else \ echo "speedo: WARNING: file '$$f' not available for signing";\ fi;\ done; \ fi \ ) - $(MAKENSIS) -V2 $$($(MAKENSIS) -version \ - | grep -q ^v3 && echo "-INPUTCHARSET CP1252 ") \ + $(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) \ $(extra_installer_options) $(w32src)/inst.nsi @echo "Ready: $(idir)/$(INST_NAME)-$(INST_VERSION)_$(BUILD_DATESTR).exe" # We use the installer target to ensure everything is done and signed wixlib: installer $(bdir)/README.txt $(w32src)/wixlib.wxs if [ -z "$$(which $(WINE))" ]; then \ echo "ERROR: For the w32-wixlib wine needs to be installed."; \ echo "ERROR: see 'help-w32-wixlib'"; \ exit 1; \ fi; if [ ! -d "$(WIXPREFIX)" ]; then \ echo "ERROR: You must set WIXPREFIX to an installation of wixtools."; \ echo "ERROR: see 'help-w32-wixlib'"; \ exit 1; \ fi; (if [ -z "$$WINEPREFIX" ]; then \ WINEPREFIX="$$HOME/.wine"; \ if [ ! -e "$$WINEPREFIX/dosdevices" ]; then \ echo "ERROR: No wine prefix found under $$WINEPREFIX"; \ exit 1; \ fi; \ fi; \ WINEINST=$$WINEPREFIX/dosdevices/k:; \ WINESRC=$$WINEPREFIX/dosdevices/i:; \ WINEBUILD=$$WINEPREFIX/dosdevices/j:; \ if [ -e "$$WINEINST" ]; then \ echo "ERROR: $$WINEINST already exists. Please remove."; \ exit 1; \ fi; \ if [ -e "$$WINESRC" ]; then \ echo "ERROR: $$WINESRC already exists. Please remove."; \ exit 1; \ fi; \ if [ -e "$$WINEBUILD" ]; then \ echo "ERROR: $$WINEBUILD already exists. Please remove."; \ exit 1; \ fi; \ echo "$(INST_NAME)" > $(bdir)/VERSION; \ echo "$(INST_VERSION)" >> $(bdir)/VERSION; \ MSI_VERSION=$$(echo $(INST_VERSION) | tr -s \\-beta .); \ (ln -s $(idir) $$WINEINST; \ ln -s $(w32src) $$WINESRC; \ ln -s $(bdir) $$WINEBUILD; \ $(WINE) $(WIXPREFIX)/candle.exe \ -dSourceDir=k: \ -dBuildDir=j: \ -dVersion=$$MSI_VERSION \ -out k:\\$(INST_NAME).wixobj \ -pedantic -wx i:\\wixlib.wxs ;\ $(WINE) $(WIXPREFIX)/lit.exe \ -out k:\\$(INST_NAME)-$(INST_VERSION)_$(BUILD_DATESTR).wixlib \ -bf \ -wx \ -pedantic \ k:\\$(INST_NAME).wixobj \ ); \ (rm $$WINEINST; rm $$WINESRC; rm $$WINEBUILD;) \ ) define MKSWDB_commands ( pref="#+macro: gnupg24_w32_$(3)" ;\ echo "$${pref}ver $(INST_VERSION)_$(BUILD_DATESTR)" ;\ echo "$${pref}date $(2)" ;\ echo "$${pref}size $$(wc -c <$(1)|awk '{print int($$1/1024)}')k";\ echo "$${pref}sha1 $$(sha1sum <$(1)|cut -d' ' -f1)" ;\ echo "$${pref}sha2 $$(sha256sum <$(1)|cut -d' ' -f1)" ;\ ) | tee $(1).swdb endef # Sign the file $1 and save the result as $2 define AUTHENTICODE_sign set -e;\ if [ -n "$(AUTHENTICODE_SIGNHOST)" ]; then \ echo "speedo: Signing via host $(AUTHENTICODE_SIGNHOST)";\ scp $(1) "$(AUTHENTICODE_SIGNHOST):a.exe" ;\ ssh "$(AUTHENTICODE_SIGNHOST)" '$(AUTHENTICODE_TOOL)' sign \ /a /n '"g10 Code GmbH"' \ /tr 'http://rfc3161timestamp.globalsign.com/advanced' /td sha256 \ /fd sha256 /du https://gnupg.org a.exe ;\ scp "$(AUTHENTICODE_SIGNHOST):a.exe" $(2);\ echo "speedo: signed file is '$(2)'" ;\ elif [ "$(AUTHENTICODE_KEY)" = card ]; then \ echo "speedo: Signing using a card: '$(1)'";\ $(OSSLSIGNCODE) sign \ -pkcs11engine $(OSSLPKCS11ENGINE) \ -pkcs11module $(SCUTEMODULE) \ -certs $(AUTHENTICODE_CERTS) \ -h sha256 -n GnuPG -i https://gnupg.org \ -ts http://rfc3161timestamp.globalsign.com/advanced \ -in $(1) -out $(2).tmp ; mv $(2).tmp $(2) ; \ elif [ -e "$(AUTHENTICODE_KEY)" ]; then \ echo "speedo: Signing using key $(AUTHENTICODE_KEY)";\ osslsigncode sign -certs $(AUTHENTICODE_CERTS) \ -pkcs12 $(AUTHENTICODE_KEY) -askpass \ -ts "http://timestamp.globalsign.com/scripts/timstamp.dll" \ -h sha256 -n GnuPG -i https://gnupg.org \ -in $(1) -out $(2) ;\ else \ echo "speedo: WARNING: Binaries are not signed"; \ fi endef # Help target for testing to sign a file. # Usage: make -f speedo.mk test-authenticode-sign TARGETOS=w32 FILE=foo.exe test-authenticode-sign: (set -e; \ echo "Test signining of $(FILE)" ; \ $(call AUTHENTICODE_sign,"$(FILE)","$(FILE)");\ ) # Build the installer from the source tarball. installer-from-source: dist-source (set -e;\ [ -d PLAY-release ] && rm -rf PLAY-release; \ mkdir PLAY-release;\ cd PLAY-release; \ tar xJf "../$(INST_NAME)-$(INST_VERSION)_$(BUILD_DATESTR).tar.xz";\ cd $(INST_NAME)-$(INST_VERSION); \ $(MAKE) -f build-aux/speedo.mk this-w32-installer SELFCHECK=0;\ if [ -d "$(WIXPREFIX)" -a x"$(WITH_WIXLIB)" = x1 ]; then \ $(MAKE) -f build-aux/speedo.mk this-w32-wixlib SELFCHECK=0;\ fi; \ reldate="$$(date -u +%Y-%m-%d)" ;\ exefile="$(INST_NAME)-$(INST_VERSION)_$(BUILD_DATESTR).exe" ;\ cp "PLAY/inst/$$exefile" ../.. ;\ exefile="../../$$exefile" ;\ $(call MKSWDB_commands,$${exefile},$${reldate}); \ msifile="$(INST_NAME)-$(INST_VERSION)_$(BUILD_DATESTR).wixlib"; \ if [ -e "PLAY/inst/$${msifile}" ]; then \ cp "PLAY/inst/$$msifile" ../..; \ msifile="../../$$msifile" ; \ $(call MKSWDB_commands,$${msifile},$${reldate},"wixlib_"); \ fi \ ) # This target repeats some of the installer-from-source steps but it # is intended to be called interactively, so that the passphrase can be # entered. sign-installer: @(set -e; \ cd PLAY-release; \ cd $(INST_NAME)-$(INST_VERSION); \ reldate="$$(date -u +%Y-%m-%d)" ;\ exefile="$(INST_NAME)-$(INST_VERSION)_$(BUILD_DATESTR).exe" ;\ msifile="$(INST_NAME)-$(INST_VERSION)_$(BUILD_DATESTR).wixlib" ;\ echo "speedo: /*" ;\ echo "speedo: * Signing installer" ;\ echo "speedo: */" ;\ $(call AUTHENTICODE_sign,"PLAY/inst/$$exefile","../../$$exefile");\ exefile="../../$$exefile" ;\ msifile="../../$$msifile" ;\ $(call MKSWDB_commands,$${exefile},$${reldate}); \ if [ -f "$${msifile}" ]; then \ $(call MKSWDB_commands,$${msifile},$${reldate},"wixlib_"); \ fi; \ echo "speedo: /*" ;\ echo "speedo: * Verification result" ;\ echo "speedo: */" ;\ osslsigncode verify $${exefile} \ ) endif # }}} W32 # # Check availibility of standard tools and prepare everything. # check-tools: $(stampdir)/stamp-directories # # Mark phony targets # .PHONY: all all-speedo report-speedo clean-stamps clean-speedo installer \ w32_insthelpers check-tools clean-pkg-versions diff --git a/build-aux/speedo/w32/inst.nsi b/build-aux/speedo/w32/inst.nsi index 665c65b02..283166835 100644 --- a/build-aux/speedo/w32/inst.nsi +++ b/build-aux/speedo/w32/inst.nsi @@ -1,1674 +1,1677 @@ -# inst.nsi - Installer for GnuPG on Windows. -*- coding: latin-1; -*- +# inst.nsi - Installer for GnuPG on Windows. # Copyright (C) 2005, 2014, 2019-2021 g10 Code GmbH # 2017 Intevation 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 +# This one must be done before addplugindir. +Unicode true + !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) 2021 g10 Code GmbH" !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.\ + "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 # We use the modern UI. !include "MUI.nsh" # Some helper some !include "LogicLib.nsh" !include "x64.nsh" # We support user mode installation but prefer system wide !define MULTIUSER_EXECUTIONLEVEL Highest !define MULTIUSER_MUI !define MULTIUSER_INSTALLMODE_COMMANDLINE !define MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_KEY "Software\${PACKAGE_SHORT}" !define MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_VALUENAME "" !define MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_KEY "Software\${PACKAGE_SHORT}" !define MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_VALUENAME "Install Directory" !define MULTIUSER_INSTALLMODE_INSTDIR "${PACKAGE_SHORT}" !include "MultiUser.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\${INSTALL_DIR}" # 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\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 !define MUI_PAGE_CUSTOMFUNCTION_LEAVE CheckExistingVersion !insertmacro MUI_PAGE_COMPONENTS # We don't have MUI_PAGE_DIRECTORY !ifdef WITH_GUI Page custom CustomPageOptions Var STARTMENU_FOLDER !define MUI_PAGE_CUSTOMFUNCTION_PRE CheckIfStartMenuWanted !define MUI_STARTMENUPAGE_NODISABLE !define MUI_STARTMENUPAGE_REGISTRY_ROOT "SHCTX" !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." + "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" + "Die Schlüsselverwaltung aufrufen" LangString T_MoreInfo ${LANG_ENGLISH} \ "Click here to see how to help the GnuPG Project" LangString T_MoreInfo ${LANG_GERMAN} \ "Hier klicken um dem GnuPG Projekt zu zu helfen" LangString T_MoreInfoURL ${LANG_ENGLISH} "https://gnupg.org/donate" LangString T_MoreInfoURL ${LANG_GERMAN} "https://gnupg.org/donate" 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." + "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." + "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 components page. A call to abort will get # back to the components 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_YESNO "$(T_AdminWanted)" IDNO exit goto leave exit: 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:" + "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 \ + "(In die Schnellstartleiste werden nur Verknüpfungen für \ Programme angelegt.) " LangString T_InstOptFieldA ${LANG_ENGLISH} \ "Start Menu" LangString T_InstOptFieldA ${LANG_GERMAN} \ - "Startmenü" + "Startmenü" LangString T_InstOptFieldB ${LANG_ENGLISH} \ "Desktop" LangString T_InstOptFieldB ${LANG_GERMAN} \ - "Arbeitsfläche" + "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\ + 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 \ + (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. \ $\r$\n\ $\r$\n\ Do you want to continue installing GnuPG?" LangString T_FoundExistingVersionB ${LANG_GERMAN} \ "Eine Version von GnuPG ist hier bereits installiert. \ $\r$\n\ $\r$\n\ - Möchten die die Installation von GnuPG fortführen?" + Möchten die die Installation von GnuPG fortführen?" # From Function PrintNonAdminWarning LangString T_AdminWanted ${LANG_ENGLISH} \ "Warning: It is recommended to install GnuPG system-wide with \ administrator rights. \ $\r$\n\ $\r$\n\ Do you want to continue installing GnuPG without administrator rights?" LangString T_AdminWanted ${LANG_GERMAN} \ "Achtung: Es wird empfohlen GnuPG systemweit mit \ Administratorrechten zu installieren. \ $\r$\n\ $\r$\n\ - Möchten die die Installation von GnuPG ohne Administratorrechte fortführen?" + Möchten die die Installation von GnuPG ohne Administratorrechte fortführen?" # 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 \ + "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." + 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 ClearErrors UserInfo::GetName IfErrors add_admin Pop $0 UserInfo::GetAccountType Pop $1 StrCmp $1 "Admin" add_admin add_user add_admin: Exch $0 g4wihelp::path_add "$0" "0" goto add_done add_user: Exch $0 g4wihelp::path_add "$0" "1" goto add_done add_done: 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 ClearErrors UserInfo::GetName IfErrors remove_admin Pop $0 UserInfo::GetAccountType Pop $1 StrCmp $1 "Admin" remove_admin remove_user remove_admin: Exch $0 g4wihelp::path_remove "$0" "0" goto remove_done remove_user: Exch $0 g4wihelp::path_remove "$0" "1" goto remove_done remove_done: 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 SHCTX "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 nsExec::ExecToLog '"$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 nsExec::ExecToLog '"$INSTDIR\bin\gpgconf" "--kill" "dirmngr"' nsExec::ExecToLog '"$INSTDIR\bin\gpgconf" "--kill" "gpg-agent"' nsExec::ExecToLog '"$INSTDIR\bin\gpgconf" "--kill" "keyboxd"' 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 "bin/gpg.exe" File "bin/gpgv.exe" File "bin/gpgsm.exe" File "bin/gpgconf.exe" File "bin/gpg-connect-agent.exe" File "bin/gpg-card.exe" File "bin/gpgtar.exe" File "bin/gpg-wks-client.exe" File "libexec/dirmngr_ldap.exe" File "libexec/gpg-preset-passphrase.exe" File "libexec/gpg-check-pattern.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 "bin/dirmngr.exe" SetOverwrite lastused ifErrors 0 +3 File /oname=dirmngr.exe.tmp "bin/dirmngr.exe" Rename /REBOOTOK dirmngr.exe.tmp dirmngr.exe ClearErrors SetOverwrite try File "libexec/scdaemon.exe" SetOverwrite lastused ifErrors 0 +3 File /oname=scdaemon.exe.tmp "libexec/scdaemon.exe" Rename /REBOOTOK scdaemon.exe.tmp scdaemon.exe ClearErrors SetOverwrite try File "libexec/keyboxd.exe" SetOverwrite lastused ifErrors 0 +3 File /oname=keyboxd.exe.tmp "libexec/keyboxd.exe" Rename /REBOOTOK keyboxd.exe.tmp keyboxd.exe SetOutPath "$INSTDIR\share\gnupg" File "share/gnupg/distsigkey.gpg" File "share/gnupg/sks-keyservers.netCA.pem" SetOutPath "$INSTDIR\share\doc\gnupg\examples" File "share/doc/gnupg/examples/pwpattern.list" SetOutPath "$INSTDIR\share\locale\ca\LC_MESSAGES" File share/locale/ca/LC_MESSAGES/gnupg2.mo SetOutPath "$INSTDIR\share\locale\cs\LC_MESSAGES" File share/locale/cs/LC_MESSAGES/gnupg2.mo SetOutPath "$INSTDIR\share\locale\da\LC_MESSAGES" File share/locale/da/LC_MESSAGES/gnupg2.mo SetOutPath "$INSTDIR\share\locale\de\LC_MESSAGES" File share/locale/de/LC_MESSAGES/gnupg2.mo SetOutPath "$INSTDIR\share\locale\el\LC_MESSAGES" File share/locale/el/LC_MESSAGES/gnupg2.mo SetOutPath "$INSTDIR\share\locale\en@boldquot\LC_MESSAGES" File share/locale/en@boldquot/LC_MESSAGES/gnupg2.mo SetOutPath "$INSTDIR\share\locale\en@quot\LC_MESSAGES" File share/locale/en@quot/LC_MESSAGES/gnupg2.mo SetOutPath "$INSTDIR\share\locale\eo\LC_MESSAGES" File share/locale/eo/LC_MESSAGES/gnupg2.mo SetOutPath "$INSTDIR\share\locale\es\LC_MESSAGES" File share/locale/es/LC_MESSAGES/gnupg2.mo SetOutPath "$INSTDIR\share\locale\et\LC_MESSAGES" File share/locale/et/LC_MESSAGES/gnupg2.mo SetOutPath "$INSTDIR\share\locale\fi\LC_MESSAGES" File share/locale/fi/LC_MESSAGES/gnupg2.mo SetOutPath "$INSTDIR\share\locale\fr\LC_MESSAGES" File share/locale/fr/LC_MESSAGES/gnupg2.mo SetOutPath "$INSTDIR\share\locale\gl\LC_MESSAGES" File share/locale/gl/LC_MESSAGES/gnupg2.mo SetOutPath "$INSTDIR\share\locale\hu\LC_MESSAGES" File share/locale/hu/LC_MESSAGES/gnupg2.mo SetOutPath "$INSTDIR\share\locale\id\LC_MESSAGES" File share/locale/id/LC_MESSAGES/gnupg2.mo SetOutPath "$INSTDIR\share\locale\it\LC_MESSAGES" File share/locale/it/LC_MESSAGES/gnupg2.mo SetOutPath "$INSTDIR\share\locale\ja\LC_MESSAGES" File share/locale/ja/LC_MESSAGES/gnupg2.mo SetOutPath "$INSTDIR\share\locale\nb\LC_MESSAGES" File share/locale/nb/LC_MESSAGES/gnupg2.mo SetOutPath "$INSTDIR\share\locale\pl\LC_MESSAGES" File share/locale/pl/LC_MESSAGES/gnupg2.mo SetOutPath "$INSTDIR\share\locale\pt\LC_MESSAGES" File share/locale/pt/LC_MESSAGES/gnupg2.mo SetOutPath "$INSTDIR\share\locale\ro\LC_MESSAGES" File share/locale/ro/LC_MESSAGES/gnupg2.mo SetOutPath "$INSTDIR\share\locale\ru\LC_MESSAGES" File share/locale/ru/LC_MESSAGES/gnupg2.mo SetOutPath "$INSTDIR\share\locale\sk\LC_MESSAGES" File share/locale/sk/LC_MESSAGES/gnupg2.mo SetOutPath "$INSTDIR\share\locale\sv\LC_MESSAGES" File share/locale/sv/LC_MESSAGES/gnupg2.mo SetOutPath "$INSTDIR\share\locale\tr\LC_MESSAGES" File share/locale/tr/LC_MESSAGES/gnupg2.mo SetOutPath "$INSTDIR\share\locale\uk\LC_MESSAGES" File share/locale/uk/LC_MESSAGES/gnupg2.mo SetOutPath "$INSTDIR\share\locale\zh_CN\LC_MESSAGES" File share/locale/zh_CN/LC_MESSAGES/gnupg2.mo SetOutPath "$INSTDIR\share\locale\zh_TW\LC_MESSAGES" File share/locale/zh_TW/LC_MESSAGES/gnupg2.mo 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." + 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 SetOutPath "$INSTDIR\share\locale\cs\LC_MESSAGES" File share/locale/cs/LC_MESSAGES/libgpg-error.mo SetOutPath "$INSTDIR\share\locale\da\LC_MESSAGES" File share/locale/da/LC_MESSAGES/libgpg-error.mo SetOutPath "$INSTDIR\share\locale\de\LC_MESSAGES" File share/locale/de/LC_MESSAGES/libgpg-error.mo SetOutPath "$INSTDIR\share\locale\eo\LC_MESSAGES" File share/locale/eo/LC_MESSAGES/libgpg-error.mo SetOutPath "$INSTDIR\share\locale\es\LC_MESSAGES" File share/locale/es/LC_MESSAGES/libgpg-error.mo SetOutPath "$INSTDIR\share\locale\fr\LC_MESSAGES" File share/locale/fr/LC_MESSAGES/libgpg-error.mo SetOutPath "$INSTDIR\share\locale\hu\LC_MESSAGES" File share/locale/hu/LC_MESSAGES/libgpg-error.mo SetOutPath "$INSTDIR\share\locale\it\LC_MESSAGES" File share/locale/it/LC_MESSAGES/libgpg-error.mo SetOutPath "$INSTDIR\share\locale\ja\LC_MESSAGES" File share/locale/ja/LC_MESSAGES/libgpg-error.mo SetOutPath "$INSTDIR\share\locale\nl\LC_MESSAGES" File share/locale/nl/LC_MESSAGES/libgpg-error.mo SetOutPath "$INSTDIR\share\locale\pl\LC_MESSAGES" File share/locale/pl/LC_MESSAGES/libgpg-error.mo SetOutPath "$INSTDIR\share\locale\pt\LC_MESSAGES" File share/locale/pt/LC_MESSAGES/libgpg-error.mo SetOutPath "$INSTDIR\share\locale\ro\LC_MESSAGES" File share/locale/ro/LC_MESSAGES/libgpg-error.mo SetOutPath "$INSTDIR\share\locale\ru\LC_MESSAGES" File share/locale/ru/LC_MESSAGES/libgpg-error.mo SetOutPath "$INSTDIR\share\locale\sr\LC_MESSAGES" File share/locale/sr/LC_MESSAGES/libgpg-error.mo SetOutPath "$INSTDIR\share\locale\sv\LC_MESSAGES" File share/locale/sv/LC_MESSAGES/libgpg-error.mo SetOutPath "$INSTDIR\share\locale\uk\LC_MESSAGES" File share/locale/uk/LC_MESSAGES/libgpg-error.mo SetOutPath "$INSTDIR\share\locale\vi\LC_MESSAGES" File share/locale/vi/LC_MESSAGES/libgpg-error.mo SetOutPath "$INSTDIR\share\locale\zh_CN\LC_MESSAGES" File share/locale/zh_CN/LC_MESSAGES/libgpg-error.mo SetOutPath "$INSTDIR\share\locale\zh_TW\LC_MESSAGES" File share/locale/zh_TW/LC_MESSAGES/libgpg-error.mo SectionEnd Section "-zlib" SEC_zlib SetOutPath "$INSTDIR\bin" File bin/zlib1.dll 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 /nonfatal bin/libgpgme-glib-11.dll File libexec/gpgme-w32spawn.exe SetOutPath "$INSTDIR\lib" File /oname=libgpgme.imp lib/libgpgme.dll.a File /nonfatal /oname=libgpgme-glib.imp lib/libgpgme-glib.dll.a SetOutPath "$INSTDIR\include" File include/gpgme.h SectionEnd Section "-sqlite" SEC_sqlite SetOutPath "$INSTDIR\bin" File bin/libsqlite3-0.dll SectionEnd !ifdef WITH_GUI Section "-libiconv" SEC_libiconv SetOutPath "$INSTDIR\bin" File bin/libiconv-2.dll SectionEnd 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 Section "-pinentry" SEC_pinentry SetOutPath "$INSTDIR\bin" File /oname=pinentry-basic.exe "bin/pinentry-w32.exe" SectionEnd !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." + "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 nsExec::ExecToLog '"$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 nsExec::ExecToLog '"$INSTDIR\bin\launch-gpa" "--stop-server"' no_uiserver: ifFileExists "$INSTDIR\bin\gpgconf.exe" 0 no_gpgconf nsExec::ExecToLog '"$INSTDIR\bin\gpgconf" "--kill" "gpg-agent"' nsExec::ExecToLog '"$INSTDIR\bin\gpgconf" "--kill" "dirmngr"' nsExec::ExecToLog '"$INSTDIR\bin\gpgconf" "--kill" "keyboxd"' no_gpgconf: SectionEnd Section "-un.gpgex" UnRegDLL "$INSTDIR\bin\gpgex.dll" Delete /REBOOTOK "$INSTDIR\bin\gpgex.dll" ${If} ${RunningX64} nsExec::ExecToLog '"$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 Section "-un.pinentry" Delete "$INSTDIR\bin\pinentry-basic.exe" SectionEnd !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.libiconv" Delete "$INSTDIR\bin\libiconv-2.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.zlib" Delete "$INSTDIR\bin\zlib1.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" Delete "$INSTDIR\share\locale\cs\LC_MESSAGES\libgpg-error.mo" RMDir "$INSTDIR\share\locale\cs\LC_MESSAGES" RMDir "$INSTDIR\share\locale\cs" Delete "$INSTDIR\share\locale\da\LC_MESSAGES\libgpg-error.mo" RMDir "$INSTDIR\share\locale\da\LC_MESSAGES" RMDir "$INSTDIR\share\locale\da" Delete "$INSTDIR\share\locale\de\LC_MESSAGES\libgpg-error.mo" RMDir "$INSTDIR\share\locale\de\LC_MESSAGES" RMDir "$INSTDIR\share\locale\de" Delete "$INSTDIR\share\locale\eo\LC_MESSAGES\libgpg-error.mo" RMDir "$INSTDIR\share\locale\eo\LC_MESSAGES" RMDir "$INSTDIR\share\locale\eo" Delete "$INSTDIR\share\locale\es\LC_MESSAGES\libgpg-error.mo" RMDir "$INSTDIR\share\locale\es\LC_MESSAGES" RMDir "$INSTDIR\share\locale\es" Delete "$INSTDIR\share\locale\fr\LC_MESSAGES\libgpg-error.mo" RMDir "$INSTDIR\share\locale\fr\LC_MESSAGES" RMDir "$INSTDIR\share\locale\fr" Delete "$INSTDIR\share\locale\hu\LC_MESSAGES\libgpg-error.mo" RMDir "$INSTDIR\share\locale\hu\LC_MESSAGES" RMDir "$INSTDIR\share\locale\hu" Delete "$INSTDIR\share\locale\it\LC_MESSAGES\libgpg-error.mo" RMDir "$INSTDIR\share\locale\it\LC_MESSAGES" RMDir "$INSTDIR\share\locale\it" Delete "$INSTDIR\share\locale\ja\LC_MESSAGES\libgpg-error.mo" RMDir "$INSTDIR\share\locale\ja\LC_MESSAGES" RMDir "$INSTDIR\share\locale\ja" Delete "$INSTDIR\share\locale\nl\LC_MESSAGES\libgpg-error.mo" RMDir "$INSTDIR\share\locale\nl\LC_MESSAGES" RMDir "$INSTDIR\share\locale\nl" Delete "$INSTDIR\share\locale\pl\LC_MESSAGES\libgpg-error.mo" RMDir "$INSTDIR\share\locale\pl\LC_MESSAGES" RMDir "$INSTDIR\share\locale\pl" Delete "$INSTDIR\share\locale\pt\LC_MESSAGES\libgpg-error.mo" RMDir "$INSTDIR\share\locale\pt\LC_MESSAGES" RMDir "$INSTDIR\share\locale\pt" Delete "$INSTDIR\share\locale\ro\LC_MESSAGES\libgpg-error.mo" RMDir "$INSTDIR\share\locale\ro\LC_MESSAGES" RMDir "$INSTDIR\share\locale\ro" Delete "$INSTDIR\share\locale\ru\LC_MESSAGES\libgpg-error.mo" RMDir "$INSTDIR\share\locale\ru\LC_MESSAGES" RMDir "$INSTDIR\share\locale\ru" Delete "$INSTDIR\share\locale\sr\LC_MESSAGES\libgpg-error.mo" RMDir "$INSTDIR\share\locale\sr\LC_MESSAGES" RMDir "$INSTDIR\share\locale\sr" Delete "$INSTDIR\share\locale\sv\LC_MESSAGES\libgpg-error.mo" RMDir "$INSTDIR\share\locale\sv\LC_MESSAGES" RMDir "$INSTDIR\share\locale\sv" Delete "$INSTDIR\share\locale\uk\LC_MESSAGES\libgpg-error.mo" RMDir "$INSTDIR\share\locale\uk\LC_MESSAGES" RMDir "$INSTDIR\share\locale\uk" Delete "$INSTDIR\share\locale\vi\LC_MESSAGES\libgpg-error.mo" RMDir "$INSTDIR\share\locale\vi\LC_MESSAGES" RMDir "$INSTDIR\share\locale\vi" Delete "$INSTDIR\share\locale\zh_CN\LC_MESSAGES\libgpg-error.mo" RMDir "$INSTDIR\share\locale\zh_CN\LC_MESSAGES" RMDir "$INSTDIR\share\locale\zh_CN" Delete "$INSTDIR\share\locale\zh_TW\LC_MESSAGES\libgpg-error.mo" RMDir "$INSTDIR\share\locale\zh_TW\LC_MESSAGES" RMDir "$INSTDIR\share\locale\zh_TW" RMDir "$INSTDIR\share\locale" 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\keyboxd.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\bin\gpg-card.exe" Delete "$INSTDIR\bin\dirmngr_ldap.exe" Delete "$INSTDIR\bin\gpg-preset-passphrase.exe" Delete "$INSTDIR\bin\gpg-check-pattern.exe" Delete "$INSTDIR\bin\gpg-wks-client.exe" Delete "$INSTDIR\share\doc\gnupg\examples\pwpattern.list" RMDir "$INSTDIR\share\doc\gnupg\examples" Delete "$INSTDIR\share\gnupg\sks-keyservers.netCA.pem" Delete "$INSTDIR\share\gnupg\dirmngr-conf.skel" Delete "$INSTDIR\share\gnupg\distsigkey.gpg" Delete "$INSTDIR\share\gnupg\gpg-conf.skel" RMDir "$INSTDIR\share\gnupg" Delete "$INSTDIR\share\locale\ca\LC_MESSAGES\gnupg2.mo" RMDir "$INSTDIR\share\locale\ca\LC_MESSAGES" RMDir "$INSTDIR\share\locale\ca" Delete "$INSTDIR\share\locale\cs\LC_MESSAGES\gnupg2.mo" RMDir "$INSTDIR\share\locale\cs\LC_MESSAGES" RMDir "$INSTDIR\share\locale\cs" Delete "$INSTDIR\share\locale\da\LC_MESSAGES\gnupg2.mo" RMDir "$INSTDIR\share\locale\da\LC_MESSAGES" RMDir "$INSTDIR\share\locale\da" Delete "$INSTDIR\share\locale\de\LC_MESSAGES\gnupg2.mo" RMDir "$INSTDIR\share\locale\de\LC_MESSAGES" RMDir "$INSTDIR\share\locale\de" Delete "$INSTDIR\share\locale\el\LC_MESSAGES\gnupg2.mo" RMDir "$INSTDIR\share\locale\el\LC_MESSAGES" RMDir "$INSTDIR\share\locale\el" Delete "$INSTDIR\share\locale\en@boldquot\LC_MESSAGES\gnupg2.mo" RMDir "$INSTDIR\share\locale\en@boldquot\LC_MESSAGES" RMDir "$INSTDIR\share\locale\en@boldquot" Delete "$INSTDIR\share\locale\en@quot\LC_MESSAGES\gnupg2.mo" RMDir "$INSTDIR\share\locale\en@quot\LC_MESSAGES" RMDir "$INSTDIR\share\locale\en@quot" Delete "$INSTDIR\share\locale\eo\LC_MESSAGES\gnupg2.mo" RMDir "$INSTDIR\share\locale\eo\LC_MESSAGES" RMDir "$INSTDIR\share\locale\eo" Delete "$INSTDIR\share\locale\es\LC_MESSAGES\gnupg2.mo" RMDir "$INSTDIR\share\locale\es\LC_MESSAGES" RMDir "$INSTDIR\share\locale\es" Delete "$INSTDIR\share\locale\et\LC_MESSAGES\gnupg2.mo" RMDir "$INSTDIR\share\locale\et\LC_MESSAGES" RMDir "$INSTDIR\share\locale\et" Delete "$INSTDIR\share\locale\fi\LC_MESSAGES\gnupg2.mo" RMDir "$INSTDIR\share\locale\fi\LC_MESSAGES" RMDir "$INSTDIR\share\locale\fi" Delete "$INSTDIR\share\locale\fr\LC_MESSAGES\gnupg2.mo" RMDir "$INSTDIR\share\locale\fr\LC_MESSAGES" RMDir "$INSTDIR\share\locale\fr" Delete "$INSTDIR\share\locale\gl\LC_MESSAGES\gnupg2.mo" RMDir "$INSTDIR\share\locale\gl\LC_MESSAGES" RMDir "$INSTDIR\share\locale\gl" Delete "$INSTDIR\share\locale\hu\LC_MESSAGES\gnupg2.mo" RMDir "$INSTDIR\share\locale\hu\LC_MESSAGES" RMDir "$INSTDIR\share\locale\hu" Delete "$INSTDIR\share\locale\id\LC_MESSAGES\gnupg2.mo" RMDir "$INSTDIR\share\locale\id\LC_MESSAGES" RMDir "$INSTDIR\share\locale\id" Delete "$INSTDIR\share\locale\it\LC_MESSAGES\gnupg2.mo" RMDir "$INSTDIR\share\locale\it\LC_MESSAGES" RMDir "$INSTDIR\share\locale\it" Delete "$INSTDIR\share\locale\ja\LC_MESSAGES\gnupg2.mo" RMDir "$INSTDIR\share\locale\ja\LC_MESSAGES" RMDir "$INSTDIR\share\locale\ja" Delete "$INSTDIR\share\locale\nb\LC_MESSAGES\gnupg2.mo" RMDir "$INSTDIR\share\locale\nb\LC_MESSAGES" RMDir "$INSTDIR\share\locale\nb" Delete "$INSTDIR\share\locale\pl\LC_MESSAGES\gnupg2.mo" RMDir "$INSTDIR\share\locale\pl\LC_MESSAGES" RMDir "$INSTDIR\share\locale\pl" Delete "$INSTDIR\share\locale\pt\LC_MESSAGES\gnupg2.mo" RMDir "$INSTDIR\share\locale\pt\LC_MESSAGES" RMDir "$INSTDIR\share\locale\pt" Delete "$INSTDIR\share\locale\ro\LC_MESSAGES\gnupg2.mo" RMDir "$INSTDIR\share\locale\ro\LC_MESSAGES" RMDir "$INSTDIR\share\locale\ro" Delete "$INSTDIR\share\locale\ru\LC_MESSAGES\gnupg2.mo" RMDir "$INSTDIR\share\locale\ru\LC_MESSAGES" RMDir "$INSTDIR\share\locale\ru" Delete "$INSTDIR\share\locale\sk\LC_MESSAGES\gnupg2.mo" RMDir "$INSTDIR\share\locale\sk\LC_MESSAGES" RMDir "$INSTDIR\share\locale\sk" Delete "$INSTDIR\share\locale\sv\LC_MESSAGES\gnupg2.mo" RMDir "$INSTDIR\share\locale\sv\LC_MESSAGES" RMDir "$INSTDIR\share\locale\sv" Delete "$INSTDIR\share\locale\tr\LC_MESSAGES\gnupg2.mo" RMDir "$INSTDIR\share\locale\tr\LC_MESSAGES" RMDir "$INSTDIR\share\locale\tr" Delete "$INSTDIR\share\locale\uk\LC_MESSAGES\gnupg2.mo" RMDir "$INSTDIR\share\locale\uk\LC_MESSAGES" RMDir "$INSTDIR\share\locale\uk" Delete "$INSTDIR\share\locale\zh_CN\LC_MESSAGES\gnupg2.mo" RMDir "$INSTDIR\share\locale\zh_CN\LC_MESSAGES" RMDir "$INSTDIR\share\locale\zh_CN" Delete "$INSTDIR\share\locale\zh_TW\LC_MESSAGES\gnupg2.mo" RMDir "$INSTDIR\share\locale\zh_TW\LC_MESSAGES" RMDir "$INSTDIR\share\locale\zh_TW" RMDir "$INSTDIR\share\locale" SectionEnd Section "-un.sqlite" Delete "$INSTDIR\bin\libsqlite3-0.dll" 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 SHCTX "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 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 initDone: FunctionEnd Function "un.onInit" !insertmacro MULTIUSER_UNINIT 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" # 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: 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 SHCTX $MYTMP "UninstallString" '"$INSTDIR\gnupg-uninstall.exe"' WriteRegExpandStr SHCTX $MYTMP "InstallLocation" "$INSTDIR" WriteRegStr SHCTX $MYTMP "DisplayName" "${PRETTY_PACKAGE}" !ifdef WITH_GUI WriteRegStr SHCTX $MYTMP "DisplayIcon" "$INSTDIR\bin\gpa.exe,0" !else WriteRegStr SHCTX $MYTMP "DisplayIcon" "$INSTDIR\bin\gpg.exe,0" !endif WriteRegStr SHCTX $MYTMP "DisplayVersion" "${VERSION}" WriteRegStr SHCTX $MYTMP "Publisher" "The GnuPG Project" WriteRegStr SHCTX $MYTMP "URLInfoAbout" "https://gnupg.org" WriteRegDWORD SHCTX $MYTMP "NoModify" "1" WriteRegDWORD SHCTX $MYTMP "NoRepair" "1" SectionEnd Section Uninstall !ifdef WITH_GUI #--------------------------------------------------- # 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 SHCTX "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 Delete "$INSTDIR\gnupg-uninstall.exe" RMDir "$INSTDIR" # Clean the registry. DeleteRegValue SHCTX "Software\GnuPG" "Install Directory" DeleteRegKey /ifempty SHCTX "Software\GnuPG" # Remove Windows Add/Remove Programs support. DeleteRegKey SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\GnuPG" SectionEnd