summaryrefslogtreecommitdiffstats
path: root/build-aux/speedo
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-27 09:59:15 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-27 09:59:15 +0000
commit8de1ee1b2b676b0d07586f0752750dd6b0fb7511 (patch)
treedd46fd7dc3863045696cd0e48032d8a36fa0daf5 /build-aux/speedo
parentInitial commit. (diff)
downloadgnupg2-8de1ee1b2b676b0d07586f0752750dd6b0fb7511.tar.xz
gnupg2-8de1ee1b2b676b0d07586f0752750dd6b0fb7511.zip
Adding upstream version 2.2.27.upstream/2.2.27upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r--build-aux/speedo.mk1514
-rwxr-xr-xbuild-aux/speedo/patches/atk-1.32.0.patch671
-rwxr-xr-xbuild-aux/speedo/patches/gpgme-1.12.0.patch36
-rwxr-xr-xbuild-aux/speedo/patches/libiconv-1.14.patch19
-rwxr-xr-xbuild-aux/speedo/patches/pango-1.29.4.patch27
-rwxr-xr-xbuild-aux/speedo/patches/sqlite.patch42
-rw-r--r--build-aux/speedo/w32/README.txt88
-rw-r--r--build-aux/speedo/w32/exdll.h151
-rw-r--r--build-aux/speedo/w32/g4wihelp.c1175
-rwxr-xr-xbuild-aux/speedo/w32/gdk-pixbuf-loaders.cache138
-rw-r--r--build-aux/speedo/w32/gnupg-logo-150x57.bmpbin0 -> 3842 bytes
-rw-r--r--build-aux/speedo/w32/gnupg-logo-164x314.bmpbin0 -> 4182 bytes
-rw-r--r--build-aux/speedo/w32/inst-options.ini46
-rw-r--r--build-aux/speedo/w32/inst.nsi1665
-rwxr-xr-xbuild-aux/speedo/w32/pango.modules3
-rw-r--r--build-aux/speedo/w32/pkg-copyright.txt410
-rw-r--r--build-aux/speedo/w32/wixlib.wxs676
-rw-r--r--build-aux/speedo/zlib.pc10
18 files changed, 6671 insertions, 0 deletions
diff --git a/build-aux/speedo.mk b/build-aux/speedo.mk
new file mode 100644
index 0000000..7df8edc
--- /dev/null
+++ b/build-aux/speedo.mk
@@ -0,0 +1,1514 @@
+# 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 <http://www.gnu.org/licenses/>.
+
+# 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 reyured 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
+#
+#--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=<dir> 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-release will build also a wixlib.'
+
+
+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-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
+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))
+
+# 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-wks-client.exe \
+ gpg.exe \
+ gpgconf.exe \
+ gpgme-w32spawn.exe \
+ gpgsm.exe \
+ gpgtar.exe \
+ gpgv.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=="gnupg22_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=="libgcrypt18_ver" {print $$2}' swdb.lst)
+libgcrypt_sha1 := $(shell awk '$$1=="libgcrypt18_sha1" {print $$2}' swdb.lst)
+libgcrypt_sha2 := $(shell awk '$$1=="libgcrypt18_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 = ftp://ftp.gnupg.org/gcrypt
+pkg10rep = ftp://ftp.g10code.com/g10code
+pkg2rep = $(TARBALLS)
+
+# For each package, the following variables can be defined:
+#
+# speedo_pkg_PACKAGE_git: The GIT repository that should be built.
+# speedo_pkg_PACKAGE_gitref: The GIT revision to checkout
+#
+# speedo_pkg_PACKAGE_tar: URL to the tar file that should be built.
+#
+# Exactly one of the above variables is required. Note that this
+# version of speedo does not cache repositories or tar files, and does
+# not test the integrity of the downloaded software. If you care
+# about this, you can also specify filenames to locally verified files.
+# Filenames are differentiated from URLs by starting with a slash '/'.
+#
+# speedo_pkg_PACKAGE_configure: Extra arguments to configure.
+#
+# speedo_pkg_PACKAGE_make_args: Extra arguments to make.
+#
+# speedo_pkg_PACKAGE_make_args_inst: Extra arguments to make install.
+#
+# Note that you can override the defaults in this file in a local file
+# "config.mk"
+
+ifeq ($(WHAT),this)
+else ifeq ($(WHAT),git)
+ speedo_pkg_libgpg_error_git = $(gitrep)/libgpg-error
+ speedo_pkg_libgpg_error_gitref = master
+ speedo_pkg_npth_git = $(gitrep)/npth
+ speedo_pkg_npth_gitref = master
+ speedo_pkg_libassuan_git = $(gitrep)/libassuan
+ speedo_pkg_libassuan_gitref = master
+ speedo_pkg_libgcrypt_git = $(gitrep)/libgcrypt
+ speedo_pkg_libgcrypt_gitref = 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
+speedo_pkg_w64_libgpg_error_configure = --enable-static
+
+speedo_pkg_libassuan_configure = --enable-static
+speedo_pkg_w64_libassuan_configure = --enable-static
+
+speedo_pkg_libgcrypt_configure = --disable-static
+
+speedo_pkg_libksba_configure = --disable-static
+
+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
+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
+#
+
+ifeq ($(TARGETOS),w32)
+speedo_pkg_zlib_make_args = \
+ -fwin32/Makefile.gcc PREFIX=$(host)- IMPLIB=libz.dll.a
+
+speedo_pkg_zlib_make_args_inst = \
+ -fwin32/Makefile.gcc \
+ BINARY_PATH=$(idir)/bin INCLUDE_PATH=$(idir)/include \
+ LIBRARY_PATH=$(idir)/lib SHARED_MODE=1 IMPLIB=libz.dll.a
+
+# Zlib needs some special magic to generate a libtool file.
+# We also install the pc file here.
+define speedo_pkg_zlib_post_install
+(set -e; mkdir $(idir)/lib/pkgconfig || true; \
+cp $(auxsrc)/zlib.pc $(idir)/lib/pkgconfig/; \
+cd $(idir); \
+echo "# Generated by libtool" > lib/libz.la \
+echo "dlname='../bin/zlib1.dll'" >> lib/libz.la; \
+echo "library_names='libz.dll.a'" >> lib/libz.la; \
+echo "old_library='libz.a'" >> lib/libz.la; \
+echo "dependency_libs=''" >> lib/libz.la; \
+echo "current=1" >> lib/libz.la; \
+echo "age=2" >> lib/libz.la; \
+echo "revision=5" >> lib/libz.la; \
+echo "installed=yes" >> lib/libz.la; \
+echo "shouldnotlink=no" >> lib/libz.la; \
+echo "dlopen=''" >> lib/libz.la; \
+echo "dlpreopen=''" >> lib/libz.la; \
+echo "libdir=\"$(idir)/lib\"" >> lib/libz.la)
+endef
+
+endif
+
+ifeq ($(TARGETOS),w32)
+speedo_pkg_bzip2_make_args = \
+ CC="$(host)-gcc" AR="$(host)-ar" RANLIB="$(host)-ranlib"
+
+speedo_pkg_bzip2_make_args_inst = \
+ PREFIX=$(idir) CC="$(host)-gcc" AR="$(host)-ar" RANLIB="$(host)-ranlib"
+endif
+
+speedo_pkg_w64_libiconv_configure = \
+ --enable-shared=no --enable-static=yes
+
+speedo_pkg_gettext_configure = \
+ --with-lib-prefix=$(idir) --with-libiconv-prefix=$(idir) \
+ CPPFLAGS=-I$(idir)/include LDFLAGS=-L$(idir)/lib
+speedo_pkg_w64_gettext_configure = \
+ --with-lib-prefix=$(idir) --with-libiconv-prefix=$(idir) \
+ CPPFLAGS=-I$(idir6)/include LDFLAGS=-L$(idir6)/lib
+speedo_pkg_gettext_extracflags = -O2
+# We only need gettext-runtime and there is sadly no top level
+# configure option for this
+speedo_pkg_gettext_make_dir = gettext-runtime
+
+
+speedo_pkg_glib_configure = \
+ --disable-modular-tests \
+ --with-libiconv=gnu \
+ CPPFLAGS=-I$(idir)/include \
+ LDFLAGS=-L$(idir)/lib \
+ CCC=$(host)-g++ \
+ LIBFFI_CFLAGS=-I$(idir)/lib/libffi-$(libffi_ver)/include \
+ LIBFFI_LIBS=\"-L$(idir)/lib -lffi\"
+ifeq ($(TARGETOS),w32)
+speedo_pkg_glib_extracflags = -march=i486
+endif
+
+ifeq ($(TARGETOS),w32)
+speedo_pkg_libpng_configure = \
+ CPPFLAGS=\"-I$(idir)/include -DPNG_BUILD_DLL\" \
+ LDFLAGS=\"-L$(idir)/lib\" LIBPNG_DEFINES=\"-DPNG_BUILD_DLL\"
+else
+speedo_pkg_libpng_configure = \
+ CPPFLAGS=\"-I$(idir)/include\" \
+ LDFLAGS=\"-L$(idir)/lib\"
+endif
+
+ifneq ($(TARGETOS),w32)
+speedo_pkg_gdk_pixbuf_configure = --without-libtiff --without-libjpeg
+endif
+
+speedo_pkg_pixman_configure = \
+ CPPFLAGS=-I$(idir)/include \
+ LDFLAGS=-L$(idir)/lib
+
+ifeq ($(TARGETOS),w32)
+speedo_pkg_cairo_configure = \
+ --disable-qt --disable-ft --disable-fc \
+ --enable-win32 --enable-win32-font \
+ CPPFLAGS=-I$(idir)/include \
+ LDFLAGS=-L$(idir)/lib
+else
+speedo_pkg_cairo_configure = \
+ --disable-qt \
+ CPPFLAGS=-I$(idir)/include \
+ LDFLAGS=-L$(idir)/lib
+endif
+
+speedo_pkg_pango_configure = \
+ --disable-gtk-doc \
+ CPPFLAGS=-I$(idir)/include \
+ LDFLAGS=-L$(idir)/lib
+
+speedo_pkg_gtk__configure = \
+ --disable-cups \
+ CPPFLAGS=-I$(idir)/include \
+ LDFLAGS=-L$(idir)/lib
+
+
+# ---------
+
+all: all-speedo
+
+report: report-speedo
+
+clean: clean-speedo
+
+ifeq ($(TARGETOS),w32)
+STRIP = i686-w64-mingw32-strip
+else
+STRIP = strip
+endif
+W32CC = i686-w64-mingw32-gcc
+
+-include config.mk
+
+#
+# The generic speedo code
+#
+
+MKDIR=mkdir
+MAKENSIS=makensis
+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) $(root) || true
+ $(MKDIR) $(stampdir) || true
+ $(MKDIR) $(sdir) || true
+ $(MKDIR) $(bdir) || true
+ $(MKDIR) $(idir) || true
+ifeq ($(TARGETOS),w32)
+ $(MKDIR) $(bdir6) || true
+ $(MKDIR) $(idir6) || true
+endif
+ touch $(stampdir)/stamp-directories
+
+# Frob the name $1 by converting all '-' and '+' characters to '_'.
+define FROB_macro
+$(subst +,_,$(subst -,_,$(1)))
+endef
+
+# Get the variable $(1) (which may contain '-' and '+' characters).
+define GETVAR
+$($(call FROB_macro,$(1)))
+endef
+
+# Set a couple of common variables.
+define SETVARS
+ pkg="$(1)"; \
+ git="$(call GETVAR,speedo_pkg_$(1)_git)"; \
+ gitref="$(call GETVAR,speedo_pkg_$(1)_gitref)"; \
+ tar="$(call GETVAR,speedo_pkg_$(1)_tar)"; \
+ 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 \
+ 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) <tmp.tgz|cut -d' ' -f1);\
+ if [ "$$$${tmp}" != "$$$${sha2}" ]; then \
+ echo "speedo:"; \
+ echo "speedo: ERROR: SHA-256 checksum mismatch for $(1)";\
+ echo "speedo:"; \
+ exit 1; \
+ fi; \
+ elif [ -n "$$$${sha1}" ]; then \
+ tmp=$$$$($(SHA1SUM) <tmp.tgz|cut -d' ' -f1);\
+ if [ "$$$${tmp}" != "$$$${sha1}" ]; then \
+ echo "speedo:"; \
+ echo "speedo: ERROR: SHA-1 checksum mismatch for $(1)";\
+ echo "speedo:"; \
+ exit 1; \
+ fi; \
+ else \
+ echo "speedo:"; \
+ echo "speedo: Warning: No checksum known for $(1)";\
+ echo "speedo:"; \
+ fi; \
+ rm tmp.tgz; \
+ fi; \
+ base=`echo "$$$${tar}" | sed -e 's,^.*/,,' \
+ | sed -e 's,\.tar.*$$$$,,'`; \
+ mv $$$${base} $(1); \
+ patch="$(patdir)/$(1)-$$$${base#$(1)-}.patch";\
+ patchx="$(patdir)/$(1).patch"; \
+ if [ -x "$$$${patch}" ]; then \
+ echo "speedo: applying patch $$$${patch}"; \
+ cd $(1); "$$$${patch}"; \
+ elif [ -x "$$$${patchx}" ]; then \
+ echo "speedo: applying patch $$$${patchx}";\
+ cd $(1); "$$$${patchx}"; \
+ elif [ -f "$$$${patch}" ]; then \
+ echo "speedo: warning: $$$${patch} is not executable"; \
+ fi; \
+ else \
+ echo "speedo: unpacking $(1) from UNKNOWN"; \
+ fi)
+ @touch $(stampdir)/stamp-$(1)-00-unpack
+
+$(stampdir)/stamp-$(1)-01-configure: $(stampdir)/stamp-$(1)-00-unpack
+ @echo "speedo: configuring $(1)"
+ifneq ($(findstring $(1),$(speedo_make_only_style)),)
+ @echo "speedo: configure run not required"
+else ifneq ($(findstring $(1),$(speedo_gnupg_style)),)
+ @($(call SETVARS,$(1)); \
+ mkdir "$$$${pkgbdir}"; \
+ cd "$$$${pkgbdir}"; \
+ if [ -n "$(speedo_autogen_buildopt)" ]; then \
+ eval AUTOGEN_SH_SILENT=1 w32root="$(idir)" \
+ "$$$${pkgsdir}/autogen.sh" \
+ $(speedo_autogen_buildopt) \
+ $$$${pkgcfg} $$$${pkgextracflags}; \
+ else \
+ eval "$$$${pkgsdir}/configure" \
+ --silent \
+ --enable-maintainer-mode \
+ --prefix="$(idir)" \
+ $$$${pkgcfg} $$$${pkgextracflags}; \
+ fi)
+else
+ @($(call SETVARS,$(1)); \
+ mkdir "$$$${pkgbdir}"; \
+ cd "$$$${pkgbdir}"; \
+ eval "$$$${pkgsdir}/configure" \
+ --silent $(speedo_host_build_option) \
+ --prefix="$(idir)" \
+ $$$${pkgcfg} $$$${pkgextracflags}; \
+ )
+endif
+ @touch $(stampdir)/stamp-$(1)-01-configure
+
+# Note that unpack has no 64 bit version becuase it is just the source.
+# Fixme: We should use templates to create the standard and w64
+# version of these rules.
+$(stampdir)/stamp-w64-$(1)-01-configure: $(stampdir)/stamp-$(1)-00-unpack
+ @echo "speedo: configuring $(1) (64 bit)"
+ifneq ($(findstring $(1),$(speedo_make_only_style)),)
+ @echo "speedo: configure run not required"
+else ifneq ($(findstring $(1),$(speedo_gnupg_style)),)
+ @($(call SETVARS_W64,$(1)); \
+ mkdir "$$$${pkgbdir}"; \
+ cd "$$$${pkgbdir}"; \
+ if [ -n "$(speedo_autogen_buildopt)" ]; then \
+ eval AUTOGEN_SH_SILENT=1 w64root="$(idir6)" \
+ "$$$${pkgsdir}/autogen.sh" \
+ $(speedo_autogen_buildopt6) \
+ $$$${pkgcfg} $$$${pkgextracflags}; \
+ else \
+ eval "$$$${pkgsdir}/configure" \
+ --silent \
+ --enable-maintainer-mode \
+ --prefix="$(idir6)" \
+ $$$${pkgcfg} $$$${pkgextracflags}; \
+ fi)
+else
+ @($(call SETVARS_W64,$(1)); \
+ mkdir "$$$${pkgbdir}"; \
+ cd "$$$${pkgbdir}"; \
+ eval "$$$${pkgsdir}/configure" \
+ --silent $(speedo_host_build_option6) \
+ --prefix="$(idir6)" \
+ $$$${pkgcfg} $$$${pkgextracflags}; \
+ )
+endif
+ @touch $(stampdir)/stamp-w64-$(1)-01-configure
+
+
+$(stampdir)/stamp-$(1)-02-make: $(stampdir)/stamp-$(1)-01-configure
+ @echo "speedo: making $(1)"
+ifneq ($(findstring $(1),$(speedo_make_only_style)),)
+ @($(call SETVARS,$(1)); \
+ cd "$$$${pkgsdir}"; \
+ test -n "$$$${pkgmkdir}" && cd "$$$${pkgmkdir}"; \
+ if test "$$$${pkg}" = zlib -a "$(TARGETOS)" != w32 ; then \
+ ./configure --prefix="$(idir)" ; \
+ fi ;\
+ $(MAKE) --no-print-directory $(speedo_makeopt) $$$${pkgmkargs} V=0)
+else
+ @($(call SETVARS,$(1)); \
+ cd "$$$${pkgbdir}"; \
+ test -n "$$$${pkgmkdir}" && cd "$$$${pkgmkdir}"; \
+ $(MAKE) --no-print-directory $(speedo_makeopt) $$$${pkgmkargs} V=0)
+endif
+ @touch $(stampdir)/stamp-$(1)-02-make
+
+$(stampdir)/stamp-w64-$(1)-02-make: $(stampdir)/stamp-w64-$(1)-01-configure
+ @echo "speedo: making $(1) (64 bit)"
+ifneq ($(findstring $(1),$(speedo_make_only_style)),)
+ @($(call SETVARS_W64,$(1)); \
+ cd "$$$${pkgsdir}"; \
+ test -n "$$$${pkgmkdir}" && cd "$$$${pkgmkdir}"; \
+ $(MAKE) --no-print-directory $(speedo_makeopt) $$$${pkgmkargs} V=0)
+else
+ @($(call SETVARS_W64,$(1)); \
+ cd "$$$${pkgbdir}"; \
+ test -n "$$$${pkgmkdir}" && cd "$$$${pkgmkdir}"; \
+ $(MAKE) --no-print-directory $(speedo_makeopt) $$$${pkgmkargs} V=0)
+endif
+ @touch $(stampdir)/stamp-w64-$(1)-02-make
+
+# Note that post_install must come last because it may be empty and
+# "; ;" is a syntax error.
+$(stampdir)/stamp-$(1)-03-install: $(stampdir)/stamp-$(1)-02-make
+ @echo "speedo: installing $(1)"
+ifneq ($(findstring $(1),$(speedo_make_only_style)),)
+ @($(call SETVARS,$(1)); \
+ cd "$$$${pkgsdir}"; \
+ test -n "$$$${pkgmkdir}" && cd "$$$${pkgmkdir}"; \
+ $(MAKE) --no-print-directory $$$${pkgmkargs_inst} install V=0;\
+ $(call speedo_pkg_$(call FROB_macro,$(1))_post_install))
+else
+ @($(call SETVARS,$(1)); \
+ cd "$$$${pkgbdir}"; \
+ test -n "$$$${pkgmkdir}" && cd "$$$${pkgmkdir}"; \
+ $(MAKE) --no-print-directory $$$${pkgmkargs_inst} install-strip V=0;\
+ $(call speedo_pkg_$(call FROB_macro,$(1))_post_install))
+endif
+ touch $(stampdir)/stamp-$(1)-03-install
+
+$(stampdir)/stamp-w64-$(1)-03-install: $(stampdir)/stamp-w64-$(1)-02-make
+ @echo "speedo: installing $(1) (64 bit)"
+ifneq ($(findstring $(1),$(speedo_make_only_style)),)
+ @($(call SETVARS_W64,$(1)); \
+ cd "$$$${pkgsdir}"; \
+ test -n "$$$${pkgmkdir}" && cd "$$$${pkgmkdir}"; \
+ $(MAKE) --no-print-directory $$$${pkgmkargs_inst} install V=0;\
+ $(call speedo_pkg_$(call FROB_macro,$(1))_post_install))
+else
+ @($(call SETVARS_W64,$(1)); \
+ cd "$$$${pkgbdir}"; \
+ test -n "$$$${pkgmkdir}" && cd "$$$${pkgmkdir}"; \
+ $(MAKE) --no-print-directory $$$${pkgmkargs_inst} install-strip V=0;\
+ $(call speedo_pkg_$(call FROB_macro,$(1))_post_install))
+endif
+ touch $(stampdir)/stamp-w64-$(1)-03-install
+
+$(stampdir)/stamp-final-$(1): $(stampdir)/stamp-$(1)-03-install
+ @($(call SETVARS,$(1)); \
+ printf "%-14s %-12s %s\n" $(1) "$$$${ver}" "$$$${sha1}" \
+ >> $(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 catched 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
+ (set -e; cd $(bdir); \
+ $(W32CC) -I. -shared -O2 -o g4wihelp.dll $(w32src)/g4wihelp.c \
+ -lwinmm -lgdi32; \
+ $(STRIP) g4wihelp.dll)
+
+w32_insthelpers: $(bdir)/g4wihelp.dll
+
+$(bdir)/inst-options.ini: $(w32src)/inst-options.ini
+ cat $(w32src)/inst-options.ini >$(bdir)/inst-options.ini
+
+extra_installer_options =
+ifeq ($(WITH_GUI),1)
+extra_installer_options += -DWITH_GUI=1
+endif
+
+# 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 ") \
+ -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: gnupg22_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 \
+ /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 [ -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
+
+
+# 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)" ]; 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 [ -e "$${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
+#
+check-tools:
+
+
+#
+# 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/patches/atk-1.32.0.patch b/build-aux/speedo/patches/atk-1.32.0.patch
new file mode 100755
index 0000000..51d7975
--- /dev/null
+++ b/build-aux/speedo/patches/atk-1.32.0.patch
@@ -0,0 +1,671 @@
+#! /bin/sh
+patch -p1 -l -f $* < $0
+exit $?
+
+
+diff -urpb orig/atk-1.32.0/atk/atkaction.c atk/atk/atkaction.c
+--- orig/atk-1.32.0/atk/atkaction.c 2010-09-06 08:45:45.000000000 +0200
++++ atk/atk/atkaction.c 2014-02-17 12:30:53.263192763 +0100
+@@ -101,7 +101,7 @@ atk_action_get_n_actions (AtkAction *ob
+ * Returns a description string, or %NULL
+ * if @action does not implement this interface.
+ **/
+-G_CONST_RETURN gchar*
++const gchar*
+ atk_action_get_description (AtkAction *obj,
+ gint i)
+ {
+@@ -140,7 +140,7 @@ atk_action_get_description (AtkAction *o
+ * Returns a name string, or %NULL
+ * if @action does not implement this interface.
+ **/
+-G_CONST_RETURN gchar*
++const gchar*
+ atk_action_get_name (AtkAction *obj,
+ gint i)
+ {
+@@ -166,7 +166,7 @@ atk_action_get_name (AtkAction *obj,
+ * Returns a name string, or %NULL
+ * if @action does not implement this interface.
+ **/
+-G_CONST_RETURN gchar*
++const gchar*
+ atk_action_get_localized_name (AtkAction *obj,
+ gint i)
+ {
+@@ -203,7 +203,7 @@ atk_action_get_localized_name (AtkAction
+ * if there is no keybinding for this action.
+ *
+ **/
+-G_CONST_RETURN gchar*
++const gchar*
+ atk_action_get_keybinding (AtkAction *obj,
+ gint i)
+ {
+Only in atk/atk: atkaction.c~
+diff -urpb orig/atk-1.32.0/atk/atkaction.h atk/atk/atkaction.h
+--- orig/atk-1.32.0/atk/atkaction.h 2010-09-06 08:45:45.000000000 +0200
++++ atk/atk/atkaction.h 2014-02-17 12:30:58.907192071 +0100
+@@ -55,16 +55,16 @@ struct _AtkActionIface
+ gboolean (*do_action) (AtkAction *action,
+ gint i);
+ gint (*get_n_actions) (AtkAction *action);
+- G_CONST_RETURN gchar* (*get_description) (AtkAction *action,
++ const gchar* (*get_description) (AtkAction *action,
+ gint i);
+- G_CONST_RETURN gchar* (*get_name) (AtkAction *action,
++ const gchar* (*get_name) (AtkAction *action,
+ gint i);
+- G_CONST_RETURN gchar* (*get_keybinding) (AtkAction *action,
++ const gchar* (*get_keybinding) (AtkAction *action,
+ gint i);
+ gboolean (*set_description) (AtkAction *action,
+ gint i,
+ const gchar *desc);
+- G_CONST_RETURN gchar* (*get_localized_name)(AtkAction *action,
++ const gchar* (*get_localized_name)(AtkAction *action,
+ gint i);
+ AtkFunction pad2;
+ };
+@@ -85,11 +85,11 @@ GType atk_action_get_type (void);
+ gboolean atk_action_do_action (AtkAction *action,
+ gint i);
+ gint atk_action_get_n_actions (AtkAction *action);
+-G_CONST_RETURN gchar* atk_action_get_description (AtkAction *action,
++const gchar* atk_action_get_description (AtkAction *action,
+ gint i);
+-G_CONST_RETURN gchar* atk_action_get_name (AtkAction *action,
++const gchar* atk_action_get_name (AtkAction *action,
+ gint i);
+-G_CONST_RETURN gchar* atk_action_get_keybinding (AtkAction *action,
++const gchar* atk_action_get_keybinding (AtkAction *action,
+ gint i);
+ gboolean atk_action_set_description (AtkAction *action,
+ gint i,
+@@ -97,7 +97,7 @@ gboolean atk_action_set_des
+
+ /* NEW in ATK 1.1: */
+
+-G_CONST_RETURN gchar* atk_action_get_localized_name (AtkAction *action,
++const gchar* atk_action_get_localized_name (AtkAction *action,
+ gint i);
+
+ /*
+Only in atk/atk: atkaction.h~
+diff -urpb orig/atk-1.32.0/atk/atkdocument.c atk/atk/atkdocument.c
+--- orig/atk-1.32.0/atk/atkdocument.c 2010-09-06 08:45:45.000000000 +0200
++++ atk/atk/atkdocument.c 2014-02-17 12:30:58.535192391 +0100
+@@ -93,7 +93,7 @@ atk_document_base_init (AtkDocumentIface
+ *
+ * Returns: a string indicating the document type
+ **/
+-G_CONST_RETURN gchar*
++const gchar*
+ atk_document_get_document_type (AtkDocument *document)
+ {
+ AtkDocumentIface *iface;
+@@ -155,7 +155,7 @@ atk_document_get_document (AtkDocument *
+ * locale of the document content as a whole, or NULL if
+ * the document content does not specify a locale.
+ **/
+-G_CONST_RETURN gchar *
++const gchar *
+ atk_document_get_locale (AtkDocument *document)
+ {
+ AtkDocumentIface *iface;
+@@ -219,7 +219,7 @@ atk_document_get_attributes (AtkDocument
+ * document, or NULL if a value for #attribute_name has not been specified
+ * for this document.
+ */
+-G_CONST_RETURN gchar *
++const gchar *
+ atk_document_get_attribute_value (AtkDocument *document,
+ const gchar *attribute_name)
+ {
+Only in atk/atk: atkdocument.c~
+diff -urpb orig/atk-1.32.0/atk/atkdocument.h atk/atk/atkdocument.h
+--- orig/atk-1.32.0/atk/atkdocument.h 2010-09-06 08:45:45.000000000 +0200
++++ atk/atk/atkdocument.h 2014-02-17 12:31:31.691190631 +0100
+@@ -49,12 +49,12 @@ typedef struct _AtkDocumentIface AtkDocu
+ struct _AtkDocumentIface
+ {
+ GTypeInterface parent;
+- G_CONST_RETURN gchar* ( *get_document_type) (AtkDocument *document);
++ const gchar* ( *get_document_type) (AtkDocument *document);
+ gpointer ( *get_document) (AtkDocument *document);
+
+- G_CONST_RETURN gchar* ( *get_document_locale) (AtkDocument *document);
++ const gchar* ( *get_document_locale) (AtkDocument *document);
+ AtkAttributeSet * ( *get_document_attributes) (AtkDocument *document);
+- G_CONST_RETURN gchar* ( *get_document_attribute_value) (AtkDocument *document,
++ const gchar* ( *get_document_attribute_value) (AtkDocument *document,
+ const gchar *attribute_name);
+ gboolean ( *set_document_attribute) (AtkDocument *document,
+ const gchar *attribute_name,
+@@ -68,11 +68,11 @@ struct _AtkDocumentIface
+
+ GType atk_document_get_type (void);
+
+-G_CONST_RETURN gchar* atk_document_get_document_type (AtkDocument *document);
++const gchar* atk_document_get_document_type (AtkDocument *document);
+ gpointer atk_document_get_document (AtkDocument *document);
+-G_CONST_RETURN gchar* atk_document_get_locale (AtkDocument *document);
++const gchar* atk_document_get_locale (AtkDocument *document);
+ AtkAttributeSet* atk_document_get_attributes (AtkDocument *document);
+-G_CONST_RETURN gchar* atk_document_get_attribute_value (AtkDocument *document,
++const gchar* atk_document_get_attribute_value (AtkDocument *document,
+ const gchar *attribute_name);
+ gboolean atk_document_set_attribute_value (AtkDocument *document,
+ const gchar *attribute_name,
+Only in atk/atk: atkdocument.h~
+diff -urpb orig/atk-1.32.0/atk/atkimage.c atk/atk/atkimage.c
+--- orig/atk-1.32.0/atk/atkimage.c 2010-09-06 08:45:45.000000000 +0200
++++ atk/atk/atkimage.c 2014-02-17 12:30:58.119192299 +0100
+@@ -46,7 +46,7 @@ atk_image_get_type (void)
+ *
+ * Returns: a string representing the image description
+ **/
+-G_CONST_RETURN gchar*
++const gchar*
+ atk_image_get_image_description (AtkImage *image)
+ {
+ AtkImageIface *iface;
+@@ -192,7 +192,7 @@ atk_image_get_image_position (AtkImage *
+ * Returns a string corresponding to the POSIX LC_MESSAGES locale used by the image description, or NULL if the image does not specify a locale.
+ *
+ */
+-G_CONST_RETURN gchar*
++const gchar*
+ atk_image_get_image_locale (AtkImage *image)
+ {
+
+Only in atk/atk: atkimage.c~
+diff -urpb orig/atk-1.32.0/atk/atkimage.h atk/atk/atkimage.h
+--- orig/atk-1.32.0/atk/atkimage.h 2010-09-06 08:45:45.000000000 +0200
++++ atk/atk/atkimage.h 2014-02-17 12:28:31.599200223 +0100
+@@ -53,13 +53,13 @@ struct _AtkImageIface
+ gint *x,
+ gint *y,
+ AtkCoordType coord_type);
+- G_CONST_RETURN gchar* ( *get_image_description) (AtkImage *image);
++ const gchar* ( *get_image_description) (AtkImage *image);
+ void ( *get_image_size) (AtkImage *image,
+ gint *width,
+ gint *height);
+ gboolean ( *set_image_description) (AtkImage *image,
+ const gchar *description);
+- G_CONST_RETURN gchar* ( *get_image_locale) (AtkImage *image);
++ const gchar* ( *get_image_locale) (AtkImage *image);
+
+ AtkFunction pad1;
+
+@@ -67,7 +67,7 @@ struct _AtkImageIface
+
+ GType atk_image_get_type (void);
+
+-G_CONST_RETURN gchar* atk_image_get_image_description (AtkImage *image);
++const gchar* atk_image_get_image_description (AtkImage *image);
+
+ void atk_image_get_image_size (AtkImage *image,
+ gint *width,
+@@ -80,7 +80,7 @@ void atk_image_get_image_position
+ gint *y,
+ AtkCoordType coord_type);
+
+-G_CONST_RETURN gchar* atk_image_get_image_locale (AtkImage *image);
++const gchar* atk_image_get_image_locale (AtkImage *image);
+
+ G_END_DECLS
+
+Only in atk/atk: atkimage.h~
+diff -urpb orig/atk-1.32.0/atk/atkobject.c atk/atk/atkobject.c
+--- orig/atk-1.32.0/atk/atkobject.c 2010-09-06 08:45:45.000000000 +0200
++++ atk/atk/atkobject.c 2014-02-17 12:28:39.467199803 +0100
+@@ -285,9 +285,9 @@ static void atk_object_real_g
+ GValue *value,
+ GParamSpec *pspec);
+ static void atk_object_finalize (GObject *object);
+-static G_CONST_RETURN gchar*
++static const gchar*
+ atk_object_real_get_name (AtkObject *object);
+-static G_CONST_RETURN gchar*
++static const gchar*
+ atk_object_real_get_description
+ (AtkObject *object);
+ static AtkObject* atk_object_real_get_parent (AtkObject *object);
+@@ -692,7 +692,7 @@ atk_implementor_get_type (void)
+ *
+ * Returns: a character string representing the accessible name of the object.
+ **/
+-G_CONST_RETURN gchar*
++const gchar*
+ atk_object_get_name (AtkObject *accessible)
+ {
+ AtkObjectClass *klass;
+@@ -716,7 +716,7 @@ atk_object_get_name (AtkObject *accessib
+ * of the accessible.
+ *
+ **/
+-G_CONST_RETURN gchar*
++const gchar*
+ atk_object_get_description (AtkObject *accessible)
+ {
+ AtkObjectClass *klass;
+@@ -1123,7 +1123,7 @@ atk_object_notify_state_change (AtkObjec
+ AtkState state,
+ gboolean value)
+ {
+- G_CONST_RETURN gchar* name;
++ const gchar* name;
+
+ g_return_if_fail (ATK_IS_OBJECT (accessible));
+
+@@ -1319,13 +1319,13 @@ atk_object_finalize (GObject *object)
+ G_OBJECT_CLASS (parent_class)->finalize (object);
+ }
+
+-static G_CONST_RETURN gchar*
++static const gchar*
+ atk_object_real_get_name (AtkObject *object)
+ {
+ return object->name;
+ }
+
+-static G_CONST_RETURN gchar*
++static const gchar*
+ atk_object_real_get_description (AtkObject *object)
+ {
+ return object->description;
+@@ -1487,7 +1487,7 @@ atk_object_notify (GObject *obj,
+ *
+ * Returns: the string describing the AtkRole
+ */
+-G_CONST_RETURN gchar*
++const gchar*
+ atk_role_get_name (AtkRole role)
+ {
+ if (role >= 0 && role < ATK_ROLE_LAST_DEFINED)
+@@ -1514,7 +1514,7 @@ atk_role_get_name (AtkRole role)
+ *
+ * Returns: the localized string describing the AtkRole
+ **/
+-G_CONST_RETURN gchar*
++const gchar*
+ atk_role_get_localized_name (AtkRole role)
+ {
+ gettext_initialization ();
+Only in atk/atk: atkobject.c~
+diff -urpb orig/atk-1.32.0/atk/atkobject.h atk/atk/atkobject.h
+--- orig/atk-1.32.0/atk/atkobject.h 2010-09-06 08:45:45.000000000 +0200
++++ atk/atk/atkobject.h 2014-02-17 12:28:48.851199302 +0100
+@@ -381,11 +381,11 @@ struct _AtkObjectClass
+ /*
+ * Gets the accessible name of the object
+ */
+- G_CONST_RETURN gchar* (* get_name) (AtkObject *accessible);
++ const gchar* (* get_name) (AtkObject *accessible);
+ /*
+ * Gets the accessible description of the object
+ */
+- G_CONST_RETURN gchar* (* get_description) (AtkObject *accessible);
++ const gchar* (* get_description) (AtkObject *accessible);
+ /*
+ * Gets the accessible parent of the object
+ */
+@@ -535,8 +535,8 @@ AtkObject* atk_implementor_
+ * Properties directly supported by AtkObject
+ */
+
+-G_CONST_RETURN gchar* atk_object_get_name (AtkObject *accessible);
+-G_CONST_RETURN gchar* atk_object_get_description (AtkObject *accessible);
++const gchar* atk_object_get_name (AtkObject *accessible);
++const gchar* atk_object_get_description (AtkObject *accessible);
+ AtkObject* atk_object_get_parent (AtkObject *accessible);
+ gint atk_object_get_n_accessible_children (AtkObject *accessible);
+ AtkObject* atk_object_ref_accessible_child (AtkObject *accessible,
+@@ -571,7 +571,7 @@ void atk_object_notify_s
+ void atk_object_initialize (AtkObject *accessible,
+ gpointer data);
+
+-G_CONST_RETURN gchar* atk_role_get_name (AtkRole role);
++const gchar* atk_role_get_name (AtkRole role);
+ AtkRole atk_role_for_name (const gchar *name);
+
+
+@@ -582,7 +582,7 @@ gboolean atk_object_add_rel
+ gboolean atk_object_remove_relationship (AtkObject *object,
+ AtkRelationType relationship,
+ AtkObject *target);
+-G_CONST_RETURN gchar* atk_role_get_localized_name (AtkRole role);
++const gchar* atk_role_get_localized_name (AtkRole role);
+
+ /* */
+
+Only in atk/atk: atkobject.h~
+diff -urpb orig/atk-1.32.0/atk/atkrelation.c atk/atk/atkrelation.c
+--- orig/atk-1.32.0/atk/atkrelation.c 2010-09-06 08:45:45.000000000 +0200
++++ atk/atk/atkrelation.c 2014-02-17 12:29:04.307198532 +0100
+@@ -130,7 +130,7 @@ atk_relation_type_register (const gchar
+ *
+ * Returns: the string describing the AtkRelationType
+ */
+-G_CONST_RETURN gchar*
++const gchar*
+ atk_relation_type_get_name (AtkRelationType type)
+ {
+ GTypeClass *type_class;
+Only in atk/atk: atkrelation.c~
+diff -urpb orig/atk-1.32.0/atk/atkrelation.h atk/atk/atkrelation.h
+--- orig/atk-1.32.0/atk/atkrelation.h 2010-09-06 08:45:45.000000000 +0200
++++ atk/atk/atkrelation.h 2014-02-17 12:29:12.167198142 +0100
+@@ -61,7 +61,7 @@ struct _AtkRelationClass
+ GType atk_relation_get_type (void);
+
+ AtkRelationType atk_relation_type_register (const gchar *name);
+-G_CONST_RETURN gchar* atk_relation_type_get_name (AtkRelationType type);
++const gchar* atk_relation_type_get_name (AtkRelationType type);
+ AtkRelationType atk_relation_type_for_name (const gchar *name);
+
+ /*
+Only in atk/atk: atkrelation.h~
+diff -urpb orig/atk-1.32.0/atk/atkstate.c atk/atk/atkstate.c
+--- orig/atk-1.32.0/atk/atkstate.c 2010-09-06 08:45:45.000000000 +0200
++++ atk/atk/atkstate.c 2014-02-17 12:29:19.023197754 +0100
+@@ -57,7 +57,7 @@ atk_state_type_register (const gchar *na
+ *
+ * Returns: the string describing the AtkStateType
+ */
+-G_CONST_RETURN gchar*
++const gchar*
+ atk_state_type_get_name (AtkStateType type)
+ {
+ GTypeClass *type_class;
+Only in atk/atk: atkstate.c~
+diff -urpb orig/atk-1.32.0/atk/atkstate.h atk/atk/atkstate.h
+--- orig/atk-1.32.0/atk/atkstate.h 2010-09-06 08:45:45.000000000 +0200
++++ atk/atk/atkstate.h 2014-02-17 12:26:44.459205944 +0100
+@@ -170,7 +170,7 @@ typedef guint64 AtkState;
+
+ AtkStateType atk_state_type_register (const gchar *name);
+
+-G_CONST_RETURN gchar* atk_state_type_get_name (AtkStateType type);
++const gchar* atk_state_type_get_name (AtkStateType type);
+ AtkStateType atk_state_type_for_name (const gchar *name);
+
+ G_END_DECLS
+Only in atk/atk: atkstate.h~
+diff -urpb orig/atk-1.32.0/atk/atkstreamablecontent.c atk/atk/atkstreamablecontent.c
+--- orig/atk-1.32.0/atk/atkstreamablecontent.c 2010-09-06 08:45:45.000000000 +0200
++++ atk/atk/atkstreamablecontent.c 2014-02-17 12:30:57.659192412 +0100
+@@ -73,7 +73,7 @@ atk_streamable_content_get_n_mime_types
+ * Returns : a gchar* representing the specified mime type; the caller
+ * should not free the character string.
+ **/
+-G_CONST_RETURN gchar*
++const gchar*
+ atk_streamable_content_get_mime_type (AtkStreamableContent *streamable,
+ gint i)
+ {
+Only in atk/atk: atkstreamablecontent.c~
+diff -urpb orig/atk-1.32.0/atk/atkstreamablecontent.h atk/atk/atkstreamablecontent.h
+--- orig/atk-1.32.0/atk/atkstreamablecontent.h 2010-09-06 08:45:45.000000000 +0200
++++ atk/atk/atkstreamablecontent.h 2014-02-17 12:29:49.487196042 +0100
+@@ -54,11 +54,11 @@ struct _AtkStreamableContentIface
+ * at index 0 should be considered the "default" data type for the stream.
+ *
+ * This assumes that the strings for the mime types are stored in the
+- * AtkStreamableContent. Alternatively the G_CONST_RETURN could be removed
++ * AtkStreamableContent. Alternatively the const could be removed
+ * and the caller would be responsible for calling g_free() on the
+ * returned value.
+ */
+- G_CONST_RETURN gchar* (* get_mime_type) (AtkStreamableContent *streamable,
++ const gchar* (* get_mime_type) (AtkStreamableContent *streamable,
+ gint i);
+ /*
+ * One possible implementation for this method is that it constructs the
+@@ -80,7 +80,7 @@ struct _AtkStreamableContentIface
+ * constructed. Note that it is possible for get_uri to return NULL but for
+ * get_stream to work nonetheless, since not all GIOChannels connect to URIs.
+ */
+- G_CONST_RETURN gchar* (* get_uri) (AtkStreamableContent *streamable,
++ const gchar* (* get_uri) (AtkStreamableContent *streamable,
+ const gchar *mime_type);
+
+
+@@ -92,7 +92,7 @@ GType atk_streamable_co
+
+ gint atk_streamable_content_get_n_mime_types (AtkStreamableContent *streamable);
+
+-G_CONST_RETURN gchar* atk_streamable_content_get_mime_type (AtkStreamableContent *streamable,
++const gchar* atk_streamable_content_get_mime_type (AtkStreamableContent *streamable,
+ gint i);
+ GIOChannel* atk_streamable_content_get_stream (AtkStreamableContent *streamable,
+ const gchar *mime_type);
+Only in atk/atk: atkstreamablecontent.h~
+diff -urpb orig/atk-1.32.0/atk/atktable.c atk/atk/atktable.c
+--- orig/atk-1.32.0/atk/atktable.c 2010-09-06 08:45:45.000000000 +0200
++++ atk/atk/atktable.c 2014-02-17 12:30:57.319192444 +0100
+@@ -300,7 +300,7 @@ atk_table_get_n_columns (AtkTable *table
+ * Returns: a gchar* representing the column description, or %NULL
+ * if value does not implement this interface.
+ **/
+-G_CONST_RETURN gchar*
++const gchar*
+ atk_table_get_column_description (AtkTable *table,
+ gint column)
+ {
+@@ -404,7 +404,7 @@ atk_table_get_n_rows (AtkTable *table)
+ * Returns: a gchar* representing the row description, or %NULL
+ * if value does not implement this interface.
+ **/
+-G_CONST_RETURN gchar*
++const gchar*
+ atk_table_get_row_description (AtkTable *table,
+ gint row)
+ {
+Only in atk/atk: atktable.c~
+diff -urpb orig/atk-1.32.0/atk/atktable.h atk/atk/atktable.h
+--- orig/atk-1.32.0/atk/atktable.h 2010-09-06 08:45:45.000000000 +0200
++++ atk/atk/atktable.h 2014-02-17 12:30:08.035195073 +0100
+@@ -69,12 +69,12 @@ struct _AtkTableIface
+ gint column);
+ AtkObject*
+ (* get_caption) (AtkTable *table);
+- G_CONST_RETURN gchar*
++ const gchar*
+ (* get_column_description) (AtkTable *table,
+ gint column);
+ AtkObject* (* get_column_header) (AtkTable *table,
+ gint column);
+- G_CONST_RETURN gchar*
++ const gchar*
+ (* get_row_description) (AtkTable *table,
+ gint row);
+ AtkObject* (* get_row_header) (AtkTable *table,
+@@ -163,12 +163,12 @@ gint atk_table_get_row_exte
+ gint column);
+ AtkObject*
+ atk_table_get_caption (AtkTable *table);
+-G_CONST_RETURN gchar*
++const gchar*
+ atk_table_get_column_description (AtkTable *table,
+ gint column);
+ AtkObject* atk_table_get_column_header (AtkTable *table,
+ gint column);
+-G_CONST_RETURN gchar*
++const gchar*
+ atk_table_get_row_description (AtkTable *table,
+ gint row);
+ AtkObject* atk_table_get_row_header (AtkTable *table,
+Only in atk/atk: atktable.h~
+diff -urpb orig/atk-1.32.0/atk/atktext.c atk/atk/atktext.c
+--- orig/atk-1.32.0/atk/atktext.c 2010-09-27 09:07:09.000000000 +0200
++++ atk/atk/atktext.c 2014-02-17 12:30:56.871192495 +0100
+@@ -1054,7 +1054,7 @@ atk_text_attribute_register (const gchar
+ *
+ * Returns: a string containing the name; this string should not be freed
+ **/
+-G_CONST_RETURN gchar*
++const gchar*
+ atk_text_attribute_get_name (AtkTextAttribute attr)
+ {
+ GTypeClass *type_class;
+@@ -1150,7 +1150,7 @@ atk_text_attribute_for_name (const gchar
+ * Returns: a string containing the value; this string should not be freed;
+ * NULL is returned if there are no values maintained for the attr value.
+ **/
+-G_CONST_RETURN gchar*
++const gchar*
+ atk_text_attribute_get_value (AtkTextAttribute attr,
+ gint index)
+ {
+Only in atk/atk: atktext.c~
+diff -urpb orig/atk-1.32.0/atk/atktext.h atk/atk/atktext.h
+--- orig/atk-1.32.0/atk/atktext.h 2010-09-27 09:07:09.000000000 +0200
++++ atk/atk/atktext.h 2014-02-17 12:30:56.475192626 +0100
+@@ -355,9 +355,9 @@ AtkTextRange** atk_text_get_bounded_ran
+ AtkTextClipType y_clip_type);
+ void atk_text_free_ranges (AtkTextRange **ranges);
+ void atk_attribute_set_free (AtkAttributeSet *attrib_set);
+-G_CONST_RETURN gchar* atk_text_attribute_get_name (AtkTextAttribute attr);
++const gchar* atk_text_attribute_get_name (AtkTextAttribute attr);
+ AtkTextAttribute atk_text_attribute_for_name (const gchar *name);
+-G_CONST_RETURN gchar* atk_text_attribute_get_value (AtkTextAttribute attr,
++const gchar* atk_text_attribute_get_value (AtkTextAttribute attr,
+ gint index_);
+
+ G_END_DECLS
+Only in atk/atk: atktext.h~
+diff -urpb orig/atk-1.32.0/atk/atkutil.c atk/atk/atkutil.c
+--- orig/atk-1.32.0/atk/atkutil.c 2010-09-06 08:45:45.000000000 +0200
++++ atk/atk/atkutil.c 2014-02-17 12:30:33.651193705 +0100
+@@ -340,7 +340,7 @@ atk_get_focus_object (void)
+ *
+ * Returns: name string for the GUI toolkit implementing ATK for this application
+ **/
+-G_CONST_RETURN gchar*
++const gchar*
+ atk_get_toolkit_name (void)
+ {
+ const gchar *retval;
+@@ -365,7 +365,7 @@ atk_get_toolkit_name (void)
+ *
+ * Returns: version string for the GUI toolkit implementing ATK for this application
+ **/
+-G_CONST_RETURN gchar*
++const gchar*
+ atk_get_toolkit_version (void)
+ {
+ const gchar *retval;
+@@ -391,7 +391,7 @@ atk_get_toolkit_version (void)
+ * Returns: version string for ATK
+ **/
+
+-G_CONST_RETURN gchar *
++const gchar *
+ atk_get_version (void)
+ {
+ return VERSION;
+Only in atk/atk: atkutil.c~
+diff -urpb orig/atk-1.32.0/atk/atkutil.h atk/atk/atkutil.h
+--- orig/atk-1.32.0/atk/atkutil.h 2010-09-06 08:45:45.000000000 +0200
++++ atk/atk/atkutil.h 2014-02-17 12:30:40.635193333 +0100
+@@ -147,8 +147,8 @@ struct _AtkUtilClass
+ gpointer data);
+ void (* remove_key_event_listener) (guint listener_id);
+ AtkObject* (* get_root) (void);
+- G_CONST_RETURN gchar* (* get_toolkit_name) (void);
+- G_CONST_RETURN gchar* (* get_toolkit_version) (void);
++ const gchar* (* get_toolkit_name) (void);
++ const gchar* (* get_toolkit_version) (void);
+ };
+ GType atk_util_get_type (void);
+
+@@ -229,17 +229,17 @@ AtkObject* atk_get_focus_object (void);
+ /*
+ * Returns name string for the GUI toolkit.
+ */
+-G_CONST_RETURN gchar *atk_get_toolkit_name (void);
++const gchar *atk_get_toolkit_name (void);
+
+ /*
+ * Returns version string for the GUI toolkit.
+ */
+-G_CONST_RETURN gchar *atk_get_toolkit_version (void);
++const gchar *atk_get_toolkit_version (void);
+
+ /*
+ * Gets the current version of ATK
+ */
+-G_CONST_RETURN gchar *atk_get_version (void);
++const gchar *atk_get_version (void);
+
+ /* --- GType boilerplate --- */
+ /* convenience macros for atk type implementations, which for a type GtkGadgetAccessible will:
+Only in atk/atk: atkutil.h~
+diff -urpb orig/atk-1.32.0/tests/testrelation.c atk/tests/testrelation.c
+--- orig/atk-1.32.0/tests/testrelation.c 2010-09-06 08:45:45.000000000 +0200
++++ atk/tests/testrelation.c 2014-02-17 12:53:42.095119569 +0100
+@@ -28,7 +28,7 @@ static gboolean
+ test_relation (void)
+ {
+ AtkRelationType type1, type2;
+- G_CONST_RETURN gchar *name;
++ const gchar *name;
+ AtkObject *obj;
+ gboolean ret_value;
+ AtkRelationSet *set;
+@@ -169,7 +169,7 @@ static gboolean
+ test_role (void)
+ {
+ AtkRole role1, role2;
+- G_CONST_RETURN gchar *name;
++ const gchar *name;
+
+ name = atk_role_get_name (ATK_ROLE_PAGE_TAB);
+ g_return_val_if_fail (name, FALSE);
+@@ -230,7 +230,7 @@ static gboolean
+ test_text_attr (void)
+ {
+ AtkTextAttribute attr1, attr2;
+- G_CONST_RETURN gchar *name;
++ const gchar *name;
+
+ name = atk_text_attribute_get_name (ATK_TEXT_ATTR_PIXELS_INSIDE_WRAP);
+ g_return_val_if_fail (name, FALSE);
+Only in atk/tests/: testrelation.c~
+diff -urpb orig/atk-1.32.0/tests/teststateset.c atk/tests/teststateset.c
+--- orig/atk-1.32.0/tests/teststateset.c 2010-09-06 08:45:45.000000000 +0200
++++ atk/tests/teststateset.c 2014-02-17 12:53:55.675118832 +0100
+@@ -208,7 +208,7 @@ static gboolean
+ test_state (void)
+ {
+ AtkStateType type1, type2;
+- G_CONST_RETURN gchar *name;
++ const gchar *name;
+
+ name = atk_state_type_get_name (ATK_STATE_VISIBLE);
+ g_return_val_if_fail (name, FALSE);
+
+
+--- orig/atk-1.32.0/atk/Makefile.in 2010-09-27 09:53:57.000000000 +0200
++++ atk/atk/Makefile.in 2014-02-17 12:52:40.443122866 +0100
+@@ -40,7 +40,7 @@ host_triplet = @host@
+ @HAVE_INTROSPECTION_TRUE@am__append_2 = $(gir_DATA) $(typelibs_DATA)
+
+ # ---------- Win32 stuff ----------
+-@OS_WIN32_TRUE@am__append_3 = -export-symbols $(srcdir)/atk.def -no-undefined -Wl,atk-win32-res.o
++@OS_WIN32_TRUE@am__append_3 = -export-symbols atk.def -no-undefined -Wl,atk-win32-res.o
+ @OS_WIN32_FALSE@libatk_1_0_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+ @OS_WIN32_FALSE@ $(am__DEPENDENCIES_1)
+ subdir = atk
+@@ -861,7 +861,7 @@ s-enum-types-c: @REBUILD@ $(atk_headers)
+ @HAVE_INTROSPECTION_TRUE@Atk-1.0.gir: libatk-1.0.la Makefile
+
+ @OS_WIN32_TRUE@install-def-file:
+-@OS_WIN32_TRUE@ $(INSTALL) $(srcdir)/atk.def $(DESTDIR)$(libdir)/atk-1.0.def
++@OS_WIN32_TRUE@ $(INSTALL) atk.def $(DESTDIR)$(libdir)/atk-1.0.def
+ @OS_WIN32_TRUE@uninstall-def-file:
+ @OS_WIN32_TRUE@ -rm $(DESTDIR)$(libdir)/atk-1.0.def
+ @OS_WIN32_FALSE@install-def-file:
diff --git a/build-aux/speedo/patches/gpgme-1.12.0.patch b/build-aux/speedo/patches/gpgme-1.12.0.patch
new file mode 100755
index 0000000..1920dcf
--- /dev/null
+++ b/build-aux/speedo/patches/gpgme-1.12.0.patch
@@ -0,0 +1,36 @@
+#! /bin/sh
+patch -p1 -l -f $* < $0
+exit $?
+
+ From 4faa0ccf58c7a0f64f51dcbc8466add660080414 Mon Sep 17 00:00:00 2001
+ From: Werner Koch <wk@gnupg.org>
+ Date: Fri, 2 Nov 2018 11:26:19 +0100
+ Subject: [PATCH] w32: Don't use CloseHandle on an arbitrary integer.
+
+ * src/assuan-support.c (my_waitpid): Do not close the PID = it is not
+ a handle.
+ --
+
+ At some time in the distant past we might have used the process object
+ as pid which obviously required a close. However this was changed and
+ so what we did here was to close an arbitrary handle (one which
+ matches the pid).
+
+ GnuPG-bug-id: 4237
+ Signed-off-by: Werner Koch <wk@gnupg.org>
+
+diff --git a/src/assuan-support.c b/src/assuan-support.c
+index 7fbd48a8..705088e4 100644
+--- a/src/assuan-support.c
++++ b/src/assuan-support.c
+@@ -219,7 +219,7 @@ my_waitpid (assuan_context_t ctx, pid_t pid,
+ (void)nowait;
+ (void)status;
+ (void)options;
+- CloseHandle ((HANDLE) pid);
++ (void)pid; /* Just a number without a kernel object. */
+ #else
+ /* We can't just release the PID, a waitpid is mandatory. But
+ NOWAIT in POSIX systems just means the caller already did the
+--
+2.11.0
diff --git a/build-aux/speedo/patches/libiconv-1.14.patch b/build-aux/speedo/patches/libiconv-1.14.patch
new file mode 100755
index 0000000..5e60689
--- /dev/null
+++ b/build-aux/speedo/patches/libiconv-1.14.patch
@@ -0,0 +1,19 @@
+#! /bin/sh
+patch -p0 -l -f $* < $0
+exit $?
+
+On some systems the gets macro has been removed and thus the test
+leads to an unresolved symbol error.
+
+--- srclib/stdio.in.h~ 2011-08-07 15:42:06.000000000 +0200
++++ srclib/stdio.in.h 2014-09-04 13:07:07.079024312 +0200
+@@ -691,11 +691,6 @@
+ _GL_CXXALIAS_SYS (gets, char *, (char *s));
+ # undef gets
+ # endif
+-_GL_CXXALIASWARN (gets);
+-/* It is very rare that the developer ever has full control of stdin,
+- so any use of gets warrants an unconditional warning. Assume it is
+- always declared, since it is required by C89. */
+-_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
+ #endif
diff --git a/build-aux/speedo/patches/pango-1.29.4.patch b/build-aux/speedo/patches/pango-1.29.4.patch
new file mode 100755
index 0000000..edeee85
--- /dev/null
+++ b/build-aux/speedo/patches/pango-1.29.4.patch
@@ -0,0 +1,27 @@
+#! /bin/sh
+patch -p0 -l -f $* < $0
+exit $?
+
+Without that patch the module is build with wrong symbols and thus
+can't be loaded by pango. I don't know why they have this defines
+just in this module. It entirely defeats the feature of loading
+modules dynamically - maybe this was just a quick hack for including
+the code directly - however, I was not able to make that work either.
+
+
+--- modules/basic/basic-win32.c~ 2011-09-28 16:34:33.000000000 +0200
++++ modules/basic/basic-win32.c 2014-02-20 20:01:10.107723565 +0100
+@@ -33,9 +33,10 @@
+
+ extern HFONT _pango_win32_font_get_hfont (PangoFont *font);
+
+-#ifndef PANGO_MODULE_PREFIX
+-#define PANGO_MODULE_PREFIX _pango_basic_win32
+-#endif
++/* #ifndef PANGO_MODULE_PREFIX */
++/* #define PANGO_MODULE_PREFIX _pango_basic_win32 */
++/* #endif */
++#undef PANGO_MODULE_PREFIX
+
+ #include "pango-engine.h"
+ #include "pango-utils.h"
diff --git a/build-aux/speedo/patches/sqlite.patch b/build-aux/speedo/patches/sqlite.patch
new file mode 100755
index 0000000..f81a414
--- /dev/null
+++ b/build-aux/speedo/patches/sqlite.patch
@@ -0,0 +1,42 @@
+#! /bin/sh
+grep static-libgcc Makefile.am >/dev/null && exit 0
+patch -p0 -l -f $* < $0
+exit $?
+
+Use -static-libgcc to avoid linking to libgcc_s_sjlj-1.dll.
+
+Since gcc 4.8 there is a regression in that plain C programs may link
+to libgcc_s.a which has a dependency on libgcc_s_sjlj.dll. This is
+for example triggered by using long long arithmetic on a 32 bit
+Windows (e.g symbol __udivdi3).
+
+As usual the gcc maintainers don't care about backward compatibility
+and declare that as some kind of compatibility fix and not as
+regression from 4.7 and all earlier versions.
+
+Note that we ignore this patch if it seems to be already applied
+upstream.
+
+--- Makefile.am~ 2016-04-18 20:56:32.000000000 +0200
++++ Makefile.am 2016-05-04 12:08:53.254035717 +0200
+@@ -3,7 +3,7 @@
+
+ lib_LTLIBRARIES = libsqlite3.la
+ libsqlite3_la_SOURCES = sqlite3.c
+-libsqlite3_la_LDFLAGS = -no-undefined -version-info 8:6:8
++libsqlite3_la_LDFLAGS = -XCClinker -static-libgcc -no-undefined -version-info 8:6:8
+
+ bin_PROGRAMS = sqlite3
+ sqlite3_SOURCES = shell.c sqlite3.h
+
+--- Makefile.in~ 2016-04-18 20:56:36.000000000 +0200
++++ Makefile.in 2016-05-04 12:13:36.570020590 +0200
+@@ -365,7 +365,7 @@
+ AM_CFLAGS = @THREADSAFE_FLAGS@ @DYNAMIC_EXTENSION_FLAGS@ @FTS5_FLAGS@ @JSON1_FLAGS@ -DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_RTREE
+ lib_LTLIBRARIES = libsqlite3.la
+ libsqlite3_la_SOURCES = sqlite3.c
+-libsqlite3_la_LDFLAGS = -no-undefined -version-info 8:6:8
++libsqlite3_la_LDFLAGS = -XCClinker -static-libgcc -no-undefined -version-info 8:6:8
+ sqlite3_SOURCES = shell.c sqlite3.h
+ EXTRA_sqlite3_SOURCES = sqlite3.c
+ sqlite3_LDADD = @EXTRA_SHELL_OBJ@ @READLINE_LIBS@
diff --git a/build-aux/speedo/w32/README.txt b/build-aux/speedo/w32/README.txt
new file mode 100644
index 0000000..7c29095
--- /dev/null
+++ b/build-aux/speedo/w32/README.txt
@@ -0,0 +1,88 @@
+;; README.txt -*- coding: latin-1; -*-
+;; This is the README installed for Windows. Lines with a
+;; semicolon in the first column are considered a comment and not
+;; included in the actually installed version. Certain keywords are
+;; replaced by the Makefile; those words are enclosed by exclamation
+;; marks.
+
+
+ GNU Privacy Guard for Windows
+ ===============================
+
+This is GnuPG for Windows, version !VERSION!.
+
+Content:
+
+ 1. Important notes
+ 2. Changes
+ 3. GnuPG README file
+ 4. Package versions
+ 5. Legal notices
+
+
+1. Important Notes
+==================
+
+This is the core part of the GnuPG system as used by several other
+frontend programs. This installer does not provide any graphical
+frontend and thus almost everything needs to be done on the command
+line. However, a small native Windows GUI tool is included which is
+used by GnuPG to ask for passphrases. It provides only the basic
+functionality and is installed under the name "pinentry-basic.exe".
+Other software using this core component may install a different
+version of such a tool under the name "pinentry.exe" or configure the
+gpg-agent to use that version.
+
+See https://gnupg.org for latest news. HowTo documents and manuals
+can be found there but some have also been installed on your machine.
+
+Development and maintenance of GnuPG is mostly financed by donations;
+please see https://gnupg.org/donate/ for details.
+
+
+2. Record of Changes
+====================
+
+This is a list of changes to the GnuPG core for this and the previous
+release.
+
+!NEWSFILE!
+
+
+3. GnuPG README File
+====================
+
+Below is the README file as distributed with the GnuPG source.
+
+!GNUPGREADME!
+
+
+4. Software Versions of the Included Packages
+=============================================
+
+GnuPG for Windows depends on several independet developed packages
+which are part of the installation. These packages along with their
+version numbers and the SHA-1 checksums of their compressed tarballs
+are listed here:
+
+!PKG-VERSIONS!
+
+
+5. Legal Notices Pertaining to the Individual Packages
+======================================================
+
+GnuPG for Windows consist of several independent developed packages,
+available under different license conditions. Most of these packages
+are however available under the GNU General Public License (GNU GPL).
+Common to all is that they are free to use without restrictions, may
+be modified and that modifications may be distributed. If the source
+file (i.e. gnupg-w32-VERSION_DATE.tar.xz) is distributed along with
+the installer and the use of the GNU GPL has been pointed out,
+distribution is in all cases possible.
+
+What follows is a list of copyright statements.
+
+!PKG-COPYRIGHT!
+
+
+***end of file ***
diff --git a/build-aux/speedo/w32/exdll.h b/build-aux/speedo/w32/exdll.h
new file mode 100644
index 0000000..bb13ae0
--- /dev/null
+++ b/build-aux/speedo/w32/exdll.h
@@ -0,0 +1,151 @@
+/* exdll.h for use with gpg4win
+ * Copyright (C) 1999-2005 Nullsoft, Inc.
+ *
+ * This license applies to everything in the NSIS package, except
+ * where otherwise noted.
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty. In no event will the authors be held liable for any
+ * damages arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any
+ * purpose, including commercial applications, and to alter it and
+ * redistribute it freely, subject to the following restrictions:
+ *
+ * 1. The origin of this software must not be misrepresented; you must
+ * not claim that you wrote the original software. If you use this
+ * software in a product, an acknowledgment in the product
+ * documentation would be appreciated but is not required.
+ *
+ * 2. Altered source versions must be plainly marked as such, and must
+ * not be misrepresented as being the original software.
+ *
+ * 3. This notice may not be removed or altered from any source
+ * distribution.
+ ************************************************************
+ * 2005-11-14 wk Applied license text to original exdll.h file from
+ * NSIS 2.0.4 and did some formatting changes.
+ */
+
+#ifndef _EXDLL_H_
+#define _EXDLL_H_
+
+/* only include this file from one place in your DLL. (it is all
+ static, if you use it in two places it will fail) */
+
+#define EXDLL_INIT() { \
+ g_stringsize=string_size; \
+ g_stacktop=stacktop; \
+ g_variables=variables; }
+
+/* For page showing plug-ins */
+#define WM_NOTIFY_OUTER_NEXT (WM_USER+0x8)
+#define WM_NOTIFY_CUSTOM_READY (WM_USER+0xd)
+#define NOTIFY_BYE_BYE 'x'
+
+typedef struct _stack_t {
+ struct _stack_t *next;
+ char text[1]; /* This should be the length of string_size. */
+} stack_t;
+
+
+static unsigned int g_stringsize;
+static stack_t **g_stacktop;
+static char *g_variables;
+
+static int __stdcall popstring(char *str, size_t maxlen); /* 0 on success, 1 on empty stack */
+static void __stdcall pushstring(const char *str);
+
+enum
+ {
+ INST_0, // $0
+ INST_1, // $1
+ INST_2, // $2
+ INST_3, // $3
+ INST_4, // $4
+ INST_5, // $5
+ INST_6, // $6
+ INST_7, // $7
+ INST_8, // $8
+ INST_9, // $9
+ INST_R0, // $R0
+ INST_R1, // $R1
+ INST_R2, // $R2
+ INST_R3, // $R3
+ INST_R4, // $R4
+ INST_R5, // $R5
+ INST_R6, // $R6
+ INST_R7, // $R7
+ INST_R8, // $R8
+ INST_R9, // $R9
+ INST_CMDLINE, // $CMDLINE
+ INST_INSTDIR, // $INSTDIR
+ INST_OUTDIR, // $OUTDIR
+ INST_EXEDIR, // $EXEDIR
+ INST_LANG, // $LANGUAGE
+ __INST_LAST
+};
+
+typedef struct {
+ int autoclose;
+ int all_user_var;
+ int exec_error;
+ int abort;
+ int exec_reboot;
+ int reboot_called;
+ int XXX_cur_insttype; /* deprecated */
+ int XXX_insttype_changed; /* deprecated */
+ int silent;
+ int instdir_error;
+ int rtl;
+ int errlvl;
+} exec_flags_t;
+
+typedef struct {
+ exec_flags_t *exec_flags;
+ int (__stdcall *ExecuteCodeSegment)(int, HWND);
+} extra_parameters_t;
+
+
+/* Utility functions (not required but often useful). */
+static int __stdcall
+popstring(char *str, size_t maxlen)
+{
+ stack_t *th;
+ if (!g_stacktop || !*g_stacktop)
+ return 1;
+ th=(*g_stacktop);
+ lstrcpyn (str, th->text, maxlen);
+ *g_stacktop = th->next;
+ GlobalFree((HGLOBAL)th);
+ return 0;
+}
+
+static void __stdcall
+pushstring(const char *str)
+{
+ stack_t *th;
+ if (!g_stacktop) return;
+ th=(stack_t*)GlobalAlloc(GPTR,sizeof(stack_t)+g_stringsize);
+ lstrcpyn(th->text,str,g_stringsize);
+ th->next=*g_stacktop;
+ *g_stacktop=th;
+}
+
+static char * __stdcall
+getuservariable(const int varnum)
+{
+ if (varnum < 0 || varnum >= __INST_LAST) return NULL;
+ return g_variables+varnum*g_stringsize;
+}
+
+static void __stdcall
+setuservariable(const int varnum, const char *var)
+{
+ if (var != NULL && varnum >= 0 && varnum < __INST_LAST)
+ lstrcpy(g_variables + varnum*g_stringsize, var);
+}
+
+
+
+#endif/*_EXDLL_H_*/
diff --git a/build-aux/speedo/w32/g4wihelp.c b/build-aux/speedo/w32/g4wihelp.c
new file mode 100644
index 0000000..626f3f1
--- /dev/null
+++ b/build-aux/speedo/w32/g4wihelp.c
@@ -0,0 +1,1175 @@
+/* g4wihelp.c - NSIS Helper DLL used with gpg4win. -*- coding: latin-1; -*-
+ * Copyright (C) 2005 g10 Code GmbH
+ * Copyright (C) 2001 Justin Frankel
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty. In no event will the authors be held liable for any
+ * damages arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any
+ * purpose, including commercial applications, and to alter it and
+ * redistribute it freely, subject to the following restrictions:
+ *
+ * 1. The origin of this software must not be misrepresented; you must
+ * not claim that you wrote the original software. If you use this
+ * software in a product, an acknowledgment in the product
+ * documentation would be appreciated but is not required.
+ *
+ * 2. Altered source versions must be plainly marked as such, and must
+ * not be misrepresented as being the original software.
+ *
+ * 3. This notice may not be removed or altered from any source
+ * distribution.
+ ************************************************************
+ * The code for the splash screen has been taken from the Splash
+ * plugin of the NSIS 2.04 distribution. That code comes without
+ * explicit copyright notices in the source files or author names, it
+ * seems that it has been written by Justin Frankel; not sure about
+ * the year, though. [wk 2005-11-28]
+ *
+ * Fixed some compiler warnings. [wk 2014-02-24].
+ */
+
+#include <stdio.h>
+#include <windows.h>
+#include "exdll.h"
+
+static HINSTANCE g_hInstance; /* Our Instance. */
+static HWND g_hwndParent; /* Handle of parent window or NULL. */
+static HBITMAP g_hbm; /* Handle of the splash image. */
+static int sleepint; /* Milliseconds to show the spals image. */
+
+
+/* Standard entry point for DLLs. */
+int WINAPI
+DllMain (HANDLE hinst, DWORD reason, LPVOID reserved)
+{
+ if (reason == DLL_PROCESS_ATTACH)
+ g_hInstance = hinst;
+ return TRUE;
+}
+
+
+
+/* Dummy function for testing. */
+void __declspec(dllexport)
+dummy (HWND hwndParent, int string_size, char *variables,
+ stack_t **stacktop, extra_parameters_t *extra)
+{
+ g_hwndParent = hwndParent;
+
+ EXDLL_INIT();
+
+ // note if you want parameters from the stack, pop them off in order.
+ // i.e. if you are called via exdll::myFunction file.dat poop.dat
+ // calling popstring() the first time would give you file.dat,
+ // and the second time would give you poop.dat.
+ // you should empty the stack of your parameters, and ONLY your
+ // parameters.
+
+ // do your stuff here
+ {
+ char buf[1024];
+ snprintf (buf, sizeof buf, "$R0=%s\r\n$R1=%s\r\n",
+ getuservariable(INST_R0),
+ getuservariable(INST_R1));
+ MessageBox (g_hwndParent,buf,0,MB_OK);
+
+ snprintf (buf, sizeof buf,
+ "autoclose =%d\r\n"
+ "all_user_var =%d\r\n"
+ "exec_error =%d\r\n"
+ "abort =%d\r\n"
+ "exec_reboot =%d\r\n"
+ "reboot_called=%d\r\n"
+ "silent =%d\r\n"
+ "instdir_error=%d\r\n"
+ "rtl =%d\r\n"
+ "errlvl =%d\r\n",
+ extra->exec_flags->autoclose,
+ extra->exec_flags->all_user_var,
+ extra->exec_flags->exec_error,
+ extra->exec_flags->abort,
+ extra->exec_flags->exec_reboot,
+ extra->exec_flags->reboot_called,
+ extra->exec_flags->silent,
+ extra->exec_flags->instdir_error,
+ extra->exec_flags->rtl,
+ extra->exec_flags->errlvl);
+ MessageBox(g_hwndParent,buf,0,MB_OK);
+ }
+}
+
+
+void __declspec(dllexport)
+runonce (HWND hwndParent, int string_size, char *variables,
+ stack_t **stacktop, extra_parameters_t *extra)
+{
+ const char *result;
+
+ g_hwndParent = hwndParent;
+ EXDLL_INIT();
+
+ CreateMutexA (NULL, 0, getuservariable(INST_R0));
+ result = GetLastError ()? "1":"0";
+ setuservariable (INST_R0, result);
+}
+
+
+void __declspec(dllexport)
+playsound (HWND hwndParent, int string_size, char *variables,
+ stack_t **stacktop, extra_parameters_t *extra)
+{
+ char fname[MAX_PATH];
+
+ g_hwndParent = hwndParent;
+ EXDLL_INIT();
+
+ if (popstring(fname, sizeof fname))
+ return;
+ PlaySound (fname, NULL, SND_ASYNC|SND_FILENAME|SND_NODEFAULT);
+}
+
+
+void __declspec(dllexport)
+stopsound (HWND hwndParent, int string_size, char *variables,
+ stack_t **stacktop, extra_parameters_t *extra)
+{
+ g_hwndParent = hwndParent;
+ EXDLL_INIT();
+ PlaySound (NULL, NULL, 0);
+}
+
+
+/* Windows procedure to control the splashimage. This one pauses the
+ execution until the sleep time is over or the user closes this
+ windows. */
+static LRESULT CALLBACK
+splash_wndproc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
+{
+ LRESULT result = 0;
+
+ switch (uMsg)
+ {
+ case WM_CREATE:
+ {
+ BITMAP bm;
+ RECT vp;
+
+ GetObject(g_hbm, sizeof(bm), (LPSTR)&bm);
+ SystemParametersInfo(SPI_GETWORKAREA, 0, &vp, 0);
+ SetWindowLong(hwnd,GWL_STYLE,0);
+ SetWindowPos(hwnd,NULL,
+ vp.left+(vp.right-vp.left-bm.bmWidth)/2,
+ vp.top+(vp.bottom-vp.top-bm.bmHeight)/2,
+ bm.bmWidth,bm.bmHeight,
+ SWP_NOZORDER);
+ ShowWindow(hwnd,SW_SHOW);
+ SetTimer(hwnd,1,sleepint,NULL);
+ }
+ break;
+
+ case WM_PAINT:
+ {
+ PAINTSTRUCT ps;
+ RECT r;
+ HDC curdc=BeginPaint(hwnd,&ps);
+ HDC hdc=CreateCompatibleDC(curdc);
+ HBITMAP oldbm;
+ GetClientRect(hwnd,&r);
+ oldbm=(HBITMAP)SelectObject(hdc,g_hbm);
+ BitBlt(curdc,r.left,r.top,r.right-r.left,r.bottom-r.top,
+ hdc,0,0,SRCCOPY);
+ SelectObject(hdc,oldbm);
+ DeleteDC(hdc);
+ EndPaint(hwnd,&ps);
+ }
+ break;
+
+ case WM_CLOSE:
+ break;
+
+ case WM_TIMER:
+ case WM_LBUTTONDOWN:
+ DestroyWindow(hwnd);
+ /*(fall through)*/
+ default:
+ result = DefWindowProc (hwnd, uMsg, wParam, lParam);
+ }
+
+ return result;
+}
+
+
+/* Display a splash screen. Call as
+
+ g4wihelp::showsplash SLEEP FNAME
+
+ With SLEEP being the time in milliseconds to show the splashscreen
+ and FNAME the complete filename of the image. As of now only BMP
+ is supported.
+*/
+void __declspec(dllexport)
+showsplash (HWND hwndParent, int string_size, char *variables,
+ stack_t **stacktop, extra_parameters_t *extra)
+{
+ static WNDCLASS wc;
+ char sleepstr[30];
+ char fname[MAX_PATH];
+ int err = 0;
+ char *p;
+ char classname[] = "_sp";
+
+ g_hwndParent = hwndParent;
+ EXDLL_INIT();
+ if (popstring(sleepstr, sizeof sleepstr))
+ err = 1;
+ if (popstring(fname, sizeof fname))
+ err = 1;
+ if (err)
+ return;
+
+ if (!*fname)
+ return; /* Nothing to do. */
+
+ for (sleepint=0, p=sleepstr; *p >= '0' && *p <= '9'; p++)
+ {
+ sleepint *= 10;
+ sleepint += *p - '0';
+ }
+ if (sleepint <= 0)
+ return; /* Nothing to do. */
+
+ wc.lpfnWndProc = splash_wndproc;
+ wc.hInstance = g_hInstance;
+ wc.hCursor = LoadCursor(NULL,IDC_ARROW);
+ wc.lpszClassName = classname;
+ if (!RegisterClass(&wc))
+ return; /* Error. */
+
+ g_hbm = LoadImage (NULL, fname, IMAGE_BITMAP,
+ 0, 0 , LR_CREATEDIBSECTION|LR_LOADFROMFILE);
+ if (g_hbm)
+ {
+ MSG msg;
+ HWND hwnd;
+
+ hwnd = CreateWindowEx (WS_EX_TOOLWINDOW, classname, classname,
+ 0, 0, 0, 0, 0, (HWND)hwndParent, NULL,
+ g_hInstance, NULL);
+
+ while (IsWindow(hwnd) && GetMessage ( &msg, hwnd, 0, 0))
+ {
+ DispatchMessage (&msg);
+ }
+
+ DeleteObject (g_hbm);
+ g_hbm = NULL;
+ }
+ UnregisterClass (classname, g_hInstance);
+}
+
+
+/* Service Management. */
+
+/* Use this to report unexpected errors. FIXME: This is really not
+ very descriptive. */
+void
+service_error (const char *str)
+{
+ char buf[1024];
+ snprintf (buf, sizeof (buf), "error: %s: ec=%d\r\n", str,
+ GetLastError ());
+ MessageBox(g_hwndParent, buf, 0, MB_OK);
+
+ setuservariable (INST_R0, "1");
+}
+
+
+void __declspec(dllexport)
+service_create (HWND hwndParent, int string_size, char *variables,
+ stack_t **stacktop, extra_parameters_t *extra)
+{
+ SC_HANDLE sc;
+ SC_HANDLE service;
+ const char *result = NULL;
+ char service_name[256];
+ char display_name[256];
+ char program[256];
+ int err = 0;
+
+ g_hwndParent = hwndParent;
+ EXDLL_INIT();
+
+ /* The expected stack layout: service_name, display_name, program. */
+ if (popstring (service_name, sizeof (service_name)))
+ err = 1;
+ if (!err && popstring (display_name, sizeof (display_name)))
+ err = 1;
+ if (!err && popstring (program, sizeof (program)))
+ err = 1;
+ if (err)
+ {
+ setuservariable (INST_R0, "1");
+ return;
+ }
+
+ sc = OpenSCManager (NULL, NULL, SC_MANAGER_ALL_ACCESS);
+ if (sc == NULL)
+ {
+ service_error ("OpenSCManager");
+ return;
+ }
+
+ service = CreateService (sc, service_name, display_name,
+ SERVICE_ALL_ACCESS, SERVICE_WIN32_OWN_PROCESS,
+ /* Use SERVICE_DEMAND_START for testing.
+ FIXME: Currently not configurable by caller. */
+ SERVICE_AUTO_START,
+ SERVICE_ERROR_NORMAL, program,
+ NULL, NULL, NULL,
+ /* FIXME: Currently not configurable by caller. */
+ /* FIXME: LocalService or NetworkService
+ don't work for dirmngr right now. NOTE!
+ If you change it here, you also should
+ adjust make-msi.pl for the msi
+ installer. In the future, this should
+ be an argument to the function and then
+ the make-msi.pl script can extract it
+ from the invocation. */
+ NULL /* "NT AUTHORITY\\LocalService" */,
+ NULL);
+ if (service == NULL)
+ {
+ service_error ("CreateService");
+ CloseServiceHandle (sc);
+ return;
+ }
+ CloseServiceHandle (service);
+
+ result = GetLastError () ? "1":"0";
+ setuservariable (INST_R0, result);
+ return;
+}
+
+
+/* Requires g_hwndParent to be set! */
+SC_HANDLE
+service_lookup (char *service_name)
+{
+ SC_HANDLE sc;
+ SC_HANDLE service;
+
+ sc = OpenSCManager (NULL, NULL, SC_MANAGER_ALL_ACCESS);
+ if (sc == NULL)
+ {
+ service_error ("OpenSCManager");
+ return NULL;
+ }
+ service = OpenService (sc, service_name, SC_MANAGER_ALL_ACCESS);
+ if (service == NULL)
+ {
+ /* Fail silently here. */
+ CloseServiceHandle (sc);
+ return NULL;
+ }
+ CloseServiceHandle (sc);
+ return service;
+}
+
+
+/* Returns status. */
+void __declspec(dllexport)
+service_query (HWND hwndParent, int string_size, char *variables,
+ stack_t **stacktop, extra_parameters_t *extra)
+{
+ SC_HANDLE service;
+ const char *result = NULL;
+ char service_name[256];
+ int err = 0;
+ SERVICE_STATUS status;
+
+ g_hwndParent = hwndParent;
+ EXDLL_INIT();
+
+ /* The expected stack layout: service_name argc [argv]. */
+ if (popstring (service_name, sizeof (service_name)))
+ err = 1;
+ if (err)
+ {
+ setuservariable (INST_R0, "ERROR");
+ return;
+ }
+
+ service = service_lookup (service_name);
+ if (service == NULL)
+ if (err == 0)
+ {
+ setuservariable (INST_R0, "MISSING");
+ return;
+ }
+
+ err = QueryServiceStatus (service, &status);
+ if (err == 0)
+ {
+ setuservariable (INST_R0, "ERROR");
+ CloseServiceHandle (service);
+ return;
+ }
+ CloseServiceHandle (service);
+
+ switch (status.dwCurrentState)
+ {
+ case SERVICE_START_PENDING:
+ result = "START_PENDING";
+ break;
+ case SERVICE_RUNNING:
+ result = "RUNNING";
+ break;
+ case SERVICE_PAUSE_PENDING:
+ result = "PAUSE_PENDING";
+ break;
+ case SERVICE_PAUSED:
+ result = "PAUSED";
+ break;
+ case SERVICE_CONTINUE_PENDING:
+ result = "CONTINUE_PENDING";
+ break;
+ case SERVICE_STOP_PENDING:
+ result = "STOP_PENDING";
+ break;
+ case SERVICE_STOPPED:
+ result = "STOPPED";
+ break;
+ default:
+ result = "UNKNOWN";
+ }
+ setuservariable (INST_R0, result);
+ return;
+}
+
+
+void __declspec(dllexport)
+service_start (HWND hwndParent, int string_size, char *variables,
+ stack_t **stacktop, extra_parameters_t *extra)
+{
+ SC_HANDLE service;
+ const char *result = NULL;
+ char service_name[256];
+ char argc_str[256];
+#define NR_ARGS 10
+#define ARG_MAX 256
+ char argv_str[NR_ARGS][ARG_MAX];
+ const char *argv[NR_ARGS + 1];
+ int argc;
+ int i;
+ int err = 0;
+
+ g_hwndParent = hwndParent;
+ EXDLL_INIT();
+
+ /* The expected stack layout: service_name argc [argv]. */
+ if (popstring (service_name, sizeof (service_name)))
+ err = 1;
+ if (!err && popstring (argc_str, sizeof (argc_str)))
+ err = 1;
+ if (!err)
+ {
+ argc = atoi (argc_str);
+ for (i = 0; i < argc; i++)
+ {
+ if (popstring (argv_str[i], ARG_MAX))
+ {
+ err = 1;
+ break;
+ }
+ argv[i] = argv_str[i];
+ }
+ argv[i] = NULL;
+ }
+ if (err)
+ {
+ setuservariable (INST_R0, "1");
+ return;
+ }
+
+ service = service_lookup (service_name);
+ if (service == NULL)
+ return;
+
+ err = StartService (service, argc, argc == 0 ? NULL : argv);
+ if (err == 0)
+ {
+ service_error ("StartService");
+ CloseServiceHandle (service);
+ return;
+ }
+ CloseServiceHandle (service);
+
+ setuservariable (INST_R0, "0");
+ return;
+}
+
+
+void __declspec(dllexport)
+service_stop (HWND hwndParent, int string_size, char *variables,
+ stack_t **stacktop, extra_parameters_t *extra)
+{
+ SC_HANDLE service;
+ const char *result = NULL;
+ char service_name[256];
+ int err = 0;
+ SERVICE_STATUS status;
+ DWORD timeout = 10000; /* 10 seconds. */
+ DWORD start_time;
+
+ g_hwndParent = hwndParent;
+ EXDLL_INIT();
+
+ /* The expected stack layout: service_name argc [argv]. */
+ if (popstring (service_name, sizeof (service_name)))
+ err = 1;
+ if (err)
+ {
+ setuservariable (INST_R0, "1");
+ return;
+ }
+
+ service = service_lookup (service_name);
+ if (service == NULL)
+ return;
+
+ err = QueryServiceStatus (service, &status);
+ if (err == 0)
+ {
+ service_error ("QueryService");
+ CloseServiceHandle (service);
+ return;
+ }
+
+ if (status.dwCurrentState != SERVICE_STOPPED
+ && status.dwCurrentState != SERVICE_STOP_PENDING)
+ {
+ err = ControlService (service, SERVICE_CONTROL_STOP, &status);
+ if (err == 0)
+ {
+ service_error ("ControlService");
+ CloseServiceHandle (service);
+ return;
+ }
+ }
+
+ start_time = GetTickCount ();
+ while (status.dwCurrentState != SERVICE_STOPPED)
+ {
+ Sleep (1000); /* One second. */
+ if (!QueryServiceStatus (service, &status))
+ {
+ service_error ("QueryService");
+ CloseServiceHandle (service);
+ return;
+ }
+ if (status.dwCurrentState == SERVICE_STOPPED)
+ break;
+
+ if (GetTickCount () - start_time > timeout)
+ {
+ char buf[1024];
+ snprintf (buf, sizeof (buf),
+ "time out waiting for service %s to stop\r\n",
+ service_name);
+ MessageBox (g_hwndParent, buf, 0, MB_OK);
+ setuservariable (INST_R0, "1");
+ return;
+ }
+ }
+ CloseServiceHandle (service);
+ setuservariable (INST_R0, "0");
+ return;
+}
+
+
+void __declspec(dllexport)
+service_delete (HWND hwndParent, int string_size, char *variables,
+ stack_t **stacktop, extra_parameters_t *extra)
+{
+ SC_HANDLE service;
+ const char *result = NULL;
+ char service_name[256];
+ int err = 0;
+
+ g_hwndParent = hwndParent;
+ EXDLL_INIT();
+
+ /* The expected stack layout: service_name argc [argv]. */
+ if (popstring (service_name, sizeof (service_name)))
+ err = 1;
+ if (err)
+ {
+ setuservariable (INST_R0, "1");
+ return;
+ }
+
+ service = service_lookup (service_name);
+ if (service == NULL)
+ return;
+
+ err = DeleteService (service);
+ if (err == 0)
+ {
+ service_error ("DeleteService");
+ CloseServiceHandle (service);
+ return;
+ }
+ CloseServiceHandle (service);
+
+ setuservariable (INST_R0, "0");
+ return;
+}
+
+
+#include <stdio.h>
+
+/* Extract config file parameters. FIXME: Not particularly robust.
+ We expect some reasonable formatting. The parser below is very
+ limited. It expects a command line option /c=FILE or /C=FILE,
+ where FILE must be enclosed in double-quotes if it contains spaces.
+ That file should contain a single section [gpg4win] and KEY=VALUE
+ pairs for each additional configuration file to install. Comments
+ are supported only on lines by themselves. VALUE can be quoted in
+ double-quotes, but does not need to be, unless it has whitespace at
+ the beginning or end. KEY can, for example, be "gpg.conf" (without
+ the quotes). */
+void
+config_init (char **keys, char **values, int max)
+{
+ /* First, parse the command line. */
+ char *cmdline;
+ char *begin = NULL;
+ char *end = NULL;
+ char mark;
+ char *fname;
+ char *ptr;
+ FILE *conf;
+
+ *keys = NULL;
+ *values = NULL;
+
+ cmdline = getuservariable (INST_CMDLINE);
+
+ mark = (*cmdline == '"') ? (cmdline++, '"') : ' ';
+ while (*cmdline && *cmdline != mark)
+ cmdline++;
+ if (mark == '"' && *cmdline)
+ cmdline++;
+ while (*cmdline && *cmdline == ' ')
+ cmdline++;
+
+ while (*cmdline)
+ {
+ /* We are at the beginning of a new argument. */
+ if (cmdline[0] == '/' && (cmdline[1] == 'C' || cmdline[1] == 'c')
+ && cmdline[2] == '=')
+ {
+ cmdline += 3;
+ begin = cmdline;
+ }
+
+ while (*cmdline && *cmdline != ' ')
+ {
+ /* Skip over quoted parts. */
+ if (*cmdline == '"')
+ {
+ cmdline++;
+ while (*cmdline && *cmdline != '"')
+ cmdline++;
+ if (*cmdline)
+ cmdline++;
+ }
+ else
+ cmdline++;
+ }
+ if (begin && !end)
+ {
+ end = cmdline - 1;
+ break;
+ }
+ while (*cmdline && *cmdline == ' ')
+ cmdline++;
+ }
+
+ if (!begin || begin > end)
+ return;
+
+ /* Strip quotes. */
+ if (*begin == '"' && *end == '"')
+ {
+ begin++;
+ end--;
+ }
+ if (begin > end)
+ return;
+
+ fname = malloc (end - begin + 2);
+ if (!fname)
+ return;
+
+ ptr = fname;
+ while (begin <= end)
+ *(ptr++) = *(begin++);
+ *ptr = '\0';
+
+ conf = fopen (fname, "r");
+ free (fname);
+ if (!conf)
+ return;
+
+ while (max - 1 > 0)
+ {
+ char line[256];
+ char *ptr2;
+
+ if (fgets (line, sizeof (line), conf) == NULL)
+ break;
+ ptr = &line[strlen (line)];
+ while (ptr > line && (ptr[-1] == '\n' || ptr[-1] == '\r'
+ || ptr[-1] == ' ' || ptr[-1] == '\t'))
+ ptr--;
+ *ptr = '\0';
+
+ ptr = line;
+ while (*ptr && (*ptr == ' ' || *ptr == '\t'))
+ ptr++;
+ /* Ignore comment lines. */
+ /* FIXME: Ignore section markers. */
+ if (*ptr == '\0' || *ptr == ';' || *ptr == '[')
+ continue;
+ begin = ptr;
+ while (*ptr && *ptr != '=' && *ptr != ' ' && *ptr != '\t')
+ ptr++;
+ end = ptr - 1;
+ while (*ptr && (*ptr == ' ' || *ptr == '\t'))
+ ptr++;
+ if (*ptr != '=')
+ continue;
+ ptr++;
+
+ if (begin > end)
+ continue;
+
+ /* We found a key. */
+ *keys = malloc (end - begin + 2);
+ if (!keys)
+ return;
+ ptr2 = *keys;
+ while (begin <= end)
+ *(ptr2++) = *(begin++);
+ *ptr2 = '\0';
+
+ *values = NULL;
+
+ while (*ptr && (*ptr == ' ' || *ptr == '\t'))
+ ptr++;
+ begin = ptr;
+ /* In this case, end points to the byte after the value, which
+ is OK because that is '\0'. */
+ end = &line[strlen (line)];
+ if (begin > end)
+ begin = end;
+
+ /* Strip quotes. */
+ if (*begin == '"' && end[-1] == '"')
+ {
+ begin++;
+ end--;
+ *end = '\0';
+ }
+ if (begin > end)
+ return;
+
+ *values = malloc (end - begin + 1);
+ ptr2 = *values;
+ while (begin <= end)
+ *(ptr2++) = *(begin++);
+
+ keys++;
+ values++;
+ max--;
+ }
+
+ fclose (conf);
+ *keys = NULL;
+ *values = NULL;
+}
+
+
+char *
+config_lookup (char *key)
+{
+#define MAX_KEYS 128
+ static int initialised = 0;
+ static char *keys[MAX_KEYS];
+ static char *values[MAX_KEYS];
+ int i;
+
+ if (initialised == 0)
+ {
+ initialised = 1;
+ config_init (keys, values, MAX_KEYS);
+
+#if 0
+ MessageBox(g_hwndParent, "Configuration File:", 0, MB_OK);
+ i = 0;
+ while (keys[i])
+ {
+ char buf[256];
+ sprintf (buf, "%s=%s\r\n", keys[i], values[i]);
+ MessageBox (g_hwndParent, buf, 0, MB_OK);
+ i++;
+ }
+#endif
+ }
+
+ i = 0;
+ while (keys[i])
+ {
+ if (!strcmp (keys[i], key))
+ return values[i];
+ i++;
+ }
+
+ return NULL;
+}
+
+
+void __declspec(dllexport)
+config_fetch (HWND hwndParent, int string_size, char *variables,
+ stack_t **stacktop, extra_parameters_t *extra)
+{
+ char key[256];
+ int err = 0;
+ char *value;
+
+ g_hwndParent = hwndParent;
+ EXDLL_INIT();
+
+ /* The expected stack layout: key. */
+ if (popstring (key, sizeof (key)))
+ err = 1;
+ if (err)
+ {
+ setuservariable (INST_R0, "");
+ return;
+ }
+
+ value = config_lookup (key);
+
+ setuservariable (INST_R0, value == NULL ? "" : value);
+ return;
+}
+
+
+void __declspec(dllexport)
+config_fetch_bool (HWND hwndParent, int string_size, char *variables,
+ stack_t **stacktop, extra_parameters_t *extra)
+{
+ char key[256];
+ int err = 0;
+ char *value;
+ int result;
+
+ g_hwndParent = hwndParent;
+ EXDLL_INIT();
+
+ /* The expected stack layout: key. */
+ if (popstring (key, sizeof (key)))
+ err = 1;
+ if (err)
+ {
+ setuservariable (INST_R0, "");
+ return;
+ }
+
+ value = config_lookup (key);
+ if (value == NULL || *value == '\0')
+ {
+ setuservariable (INST_R0, "");
+ return;
+ }
+
+ result = 0;
+ if (!strcasecmp (value, "true")
+ || !strcasecmp (value, "yes")
+ || atoi (value) != 0)
+ result = 1;
+
+ setuservariable (INST_R0, result == 0 ? "0" : "1");
+ return;
+}
+
+
+/* Return a string from the Win32 Registry or NULL in case of error.
+ Caller must release the return value. A NULL for root is an alias
+ for HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE in turn. */
+char *
+read_w32_registry_string (HKEY root, const char *dir, const char *name)
+{
+ HKEY root_key;
+ HKEY key_handle;
+ DWORD n1, nbytes, type;
+ char *result = NULL;
+
+ root_key = root;
+ if (! root_key)
+ root_key = HKEY_CURRENT_USER;
+
+ if( RegOpenKeyEx( root_key, dir, 0, KEY_READ, &key_handle ) )
+ {
+ if (root)
+ return NULL; /* no need for a RegClose, so return direct */
+ /* It seems to be common practise to fall back to HKLM. */
+ if (RegOpenKeyEx (HKEY_LOCAL_MACHINE, dir, 0, KEY_READ, &key_handle) )
+ return NULL; /* still no need for a RegClose, so return direct */
+ }
+
+ nbytes = 1;
+ if( RegQueryValueEx( key_handle, name, 0, NULL, NULL, &nbytes ) ) {
+ if (root)
+ goto leave;
+ /* Try to fallback to HKLM also vor a missing value. */
+ RegCloseKey (key_handle);
+ if (RegOpenKeyEx (HKEY_LOCAL_MACHINE, dir, 0, KEY_READ, &key_handle) )
+ return NULL; /* Nope. */
+ if (RegQueryValueEx( key_handle, name, 0, NULL, NULL, &nbytes))
+ goto leave;
+ }
+
+ result = malloc( (n1=nbytes+1) );
+
+ if( !result )
+ goto leave;
+ if( RegQueryValueEx( key_handle, name, 0, &type, result, &n1 ) ) {
+ free(result); result = NULL;
+ goto leave;
+ }
+ result[nbytes] = 0; /* make sure it is really a string */
+
+ leave:
+ RegCloseKey( key_handle );
+ return result;
+}
+
+
+#define ENV_HK HKEY_LOCAL_MACHINE
+#define ENV_REG "SYSTEM\\CurrentControlSet\\Control\\" \
+ "Session Manager\\Environment"
+ /* The following setting can be used for a per-user setting. */
+#define ENV_HK_USER HKEY_CURRENT_USER
+#define ENV_REG_USER "Environment"
+/* Due to a bug in Windows7 (kb 2685893) we better put a lower limit
+ than 8191 on the maximum length of the PATH variable. Note, that
+ depending on the used toolchain we used to had a 259 byte limit in
+ the past. */
+#define PATH_LENGTH_LIMIT 2047
+
+void __declspec(dllexport)
+path_add (HWND hwndParent, int string_size, char *variables,
+ stack_t **stacktop, extra_parameters_t *extra)
+{
+ char dir[PATH_LENGTH_LIMIT];
+ char is_user_install[2];
+ char *path;
+ char *path_new;
+ int path_new_size;
+ char *comp;
+ const char delims[] = ";";
+ int is_user;
+ HKEY key_handle = 0;
+ HKEY root_key;
+ const char *env_reg;
+
+ g_hwndParent = hwndParent;
+ EXDLL_INIT();
+
+ setuservariable (INST_R0, "0");
+
+/* MessageBox (g_hwndParent, "XXX 1", 0, MB_OK); */
+
+ /* The expected stack layout: path component. */
+ if (popstring (dir, sizeof (dir)))
+ return;
+
+ /* The expected stack layout: HKEY component. */
+ if (popstring (is_user_install, sizeof (is_user_install)))
+ return;
+
+ if (!strcmp(is_user_install, "1"))
+ {
+ root_key = ENV_HK_USER;
+ env_reg = ENV_REG_USER;
+ }
+ else
+ {
+ root_key = ENV_HK;
+ env_reg = ENV_REG;
+ }
+
+ path = read_w32_registry_string (root_key, env_reg, "Path");
+
+ if (! path)
+ {
+ path = strdup ("");
+ }
+
+/* MessageBox (g_hwndParent, "XXX 3", 0, MB_OK); */
+
+ /* Old path plus semicolon plus dir plus terminating nul. */
+ path_new_size = strlen (path) + 1 + strlen (dir) + 1;
+ if (path_new_size > PATH_LENGTH_LIMIT)
+ {
+ MessageBox (g_hwndParent, "PATH env variable too big", 0, MB_OK);
+ free (path);
+ return;
+ }
+
+/* MessageBox (g_hwndParent, "XXX 4", 0, MB_OK); */
+
+ path_new = malloc (path_new_size);
+ if (!path_new)
+ {
+ free (path);
+ return;
+ }
+
+/* MessageBox (g_hwndParent, "XXX 5", 0, MB_OK); */
+
+ strcpy (path_new, path);
+ strcat (path_new, ";");
+ strcat (path_new, dir);
+
+/* MessageBox (g_hwndParent, "XXX 6", 0, MB_OK); */
+/* MessageBox (g_hwndParent, dir, 0, MB_OK); */
+/* MessageBox (g_hwndParent, "XXX 7", 0, MB_OK); */
+
+ /* Check if the directory already exists in the path. */
+ comp = strtok (path, delims);
+ do
+ {
+/* MessageBox (g_hwndParent, comp, 0, MB_OK); */
+ if (!comp)
+ break;
+
+ if (!strcmp (comp, dir))
+ {
+ free (path);
+ free (path_new);
+ return;
+ }
+ comp = strtok (NULL, delims);
+ }
+ while (comp);
+ free (path);
+
+ /* Update the path key. */
+ RegCreateKey (root_key, env_reg, &key_handle);
+ RegSetValueEx (key_handle, "Path", 0, REG_EXPAND_SZ,
+ path_new, path_new_size);
+ RegCloseKey (key_handle);
+ SetEnvironmentVariable("PATH", path_new);
+ free (path_new);
+
+/* MessageBox (g_hwndParent, "XXX 9", 0, MB_OK); */
+
+ setuservariable (INST_R0, "1");
+}
+
+
+void __declspec(dllexport)
+path_remove (HWND hwndParent, int string_size, char *variables,
+ stack_t **stacktop, extra_parameters_t *extra)
+{
+ char dir[PATH_LENGTH_LIMIT];
+ char is_user_install[2];
+ char *path;
+ char *path_new;
+ int path_new_size;
+ char *comp;
+ const char delims[] = ";";
+ HKEY key_handle = 0;
+ int changed = 0;
+ int count = 0;
+ HKEY root_key;
+ const char *env_reg;
+
+ g_hwndParent = hwndParent;
+ EXDLL_INIT();
+
+ setuservariable (INST_R0, "0");
+
+ /* The expected stack layout: path component. */
+ if (popstring (dir, sizeof (dir)))
+ return;
+
+ /* The expected stack layout: HKEY component. */
+ if (popstring (is_user_install, sizeof (is_user_install)))
+ return;
+
+ if (!strcmp(is_user_install, "1"))
+ {
+ root_key = ENV_HK_USER;
+ env_reg = ENV_REG_USER;
+ }
+ else
+ {
+ root_key = ENV_HK;
+ env_reg = ENV_REG;
+ }
+
+ path = read_w32_registry_string (root_key, env_reg, "Path");
+
+ if (!path)
+ return;
+ /* Old path plus semicolon plus dir plus terminating nul. */
+ path_new_size = strlen (path) + 1;
+ path_new = malloc (path_new_size);
+ if (!path_new)
+ {
+ free (path);
+ return;
+ }
+ path_new[0] = '\0';
+
+ /* Compose the new path. */
+ comp = strtok (path, delims);
+ do
+ {
+ if (strcmp (comp, dir))
+ {
+ if (count != 0)
+ strcat (path_new, ";");
+ strcat (path_new, comp);
+ count++;
+ }
+ else
+ changed = 1;
+
+ comp = strtok (NULL, delims);
+ }
+ while (comp);
+ free (path);
+
+ if (! changed)
+ {
+ free (path_new);
+ return;
+ }
+
+ /* Set a key for our CLSID. */
+ RegCreateKey (root_key, env_reg, &key_handle);
+ RegSetValueEx (key_handle, "Path", 0, REG_EXPAND_SZ,
+ path_new, path_new_size);
+ RegCloseKey (key_handle);
+ free (path_new);
+
+ setuservariable (INST_R0, "1");
+}
diff --git a/build-aux/speedo/w32/gdk-pixbuf-loaders.cache b/build-aux/speedo/w32/gdk-pixbuf-loaders.cache
new file mode 100755
index 0000000..78bc18a
--- /dev/null
+++ b/build-aux/speedo/w32/gdk-pixbuf-loaders.cache
@@ -0,0 +1,138 @@
+# GdkPixbuf Image Loader Modules file
+# Automatically generated file, do not edit
+# Created by gdk-pixbuf-query-loaders.exe from gdk-pixbuf-2.26.5
+#
+# LoaderDir = ../lib/gdk-pixbuf-2.0/2.10.0/loaders
+#
+"../lib/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-ani.dll"
+"ani" 4 "gdk-pixbuf" "The ANI image format" "LGPL"
+"application/x-navi-animation" ""
+"ani" ""
+"RIFF ACON" " xxxx " 100
+
+"../lib/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-gdip-bmp.dll"
+"bmp" 5 "gdk-pixbuf" "The BMP image format" "LGPL"
+"image/bmp" "image/x-bmp" "image/x-MS-bmp" ""
+"bmp" ""
+"BM" "" 100
+
+"../lib/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-gdip-emf.dll"
+"emf" 4 "gdk-pixbuf" "The EMF image format" "LGPL"
+"application/emf" "application/x-emf" "image/x-emf" "image/x-mgx-emf" ""
+"emf" ""
+"\001" "" 100
+
+"../lib/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-gdip-gif.dll"
+"gif" 5 "gdk-pixbuf" "The GIF image format" "LGPL"
+"image/gif" ""
+"gif" ""
+"GIF8" "" 100
+
+"../lib/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-gdip-ico.dll"
+"ico" 4 "gdk-pixbuf" "The ICO image format" "LGPL"
+"image/x-icon" "image/x-ico" ""
+"ico" "cur" ""
+" \001 " "zz znz" 100
+" \002 " "zz znz" 100
+
+"../lib/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-gdip-jpeg.dll"
+"jpeg" 5 "gdk-pixbuf" "The JPEG image format" "LGPL"
+"image/jpeg" ""
+"jpeg" "jpe" "jpg" ""
+"\377\330" "" 100
+
+"../lib/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-gdip-tiff.dll"
+"tiff" 5 "gdk-pixbuf" "The TIFF image format" "LGPL"
+"image/tiff" ""
+"tiff" "tif" ""
+"MM *" " z " 100
+"II* " " z" 100
+
+"../lib/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-gdip-wmf.dll"
+"wmf" 4 "gdk-pixbuf" "The WMF image format" "LGPL"
+"image/x-wmf" ""
+"wmf" "apm" ""
+"\327\315\306\232" "" 100
+"\001" "" 100
+
+"../lib/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-icns.dll"
+"icns" 4 "gdk-pixbuf" "The ICNS image format" "GPL"
+"image/x-icns" ""
+"icns" ""
+"icns" "" 100
+
+"../lib/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-pcx.dll"
+"pcx" 4 "gdk-pixbuf" "The PCX image format" "LGPL"
+"image/x-pcx" ""
+"pcx" ""
+"\n \001" "" 100
+"\n\002\001" "" 100
+"\n\003\001" "" 100
+"\n\004\001" "" 100
+"\n\005\001" "" 100
+
+"../lib/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-png.dll"
+"png" 5 "gdk-pixbuf" "The PNG image format" "LGPL"
+"image/png" ""
+"png" ""
+"\211PNG\r\n\032\n" "" 100
+
+"../lib/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-pnm.dll"
+"pnm" 4 "gdk-pixbuf" "The PNM/PBM/PGM/PPM image format family" "LGPL"
+"image/x-portable-anymap" "image/x-portable-bitmap" "image/x-portable-graymap" "image/x-portable-pixmap" ""
+"pnm" "pbm" "pgm" "ppm" ""
+"P1" "" 100
+"P2" "" 100
+"P3" "" 100
+"P4" "" 100
+"P5" "" 100
+"P6" "" 100
+
+"../lib/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-qtif.dll"
+"qtif" 4 "gdk-pixbuf" "The QTIF image format" "LGPL"
+"image/x-quicktime" "image/qtif" ""
+"qtif" "qif" ""
+"abcdidsc" "xxxx " 100
+"abcdidat" "xxxx " 100
+
+"../lib/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-ras.dll"
+"ras" 4 "gdk-pixbuf" "The Sun raster image format" "LGPL"
+"image/x-cmu-raster" "image/x-sun-raster" ""
+"ras" ""
+"Y\246j\225" "" 100
+
+"../lib/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-tga.dll"
+"tga" 4 "gdk-pixbuf" "The Targa image format" "LGPL"
+"image/x-tga" ""
+"tga" "targa" ""
+" \001\001" "x " 100
+" \001\t" "x " 100
+" \002" "xz " 99
+" \003" "xz " 100
+" \n" "xz " 100
+" \v" "xz " 100
+
+"../lib/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-wbmp.dll"
+"wbmp" 4 "gdk-pixbuf" "The WBMP image format" "LGPL"
+"image/vnd.wap.wbmp" ""
+"wbmp" ""
+" " "zz" 1
+" `" "z " 1
+" @" "z " 1
+" " "z " 1
+
+"../lib/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-xbm.dll"
+"xbm" 4 "gdk-pixbuf" "The XBM image format" "LGPL"
+"image/x-xbitmap" ""
+"xbm" ""
+"#define " "" 100
+"/*" "" 50
+
+"../lib/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-xpm.dll"
+"xpm" 4 "gdk-pixbuf" "The XPM image format" "LGPL"
+"image/x-xpixmap" ""
+"xpm" ""
+"/* XPM */" "" 100
+
+
+# eof #
diff --git a/build-aux/speedo/w32/gnupg-logo-150x57.bmp b/build-aux/speedo/w32/gnupg-logo-150x57.bmp
new file mode 100644
index 0000000..f2978f3
--- /dev/null
+++ b/build-aux/speedo/w32/gnupg-logo-150x57.bmp
Binary files differ
diff --git a/build-aux/speedo/w32/gnupg-logo-164x314.bmp b/build-aux/speedo/w32/gnupg-logo-164x314.bmp
new file mode 100644
index 0000000..bf270ac
--- /dev/null
+++ b/build-aux/speedo/w32/gnupg-logo-164x314.bmp
Binary files differ
diff --git a/build-aux/speedo/w32/inst-options.ini b/build-aux/speedo/w32/inst-options.ini
new file mode 100644
index 0000000..8697e89
--- /dev/null
+++ b/build-aux/speedo/w32/inst-options.ini
@@ -0,0 +1,46 @@
+[Settings]
+NumFields=5
+
+; The number of the fields here is known in w32inst.nsi.
+; The tags must be "[Field N]" with N=1..NumFields
+
+[Field 1]
+Type=Label
+Left=0
+Right=-1
+Top=0
+Bottom=20
+
+[Field 2]
+Type=Checkbox
+Left=0
+Right=-1
+Top=30
+Bottom=40
+;Text=Start Menu
+State=1
+
+[Field 3]
+Type=Checkbox
+Left=0
+Right=-1
+Top=50
+Bottom=60
+;Text=Desktop
+State=0
+
+[Field 4]
+Type=Checkbox
+Left=0
+Right=-1
+Top=70
+Bottom=80
+;Text=Quick Launch Bar
+State=0
+
+[Field 5]
+Type=Label
+Left=0
+Right=-1
+Top=90
+Bottom=130
diff --git a/build-aux/speedo/w32/inst.nsi b/build-aux/speedo/w32/inst.nsi
new file mode 100644
index 0000000..9eb4fb4
--- /dev/null
+++ b/build-aux/speedo/w32/inst.nsi
@@ -0,0 +1,1665 @@
+# inst.nsi - Installer for GnuPG on Windows. -*- coding: latin-1; -*-
+# Copyright (C) 2005, 2014 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 <http://www.gnu.org/licenses/>.
+
+# Macros to provide for invocation:
+# INST_DIR
+# INST6_DIR
+# BUILD_DIR
+# TOP_SRCDIR
+# W32_SRCDIR
+# BUILD_ISODATE - the build date, e.g. "2014-10-31"
+# BUILD_DATESTR - ditto w/o '-', e.g. "20141031"
+# NAME
+# VERSION
+# PROD_VERSION
+#
+# WITH_GUI - Include the GPA GUI
+
+!cd "${INST_DIR}"
+!addincludedir "${W32_SRCDIR}"
+!addplugindir "${BUILD_DIR}"
+
+# The package name and version. PRETTY_PACKAGE is a user visible name
+# only while PACKAGE is useful for filenames etc. PROD_VERSION is the
+# product version and needs to be in the format "MAJ.MIN.MIC.BUILDNR".
+!define PACKAGE "gnupg"
+!define PACKAGE_SHORT "gnupg"
+!define PRETTY_PACKAGE "GNU Privacy Guard"
+!define PRETTY_PACKAGE_SHORT "GnuPG"
+!define COMPANY "The GnuPG Project"
+!define COPYRIGHT "Copyright (C) 2017 The GnuPG Project"
+!define DESCRIPTION "GnuPG: The GNU Privacy Guard for Windows"
+
+!define INSTALL_DIR "GnuPG"
+
+!define WELCOME_TITLE_ENGLISH \
+ "Welcome to the installation of GnuPG"
+
+!define WELCOME_TITLE_GERMAN \
+ "Willkommen bei der Installation von GnuPG"
+
+!define ABOUT_ENGLISH \
+ "GnuPG is the mostly used software for mail and data encryption. \
+ GnuPG can be used to encrypt data and to create digital signatures. \
+ GnuPG includes an advanced key management facility and is compliant \
+ with the OpenPGP Internet standard as described in RFC-4880. \
+ \r\n\r\n$_CLICK \
+ \r\n\r\n\r\n\r\n\r\nThis is GnuPG version ${VERSION}.\r\n\
+ File version: ${PROD_VERSION}\r\n\
+ Release date: ${BUILD_ISODATE}"
+!define ABOUT_GERMAN \
+ "GnuPG is die häufigst verwendete Software zur Mail- und Datenverschlüsselung.\
+ \r\n\r\n$_CLICK \
+ \r\n\r\n\r\n\r\n\r\nDies ist GnuPG Version ${VERSION}.\r\n\
+ Dateiversion: ${PROD_VERSION}\r\n\
+ Releasedatum: ${BUILD_ISODATE}"
+
+
+# The copyright license of the package. Define only one of these.
+!define LICENSE_GPL
+
+# Select the best compression algorithm available. The dictionary
+# size is the default (8 MB).
+!ifndef SOURCES
+SetCompressor lzma
+# SetCompressorDictSize 8
+!endif
+
+# 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."
+
+LangString T_RunKeyManager ${LANG_ENGLISH} \
+ "Run the key manager"
+LangString T_RunKeyManager ${LANG_GERMAN} \
+ "Die Schlüsselverwaltung aufrufen"
+
+LangString T_MoreInfo ${LANG_ENGLISH} \
+ "Click here 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."
+
+# Functions
+
+# Custom functions and macros for this installer.
+LangString T_AlreadyRunning ${LANG_ENGLISH} \
+ "An instance of this installer is already running."
+LangString T_AlreadyRunning ${LANG_GERMAN} \
+ "Ein Exemplar dieses Installers läuft bereits."
+
+Function G4wRunOnce
+ Push $R0
+ StrCpy $R0 "gnupg"
+ g4wihelp::runonce
+ StrCmp $R0 0 +3
+ MessageBox MB_OK $(T_AlreadyRunning)
+ Abort
+ Pop $R0
+FunctionEnd
+
+#
+# Control function for the Custom page to select special
+# install options.
+#
+Function CustomPageOptions
+ !insertmacro MUI_HEADER_TEXT "$(T_InstallOptions)" "$(T_InstallOptLinks)"
+
+ # Note, that the default selection is done in the ini file
+ !insertmacro MUI_INSTALLOPTIONS_WRITE "${W32_SRCDIR}/inst-options.ini" \
+ "Field 1" "Text" "$(T_InstOptLabelA)"
+ !insertmacro MUI_INSTALLOPTIONS_WRITE "${W32_SRCDIR}/inst-options.ini" \
+ "Field 2" "Text" "$(T_InstOptFieldA)"
+ !insertmacro MUI_INSTALLOPTIONS_WRITE "${W32_SRCDIR}/inst-options.ini" \
+ "Field 3" "Text" "$(T_InstOptFieldB)"
+ !insertmacro MUI_INSTALLOPTIONS_WRITE "${W32_SRCDIR}/inst-options.ini" \
+ "Field 4" "Text" "$(T_InstOptFieldC)"
+ !insertmacro MUI_INSTALLOPTIONS_WRITE "${W32_SRCDIR}/inst-options.ini" \
+ "Field 5" "Text" "$(T_InstOptLabelB)"
+
+ !insertmacro MUI_INSTALLOPTIONS_DISPLAY "${W32_SRCDIR}/inst-options.ini"
+FunctionEnd
+
+
+# Check whether GnuPG has already been installed. This is called as
+# a leave function from the 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:"
+
+LangString T_InstOptLabelB ${LANG_ENGLISH} \
+ "(Only programs will be linked into the quick launch bar.)"
+LangString T_InstOptLabelB ${LANG_GERMAN} \
+ "(In die Schnellstartleiste werden nur Verknüpfungen für \
+ Programme angelegt.) "
+
+LangString T_InstOptFieldA ${LANG_ENGLISH} \
+ "Start Menu"
+LangString T_InstOptFieldA ${LANG_GERMAN} \
+ "Startmenü"
+
+LangString T_InstOptFieldB ${LANG_ENGLISH} \
+ "Desktop"
+LangString T_InstOptFieldB ${LANG_GERMAN} \
+ "Arbeitsfläche"
+
+LangString T_InstOptFieldC ${LANG_ENGLISH} \
+ "Quick Launch Bar"
+LangString T_InstOptFieldC ${LANG_GERMAN} \
+ "Schnellstartleiste"
+
+#------------------------------------------------
+# String pertaining to the existing version check
+#------------------------------------------------
+LangString T_FoundExistingVersion ${LANG_ENGLISH} \
+ "Version $R1 has already been installed. $\r$\n\
+ Do you want to overwrite it with version ${VERSION}?"
+LangString T_FoundExistingVersion ${LANG_GERMAN} \
+ "Version $R1 ist hier bereits installiert. $\r$\n\
+ Möchten Sie diese mit Version ${VERSION} überschreiben? $\r$\n\
+ $\r$\n\
+ (Sie können in jedem Fall mit JA antworten, falls es sich um \
+ eine neuere oder dieselbe Version handelt.)"
+LangString T_FoundExistingVersionB ${LANG_ENGLISH} \
+ "A version of GnuPG has already been installed on the system. \
+ $\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?"
+
+
+
+# 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?"
+
+# From Function PrintCloseOtherApps
+LangString T_CloseOtherApps ${LANG_ENGLISH} \
+ "Please make sure that other applications are not running. \
+ GnuPG will try to install anyway but a reboot may be required."
+LangString T_CloseOtherApps ${LANG_GERMAN} \
+ "Bitte stellen Sie sicher, daß alle anderen Anwendugen geschlossen \
+ sind. GnuPG wird auf jeden Fall versuchen, eine Installation \
+ durchzuführen; es ist dann aber u.U. notwendig, das System neu zu starten."
+
+
+# TrimNewlines - taken from the NSIS reference
+# input, top of stack (e.g. whatever$\r$\n)
+# output, top of stack (replaces, with e.g. whatever)
+# modifies no other variables.
+Function TrimNewlines
+ Exch $R0
+ Push $R1
+ Push $R2
+ StrCpy $R1 0
+
+ loop:
+ IntOp $R1 $R1 - 1
+ StrCpy $R2 $R0 1 $R1
+ StrCmp $R2 "$\r" loop
+ StrCmp $R2 "$\n" loop
+ IntOp $R1 $R1 + 1
+ IntCmp $R1 0 no_trim_needed
+ StrCpy $R0 $R0 $R1
+
+ no_trim_needed:
+ Pop $R2
+ Pop $R1
+ Exch $R0
+FunctionEnd
+
+
+# AddToPath - Adds the given dir to the search path.
+# Input - head of the stack
+Function AddToPath
+ 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"'
+
+ 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/gpgtar.exe"
+ File "libexec/dirmngr_ldap.exe"
+ File "libexec/gpg-preset-passphrase.exe"
+ File "libexec/gpg-check-pattern.exe"
+ File "libexec/gpg-wks-client.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
+
+ 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/VS-NfD.prf"
+ File "share/doc/gnupg/examples/Automatic.prf"
+ 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."
+
+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."
+
+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"'
+ 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\dirmngr.exe"
+ Delete "$INSTDIR\bin\gpgconf.exe"
+ Delete "$INSTDIR\bin\gpg-connect-agent.exe"
+ Delete "$INSTDIR\bin\gpgtar.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\VS-NfD.prf"
+ Delete "$INSTDIR\share\doc\gnupg\examples\Automatic.prf"
+ 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
diff --git a/build-aux/speedo/w32/pango.modules b/build-aux/speedo/w32/pango.modules
new file mode 100755
index 0000000..75b2527
--- /dev/null
+++ b/build-aux/speedo/w32/pango.modules
@@ -0,0 +1,3 @@
+# Pango Modules file
+#
+"../lib/pango/1.6.0/modules/pango-basic-win32.dll" BasicScriptEngineWin32 PangoEngineShape PangoRenderWin32 common:
diff --git a/build-aux/speedo/w32/pkg-copyright.txt b/build-aux/speedo/w32/pkg-copyright.txt
new file mode 100644
index 0000000..11056e8
--- /dev/null
+++ b/build-aux/speedo/w32/pkg-copyright.txt
@@ -0,0 +1,410 @@
+Here is a list with collected copyright notices. For details see the
+description of each individual package. [Compiled by wk 2017-11-07]
+
+
+GNUPG is
+
+ Copyright (C) 1997-2017 Werner Koch
+ Copyright (C) 1994-2017 Free Software Foundation, Inc.
+ Copyright (C) 2003-2017 g10 Code GmbH
+ Copyright (C) 2002 Klarälvdalens Datakonsult AB
+ Copyright (C) 1995-1997, 2000-2007 Ulrich Drepper <drepper@gnu.ai.mit.edu>
+ Copyright (C) 1994 X Consortium
+ Copyright (C) 1998 by The Internet Society.
+ Copyright (C) 1998-2004 The OpenLDAP Foundation
+ Copyright (C) 1998-2004 Kurt D. Zeilenga.
+ Copyright (C) 1998-2004 Net Boolean Incorporated.
+ Copyright (C) 2001-2004 IBM Corporation.
+ Copyright (C) 1999-2003 Howard Y.H. Chu.
+ Copyright (C) 1999-2003 Symas Corporation.
+ Copyright (C) 1998-2003 Hallvard B. Furuseth.
+ Copyright (C) 1992-1996 Regents of the University of Michigan.
+ Copyright (C) 2000 Dimitrios Souflis
+ Copyright (C) 2008,2009,2010,2012-2016 William Ahern
+
+ 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 <https://www.gnu.org/licenses/>.
+
+
+LIBGCRYPT is
+
+ Copyright (C) 1989,1991-2017 Free Software Foundation, Inc.
+ Copyright (C) 1994 X Consortium
+ Copyright (C) 1996 L. Peter Deutsch
+ Copyright (C) 1997 Werner Koch
+ Copyright (C) 1998 The Internet Society
+ Copyright (C) 1996-1999 Peter Gutmann, Paul Kendall, and Chris Wedgwood
+ Copyright (C) 1996-2006 Peter Gutmann, Matt Thomlinson and Blake Coverett
+ Copyright (C) 2003 Nikos Mavroyanopoulos
+ Copyright (C) 2006-2007 NTT (Nippon Telegraph and Telephone Corporation)
+ Copyright (C) 2012-2017 g10 Code GmbH
+ Copyright (C) 2012 Simon Josefsson, Niels Möller
+ Copyright (c) 2012 Intel Corporation
+ Copyright (C) 2013 Christian Grothoff
+ Copyright (C) 2013-2017 Jussi Kivilinna
+ Copyright (C) 2013-2014 Dmitry Eremin-Solenikov
+ Copyright (C) 2014 Stephan Mueller
+ Copyright (C) 2017 Bundesamt für Sicherheit in der Informationstechnik
+
+ Libgcrypt is free software; you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of
+ the License, or (at your option) any later version.
+
+ Libgcrypt 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 Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this program; if not, see <http://www.gnu.org/licenses/>.
+
+
+LIBGPG-ERROR is
+
+ Copyright (C) 2003-2004, 2010, 2013-2017 g10 Code GmbH
+
+ libgpg-error is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public License
+ as published by the Free Software Foundation; either version 2.1 of
+ the License, or (at your option) any later version.
+
+ libgpg-error 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, see <http://www.gnu.org/licenses/>.
+
+
+LIBASSUAN is
+
+ Copyright (C) 1992-2013 Free Software Foundation, Inc.
+ Copyright (C) 1994 X Consortium
+ Copyright (C) 2000 Werner Koch (dd9jn)
+ Copyright (C) 2001-2016 g10 Code GmbH
+ Copyright (C) 2004 Simon Josefsson
+
+ Assuan is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of
+ the License, or (at your option) any later version.
+
+ Assuan 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this program; if not, see <http://www.gnu.org/licenses/>.
+
+
+LIBKSBA is
+
+ Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2010, 2011
+ 2012, 2013, 2014, 2015 g10 Code GmbH
+ Copyright (C) 2001, 2002, 2003, 2007 Free Software Foundation, Inc.
+ Copyright (C) 2000, 2001 Fabio Fiorina
+
+ The library and the header files are distributed under the following
+ terms (LGPLv3+/GPLv2+):
+
+ KSBA is free software; you can redistribute it and/or modify
+ it under the terms of either
+
+ - the GNU Lesser General Public License as published by the Free
+ Software Foundation; either version 3 of the License, or (at
+ your option) any later version.
+
+ or
+
+ - the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at
+ your option) any later version.
+
+ or both in parallel, as here.
+
+ KSBA 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.
+
+ The other parts (e.g. manual, build system, tests) are distributed
+ under the following terms (GPLv3):
+
+ KSBA 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.
+
+ KSBA 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.
+
+
+NPTH is
+
+ Copyright (C) 2011, 2012, 2014, 2015, 2017 g10 Code GmbH
+
+ nPth is free software; you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of
+ the License, or (at your option) any later version.
+
+ nPth 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 Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this program; if not, see <https://www.gnu.org/licenses/>.
+
+
+NTBTLS is
+
+ Copyright (C) 2006-2014 Brainspark B.V.
+ Copyright (C) 2014-2017 g10 Code GmbH
+
+ NTBTLS 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.
+
+ NTBTLS 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 <http://www.gnu.org/licenses/>.
+
+
+PINENTRY is
+
+ Copyright (C) 1999 Robert Bihlmeyer <robbe@orcus.priv.at>
+ Copyright (C) 2001-2004, 2007-2008, 2010, 2015-2016 g10 Code GmbH
+ Copyright (C) 2002, 2008 Klarälvdalens Datakonsult AB (KDAB)
+ Copyright (C) 2004 by Albrecht Dreß <albrecht.dress@arcor.de>
+ Copyright 2007 Ingo Klöcker
+ Copyright (C) 2014 Serge Voilokov
+ Copyright (C) 2015 Daiki Ueno
+ Copyright (C) 2015 Daniel Kahn Gillmor <dkg@fifthhorseman.net>
+ Copyright 2016 Intevation GmbH
+
+ PINENTRY is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ PINENTRY 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 <https://www.gnu.org/licenses/>.
+
+
+GPGME is
+
+ Copyright (C) 1991-2013 Free Software Foundation, Inc.
+ Copyright (C) 2000-2001 Werner Koch
+ Copyright (C) 2001-2017 g10 Code GmbH
+ Copyright (C) 2002 Klarälvdalens Datakonsult AB
+ Copyright (C) 2004-2008 Igor Belyi
+ Copyright (C) 2002 John Goerzen
+ Copyright (C) 2014, 2015 Martin Albrecht
+ Copyright (C) 2015 Ben McGinnes
+ Copyright (C) 2015-2016 Bundesamt für Sicherheit in der Informationstechnik
+ Copyright (C) 2016 Intevation GmbH
+
+ GPGME is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of
+ the License, or (at your option) any later version.
+
+ GPGME 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, see <http://www.gnu.org/licenses/>.
+
+
+NSIS is
+
+ Copyright 1999-2009 Nullsoft and Contributors
+ Copyright 2002-2008 Amir Szekely
+ Copyright 2003 Ramon
+
+ This license applies to everything in the NSIS package, except where
+ otherwise noted.
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any
+ damages arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any
+ purpose, including commercial applications, and to alter it and
+ redistribute it freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must
+ not claim that you wrote the original software. If you use this
+ software in a product, an acknowledgment in the product
+ documentation would be appreciated but is not required.
+
+ 2. Altered source versions must be plainly marked as such, and must
+ not be misrepresented as being the original software.
+
+ 3. This notice may not be removed or altered from any source
+ distribution.
+
+ The user interface used with the installer is
+
+ Copyright 2002-2009 Joost Verburg
+
+ [It is distributed along with NSIS and the same conditions as stated
+ above apply]
+
+
+TinySCHEME is part of the GnuPG package and is
+
+ Copyright (c) 2000, Dimitrios Souflis
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+
+ Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+ Neither the name of Dimitrios Souflis nor the names of the
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
+ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+LIBDNS is part of the GnuPG package and is
+
+ Copyright (c) 2008, 2009, 2010, 2012-2016 William Ahern
+
+ Permission is hereby granted, free of charge, to any person obtaining a
+ copy of this software and associated documentation files (the
+ "Software"), to deal in the Software without restriction, including
+ without limitation the rights to use, copy, modify, merge, publish,
+ distribute, sublicense, and/or sell copies of the Software, and to permit
+ persons to whom the Software is furnished to do so, subject to the
+ following conditions:
+
+ The above copyright notice and this permission notice shall be included
+ in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+ NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+ OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+ USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+
+ZLIB is
+
+ (C) 1995-2013 Jean-loup Gailly and Mark Adler
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+
+ Jean-loup Gailly Mark Adler
+ jloup@gzip.org madler@alumni.caltech.edu
+
+
+BZIP2 is
+
+ This program, "bzip2", the associated library "libbzip2", and all
+ documentation, are copyright (C) 1996-2010 Julian R Seward. All
+ rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ 2. The origin of this software must not be misrepresented; you must
+ not claim that you wrote the original software. If you use this
+ software in a product, an acknowledgment in the product
+ documentation would be appreciated but is not required.
+
+ 3. Altered source versions must be plainly marked as such, and must
+ not be misrepresented as being the original software.
+
+ 4. The name of the author may not be used to endorse or promote
+ products derived from this software without specific prior written
+ permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+SQLITE has
+
+ been put into the public-domain by its author D. Richard Hipp:
+ The author disclaims copyright to this source code. In place of
+ a legal notice, here is a blessing:
+
+ May you do good and not evil.
+ May you find forgiveness for yourself and forgive others.
+ May you share freely, never taking more than you give.
diff --git a/build-aux/speedo/w32/wixlib.wxs b/build-aux/speedo/w32/wixlib.wxs
new file mode 100644
index 0000000..d3ffc08
--- /dev/null
+++ b/build-aux/speedo/w32/wixlib.wxs
@@ -0,0 +1,676 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- - Installer module for GnuPG on Windows using WiX -*- coding: utf-8; -*-
+ Copyright (C) 2019 g10 Code GmbH
+
+ This file is part of GnuPG.
+
+ GnuPG is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ GnuPG is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, see <http://www.gnu.org/licenses/>.
+-->
+
+<!-- Components of GnuPG
+generated with:
+heat dir "C:\GnuPG" -var var.SourceDir -cg CMP_GnuPG -dr GnuPG -g1
+and then manually edited:
+ - Changed some files that are in libexec but should be in bin on windows
+ - Change filenames of the dll.a files to .imp
+ - Changed pinentry-basic.exe to pinentry-w32.exe
+ - Added the "gpg_env_cmp"
+ - Added the "gpg_reg_cmp"
+-->
+<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
+ <Fragment>
+ <DirectoryRef Id="DIR_GnuPG">
+ <Directory Id="dirEF4D3E0A6DFFD685C7634E46091895D9"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <ComponentGroup Id="CMP_GnuPG">
+ <Component Id="gpg_reg_cmp" Guid="7F122F29-DB6A-4DE5-9DD2-0DAF1A24A61F" Directory="dirEF4D3E0A6DFFD685C7634E46091895D9">
+ <RegistryValue Id="r_gpg4win_0" Root="HKMU" Key="Software\GnuPG" Name="Install Directory" Action="write"
+ Type="string" Value="[DIR_GnuPG]" KeyPath="yes"/>
+ </Component>
+ <Component Id="gpg_env_cmp" Guid="27C32EC9-A1D3-44E1-B2F4-4B28DE1D49CB" Directory="dirEF4D3E0A6DFFD685C7634E46091895D9" KeyPath="yes">
+ <Environment Id="env_path" Name="PATH" Action="set" System="yes" Part="last" Value="[DIR_GnuPG]bin"/>
+ </Component>
+ <Component Id="cmp066CEAEFCC5CBE9211D9560CDD8A928D" Directory="dirEF4D3E0A6DFFD685C7634E46091895D9" Guid="001FC107-D3D7-455B-BE11-B95F6B4589F7">
+ <File Id="fil4FE0B52B2DB214DE5A85EE13B4D94708" KeyPath="yes" Source="$(var.BuildDir)\README.txt"/>
+ </Component>
+ <Component Id="cmp61470F19F532AFC30F74AE2799652CD5" Directory="dirEF4D3E0A6DFFD685C7634E46091895D9" Guid="1877EDF3-23B6-4A42-A8C7-9AB19D1B63D4">
+ <File Id="fil83721933C9B66170CE8F86C39E540277" KeyPath="yes" Source="$(var.BuildDir)\VERSION"/>
+ </Component>
+ <Component Id="cmpA047B2C8287DF1A20F8977FC5862B2F1" Directory="dirAA72FFDDFA224FB221D53750596B0142" Guid="A67CDD27-50B5-4BD2-9BFE-E460402EF46F">
+ <File Id="filEE6B373B4AA5B761B6A9F70711499CC1" KeyPath="yes" Source="$(var.SourceDir)\bin\dirmngr.exe"/>
+ </Component>
+ <Component Id="cmp7B127BD0DBE7CC36F6D0F9CFCE7FCA25" Directory="dirAA72FFDDFA224FB221D53750596B0142" Guid="39806F99-5DC9-48C3-90A0-12B634877C03">
+ <File Id="fil3F415158125B773933CC11545A216DE1" KeyPath="yes" Source="$(var.SourceDir)\libexec\dirmngr_ldap.exe"/>
+ </Component>
+ <Component Id="cmp3B8F4C481B336EF2822290BB0E9C9B5C" Directory="dirAA72FFDDFA224FB221D53750596B0142" Guid="E211E222-E13B-4015-9103-D99E955E5CBC">
+ <File Id="fil4F17D9143148344A04FF0BDD3A3BCCAE" KeyPath="yes" Source="$(var.SourceDir)\bin\gpg-agent.exe"/>
+ </Component>
+ <Component Id="cmp74961776CCC7B203F500FE261DC12F92" Directory="dirAA72FFDDFA224FB221D53750596B0142" Guid="FBA2569C-554D-4C06-88FC-0FD6541B5B4B">
+ <File Id="filB82A767EB9971018C006215A9FDE77EF" KeyPath="yes" Source="$(var.SourceDir)\bin\gpg-connect-agent.exe"/>
+ </Component>
+ <Component Id="cmp6C1FB70721B208E33DB24296B93AB93F" Directory="dirAA72FFDDFA224FB221D53750596B0142" Guid="FE29D2AA-3151-4421-B8C0-355F69F267A1">
+ <File Id="fil563D2C0464DCE7ECADE6E15C0FC65821" KeyPath="yes" Source="$(var.SourceDir)\libexec\gpg-preset-passphrase.exe"/>
+ </Component>
+ <Component Id="cmp6C1FB70721B208E33DB24296B93AB940" Directory="dirAA72FFDDFA224FB221D53750596B0142" Guid="FE29D2AA-3151-4421-B8C0-355F69F267A2">
+ <File Id="fil563D2C0464DCE7ECADE6E15C0FC65822" KeyPath="yes" Source="$(var.SourceDir)\libexec\gpg-check-pattern.exe"/>
+ </Component>
+ <Component Id="cmpB87CCF9DDCB6D9B36B92B0F9FA24FDC9" Directory="dirAA72FFDDFA224FB221D53750596B0142" Guid="9BB809F3-C09B-4A1E-B52D-B68CBE59AE3B">
+ <File Id="fil8A3F9D3F6E36120B183DDF4981D84C1B" KeyPath="yes" Source="$(var.SourceDir)\libexec\gpg-wks-client.exe"/>
+ </Component>
+ <Component Id="cmpEC270B071977C15E14328A04D3BBC3E8" Directory="dirAA72FFDDFA224FB221D53750596B0142" Guid="4BE9D7E7-6054-4D78-9292-4D58DBA81684">
+ <File Id="fil822B20E83B1A966BABB0574CE6611B02" KeyPath="yes" Source="$(var.SourceDir)\bin\gpg.exe"/>
+ </Component>
+ <Component Id="cmpAF601EA2DF4EFD403CBF65A0D5162912" Directory="dirAA72FFDDFA224FB221D53750596B0142" Guid="28A7D50E-4BC0-4A38-8420-52C5D1EB3F55">
+ <File Id="fil00B1F6AD370147577D6F7C998ACE6121" KeyPath="yes" Source="$(var.SourceDir)\bin\gpgconf.exe"/>
+ </Component>
+ <Component Id="cmpAF601EA2DF4EFD403CBF65A0D5162922" Directory="dirAA72FFDDFA224FB221D53750596B0142" Guid="EEF227D9-1FA3-4A96-AF86-12D1FDC12925">
+ <File Id="fil00B1F6AD370147577D6F7C998ACE6122" KeyPath="yes" Source="$(var.SourceDir)\bin\gpgconf-w32.exe"/>
+ </Component>
+ <Component Id="cmp3BA8A06E4085F542FDAA78BAFB507AD4" Directory="dirAA72FFDDFA224FB221D53750596B0142" Guid="E026569F-F37A-49FC-A529-68BDE3097218">
+ <File Id="fil1A596ECA8DC19F8EC626168033269CFE" KeyPath="yes" Source="$(var.SourceDir)\libexec\gpgme-w32spawn.exe"/>
+ </Component>
+ <Component Id="cmp28685CE9EF72251E2DB49488E4F253A0" Directory="dirAA72FFDDFA224FB221D53750596B0142" Guid="BC5A0A60-3E5C-4FDD-BFEC-EA0C3F370958">
+ <File Id="fil3632B0ED7374F4D2C34F884D0AB1CD55" KeyPath="yes" Source="$(var.SourceDir)\bin\gpgsm.exe"/>
+ </Component>
+ <Component Id="cmp54C435FEA8B2269F880E08CA5A5E6958" Directory="dirAA72FFDDFA224FB221D53750596B0142" Guid="5221235C-B773-4FB1-8DF1-6DA0F2CB509F">
+ <File Id="fil980DF38F855EAF59B36B0E59629174C6" KeyPath="yes" Source="$(var.SourceDir)\bin\gpgtar.exe"/>
+ </Component>
+ <Component Id="cmp2D1FC2D5A2C9B057FC22A0EBE475D6C2" Directory="dirAA72FFDDFA224FB221D53750596B0142" Guid="AF6741CB-C010-436E-BD56-B622EEED11D9">
+ <File Id="fil8403D82C4985B5B7EAF7365C15C2A799" KeyPath="yes" Source="$(var.SourceDir)\bin\gpgv.exe"/>
+ </Component>
+ <Component Id="cmpF92C3483916C55841364708FCE4E1773" Directory="dirAA72FFDDFA224FB221D53750596B0142" Guid="A8AEC3EA-1634-43C1-B47B-1A87BC39CF6B">
+ <File Id="filEE96FA35D6EEEBB2244C7F37E619364D" KeyPath="yes" Source="$(var.SourceDir)\bin\libassuan-0.dll"/>
+ </Component>
+ <Component Id="cmp387993E51EFE71AAD3DB75D48EF2C869" Directory="dirAA72FFDDFA224FB221D53750596B0142" Guid="B40F4166-2B27-4F9C-A6C5-9788042EE134">
+ <File Id="filEE39C3CE2166E1496C1618124EDBBB7E" KeyPath="yes" Source="$(var.SourceDir)\bin\libgcrypt-20.dll"/>
+ </Component>
+ <Component Id="cmpA55348E1B63D2B8001A86EBE5A88B479" Directory="dirAA72FFDDFA224FB221D53750596B0142" Guid="475D7E3F-8FA7-4B68-801C-083210A63B03">
+ <File Id="filEF34E24421329153F11FC15FBA8812A0" KeyPath="yes" Source="$(var.SourceDir)\bin\libgpg-error-0.dll"/>
+ </Component>
+ <Component Id="cmpDBDFA95FDDD0A86801D39E55BF3BC868" Directory="dirAA72FFDDFA224FB221D53750596B0142" Guid="5BE73ECB-4F28-4320-9ED6-1ECC2536E547">
+ <File Id="fil6AC228365277B587545F74B1089D5476" KeyPath="yes" Source="$(var.SourceDir)\bin\libgpgme-11.dll"/>
+ </Component>
+ <Component Id="cmp9304510805DD3179141F4262F000041B" Directory="dirAA72FFDDFA224FB221D53750596B0142" Guid="A824D70D-80C0-45E6-8FE8-A3B316384173">
+ <File Id="filC065951849A7371A734CB3174EF3FE0E" KeyPath="yes" Source="$(var.SourceDir)\bin\libksba-8.dll"/>
+ </Component>
+ <Component Id="cmp57527A666119B7A83597EA85962DEEFD" Directory="dirAA72FFDDFA224FB221D53750596B0142" Guid="8A712561-DAD0-48C8-8BED-7035BACFFF7C">
+ <File Id="filF3D2E6F605C5B15E24519F7F015480CC" KeyPath="yes" Source="$(var.SourceDir)\bin\libnpth-0.dll"/>
+ </Component>
+ <Component Id="cmpC056F063A80E93157FDD8E5EFB2CE016" Directory="dirAA72FFDDFA224FB221D53750596B0142" Guid="20439DF2-C028-43DD-9BC1-482FDE51C8C5">
+ <File Id="filF97663792C6DE115203B57642F12933C" KeyPath="yes" Source="$(var.SourceDir)\bin\libsqlite3-0.dll"/>
+ </Component>
+ <Component Id="cmp1EA054F1DCA27F5E05A6BB12C0FD5037" Directory="dirAA72FFDDFA224FB221D53750596B0142" Guid="C4BB5B91-A126-4E9E-9E59-194CB722E8A5">
+ <File Id="fil52E5309B19823ED3214CA9CA0F5E434D" KeyPath="yes" Source="$(var.SourceDir)\bin\pinentry-w32.exe" Name="pinentry-basic.exe"/>
+ </Component>
+ <Component Id="cmpAA05573F0D76C9310DCD01BFB4DB4305" Directory="dirAA72FFDDFA224FB221D53750596B0142" Guid="66C19BF2-D4FA-4634-9ED1-1A00F683A600">
+ <File Id="fil9E22630F67B9B40257D95BADF833F086" KeyPath="yes" Source="$(var.SourceDir)\libexec\scdaemon.exe"/>
+ </Component>
+ <Component Id="cmp7C407BC67635AF8AC77E3A5834574ABB" Directory="dirAA72FFDDFA224FB221D53750596B0142" Guid="409840AF-C584-4F80-BFDA-F18E011EE7BD">
+ <File Id="filA7AF69726FFAE45C70D1433D00CB88FC" KeyPath="yes" Source="$(var.SourceDir)\bin\zlib1.dll"/>
+ </Component>
+ <Component Id="cmp65E1A11E56D561E0DAB42C9A35916855" Directory="dir39F5678CDEA54A3E48058808B3D68E81" Guid="40E7AA38-7E94-4F4D-87B2-3816ADB0C42E">
+ <File Id="fil5B2ABA47FA067CDCB130F32840CFC387" KeyPath="yes" Source="$(var.SourceDir)\include\assuan.h"/>
+ </Component>
+ <Component Id="cmp3FE689F1A58AD9B69436C579C9259821" Directory="dir39F5678CDEA54A3E48058808B3D68E81" Guid="A426A94C-9A5B-498D-8409-DD08822C388B">
+ <File Id="fil387A3FD45F5E34C55EFF0DCD23F22208" KeyPath="yes" Source="$(var.SourceDir)\include\gcrypt.h"/>
+ </Component>
+ <Component Id="cmp60C98038298D866C96CD9E8B567D506E" Directory="dir39F5678CDEA54A3E48058808B3D68E81" Guid="E9EAFCE0-373A-4F8F-8804-9A478A8B3F46">
+ <File Id="fil0CA9A6FD42409FBE4DE71D8307617803" KeyPath="yes" Source="$(var.SourceDir)\include\gpg-error.h"/>
+ </Component>
+ <Component Id="cmp6DFA25F5C06C7D4378B57B4972B9ABF9" Directory="dir39F5678CDEA54A3E48058808B3D68E81" Guid="3A0D85D2-F3FA-46FC-84A3-DB5EC1E5EFFE">
+ <File Id="fil12216064300F3BD74F304FB7BBF82DF8" KeyPath="yes" Source="$(var.SourceDir)\include\gpgme.h"/>
+ </Component>
+ <Component Id="cmp24395F851942E67A35947276D2E7898E" Directory="dir39F5678CDEA54A3E48058808B3D68E81" Guid="3B75734A-329A-4ECA-BD49-6118D2AC1192">
+ <File Id="filA775AF0DD0F9ED50A0D55FF9CDE33975" KeyPath="yes" Source="$(var.SourceDir)\include\ksba.h"/>
+ </Component>
+ <Component Id="cmpA1D8400F87F838D27D13A63CA2580834" Directory="dir39F5678CDEA54A3E48058808B3D68E81" Guid="C42872EF-5741-47F2-A5BD-68B73496ED61">
+ <File Id="fil8BBD19F8D3F29F086038916A0D759B98" KeyPath="yes" Source="$(var.SourceDir)\include\npth.h"/>
+ </Component>
+ <Component Id="cmp7559C87436CE56F0C09DF9E12FE7F743" Directory="dir6694D0A4AAD84EF827096DD86D1B4FA2" Guid="85A4893D-6264-43B9-A43D-0B56F908DB7C">
+ <File Id="filB5A2BAF9AF20045FB9FB5B6DE48D00DF" KeyPath="yes" Source="$(var.SourceDir)\lib\libassuan.dll.a" Name="libassuan.imp"/>
+ </Component>
+ <Component Id="cmp902C045469438D8239D32F4D15D4DE06" Directory="dir6694D0A4AAD84EF827096DD86D1B4FA2" Guid="C3427945-C116-4359-BD23-7B158E21B641">
+ <File Id="filB9244BC5F732BC08D6E9442A1ADBE51A" KeyPath="yes" Source="$(var.SourceDir)\lib\libgcrypt.dll.a" Name="libgcrypt.imp"/>
+ </Component>
+ <Component Id="cmpF41B20B2A8CAD3CBA8917622CABACA0D" Directory="dir6694D0A4AAD84EF827096DD86D1B4FA2" Guid="591391E9-D3DD-45F2-A038-14D1B8542778">
+ <File Id="filA6EB6699DCA86B1FBE961D53E2E24440" KeyPath="yes" Source="$(var.SourceDir)\lib\libgpg-error.dll.a" Name="libgpg-error.imp"/>
+ </Component>
+ <Component Id="cmp51A12EB5E7192912DCC1637F9417A39E" Directory="dir6694D0A4AAD84EF827096DD86D1B4FA2" Guid="E15FE761-BF44-4130-B354-EBE8F6A0F5D8">
+ <File Id="fil710653D37212C7F55D9AF2FCF7189BA7" KeyPath="yes" Source="$(var.SourceDir)\lib\libgpgme.dll.a" Name="libgpgme.imp"/>
+ </Component>
+ <Component Id="cmp30558FA612DCFC9CE144A01F3B4BC87A" Directory="dir6694D0A4AAD84EF827096DD86D1B4FA2" Guid="CBC1DADD-384C-4C28-B535-DCADD5C5D958">
+ <File Id="fil972A246C4D46A8ECD31DD7C6CC4D5B58" KeyPath="yes" Source="$(var.SourceDir)\lib\libksba.dll.a" Name="libksba.imp"/>
+ </Component>
+ <Component Id="cmpB5509E83C14EE3080355A3EAF09D1C8D" Directory="dir6694D0A4AAD84EF827096DD86D1B4FA2" Guid="FEC81836-944E-4613-A498-E620B981EB04">
+ <File Id="fil0615847C26E386E0B892124531F2ABBC" KeyPath="yes" Source="$(var.SourceDir)\lib\libnpth.dll.a" Name="libnpth.imp"/>
+ </Component>
+ <Component Id="cmp909B0412FDFCFD5092D93932AF982A72" Directory="dirC2E6BF1CC65903EA3A1AD83349586122" Guid="D30E7138-0D1C-48F4-8F53-E1EC6333F610">
+ <File Id="fil322067E40CE41C36574A7CC520D75876" KeyPath="yes" Source="$(var.SourceDir)\share\doc\gnupg\examples\VS-NfD.prf" Name="VS-NfD.prf"/>
+ </Component>
+ <Component Id="cmp909B0412FDFCFD5092D93932AF982A73" Directory="dirC2E6BF1CC65903EA3A1AD83349586122" Guid="D30E7138-0D1C-48F4-8F53-E1EC6333F611">
+ <File Id="fil322067E40CE41C36574A7CC520D75877" KeyPath="yes" Source="$(var.SourceDir)\share\doc\gnupg\examples\Automatic.prf" Name="Automatic.prf"/>
+ </Component>
+ <Component Id="cmp909B0412FDFCFD5092D93932AF982A74" Directory="dirC2E6BF1CC65903EA3A1AD83349586122" Guid="D30E7138-0D1C-48F4-8F53-E1EC6333F612">
+ <File Id="fil322067E40CE41C36574A7CC520D75878" KeyPath="yes" Source="$(var.SourceDir)\share\doc\gnupg\examples\pwpattern.list" Name="pwpattern.list"/>
+ </Component>
+ <Component Id="cmp59D652F2B6BBFD90563BF58D6CE6BE7B" Directory="dirF4B1502A83344E3C92AB58989653B465" Guid="1C51D4AF-B308-40A3-B8D8-CEDA5AB2A383">
+ <File Id="filCB1BD20C87EE88A17D7502E26268DA65" KeyPath="yes" Source="$(var.SourceDir)\share\gnupg\distsigkey.gpg"/>
+ </Component>
+ <Component Id="cmpB3614EC83F6377F9DB10BC5C5A78AA47" Directory="dirF4B1502A83344E3C92AB58989653B465" Guid="BACEBFAD-8B9A-4A40-9402-42B3D8DDFDE3">
+ <File Id="fil0E0180B133150E83BBEDA55A98F3EF53" KeyPath="yes" Source="$(var.SourceDir)\share\gnupg\sks-keyservers.netCA.pem"/>
+ </Component>
+ <Component Id="cmp546709111F313BA25B92228092A64615" Directory="dirC8F3DBB83340CAA01AAA7A2A483F2C9D" Guid="03FC08BD-E454-4F57-BC28-226C3784F391">
+ <File Id="filB3D8051BA1609D83EEA2EE794DF525CD" KeyPath="yes" Source="$(var.SourceDir)\share\locale\ca\LC_MESSAGES\gnupg2.mo"/>
+ </Component>
+ <Component Id="cmp0B01FD63A8971642DB9EC8902AE64467" Directory="dir141CB5729CD460F84352D7BFBCF4386E" Guid="B67AEAE8-891E-4D08-AB1B-F2E735C0D0BB">
+ <File Id="fil811398B2F4B9063CE8B46D51462204E6" KeyPath="yes" Source="$(var.SourceDir)\share\locale\cs\LC_MESSAGES\gnupg2.mo"/>
+ </Component>
+ <Component Id="cmpFEA38F2E83B626E2DB8C64EBFDD5F87F" Directory="dir141CB5729CD460F84352D7BFBCF4386E" Guid="F8ED9E6E-C30F-47BB-B17F-8A2516573271">
+ <File Id="filFABAC9AECF9EBB85C304D09AF59AF2A9" KeyPath="yes" Source="$(var.SourceDir)\share\locale\cs\LC_MESSAGES\libgpg-error.mo"/>
+ </Component>
+ <Component Id="cmpA1D261AF329A02C03DA43105A4870E9B" Directory="dir219EE67997F4683B56B7B40BEE76BECA" Guid="827F592D-1E65-47FF-8BFB-DC95482355AB">
+ <File Id="fil3E0196FD51F525407A0404DDD6EF9950" KeyPath="yes" Source="$(var.SourceDir)\share\locale\da\LC_MESSAGES\gnupg2.mo"/>
+ </Component>
+ <Component Id="cmp9524F383B8CA244F4358210CA093CE53" Directory="dir219EE67997F4683B56B7B40BEE76BECA" Guid="9B1B3B43-FF0D-4018-B80D-2C6DFE2A8BC6">
+ <File Id="filB1426F1BBEAFE0D062117DE8B5F5EC60" KeyPath="yes" Source="$(var.SourceDir)\share\locale\da\LC_MESSAGES\libgpg-error.mo"/>
+ </Component>
+ <Component Id="cmp453C1B1DFFA1D3F5F77C20ABED4FB501" Directory="dirD54A193F36E233547636F2C139EE1FF4" Guid="9ED93287-D2BD-481E-A924-25420319B3A3">
+ <File Id="filBED78A4CC27F6AB64486763E8575A682" KeyPath="yes" Source="$(var.SourceDir)\share\locale\de\LC_MESSAGES\gnupg2.mo"/>
+ </Component>
+ <Component Id="cmp3579BBDFDECAD8E12F0DCBB423B27BDE" Directory="dirD54A193F36E233547636F2C139EE1FF4" Guid="9AD79F61-111B-4365-ABC6-9A0D509016D5">
+ <File Id="filA78CD7B4A920A5F00F5A35EE4047DAFD" KeyPath="yes" Source="$(var.SourceDir)\share\locale\de\LC_MESSAGES\libgpg-error.mo"/>
+ </Component>
+ <Component Id="cmpBD95AF2DBA6797BABBD361E77D660844" Directory="dir413F01097C66B82C5F6BEC66B78FF01A" Guid="AF0381F1-27A6-4ECF-A04E-A6194470CF4A">
+ <File Id="fil5051D9DDD25D14F2072FE671D9BE4A88" KeyPath="yes" Source="$(var.SourceDir)\share\locale\el\LC_MESSAGES\gnupg2.mo"/>
+ </Component>
+ <Component Id="cmpB2EE1A46945B665B245BDEAC20C07C59" Directory="dirD30F6EC4D19878BC1D4AD48D1D7B5B87" Guid="98939176-31EF-46B1-A1E8-04C741EB2E42">
+ <File Id="filF903A2E0B4F19FAB403ACB58C8A36F46" KeyPath="yes" Source="$(var.SourceDir)\share\locale\en@boldquot\LC_MESSAGES\gnupg2.mo"/>
+ </Component>
+ <Component Id="cmp5E48E37FE117181CACBE2E2F8317B299" Directory="dir3BBFD6070062CD151BFE332233C479AC" Guid="F18A4CD6-5C64-43E4-961C-BF2D1520D38C">
+ <File Id="filEF5659796AD116AFB2058F362B56F1CB" KeyPath="yes" Source="$(var.SourceDir)\share\locale\en@quot\LC_MESSAGES\gnupg2.mo"/>
+ </Component>
+ <Component Id="cmpAE36863359F64D5B7D0083B6F3072B2B" Directory="dirC78504765289243B95E8A367FB5AE790" Guid="FF25CA11-581A-4AC3-AA15-B09B7C70C57F">
+ <File Id="filF2B163C929DD753B4A7AE927F75B2AAA" KeyPath="yes" Source="$(var.SourceDir)\share\locale\eo\LC_MESSAGES\gnupg2.mo"/>
+ </Component>
+ <Component Id="cmp58E07898FC1EABA8C96B5099DE73CE56" Directory="dirC78504765289243B95E8A367FB5AE790" Guid="25D5E4B1-0585-4011-9F43-2E8027080AE5">
+ <File Id="fil4C012DF8082F3BB8103B19C99E305785" KeyPath="yes" Source="$(var.SourceDir)\share\locale\eo\LC_MESSAGES\libgpg-error.mo"/>
+ </Component>
+ <Component Id="cmpCB3F1506E7156F718DB761C6A14685FE" Directory="dir5AD787E17B0242315401083D50AE9954" Guid="96A724A3-2DF0-436A-B408-9DD2CBCEF57C">
+ <File Id="fil0CE86D5A00D6BE8DB27459FD15D7CC17" KeyPath="yes" Source="$(var.SourceDir)\share\locale\es\LC_MESSAGES\gnupg2.mo"/>
+ </Component>
+ <Component Id="cmpB54C2AADB54A2E3EC76B0F7E64E5D515" Directory="dir5AD787E17B0242315401083D50AE9954" Guid="12C99424-2F85-466B-B5D0-DCB530EA805F">
+ <File Id="fil79F29C03578FB1881FB72BD77C0DE911" KeyPath="yes" Source="$(var.SourceDir)\share\locale\es\LC_MESSAGES\libgpg-error.mo"/>
+ </Component>
+ <Component Id="cmp395184651FCD4192805C52F6CCF8F857" Directory="dir03482DEF59807192455649DD930D56F9" Guid="F2FECA4A-D7B4-455B-B46A-301A59F6537F">
+ <File Id="filDDE34C283CF00D2E00C773BBAE5E7790" KeyPath="yes" Source="$(var.SourceDir)\share\locale\et\LC_MESSAGES\gnupg2.mo"/>
+ </Component>
+ <Component Id="cmp41602D9FC6BEA689FC0055C519834BC9" Directory="dir7258CFD55BE72CAA15463E0C4367D933" Guid="6850B5E4-BB31-458D-93EA-F75F11F5D3DF">
+ <File Id="filE58B5D56A326026B4F8B14A4D1EBF228" KeyPath="yes" Source="$(var.SourceDir)\share\locale\fi\LC_MESSAGES\gnupg2.mo"/>
+ </Component>
+ <Component Id="cmp3B741FA3C43918B7E61B1385BA857CC5" Directory="dir80EBECAD50382115BFB3623AB7C5CABB" Guid="492A7496-CB3E-4BFE-B62B-EF29174477D6">
+ <File Id="filBCCEAD5A71A6CB99E838F38D14FD6720" KeyPath="yes" Source="$(var.SourceDir)\share\locale\fr\LC_MESSAGES\gnupg2.mo"/>
+ </Component>
+ <Component Id="cmp04E88B936153B4524F20916881D87C54" Directory="dir80EBECAD50382115BFB3623AB7C5CABB" Guid="007B9CA6-2493-482E-8586-7E3B23083E55">
+ <File Id="fil36741F053CE48197E6844A8DBCD9EE5A" KeyPath="yes" Source="$(var.SourceDir)\share\locale\fr\LC_MESSAGES\libgpg-error.mo"/>
+ </Component>
+ <Component Id="cmpCE4A03AF9717BC3514250310A93AC516" Directory="dirB413C8D9BB72BA2ACF4475C5ED540B29" Guid="7901B164-D5C2-4A5B-958E-83CE87F9EBF3">
+ <File Id="fil392B26641E4A84053B893C71C9A8B3DA" KeyPath="yes" Source="$(var.SourceDir)\share\locale\gl\LC_MESSAGES\gnupg2.mo"/>
+ </Component>
+ <Component Id="cmp40EABC79B84039E2A85BCCD27D33217C" Directory="dirAC75323D1E05EB729A23BF8CC19F6CE1" Guid="9A170067-0AAD-48FE-933D-BFA4BB5737DF">
+ <File Id="fil23841F8CEE8D77C8292145F90B4127A0" KeyPath="yes" Source="$(var.SourceDir)\share\locale\hu\LC_MESSAGES\gnupg2.mo"/>
+ </Component>
+ <Component Id="cmp69E8684ED1EE085A450C3DB3E4FEC1DF" Directory="dirAC75323D1E05EB729A23BF8CC19F6CE1" Guid="27160F4D-FCE5-4286-8CE6-92DA7902121D">
+ <File Id="fil015280FE4A4A4A03BE986ED8A41496D8" KeyPath="yes" Source="$(var.SourceDir)\share\locale\hu\LC_MESSAGES\libgpg-error.mo"/>
+ </Component>
+ <Component Id="cmp4C11B77F811ADD2D41DB2E491925688B" Directory="dirB53C46AD0FE0B9E9F4ED6E068BDE8EBD" Guid="9B8A4557-FFF7-4FB5-86C2-230514DC57FE">
+ <File Id="filDF9BF4DA4EFC2138E35BF0886EBC08C0" KeyPath="yes" Source="$(var.SourceDir)\share\locale\id\LC_MESSAGES\gnupg2.mo"/>
+ </Component>
+ <Component Id="cmpC1D2F0D1498E07D5394E670945473CDD" Directory="dir6947822B32929E5EE9E2F5BB37E33C99" Guid="9F0EA006-3C9E-4AD7-8CF1-8BC5143B5BAD">
+ <File Id="fil778D477BBD9EB473266BA40BFFC806E2" KeyPath="yes" Source="$(var.SourceDir)\share\locale\it\LC_MESSAGES\gnupg2.mo"/>
+ </Component>
+ <Component Id="cmp7E5A87AA208D9D1BA7B7EC2AB884BB61" Directory="dir6947822B32929E5EE9E2F5BB37E33C99" Guid="0D1565C6-B32A-4997-928B-36E1DC604886">
+ <File Id="fil3654A2F71B3000371FF3A607EB058394" KeyPath="yes" Source="$(var.SourceDir)\share\locale\it\LC_MESSAGES\libgpg-error.mo"/>
+ </Component>
+ <Component Id="cmp7705EC95E7BA4142FFF90BC6A10268A6" Directory="dir0F00EB134F84CCFA6585F3AA2B092ED5" Guid="76DC6A7A-6C55-4738-8C6D-81B5EEF00680">
+ <File Id="filB514C4C69CD922C01058D9DA912A2950" KeyPath="yes" Source="$(var.SourceDir)\share\locale\ja\LC_MESSAGES\gnupg2.mo"/>
+ </Component>
+ <Component Id="cmp5BA4E78E60402DE65E67F674320470A6" Directory="dir0F00EB134F84CCFA6585F3AA2B092ED5" Guid="83978CB6-0C1C-45BB-A394-8FFE7257C1D6">
+ <File Id="filFD7D0D79172CE8755D21593034699CF8" KeyPath="yes" Source="$(var.SourceDir)\share\locale\ja\LC_MESSAGES\libgpg-error.mo"/>
+ </Component>
+ <Component Id="cmp5A2891458CB34BEA5C6EACC1B3C4B881" Directory="dir7D7752BA12ED1126D964503F2919F42D" Guid="C871047C-759E-443D-A6CE-7AC5CED25592">
+ <File Id="filCC4AD270C5FBA0E3C96A919250019018" KeyPath="yes" Source="$(var.SourceDir)\share\locale\nb\LC_MESSAGES\gnupg2.mo"/>
+ </Component>
+ <Component Id="cmpE127926655EFAB9AA602584CEB9E9D1B" Directory="dirA9625026AF72FEFB1FAD1F94501AEF83" Guid="5A4B3DE7-94E2-4265-9BA0-2AC7AFF409BA">
+ <File Id="filEF9D2291E34CF54043445C689D49DD8B" KeyPath="yes" Source="$(var.SourceDir)\share\locale\nl\LC_MESSAGES\libgpg-error.mo"/>
+ </Component>
+ <Component Id="cmp0D8D30445E1BB80DF1DCC38F6C8C4FB1" Directory="dir3AF4D2B9487DCDDC8A57062D4C6901EC" Guid="A85DF60D-4ABD-4649-AF8C-4F8CEC001A23">
+ <File Id="filC14FDE5CC6F0A330FB85D37C24BAB178" KeyPath="yes" Source="$(var.SourceDir)\share\locale\pl\LC_MESSAGES\gnupg2.mo"/>
+ </Component>
+ <Component Id="cmpF7830AE39E55351DBB29A3D8641DDCF7" Directory="dir3AF4D2B9487DCDDC8A57062D4C6901EC" Guid="D7819086-08A0-4DFE-ACBF-806D4EF13B8F">
+ <File Id="fil14BA82E453CCF0FF276383023C69FFC6" KeyPath="yes" Source="$(var.SourceDir)\share\locale\pl\LC_MESSAGES\libgpg-error.mo"/>
+ </Component>
+ <Component Id="cmpE4AF04300A648AF46772477B4BCD50A9" Directory="dirD80A015C242F188C2E1454B5A4D2010E" Guid="B2AC4417-31C5-486F-B916-414298C4C311">
+ <File Id="filD0B5C04E092E0EE30E716E50ECAC72EF" KeyPath="yes" Source="$(var.SourceDir)\share\locale\pt\LC_MESSAGES\gnupg2.mo"/>
+ </Component>
+ <Component Id="cmp533CEE1F897C777253CA0F688CEAD4B3" Directory="dirD80A015C242F188C2E1454B5A4D2010E" Guid="DB7493C1-9247-4F58-A4F4-C75464E1295C">
+ <File Id="filB72FA9BA953EB2E2D4985179FFACC6DC" KeyPath="yes" Source="$(var.SourceDir)\share\locale\pt\LC_MESSAGES\libgpg-error.mo"/>
+ </Component>
+ <Component Id="cmp4A2F6505F6FF8C55E6D589F3F661F983" Directory="dir8E149DF65F3B10EA3AD2436850623AEF" Guid="1F1258EA-A31F-4220-9E11-9968C385DEA5">
+ <File Id="filBEED76EC0BF8B09FD32ABA8EE7A3B1BA" KeyPath="yes" Source="$(var.SourceDir)\share\locale\ro\LC_MESSAGES\gnupg2.mo"/>
+ </Component>
+ <Component Id="cmp35F0B761EF52F231FDCF18F90101C243" Directory="dir8E149DF65F3B10EA3AD2436850623AEF" Guid="BC99F8F6-2C26-4B0F-8295-3227D982A601">
+ <File Id="filB8B8C8B4336151105E454757B13CCEAD" KeyPath="yes" Source="$(var.SourceDir)\share\locale\ro\LC_MESSAGES\libgpg-error.mo"/>
+ </Component>
+ <Component Id="cmp139163DE87471A416369EF26F8CD95DE" Directory="dirEDC8B39F817DC0C264AF78A4861B98A5" Guid="A7CA5650-72CD-418F-8ABD-5C703422BF6C">
+ <File Id="fil476570A41ADB583A8EBE0E899D741C1D" KeyPath="yes" Source="$(var.SourceDir)\share\locale\ru\LC_MESSAGES\gnupg2.mo"/>
+ </Component>
+ <Component Id="cmpB8918417A4AE4B54CC8327692BF86794" Directory="dirEDC8B39F817DC0C264AF78A4861B98A5" Guid="8E45AA5B-8D64-4E47-9899-D9D712D7A9B4">
+ <File Id="fil22C7ED660A4A562E2E805A54247A3A8D" KeyPath="yes" Source="$(var.SourceDir)\share\locale\ru\LC_MESSAGES\libgpg-error.mo"/>
+ </Component>
+ <Component Id="cmpF8B71E49E683C025CD601C29B85D4C1A" Directory="dir2E9ED3D3A42B560362582A080F2D8EB7" Guid="419A6E51-364D-49E5-9353-7E37EC7A0126">
+ <File Id="fil3CD6A360EBA3B678A69601849455308B" KeyPath="yes" Source="$(var.SourceDir)\share\locale\sk\LC_MESSAGES\gnupg2.mo"/>
+ </Component>
+ <Component Id="cmp01CE203B24E5F0B3D3426CFCD6091596" Directory="dirF73F41B3426675E91A925612314E760D" Guid="097D3693-A8B3-4DFC-B0FF-D14610DB0200">
+ <File Id="fil757033D78BBF57A8700AA388B496D4B1" KeyPath="yes" Source="$(var.SourceDir)\share\locale\sr\LC_MESSAGES\libgpg-error.mo"/>
+ </Component>
+ <Component Id="cmp13FA2CA1F2386382384F0BFE8BD4ADB4" Directory="dirCAB2D2CE70E9126EBD48DDFEE60E7781" Guid="F47BC1D4-EDD7-4376-9F09-45150463BE8D">
+ <File Id="fil2240B649D5A4A6EFDE64D63943510803" KeyPath="yes" Source="$(var.SourceDir)\share\locale\sv\LC_MESSAGES\gnupg2.mo"/>
+ </Component>
+ <Component Id="cmpE5E3020E114EB5CF185D0172FF66796D" Directory="dirCAB2D2CE70E9126EBD48DDFEE60E7781" Guid="EB6C57F3-3A35-4746-B502-B871B093DD70">
+ <File Id="filCA62F18DC52CD983C794CBB0782841F6" KeyPath="yes" Source="$(var.SourceDir)\share\locale\sv\LC_MESSAGES\libgpg-error.mo"/>
+ </Component>
+ <Component Id="cmp48640C4F90991656CDAB5867F14089C5" Directory="dir5D2CF7C0932EADDFECCD159795AC414C" Guid="ED13C94B-16F6-41EC-B384-A4789FFDDF1C">
+ <File Id="fil9E4D4968B6514B941ED29456945457FB" KeyPath="yes" Source="$(var.SourceDir)\share\locale\tr\LC_MESSAGES\gnupg2.mo"/>
+ </Component>
+ <Component Id="cmp4551AA101DFA1C1973F11346D4FE85D8" Directory="dir13556507D1D7C34DAAA5E416583DA3BA" Guid="B4D0F8D3-624B-4D70-A860-6780C98CAF3A">
+ <File Id="filABB395BD133D2ABF362DB6322EF3E6E0" KeyPath="yes" Source="$(var.SourceDir)\share\locale\uk\LC_MESSAGES\gnupg2.mo"/>
+ </Component>
+ <Component Id="cmpDC700475DBB14F58460607F4C6D7C808" Directory="dir13556507D1D7C34DAAA5E416583DA3BA" Guid="DFA12ED0-0DBB-44A3-828B-544E42848ECA">
+ <File Id="fil0A499A3437867D3591AADB00D373CFB6" KeyPath="yes" Source="$(var.SourceDir)\share\locale\uk\LC_MESSAGES\libgpg-error.mo"/>
+ </Component>
+ <Component Id="cmp56309B32C0E45B2040DB0FBF16C05D40" Directory="dir721ABBF14E4EE3A800878547BA5529B8" Guid="17A1D9DA-801B-4C23-B1AC-D405E9A7FB76">
+ <File Id="filCC31A85EF9124C55B9E4B83ED1190CBE" KeyPath="yes" Source="$(var.SourceDir)\share\locale\vi\LC_MESSAGES\libgpg-error.mo"/>
+ </Component>
+ <Component Id="cmp48AA79D88C3B058F88BAE0F89EC07964" Directory="dirB2160A461FB69C07887EEC237C628C3F" Guid="F7849778-675B-4E81-97F7-2C2BBC1A66C0">
+ <File Id="fil1B7A20D6971217F00EEF33F1CD815BF4" KeyPath="yes" Source="$(var.SourceDir)\share\locale\zh_CN\LC_MESSAGES\gnupg2.mo"/>
+ </Component>
+ <Component Id="cmpDAD1E61B19B57AA9F0C18F979E2DB953" Directory="dirB2160A461FB69C07887EEC237C628C3F" Guid="1149BDED-4DB9-4D71-B904-60A41D3DC002">
+ <File Id="fil98F23973F18C7612B4EF19D180934A13" KeyPath="yes" Source="$(var.SourceDir)\share\locale\zh_CN\LC_MESSAGES\libgpg-error.mo"/>
+ </Component>
+ <Component Id="cmp6DE01ED3D9CF376BAE71CEF2CFBE87FA" Directory="dirBA8895851647F6285902F09081099B1C" Guid="04956C7A-BD53-4D06-8E91-C546D978E945">
+ <File Id="fil404A4C6020D045EAB28BCFB83D054DDA" KeyPath="yes" Source="$(var.SourceDir)\share\locale\zh_TW\LC_MESSAGES\gnupg2.mo"/>
+ </Component>
+ <Component Id="cmp8AA8F263229FC31A4B134E9E3B5CBD2A" Directory="dirBA8895851647F6285902F09081099B1C" Guid="0677C519-752D-448D-8D23-05CBA7B384B4">
+ <File Id="filBF66E344620143485028A132A7065F2C" KeyPath="yes" Source="$(var.SourceDir)\share\locale\zh_TW\LC_MESSAGES\libgpg-error.mo"/>
+ </Component>
+ </ComponentGroup>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dir45F9BF0D9027944353D2097BEA229C4B">
+ <Directory Id="dir03482DEF59807192455649DD930D56F9" Name="LC_MESSAGES"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dir4F1B7A79DBDF2C05F29C779072E6C575">
+ <Directory Id="dir0388F8EB0714C4C03EEE51D81D96767B" Name="sv"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dir4F1B7A79DBDF2C05F29C779072E6C575">
+ <Directory Id="dir05D708F44AE366B2A1B3515757353BF8" Name="pt"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dir78781F0EC0F0500B48FDBEE640A12270">
+ <Directory Id="dir0F00EB134F84CCFA6585F3AA2B092ED5" Name="LC_MESSAGES"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dir91BE2823B1F0AFFD0216A44DE5D4EE94">
+ <Directory Id="dir13556507D1D7C34DAAA5E416583DA3BA" Name="LC_MESSAGES"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dirE46249598446819F7AA7C9A2914C6D83">
+ <Directory Id="dir141CB5729CD460F84352D7BFBCF4386E" Name="LC_MESSAGES"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dir4F1B7A79DBDF2C05F29C779072E6C575">
+ <Directory Id="dir17DA43D7EF00B3DBBFEE8ED3BE893755" Name="zh_TW"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dir4F1B7A79DBDF2C05F29C779072E6C575">
+ <Directory Id="dir1C070A4A8EAFE1AEDA2C3879FD9D478A" Name="pl"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dir4F1B7A79DBDF2C05F29C779072E6C575">
+ <Directory Id="dir1C59FE40E4A3D1C252E8DC21ED3FD35F" Name="sk"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dir4F1B7A79DBDF2C05F29C779072E6C575">
+ <Directory Id="dir1CE84C7F92B3B82920AFF2CB0BAD8C92" Name="fr"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dir4F1B7A79DBDF2C05F29C779072E6C575">
+ <Directory Id="dir1DDB41C9C53372E27617C37DE057F0A2" Name="en@boldquot"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dirFEC9F97E00E1DB82803BCC2C95BD967E">
+ <Directory Id="dir219EE67997F4683B56B7B40BEE76BECA" Name="LC_MESSAGES"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dir1C59FE40E4A3D1C252E8DC21ED3FD35F">
+ <Directory Id="dir2E9ED3D3A42B560362582A080F2D8EB7" Name="LC_MESSAGES"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dirEF4D3E0A6DFFD685C7634E46091895D9">
+ <Directory Id="dir39F5678CDEA54A3E48058808B3D68E81" Name="include"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dir1C070A4A8EAFE1AEDA2C3879FD9D478A">
+ <Directory Id="dir3AF4D2B9487DCDDC8A57062D4C6901EC" Name="LC_MESSAGES"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dirACF0C8FF72868611C9823E3AF7C96E11">
+ <Directory Id="dir3BBFD6070062CD151BFE332233C479AC" Name="LC_MESSAGES"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dir4F1B7A79DBDF2C05F29C779072E6C575">
+ <Directory Id="dir406CDA0C2AF347056FF1F29C50A512A2" Name="vi"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dirBB0EE79F9E6AB87660CAAC61EDDB7432">
+ <Directory Id="dir413F01097C66B82C5F6BEC66B78FF01A" Name="LC_MESSAGES"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dir4F1B7A79DBDF2C05F29C779072E6C575">
+ <Directory Id="dir45F9BF0D9027944353D2097BEA229C4B" Name="et"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dir4F1B7A79DBDF2C05F29C779072E6C575">
+ <Directory Id="dir49983B200CB1A1C893A5BC026452B90E" Name="ro"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dir7BFF80ABAF1D317F0C75F1491A11C917">
+ <Directory Id="dir4F1B7A79DBDF2C05F29C779072E6C575" Name="locale"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dir75C3ECEBFB2717BED8681E7513E6AD58">
+ <Directory Id="dir5AD787E17B0242315401083D50AE9954" Name="LC_MESSAGES"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dirBD37452189F56F813660FF9E60B6DA4F">
+ <Directory Id="dir5D2CF7C0932EADDFECCD159795AC414C" Name="LC_MESSAGES"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dirEF4D3E0A6DFFD685C7634E46091895D9">
+ <Directory Id="dir6694D0A4AAD84EF827096DD86D1B4FA2" Name="lib"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dir70DD220968FA035FF9A88BA8C6E72D41">
+ <Directory Id="dir6947822B32929E5EE9E2F5BB37E33C99" Name="LC_MESSAGES"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dir4F1B7A79DBDF2C05F29C779072E6C575">
+ <Directory Id="dir70DD220968FA035FF9A88BA8C6E72D41" Name="it"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dir406CDA0C2AF347056FF1F29C50A512A2">
+ <Directory Id="dir721ABBF14E4EE3A800878547BA5529B8" Name="LC_MESSAGES"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dirD00B86267339B6DD4ABBD3CE21ABF020">
+ <Directory Id="dir7258CFD55BE72CAA15463E0C4367D933" Name="LC_MESSAGES"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dir4F1B7A79DBDF2C05F29C779072E6C575">
+ <Directory Id="dir73F71F2B5EA5C0BEE7C1AC62BC1CDD00" Name="hu"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dir4F1B7A79DBDF2C05F29C779072E6C575">
+ <Directory Id="dir75C3ECEBFB2717BED8681E7513E6AD58" Name="es"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dir4F1B7A79DBDF2C05F29C779072E6C575">
+ <Directory Id="dir78781F0EC0F0500B48FDBEE640A12270" Name="ja"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dir4F1B7A79DBDF2C05F29C779072E6C575">
+ <Directory Id="dir7A5947AF5A504DECDE3201037F256CB1" Name="de"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dirEF4D3E0A6DFFD685C7634E46091895D9">
+ <Directory Id="dir7BFF80ABAF1D317F0C75F1491A11C917" Name="share"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dirD211F027155495F926B97F997DD06573">
+ <Directory Id="dir7D7752BA12ED1126D964503F2919F42D" Name="LC_MESSAGES"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dir1CE84C7F92B3B82920AFF2CB0BAD8C92">
+ <Directory Id="dir80EBECAD50382115BFB3623AB7C5CABB" Name="LC_MESSAGES"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dir4F1B7A79DBDF2C05F29C779072E6C575">
+ <Directory Id="dir837961AB354A543B79D765904301D522" Name="eo"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dir4F1B7A79DBDF2C05F29C779072E6C575">
+ <Directory Id="dir8D24EE6C11C3CBEC565C048AF1E690E8" Name="id"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dir49983B200CB1A1C893A5BC026452B90E">
+ <Directory Id="dir8E149DF65F3B10EA3AD2436850623AEF" Name="LC_MESSAGES"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dir4F1B7A79DBDF2C05F29C779072E6C575">
+ <Directory Id="dir91BE2823B1F0AFFD0216A44DE5D4EE94" Name="uk"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dirA58838A162DA815C458A68D5A3A53B58">
+ <Directory Id="dir926A54C6CC889938C4091ECCB93FB640" Name="gnupg"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dir7BFF80ABAF1D317F0C75F1491A11C917">
+ <Directory Id="dirA58838A162DA815C458A68D5A3A53B58" Name="doc"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dirE2D6A167979D9DAF78E0DC18293E05DD">
+ <Directory Id="dirA9625026AF72FEFB1FAD1F94501AEF83" Name="LC_MESSAGES"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dirEF4D3E0A6DFFD685C7634E46091895D9">
+ <Directory Id="dirAA72FFDDFA224FB221D53750596B0142" Name="bin"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dir73F71F2B5EA5C0BEE7C1AC62BC1CDD00">
+ <Directory Id="dirAC75323D1E05EB729A23BF8CC19F6CE1" Name="LC_MESSAGES"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dir4F1B7A79DBDF2C05F29C779072E6C575">
+ <Directory Id="dirACF0C8FF72868611C9823E3AF7C96E11" Name="en@quot"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dirCC1090D8BE2128FA3CA703FAD54F41A0">
+ <Directory Id="dirB2160A461FB69C07887EEC237C628C3F" Name="LC_MESSAGES"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dirE7E0782B19315880FE9BD84AF1682721">
+ <Directory Id="dirB413C8D9BB72BA2ACF4475C5ED540B29" Name="LC_MESSAGES"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dir8D24EE6C11C3CBEC565C048AF1E690E8">
+ <Directory Id="dirB53C46AD0FE0B9E9F4ED6E068BDE8EBD" Name="LC_MESSAGES"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dir17DA43D7EF00B3DBBFEE8ED3BE893755">
+ <Directory Id="dirBA8895851647F6285902F09081099B1C" Name="LC_MESSAGES"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dir4F1B7A79DBDF2C05F29C779072E6C575">
+ <Directory Id="dirBB0EE79F9E6AB87660CAAC61EDDB7432" Name="el"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dir4F1B7A79DBDF2C05F29C779072E6C575">
+ <Directory Id="dirBD37452189F56F813660FF9E60B6DA4F" Name="tr"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dir926A54C6CC889938C4091ECCB93FB640">
+ <Directory Id="dirC2E6BF1CC65903EA3A1AD83349586122" Name="examples"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dir837961AB354A543B79D765904301D522">
+ <Directory Id="dirC78504765289243B95E8A367FB5AE790" Name="LC_MESSAGES"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dirD39E83202D907BF20C7103C263E10E78">
+ <Directory Id="dirC8F3DBB83340CAA01AAA7A2A483F2C9D" Name="LC_MESSAGES"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dir0388F8EB0714C4C03EEE51D81D96767B">
+ <Directory Id="dirCAB2D2CE70E9126EBD48DDFEE60E7781" Name="LC_MESSAGES"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dir4F1B7A79DBDF2C05F29C779072E6C575">
+ <Directory Id="dirCC1090D8BE2128FA3CA703FAD54F41A0" Name="zh_CN"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dir4F1B7A79DBDF2C05F29C779072E6C575">
+ <Directory Id="dirD00B86267339B6DD4ABBD3CE21ABF020" Name="fi"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dir4F1B7A79DBDF2C05F29C779072E6C575">
+ <Directory Id="dirD14BA95A8404FE8F595737D4EB6D0ECC" Name="ru"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dir4F1B7A79DBDF2C05F29C779072E6C575">
+ <Directory Id="dirD211F027155495F926B97F997DD06573" Name="nb"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dir1DDB41C9C53372E27617C37DE057F0A2">
+ <Directory Id="dirD30F6EC4D19878BC1D4AD48D1D7B5B87" Name="LC_MESSAGES"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dir4F1B7A79DBDF2C05F29C779072E6C575">
+ <Directory Id="dirD39E83202D907BF20C7103C263E10E78" Name="ca"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dir7A5947AF5A504DECDE3201037F256CB1">
+ <Directory Id="dirD54A193F36E233547636F2C139EE1FF4" Name="LC_MESSAGES"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dir05D708F44AE366B2A1B3515757353BF8">
+ <Directory Id="dirD80A015C242F188C2E1454B5A4D2010E" Name="LC_MESSAGES"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dir4F1B7A79DBDF2C05F29C779072E6C575">
+ <Directory Id="dirE2D6A167979D9DAF78E0DC18293E05DD" Name="nl"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dir4F1B7A79DBDF2C05F29C779072E6C575">
+ <Directory Id="dirE46249598446819F7AA7C9A2914C6D83" Name="cs"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dir4F1B7A79DBDF2C05F29C779072E6C575">
+ <Directory Id="dirE62A81CFBBCD8D97197ABD459F171516" Name="sr"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dir4F1B7A79DBDF2C05F29C779072E6C575">
+ <Directory Id="dirE7E0782B19315880FE9BD84AF1682721" Name="gl"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dirD14BA95A8404FE8F595737D4EB6D0ECC">
+ <Directory Id="dirEDC8B39F817DC0C264AF78A4861B98A5" Name="LC_MESSAGES"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dir7BFF80ABAF1D317F0C75F1491A11C917">
+ <Directory Id="dirF4B1502A83344E3C92AB58989653B465" Name="gnupg"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dirE62A81CFBBCD8D97197ABD459F171516">
+ <Directory Id="dirF73F41B3426675E91A925612314E760D" Name="LC_MESSAGES"/>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <DirectoryRef Id="dir4F1B7A79DBDF2C05F29C779072E6C575">
+ <Directory Id="dirFEC9F97E00E1DB82803BCC2C95BD967E" Name="da"/>
+ </DirectoryRef>
+ </Fragment>
+</Wix>
diff --git a/build-aux/speedo/zlib.pc b/build-aux/speedo/zlib.pc
new file mode 100644
index 0000000..b758050
--- /dev/null
+++ b/build-aux/speedo/zlib.pc
@@ -0,0 +1,10 @@
+prefix=/usr
+exec_prefix=${prefix}
+libdir=${exec_prefix}/lib
+includedir=${prefix}/include
+
+Name: zlib
+Description: zlib compression library
+Version: 1.2.5
+Libs: -L${libdir} -lz
+Cflags: -I${includedir}