diff --git a/.gitignore b/.gitignore index 6502072e7..d4816a110 100644 --- a/.gitignore +++ b/.gitignore @@ -21,6 +21,7 @@ keyserver/gpg2keys_test tools/gpg-zip # Files created by make when not using a VPATH build +play/ *.o po/en@boldquot.insert-header po/en@boldquot.po diff --git a/build-aux/speedo.mk b/build-aux/speedo.mk index 48702560f..34d5f98dc 100644 --- a/build-aux/speedo.mk +++ b/build-aux/speedo.mk @@ -19,7 +19,7 @@ # 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 +# make -f speedo.mk all pkg2rep=/dir/with/tarballs # or # make -f speedo.mk # @@ -42,47 +42,113 @@ # Lists packages and versions. # +# We need to know our own name. +SPEEDO_MK := $(realpath $(lastword $(MAKEFILE_LIST))) + # Set this to "git" or "release". -WHAT=release +WHAT=git # Set target to "native" or "w32" -TARGETOS=native +TARGETOS=w32 + +# Set to the location of the directory with traballs of +# external packages. +TARBALLS=$(shell pwd)/../tarballs # Number of parallel make jobs MAKE_J=3 +# =====BEGIN LIST OF PACKAGES===== # The packages that should be built. The order is also the build order. -speedo_spkgs = libgpg-error npth libgcrypt libassuan libksba gnupg gpgme +# Fixme: Do we need to build pkg-config for cross-building? -ifneq ($(TARGETOS),w32) -speedo_spkgs += gpa -endif +speedo_spkgs = \ + libgpg-error npth libgcrypt ifeq ($(TARGETOS),w32) -speedo_spkgs += gpgex +speedo_spkgs += \ + zlib libiconv gettext endif +speedo_spkgs += \ + libassuan libksba gnupg + +ifeq ($(TARGETOS),w32) +speedo_spkgs += \ + libffi glib pkg-config +endif + +speedo_spkgs += \ + gpgme + +ifeq ($(TARGETOS),w32) +speedo_spkgs += \ + libpng \ + gdk-pixbuf atk pixman cairo pango gtk+ +endif + +speedo_spkgs += \ + pinentry gpa + +ifeq ($(TARGETOS),w32) +speedo_spkgs += \ + gpgex +endif + +# =====END LIST OF PACKAGES===== + + +# Packages which are additionally build for 64 bit Windows +speedo_w64_spkgs = \ + libgpg-error libiconv gettext libassuan gpgex + +# Packages which use the gnupg autogen.sh build style +speedo_gnupg_style = \ + libgpg-error npth libgcrypt \ + libassuan libksba gnupg gpgme \ + pinentry gpa gpgex + +# Packages which use only make and no build directory +speedo_make_only_style = \ + zlib # Version numbers of the released packages # Fixme: Take the version numbers from gnupg-doc/web/swdb.mac -libgpg_error_ver = 1.12 +libgpg_error_ver = 1.13 npth_ver = 0.91 -libgcrypt_ver = 1.6.0 +libgcrypt_ver = 1.6.1 libassuan_ver = 2.1.1 libksba_ver = 1.3.0 -gnupg_ver = 2.0.22 gpgme_ver = 1.5.0 +pinentry_ver = 0.8.4 gpa_ver = 0.9.5 gpgex_ver = 1.0.0 + +# Version number for external packages +pkg_config_ver = 0.23 +zlib_ver = 1.2.8 +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 directory +# The tarball directories pkgrep = ftp://ftp.gnupg.org/gcrypt - +pkg2rep = $(TARBALLS) # For each package, the following variables can be defined: # @@ -117,10 +183,10 @@ ifeq ($(WHAT),git) speedo_pkg_libgcrypt_gitref = LIBGCRYPT-1-6-BRANCH speedo_pkg_libksba_git = $(gitrep)/libksba speedo_pkg_libksba_gitref = master - speedo_pkg_gnupg_git = $(gitrep)/gnupg - speedo_pkg_gnupg_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 @@ -136,57 +202,182 @@ else $(pkgrep)/libgcrypt/libgcrypt-$(libgcrypt_ver).tar.bz2 speedo_pkg_libksba_tar = \ $(pkgrep)/libksba/libksba-$(libksba_ver).tar.bz2 - speedo_pkg_gnupg_tar = \ - $(pkgrep)/gnupg/gnupg-$(gnupg_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_gpex_tar = \ + speedo_pkg_gpgex_tar = \ $(pkgrep)/gpex/gpgex-$(gpa_ver).tar.bz2 endif +speedo_pkg_pkg_config_tar = $(pkg2rep)/pkg-config-$(pkg_config_ver).tar.gz +speedo_pkg_zlib_tar = $(pkg2rep)/zlib-$(zlib_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_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_gnupg_configure = --enable-gpg2-is-gpg --disable-g13 +speedo_pkg_gnupg_extracflags = -g + +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 + + +# The LDFLAGS is needed for -lintl for glib. +speedo_pkg_gpgme_configure = \ + --enable-static --enable-w32-glib --disable-w32-qt \ + --with-gpg-error-prefix=$(idir) \ + LDFLAGS=-L$(idir)/lib + +speedo_pkg_pinentry_configure = \ + --disable-pinentry-qt --disable-pinentry-qt4 --disable-pinentry-gtk \ + --enable-pinentry-gtk2 \ + --with-glib-prefix=$(idir) --with-gtk-prefix=$(idir) \ + CPPFLAGS=-I$(idir)/include \ + LDFLAGS=-L$(idir)/lib \ + CXXFLAGS=-static-libstdc++ + +speedo_pkg_gpa_configure = \ + --with-libiconv-prefix=$(idir) --with-libintl-prefix=$(idir) \ + --with-gpgme-prefix=$(idir) --with-zlib=$(idir) \ + --with-libassuan-prefix=$(idir) --with-gpg-error-prefix=$(idir) + +speedo_pkg_gpgex_configure = \ + --with-gpg-error-prefix=$(idir) \ + --with-libassuan-prefix=$(idir) + +speedo_pkg_w64_gpgex_configure = \ + --with-gpg-error-prefix=$(idir6) \ + --with-libassuan-prefix=$(idir6) + + +# +# External packages +# + +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 + +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-lib-prefix=$(idir) --with-libiconv-prefix=$(idir) \ + 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\" +speedo_pkg_glib_extracflags = -march=i486 + + +speedo_pkg_libpng_configure = \ + CPPFLAGS=\"-I$(idir)/include -DPNG_BUILD_DLL\" \ + LDFLAGS=\"-L$(idir)/lib\" LIBPNG_DEFINES=\"-DPNG_BUILD_DLL\" + +speedo_pkg_pixman_configure = \ + CPPFLAGS=-I$(idir)/include \ + LDFLAGS=-L$(idir)/lib + +speedo_pkg_cairo_configure = \ + --disable-qt --disable-ft --disable-fc \ + --enable-win32 --enable-win32-font \ + CPPFLAGS=-I$(idir)/include \ + LDFLAGS=-L$(idir)/lib + +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 - @echo export PATH=\"$(idir)/bin\":\$$PATH - @echo export LD_LIBRARY_PATH=\"$(idir)/lib\":\$$LD_LIBRARY_PATH - @echo hash -r report: report-speedo clean: clean-speedo - -# Fixme: The dist target does not work anymore. +ifeq ($(TARGETOS),w32) STRIP = i686-w64-mingw32-strip - -dist: all - set -e; date=$$(date -u +%Y%m%d); pkgname=gpg-w32-dev-$$date; \ - rm -rf $$pkgname $${pkgname}.zip || true; \ - cp -rL playground/install $${pkgname}; \ - rm -r $${pkgname}/share/info || true; \ - mkdir -p $${pkgname}/share/doc/gpg-w32-dev ;\ - echo "Included versions:" > $${pkgname}/README.txt ; \ - echo "" >> $${pkgname}/README.txt ; \ - $(MAKE) --no-print-directory report \ - | awk '{print $$2}' >> $${pkgname}/README.txt ; \ - cp GNUmakefile speedo.mk $${pkgname}/README.txt \ - $${pkgname}/share/doc/gpg-w32-dev/ ; \ - $(STRIP) $${pkgname}/bin/*.dll ; \ - zip -r9 $${pkgname}.zip $${pkgname} >/dev/null ; \ - rm -rf $$pkgname; \ - echo "$$pkgname.zip ready for distribution" >&2 - +else +STRIP = strip +endif +W32CC = i686-w64-mingw32-gcc -include config.mk @@ -195,21 +386,45 @@ dist: all # MKDIR=mkdir - +MAKENSIS=makensis +BUILD_ISODATE=$(shell date -u +%Y-%m-%d) # These paths must be absolute, as we switch directories pretty often. root := $(shell pwd)/play -stampdir := $(root)/stamps sdir := $(root)/src bdir := $(root)/build +bdir6:= $(root)/build-w64 idir := $(root)/inst +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 +# The next two macros will work only after gnupg has been build. +INST_VERSION=$(shell head -1 $(idir)/INST_VERSION) +INST_PROD_VERSION=$(shell head -1 $(idir)/INST_PROD_VERSION) + +# List with packages speedo_build_list = $(speedo_spkgs) +speedo_w64_build_list = $(speedo_w64_spkgs) +# Determine build and host system +build := $(shell $(topsrc)/autogen.sh --silent --print-build) ifeq ($(TARGETOS),w32) - speedo_autogen_buildopt="--build-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= + speedo_autogen_buildopt := + host := + speedo_host_build_option := + speedo_w32_cflags := endif ifeq ($(MAKE_J),) @@ -219,14 +434,20 @@ else endif + + # The playground area is our scratch area, where we unpack, build and # install the packages. $(stampdir)/stamp-directories: - $(MKDIR) $(root) - $(MKDIR) $(stampdir) - $(MKDIR) $(sdir) - $(MKDIR) $(bdir) - $(MKDIR) $(idir) + $(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 '_'. @@ -246,17 +467,60 @@ define SETVARS gitref="$(call GETVAR,speedo_pkg_$(1)_gitref)"; \ tar="$(call GETVAR,speedo_pkg_$(1)_tar)"; \ pkgsdir="$(sdir)/$(1)"; \ + if [ "$(1)" = "gnupg" ]; then \ + git=''; \ + gitref=''; \ + tar=''; \ + pkgsdir="$(topsrc)"; \ + fi; \ pkgbdir="$(bdir)/$(1)"; \ pkgcfg="$(call GETVAR,speedo_pkg_$(1)_configure)"; \ + pkgextracflags="$(call GETVAR,speedo_pkg_$(1)_extracflags)"; \ + 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)"; \ + export PKG_CONFIG="/usr/bin/pkg-config"; \ + export PKG_CONFIG_PATH="$(idir)/lib/pkgconfig"; \ + 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)"; \ + pkgsdir="$(sdir)/$(1)"; \ + if [ "$(1)" = "gnupg" ]; then \ + git=''; \ + gitref=''; \ + tar=''; \ + pkgsdir="$(topsrc)"; \ + fi; \ + pkgbdir="$(bdir6)/$(1)"; \ + pkgcfg="$(call GETVAR,speedo_pkg_w64_$(1)_configure)"; \ + pkgextracflags="$(call GETVAR,speedo_pkg_$(1)_extracflags)"; \ + 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)"; \ + export PKG_CONFIG="/usr/bin/pkg-config"; \ + export PKG_CONFIG_PATH="$(idir6)/lib/pkgconfig"; \ + 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 @@ -265,7 +529,15 @@ $(stampdir)/stamp-$(1)-00-unpack: $(stampdir)/stamp-directories @echo "speedo: */" @(set -e; cd $(sdir); \ $(call SETVARS,$(1)); \ - if [ -n "$$$${git}" ]; then \ + if [ "$(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}"; \ @@ -275,6 +547,7 @@ $(stampdir)/stamp-$(1)-00-unpack: $(stampdir)/stamp-directories case "$$$${tar}" in \ *.gz) opt=z ;; \ *.bz2) opt=j ;; \ + *.xz) opt=J ;; \ *) opt= ;; \ esac; \ case "$$$${tar}" in \ @@ -285,6 +558,13 @@ $(stampdir)/stamp-$(1)-00-unpack: $(stampdir)/stamp-directories base=`echo "$$$${tar}" | sed -e 's,^.*/,,' \ | sed -e 's,\.tar.*$$$$,,'`; \ mv $$$${base} $(1); \ + patch="$(patdir)/$(1)-$$$${base#$(1)-}.patch";\ + if [ -x "$$$${patch}" ]; then \ + echo "speedo: applying patch $$$${patch}"; \ + cd $(1); "$$$${patch}"; \ + elif [ -f "$$$${patch}" ]; then \ + echo "speedo: warning: $$$${patch} is not executable"; \ + fi; \ else \ echo "speedo: unpacking $(1) from UNKNOWN"; \ fi) @@ -292,43 +572,152 @@ $(stampdir)/stamp-$(1)-00-unpack: $(stampdir)/stamp-directories $(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}; \ - else \ + cd "$$$${pkgbdir}"; \ + if [ -n "$(speedo_autogen_buildopt)" ]; then \ + eval AUTOGEN_SH_SILENT=1 w32root="$(idir)" \ + "$$$${pkgsdir}/autogen.sh" \ + $(speedo_autogen_buildopt) \ + $$$${pkgcfg} \ + CFLAGS=\"$(speedo_w32_cflags) $$$${pkgextracflags}\";\ + else \ eval "$$$${pkgsdir}/configure" \ - --silent \ - --enable-maintainer-mode \ - --prefix="$(idir)" \ - $$$${pkgcfg}; \ + --silent \ + --enable-maintainer-mode \ + --prefix="$(idir)" \ + $$$${pkgcfg} \ + CFLAGS=\"$(speedo_w32_cflags) $$$${pkgextracflags}\";\ fi) +else + @($(call SETVARS,$(1)); \ + mkdir "$$$${pkgbdir}"; \ + cd "$$$${pkgbdir}"; \ + eval "$$$${pkgsdir}/configure" \ + --silent $(speedo_host_build_option) \ + --prefix="$(idir)" \ + $$$${pkgcfg} \ + CFLAGS=\"$(speedo_w32_cflags) $$$${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} \ + CFLAGS=\"$(speedo_w32_cflags) $$$${pkgextracflags}\";\ + else \ + eval "$$$${pkgsdir}/configure" \ + --silent \ + --enable-maintainer-mode \ + --prefix="$(idir6)" \ + $$$${pkgcfg} \ + CFLAGS=\"$(speedo_w32_cflags) $$$${pkgextracflags}\";\ + fi) +else + @($(call SETVARS_W64,$(1)); \ + mkdir "$$$${pkgbdir}"; \ + cd "$$$${pkgbdir}"; \ + eval "$$$${pkgsdir}/configure" \ + --silent $(speedo_host_build_option6) \ + --prefix="$(idir6)" \ + $$$${pkgcfg} \ + CFLAGS=\"$(speedo_w32_cflags) $$$${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 "$$$${pkgbdir}"; \ + cd "$$$${pkgsdir}"; \ + test -n "$$$${pkgmkdir}" && cd "$$$${pkgmkdir}"; \ $(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=1) +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=1) +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 "$$$${pkgbdir}"; \ + cd "$$$${pkgsdir}"; \ + test -n "$$$${pkgmkdir}" && cd "$$$${pkgmkdir}"; \ + $(MAKE) --no-print-directory $$$${pkgmkargs_inst} install V=1;\ + $(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 gpg4win_pkg_$(call FROB_macro,$(1))_post_install)) - @touch $(stampdir)/stamp-$(1)-03-install + $(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=1;\ + $(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 + @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)" @@ -339,6 +728,11 @@ clean-$(1): rm -fR "$$$${pkgsdir}" "$$$${pkgbdir}" || true) -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)); \ @@ -363,6 +757,9 @@ endef $(foreach spkg, $(speedo_spkgs), $(eval $(call SPKG_template,$(spkg)))) $(stampdir)/stamp-final: $(stampdir)/stamp-directories +ifeq ($(TARGETOS),w32) +$(stampdir)/stamp-final: $(addprefix $(stampdir)/stamp-w64-final-,$(speedo_w64_build_list)) +endif $(stampdir)/stamp-final: $(addprefix $(stampdir)/stamp-final-,$(speedo_build_list)) touch $(stampdir)/stamp-final @@ -377,4 +774,55 @@ clean-stamps: clean-speedo: $(RM) -fR play -.PHONY : all-speedo report-speedo clean-stamps clean-speedo + +# +# Windows installer +# + +dist-source: all + for i in 00 01 02 03; do sleep 1;touch play/stamps/stamp-*-${i}-*;done + tar -cvJf gnupg-$(INST_VERSION)_$(BUILD_ISODATE).tar.xz \ + --exclude-backups --exclude-vc \ + patches play/stamps/stamp-*-00-unpack play/src + + +$(bdir)/NEWS.tmp: $(topsrc)/NEWS + sed -e '/^#/d' <$(topsrc)/NEWS >$(bdir)/NEWS.tmp + +$(bdir)/README.txt: $(bdir)/NEWS.tmp $(w32src)/README.txt \ + $(w32src)/pkg-copyright.txt + sed -e '/^;.*/d;' \ + -e '/!NEWSFILE!/{r NEWS.tmp' -e 'd;}' \ + -e '/!PKG-COPYRIGHT!/{r $(w32src)/pkg-copyright.txt' -e 'd;}' \ + -e 's,!VERSION!,$(INST_VERSION),g' \ + < $(w32src)/README.txt \ + | 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 + +installer: all w32_insthelpers $(bdir)/inst-options.ini $(bdir)/README.txt + $(MAKENSIS) -V2 \ + -DINST_DIR=$(idir) \ + -DINST6_DIR=$(idir6) \ + -DBUILD_DIR=$(bdir) \ + -DTOP_SRCDIR=$(topsrc) \ + -DW32_SRCDIR=$(w32src) \ + -DBUILD_ISODATE=$(BUILD_ISODATE) \ + -DVERSION=$(INST_VERSION) \ + -DPROD_VERSION=$(INST_PROD_VERSION) \ + $(w32src)/inst.nsi + +# +# Mark phony targets +# +.PHONY: all-speedo report-speedo clean-stamps clean-speedo installer \ + w32_insthelpers 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 000000000..51d797584 --- /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/pango-1.29.4.patch b/build-aux/speedo/patches/pango-1.29.4.patch new file mode 100755 index 000000000..edeee856c --- /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/w32/README.txt b/build-aux/speedo/w32/README.txt new file mode 100644 index 000000000..847ecd772 --- /dev/null +++ b/build-aux/speedo/w32/README.txt @@ -0,0 +1,54 @@ +;; README.txt -*- coding: latin-1; -*- +;; This is the README installed with megacryption. 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. + + GNUPG for Windows + =================== + +This is GnuPG for Windows, version !VERSION!. + +Content: + + 1. Important notes + 2. Changes + 3. Legal notices + + + + +1. Important Notes +================== + +HTML versions of the manuals have been installed on the desktop. +Check out https://gnupg.org for latest news. + + +2. Record of Changes (NEWS file) +================================ + +Below you find the raw NEWS file: + +!NEWSFILE! + + +3. Legal notices pertaining to the individual packets +===================================================== + +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-src-k.m.n.zip) is distributed along with the binaries +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 000000000..e5ba3bbe9 --- /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 orginal 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 000000000..9d0379e0e --- /dev/null +++ b/build-aux/speedo/w32/g4wihelp.c @@ -0,0 +1,1136 @@ +/* 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 tyhe 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 +#include +#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 - 1, "$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 - 1, + "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) - 1, "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) - 1, + "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 + +/* 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. */ +#if 0 +#define ENV_HK HKEY_CURRENT_USER +#define ENV_REG "Environment" +#endif +/* Due to a bug in Windows7 (kb 2685893) we better but a lower limit + than 8191 on the maximum length of the PATH variable. Note, that + depending on the used toolchain we used to have 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 *path; + char *path_new; + int path_new_size; + char *comp; + const char delims[] = ";"; + HKEY key_handle = 0; + + 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; + +/* MessageBox (g_hwndParent, "XXX 2", 0, MB_OK); */ + + path = read_w32_registry_string (ENV_HK, ENV_REG, "Path"); + if (! path) + { + MessageBox (g_hwndParent, "No PATH variable found", 0, MB_OK); + return; + } + +/* 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 (!strcmp (comp, dir)) + { + free (path); + free (path_new); + return; + } + comp = strtok (NULL, delims); + } + while (comp); + free (path); + +/* MessageBox (g_hwndParent, "XXX 8", 0, MB_OK); */ + + /* Set a key for our CLSID. */ + RegCreateKey (ENV_HK, 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 *path; + char *path_new; + int path_new_size; + char *comp; + const char delims[] = ";"; + HKEY key_handle = 0; + int changed = 0; + int count = 0; + + g_hwndParent = hwndParent; + EXDLL_INIT(); + + setuservariable (INST_R0, "0"); + + /* The expected stack layout: path component. */ + if (popstring (dir, sizeof (dir))) + return; + + path = read_w32_registry_string (ENV_HK, ENV_REG, "Path"); + /* 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) + return; + + /* Set a key for our CLSID. */ + RegCreateKey (ENV_HK, 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 000000000..af513464c --- /dev/null +++ b/build-aux/speedo/w32/gdk-pixbuf-loaders.cache @@ -0,0 +1,135 @@ +# 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 diff --git a/build-aux/speedo/w32/inst-options.ini b/build-aux/speedo/w32/inst-options.ini new file mode 100644 index 000000000..8697e89ad --- /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 000000000..cf627f66c --- /dev/null +++ b/build-aux/speedo/w32/inst.nsi @@ -0,0 +1,1233 @@ +# inst.nsi - Installer for GnuPG on Windows. -*- coding: latin-1; -*- +# Copyright (C) 2005, 2014 g10 Code GmbH +# +# This file is part of GnuPG. +# +# GnuPG is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# GnuPG is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, see . + +# Macros to provide for invocation: +# INST_DIR +# INST6_DIR +# BUILD_DIR +# TOP_SRCDIR +# W32_SRCDIR +# BUILD_ISODATE +# VERSION +# PROD_VERSION + +!cd "${INST_DIR}" +!addincludedir "${W32_SRCDIR}" +!addplugindir "${BUILD_DIR}" + +# The package name and version. PRETTY_PACKAGE is a user visible name +# only while PACKAGE is useful for filenames etc. PROD_VERSION is the +# product version and needs to be in the format "MAJ.MIN.MIC.BUILDNR". +!define PACKAGE "gnupg" +!define PACKAGE_SHORT "gnupg" +!define PRETTY_PACKAGE "GNU Privacy Guard" +!define PRETTY_PACKAGE_SHORT "GnuPG" +!define COMPANY "The GnuPG Project" +!define COPYRIGHT "Copyright (C) 2014 The GnuPG Project" +!define 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. \ + It can be used to encrypt data and to create digital signatures. \ + It includes an advanced key management facility and is compliant \ + with the proposed OpenPGP Internet standard as described in RFC-4880. \ + \r\n\r\n$_CLICK \ + \r\n\r\n\r\n\r\n\r\nThis is GnuPG version ${VERSION}\r\n\ + file version ${PROD_VERSION}\r\n\ + release date ${BUILD_ISODATE}" +!define ABOUT_GERMAN \ + "GnuPG is die häufigst verwendete Software zur Mail- und Datenverschlüsselung.\ + \r\n\r\n$_CLICK \ + \r\n\r\n\r\n\r\n\r\nDies ist GnuPG Version ${VERSION}\r\n\ + Dateiversion ${PROD_VERSION}\r\n\ + Releasedatum ${BUILD_ISODATE}" + + +# The copyright license of the package. Define only one of these. +!define LICENSE_GPL + +# Select the best compression algorithm available. The dictionary +# size is the default (8 MB). +!ifndef SOURCES +SetCompressor lzma +# SetCompressorDictSize 8 +!endif + +# Include the generic parts. +!define HAVE_STARTMENU + +# We use the modern UI. +!include "MUI.nsh" + +# Some helper some +!include "LogicLib.nsh" +!include "x64.nsh" + +# Set the package name. Note that this name should not be suffixed +# with the version because this would get displayed in the start menu. +# Given that a slash in the name troubles Windows startmenu creation +# we set the Startmenu explicit below. +Name "${PRETTY_PACKAGE}" + +# Set the output filename. +OutFile "${PACKAGE}-${VERSION}.exe" + +#Fixme: Do we need a logo +#Icon "${TOP_SRCDIR}/doc/logo/gnupg-logo-icon.ico" +#UninstallIcon "${TOP_SRCDIR}/doc/logo/gnupg-logo-icon.ico" + +# Set the installation directory. +!ifndef INSTALL_DIR +!define INSTALL_DIR "GnuPG" +!endif +InstallDir "$PROGRAMFILES\GNU\${INSTALL_DIR}" + +InstallDirRegKey HKLM "Software\GNU\${PACKAGE_SHORT}" "Install Directory" + + +# Add version information to the file properties. +VIProductVersion "${PROD_VERSION}" +VIAddVersionKey "ProductName" "${PRETTY_PACKAGE_SHORT} (${VERSION})" +VIAddVersionKey "Comments" \ + "GnuPG is Free Software; you can redistribute it \ + and/or modify it under the terms of the GNU General Public License. \ + You should have received a copy of the GNU General Public License \ + along with this software; if not, write to the Free Software \ + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, \ + MA 02110-1301, USA" +VIAddVersionKey "CompanyName" "${COMPANY}" +VIAddVersionKey "LegalTrademarks" "" +VIAddVersionKey "LegalCopyright" "${COPYRIGHT}" +VIAddVersionKey "FileDescription" "${DESCRIPTION}" +VIAddVersionKey "FileVersion" "${PROD_VERSION}" + +# Interface Settings + +# !define MUI_ABORTWARNING +!define MUI_FINISHPAGE_NOAUTOCLOSE +!define MUI_UNFINISHPAGE_NOAUTOCLOSE + +#!define MUI_HEADERIMAGE +#!define MUI_HEADERIMAGE_BITMAP \ +# "${TOP_SRCDIR}/doc/logo/gnupg-logo-150x57.bmp" +#!define MUI_WELCOMEFINISHPAGE_BITMAP \ +# "${TOP_SRCDIR}/doc/logo/gnupg-logo-164x314.bmp" + +# Remember the installer language +!define MUI_LANGDLL_REGISTRY_ROOT "HKCU" +!define MUI_LANGDLL_REGISTRY_KEY "Software\GNU\GnuPG" +!define MUI_LANGDLL_REGISTRY_VALUENAME "Installer Language" + +# +# The list of wizard pages. +# +!define MUI_WELCOMEPAGE_TITLE "$(T_WelcomeTitle)" +!define MUI_WELCOMEPAGE_TEXT "$(T_About)" +!insertmacro MUI_PAGE_WELCOME + +!define MUI_LICENSEPAGE_BUTTON "$(^NextBtn)" +!define MUI_PAGE_HEADER_SUBTEXT "$(T_GPLHeader)" +!define MUI_LICENSEPAGE_TEXT_BOTTOM "$(T_GPLShort)" +!insertmacro MUI_PAGE_LICENSE "${TOP_SRCDIR}/COPYING" + +!define MUI_PAGE_CUSTOMFUNCTION_SHOW PrintNonAdminWarning +!insertmacro MUI_PAGE_COMPONENTS + +!define MUI_PAGE_CUSTOMFUNCTION_LEAVE CheckExistingVersion +!insertmacro MUI_PAGE_DIRECTORY + +!ifdef HAVE_STARTMENU + +Page custom CustomPageOptions + +Var STARTMENU_FOLDER + +!define MUI_PAGE_CUSTOMFUNCTION_PRE CheckIfStartMenuWanted +!define MUI_STARTMENUPAGE_NODISABLE +!define MUI_STARTMENUPAGE_REGISTRY_ROOT "HKCU" +!define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\GNU\GnuPG" +!define MUI_STARTMENUPAGE_REGISTRY_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 "${TOP_SRCDIR}\doc\logo\gnupg-logo-400px.bmp" +#ReserveFile "${W32_SRCDIR}\gnupg-splash.wav" +ReserveFile "${TOP_SRCDIR}\COPYING" +ReserveFile "${BUILD_DIR}\inst-options.ini" +#ReserveFile "${TOP_SRCDIR}\doc\logo\gnupg-logo-164x314.bmp" + +# Language support + +LangString T_LangCode ${LANG_ENGLISH} "en" +LangString T_LangCode ${LANG_GERMAN} "de" + + +# The WelcomeTitle is displayed on the first page. +LangString T_WelcomeTitle ${LANG_ENGLISH} "${WELCOME_TITLE_ENGLISH}" +LangString T_WelcomeTitle ${LANG_GERMAN} "${WELCOME_TITLE_GERMAN}" + +# The About string as displayed on the first page. +LangString T_About ${LANG_ENGLISH} "${ABOUT_ENGLISH}" +LangString T_About ${LANG_GERMAN} "${ABOUT_GERMAN}" + +# Startup page +LangString T_GPLHeader ${LANG_ENGLISH} \ + "This software is licensed under the terms of the GNU General Public \ + License (GNU GPL)." +LangString T_GPLHeader ${LANG_GERMAN}} \ + "Diese Software ist unter der GNU General Public License \ + (GNU GPL) lizensiert." + +LangString T_GPLShort ${LANG_ENGLISH} \ + "In short: You are allowed to run this software for any purpose. \ + You may distribute it as long as you give the recipients the same \ + rights you have received." +LangString T_GPLShort ${LANG_GERMAN} \ + "In aller Kürze: Sie haben das Recht, die Software zu jedem Zweck \ + einzusetzen. Sie können die Software weitergeben, sofern Sie dem \ + Empfänger dieselben Rechte einräumen, die auch Sie erhalten haben." + +LangString T_RunKeyManager ${LANG_ENGLISH} \ + "Run the key manager" +LangString T_RunKeyManager ${LANG_GERMAN} \ + "Die Schlüsselverwaltung aufrufen" + +LangString T_MoreInfo ${LANG_ENGLISH} \ + "Click here for GnuPG's website" +LangString T_MoreInfo ${LANG_GERMAN} \ + "Hier klicken um zur GnuPG Homepage zu gelangen" +LangString T_MoreInfoURL ${LANG_ENGLISH} "https://gnupg.org" +LangString T_MoreInfoURL ${LANG_GERMAN} "https://gnupg.org" + +LangString T_ShowReadme ${LANG_ENGLISH} \ + "Show the README file" +LangString T_ShowReadme ${LANG_GERMAN} \ + "Die README Datei anzeigen" + +LangString T_NoKeyManager ${LANG_ENGLISH} \ + "No key manager has been installed, thus we can't run one now." +LangString T_NoKeyManager ${LANG_GERMAN} \ + "Es wurde keine Schlüsselverwaltung installiert. \ + Deswegen kann sie jetzt auch nicht ausgeführt werden." + +# Functions + +# Custom functions and macros for this installer. +LangString T_AlreadyRunning ${LANG_ENGLISH} \ + "An instance of this installer is already running." +LangString T_AlreadyRunning ${LANG_GERMAN} \ + "Ein Exemplar dieses Installers läuft bereits." + +Function G4wRunOnce + Push $R0 + StrCpy $R0 "gnupg" + g4wihelp::runonce + StrCmp $R0 0 +3 + MessageBox MB_OK $(T_AlreadyRunning) + Abort + Pop $R0 +FunctionEnd + +# +# Control function for the Custom page to select special +# install options. +# +Function CustomPageOptions + !insertmacro MUI_HEADER_TEXT "$(T_InstallOptions)" "$(T_InstallOptLinks)" + + # Note, that the default selection is done in the ini file + !insertmacro MUI_INSTALLOPTIONS_WRITE "${BUILD_DIR}/inst-options.ini" \ + "Field 1" "Text" "$(T_InstOptLabelA)" + !insertmacro MUI_INSTALLOPTIONS_WRITE "${BUILD_DIR}/inst-options.ini" \ + "Field 2" "Text" "$(T_InstOptFieldA)" + !insertmacro MUI_INSTALLOPTIONS_WRITE "${BUILD_DIR}/inst-options.ini" \ + "Field 3" "Text" "$(T_InstOptFieldB)" + !insertmacro MUI_INSTALLOPTIONS_WRITE "${BUILD_DIR}/inst-options.ini" \ + "Field 4" "Text" "$(T_InstOptFieldC)" + !insertmacro MUI_INSTALLOPTIONS_WRITE "${BUILD_DIR}/inst-options.ini" \ + "Field 5" "Text" "$(T_InstOptLabelB)" + + !insertmacro MUI_INSTALLOPTIONS_DISPLAY "${BUILD_DIR}/inst-options.ini" +FunctionEnd + + +# Check whether GnuPG has already been installed. This is called as +# a leave function from the directory page. A call to abort will get +# back to the directory selection. +Function CheckExistingVersion + ClearErrors + FileOpen $0 "$INSTDIR\VERSION" r + IfErrors nexttest + FileRead $0 $R0 + FileRead $0 $R1 + FileClose $0 + + Push $R1 + Call TrimNewLines + Pop $R1 + + MessageBox MB_YESNO "$(T_FoundExistingVersion)" IDYES leave + Abort + + nexttest: + ClearErrors + ReadRegStr $0 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\GnuPG" "DisplayVersion" + IfErrors leave 0 + MessageBox MB_YESNO "$(T_FoundExistingVersionB)" IDYES leave + Abort + + leave: +FunctionEnd + + + +# PrintNonAdminWarning + +# Check whether the current user is in the Administrator group or an +# OS version without the need for an Administrator is in use. Print a +# diagnostic if this is not the case and abort installation. +Function PrintNonAdminWarning + ClearErrors + UserInfo::GetName + IfErrors leave + Pop $0 + UserInfo::GetAccountType + Pop $1 + StrCmp $1 "Admin" leave +1 + MessageBox MB_OK "$(T_AdminNeeded)" + Quit + + leave: +FunctionEnd + + +# Check whether the start menu is actually wanted. + +Function CheckIfStartMenuWanted + !insertmacro MUI_INSTALLOPTIONS_READ $R0 "${BUILD_DIR}/inst-options.ini" \ + "Field 2" "State" + IntCmp $R0 1 +2 + Abort +FunctionEnd + + +# Check whether this is a reinstall and popup a message box to explain +# that it is better to close other apps before continuing +Function PrintCloseOtherApps + IfFileExists $INSTDIR\bin\gpg.exe print_warning + IfFileExists $INSTDIR\bin\gpa.exe print_warning + Return + print_warning: + MessageBox MB_OK|MB_ICONEXCLAMATION "$(T_CloseOtherApps)" + +FunctionEnd + +# Called right before the final page to show more warnings. +#Function ShowFinalWarnings +# leave: +#FunctionEnd + +#----------------------------------------------- +# Strings pertaining to the install options page +#----------------------------------------------- + +# Installation options title +LangString T_InstallOptions ${LANG_ENGLISH} "Install Options" +LangString T_InstallOptions ${LANG_GERMAN} "Installationsoptionen" + +# Installation options subtitle 1 +LangString T_InstallOptLinks ${LANG_ENGLISH} "Start links" +LangString T_InstallOptLinks ${LANG_GERMAN} "Startlinks" + +LangString T_InstOptLabelA ${LANG_ENGLISH} \ + "Please select where GnuPG shall install links:" +LangString T_InstOptLabelA ${LANG_GERMAN} \ + "Bitte wählen Sie, welche Verknüpfungen angelegt werden sollen:" + +LangString T_InstOptLabelB ${LANG_ENGLISH} \ + "(Only programs will be linked into the quick launch bar.)" +LangString T_InstOptLabelB ${LANG_GERMAN} \ + "(In die Schnellstartleiste werden nur Verknüpfungen für \ + Programme angelegt.) " + +LangString T_InstOptFieldA ${LANG_ENGLISH} \ + "Start Menu" +LangString T_InstOptFieldA ${LANG_GERMAN} \ + "Startmenü" + +LangString T_InstOptFieldB ${LANG_ENGLISH} \ + "Desktop" +LangString T_InstOptFieldB ${LANG_GERMAN} \ + "Arbeitsfläche" + +LangString T_InstOptFieldC ${LANG_ENGLISH} \ + "Quick Launch Bar" +LangString T_InstOptFieldC ${LANG_GERMAN} \ + "Schnellstartleiste" + +#------------------------------------------------ +# String pertaining to the existing version check +#------------------------------------------------ +LangString T_FoundExistingVersion ${LANG_ENGLISH} \ + "Version $R1 has already been installed. $\r$\n\ + Do you want to overwrite it with version ${VERSION}?" +LangString T_FoundExistingVersion ${LANG_GERMAN} \ + "Version $R1 ist hier bereits installiert. $\r$\n\ + Möchten Sie diese mit Version ${VERSION} überschreiben? $\r$\n\ + $\r$\n\ + (Sie können in jedem Fall mit JA antworten, falls es sich um \ + eine neuere oder dieselbe Version handelt.)" +LangString T_FoundExistingVersionB ${LANG_ENGLISH} \ + "A version of GnuPG has already been installed on the system. \ + There will be no problem installing and thus overwriting this \ + Version. $\r$\n\ + $\r$\n\ + Do you want to continue installing GnuPG?" +LangString T_FoundExistingVersionB ${LANG_GERMAN} \ + "Eine Version von GnuPG ist hier bereits installiert. \ + Es ist problemlos möglich, die Installation fortzuführen. $\r$\n\ + $\r$\n\ + Möchten die die Installation von GnuPG fortführen?" + + + +# From Function PrintNonAdminWarning +LangString T_AdminNeeded ${LANG_ENGLISH} \ + "Warning: Administrator permissions required for a successful installation" +LangString T_AdminNeeded ${LANG_GERMAN} \ + "Achtung: Für eine erfolgreiche Installation werden \ + Administratorrechte benötigt." + +# From Function PrintCloseOtherApps +LangString T_CloseOtherApps ${LANG_ENGLISH} \ + "Please make sure that other applications are not running. \ + GnuPG will try to install anyway but a reboot may be required." +LangString T_CloseOtherApps ${LANG_GERMAN} \ + "Bitte stellen Sie sicher, daß alle anderen Anwendugen geschlossen \ + sind. GnuPG wird auf jeden Fall versuchen, eine Installation \ + durchzuführen; es ist dann aber u.U. notwendig, das System neu zu starten." + + +# TrimNewlines - taken from the NSIS reference +# input, top of stack (e.g. whatever$\r$\n) +# output, top of stack (replaces, with e.g. whatever) +# modifies no other variables. +Function TrimNewlines + Exch $R0 + Push $R1 + Push $R2 + StrCpy $R1 0 + + loop: + IntOp $R1 $R1 - 1 + StrCpy $R2 $R0 1 $R1 + StrCmp $R2 "$\r" loop + StrCmp $R2 "$\n" loop + IntOp $R1 $R1 + 1 + IntCmp $R1 0 no_trim_needed + StrCpy $R0 $R0 $R1 + + no_trim_needed: + Pop $R2 + Pop $R1 + Exch $R0 +FunctionEnd + +# +# Define the installer sections. +# + +Section "-gnupginst" + SetOutPath "$INSTDIR" + + File "${BUILD_DIR}/README.txt" + + # Write a version file. + FileOpen $0 "$INSTDIR\VERSION" w + FileWrite $0 "${PACKAGE}$\r$\n" + FileWrite $0 "${VERSION}$\r$\n" + FileClose $0 + + WriteRegStr HKLM "Software\GNU\GnuPG" "Install Directory" $INSTDIR + + # If we are reinstalling, try to kill a possible running gpa using + # an already installed gpa. + ifFileExists "$INSTDIR\bin\gpa.exe" 0 no_uiserver + ExecWait '"$INSTDIR\bin\gpa" --stop-server' + + no_uiserver: + + # If we are reinstalling, try to kill a possible running agent using + # an already installed gpgconf. + ifFileExists "$INSTDIR\bin\gpgconf.exe" 0 no_gpgconf + ExecWait '"$INSTDIR\bin\gpgconf" --kill gpg-agent' + + no_gpgconf: +SectionEnd + +LangString DESC_Menu_gnupg_readme ${LANG_ENGLISH} \ + "General information on GnuPG" +LangString DESC_Menu_gnupg_readme ${LANG_GERMAN} \ + "Allgemeine Informationen zu GnuPG" + + +Section "GnuPG" SEC_gnupg + SectionIn RO + + SetOutPath "$INSTDIR\bin" + File /oname=gpg.exe "bin/gpg2.exe" + File "bin/gpgsm.exe" + File "bin/gpgconf.exe" + File "bin/gpg-connect-agent.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 + + SetOutPath "$INSTDIR\share\gnupg" + File "share/gnupg/gpg-conf.skel" +SectionEnd + + +LangString DESC_SEC_gnupg ${LANG_ENGLISH} \ + "The GnuPG Core is the actual encrypt core and a set of command \ + line utilities." +LangString DESC_SEC_gnupg ${LANG_GERMAN} \ + "Der GnuPG Core ist, wie der Name schon sagt, der Kernbestandteil \ + dieser Software. Der GnuPG Core stellt die eigentliche \ + Verschlüsselung sowie die Verwaltung der Schlüssel bereit." + +LangString DESC_Menu_gnupg_manual ${LANG_ENGLISH} \ + "Show the manual for the GnuPG Core" +LangString DESC_Menu_gnupg_manual ${LANG_GERMAN} \ + "Das Handbuch zum GnuPG Kern anzeigen" + +Section "-libgpg-error" SEC_libgpg_error + SetOutPath "$INSTDIR\bin" + File bin/libgpg-error-0.dll +SectionEnd + +Section "-libiconv" SEC_libiconv + SetOutPath "$INSTDIR\bin" + File bin/libiconv-2.dll +SectionEnd + +Section "-zlib" SEC_zlib + SetOutPath "$INSTDIR\bin" + File bin/zlib1.dll +SectionEnd + +Section "-npth" SEC_npth + SetOutPath "$INSTDIR\bin" + File bin/libnpth-0.dll +SectionEnd + +Section "-gcrypt" SEC_gcrypt + SetOutPath "$INSTDIR\bin" + File bin/libgcrypt-20.dll +SectionEnd + +Section "-assuan" SEC_assuan + SetOutPath "$INSTDIR\bin" + File bin/libassuan-0.dll +SectionEnd + +Section "-ksba" SEC_ksba + SetOutPath "$INSTDIR\bin" + File bin/libksba-8.dll +SectionEnd + +Section "-gpgme" SEC_gpgme + SetOutPath "$INSTDIR\bin" + File bin/libgpgme-11.dll + File bin/libgpgme-glib-11.dll + File libexec/gpgme-w32spawn.exe +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 + +Section "-pinentry" SEC_pinentry + SetOutPath "$INSTDIR\bin" + File /oname=pinentry.exe "bin/pinentry-gtk-2.exe" +SectionEnd + +Section "gpa" SEC_gpa + SectionIn RO + SetOutPath "$INSTDIR\bin" + File bin/gpa.exe + File bin/launch-gpa.exe +SectionEnd + +LangString DESC_SEC_gpa ${LANG_ENGLISH} \ + "The GnuPG Assistant is the graphical interface of GnuPG" +LangString DESC_SEC_gpa ${LANG_GERMAN} \ + "Der GnuPG Assistent ist die graphische Oberfläche von GnuPG." + +LangString DESC_Menu_gpa ${LANG_ENGLISH} \ + "Run the GnuGP Assistant." +LangString DESC_Menu_gpa ${LANG_GERMAN} \ + "Den GnuPG Assistenten starten." + +Section "gpgex" SEC_gpgex + SetOutPath "$INSTDIR\bin" + + ClearErrors + SetOverwrite try + File bin/gpgex.dll + SetOverwrite lastused + ifErrors 0 do_reg + File /oname=gpgex.dll.tmp bin/gpgex.dll + Rename /REBOOTOK gpgex.dll.tmp gpgex.dll + + do_reg: + ClearErrors + RegDLL "$INSTDIR\bin\gpgex.dll" + ifErrors 0 +2 + MessageBox MB_OK "$(T_GPGEX_RegFailed)" + +${If} ${RunningX64} + # Install the 64 bit version of the plugin. + # Note that we install this in addition to the 32 bit version so that + # the 32 bit version can be used by file dialogs of 32 bit programs. + ClearErrors + SetOverwrite try + File /oname=gpgex6.dll "${INST6_DIR}/bin/gpgex.dll" + SetOverwrite lastused + ifErrors 0 do_reg64 + File /oname=gpgex6.dll.tmp "${INST6_DIR}/bin/gpgex.dll" + Rename /REBOOTOK gpgex6.dll.tmp gpgex6.dll + + do_reg64: + # Register the DLL. We need to register both versions. However + # RegDLL can't be used for 64 bit and InstallLib seems to be a + # registry hack. + ClearErrors + ExecWait '"$SYSDIR\regsvr32" /s "$INSTDIR\bin\gpgex6.dll"' + ifErrors 0 +2 + MessageBox MB_OK "$(T_GPGEX_RegFailed) (64 bit)" + + # Note: There is no need to install the help an mo files because + # they are identical to those installed by the 32 bit version. +${EndIf} +SectionEnd + +LangString T_GPGEX_RegFailed ${LANG_ENGLISH} \ + "Warning: Registration of the Explorer plugin failed." + +LangString DESC_SEC_gpgex ${LANG_ENGLISH} \ + "GnuPG Explorer Extension" + + +Section "-gnupglast" SEC_gnupglast + SetOutPath "$INSTDIR" +SectionEnd + + +# +# Define the uninstaller sections. +# +# (reverse order of the installer sections!) +# + +Section "-un.gnupglast" + ifFileExists "$INSTDIR\bin\gpa.exe" 0 no_uiserver + ExecWait '"$INSTDIR\bin\gpa" --stop-server' + no_uiserver: + ifFileExists "$INSTDIR\bin\gpgconf.exe" 0 no_gpgconf + ExecWait '"$INSTDIR\bin\gpgconf" --kill gpg-agent' + no_gpgconf: +SectionEnd + +Section "-un.gpgex" + UnRegDLL "$INSTDIR\bin\gpgex.dll" + + Delete /REBOOTOK "$INSTDIR\bin\gpgex.dll" + +${If} ${RunningX64} + ExecWait '"$SYSDIR\regsvr32" /u /s "$INSTDIR\bin\gpgex6.dll"' + Delete /REBOOTOK "$INSTDIR\bin\gpgex6.dll" +${EndIf} +SectionEnd + + +Section "-un.gpa" + Delete "$INSTDIR\bin\gpa.exe" + Delete "$INSTDIR\bin\launch-gpa.exe" + + RMDir "$INSTDIR\share\gpa" +SectionEnd + +Section "-un.pinentry" + Delete "$INSTDIR\bin\pinentry.exe" +SectionEnd + + +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 + +Section "-un.gettext" + Delete "$INSTDIR\bin\libintl-8.dll" +SectionEnd + +Section "-un.gpgme" + Delete "$INSTDIR\bin\libgpgme-11.dll" + Delete "$INSTDIR\bin\libgpgme-glib-11.dll" + Delete "$INSTDIR\bin\gpgme-w32spawn.exe" +SectionEnd + +Section "-un.ksba" + Delete "$INSTDIR\bin\libksba-8.dll" +SectionEnd + +Section "-un.assuan" + Delete "$INSTDIR\bin\libassuan-0.dll" +SectionEnd + +Section "-un.gcrypt" + Delete "$INSTDIR\bin\libgcrypt-20.dll" +SectionEnd + +Section "-un.npth" + Delete "$INSTDIR\bin\libnpth-0.dll" +SectionEnd + +Section "-un.zlib" + Delete "$INSTDIR\bin\zlib1.dll" +SectionEnd + +Section "-un.libiconv" + Delete "$INSTDIR\bin\libiconv-2.dll" +SectionEnd + +Section "-un.libgpg-error" + Delete "$INSTDIR\bin\libgpg-error-0.dll" +SectionEnd + +Section "-un.gnupg" + Delete "$INSTDIR\bin\gpg.exe" + Delete "$INSTDIR\bin\gpgsm.exe" + Delete "$INSTDIR\bin\gpg-agent.exe" + Delete "$INSTDIR\bin\gpgconf.exe" + Delete "$INSTDIR\bin\gpg-connect-agent.exe" + + Delete "$INSTDIR\share\gnupg\gpg-conf.skel" + RMDir "$INSTDIR\share\gnupg" +SectionEnd + +Section "-un.gnupginst" + # Delete standard stuff. + Delete "$INSTDIR\README.txt" + + Delete "$INSTDIR\VERSION" + + # Try to remove the top level directories. + RMDir "$INSTDIR\bin" + RMDir "$INSTDIR\lib" + RMDir "$INSTDIR\share" + RMDir "$INSTDIR\etc" + RMDir "$INSTDIR" + + # Clean the registry. + DeleteRegValue HKLM "Software\GNU\GnuPG" "Install Directory" +SectionEnd + + +Function .onInit + ;;!define MUI_LANGDLL_ALWAYSSHOW + !insertmacro MUI_LANGDLL_DISPLAY + + Call G4wRunOnce + + SetOutPath $TEMP +#!ifdef SOURCES +# File /oname=gpgspltmp.bmp "${TOP_SRCDIR}/doc/logo/gnupg-logo-400px.bmp" +# # We play the tune only for the soruce installer +# File /oname=gpgspltmp.wav "${TOP_SRCDIR}/src/gnupg-splash.wav" +# g4wihelp::playsound $TEMP\gpgspltmp.wav +# g4wihelp::showsplash 2500 $TEMP\gpgspltmp.bmp + +# Delete $TEMP\gpgspltmp.bmp +# # Note that we delete gpgspltmp.wav in .onInst{Failed,Success} +#!endif + + # We can't use TOP_SRCDIR dir as the name of the file needs to be + # the same while building and running the installer. Thus we + # generate the file from a template. + !insertmacro MUI_INSTALLOPTIONS_EXTRACT "${BUILD_DIR}/inst-options.ini" + + #Call CalcDepends +FunctionEnd + + +#Function .onInstFailed +# Delete $TEMP\gpgspltmp.wav +#FunctionEnd + +#Function .onInstSuccess +# Delete $TEMP\gpgspltmp.wav +#FunctionEnd + +#Function .onSelChange +# Call CalcDepends +#FunctionEnd + + +# This must be in a central place. Urgs. + +!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN +!insertmacro MUI_DESCRIPTION_TEXT ${SEC_gnupg} $(DESC_SEC_gnupg) +!insertmacro MUI_DESCRIPTION_TEXT ${SEC_gpa} $(DESC_SEC_gpa) +!insertmacro MUI_DESCRIPTION_TEXT ${SEC_gpgex} $(DESC_SEC_gpgex) +!insertmacro MUI_FUNCTION_DESCRIPTION_END + + +# This also must be in a central place. Also Urgs. + +Section "-startmenu" + +!ifdef HAVE_STARTMENU + # Make sure that the context of the automatic variables has been set to + # the "all users" shell folder. This guarantees that the menu gets written + # for all users. We have already checked that we are running as Admin; or + # we printed a warning that installation will not succeed. + SetShellVarContext all + + # Check if the start menu entries where requested. + !insertmacro MUI_INSTALLOPTIONS_READ $R0 "${BUILD_DIR}/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 "${BUILD_DIR}/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 "${BUILD_DIR}/inst-options.ini" \ + "Field 4" "State" + IntCmp $R0 0 no_quick_launch + StrCmp $QUICKLAUNCH $TEMP no_quick_launch + + SectionGetFlags ${SEC_gpa} $R0 + IntOp $R0 $R0 & ${SF_SELECTED} + IntCmp $R0 ${SF_SELECTED} 0 no_gpa_quicklaunch + CreateShortCut "$QUICKLAUNCH\GPA.lnk" \ + "$INSTDIR\bin\launch-gpa.exe" \ + "" "" "" SW_SHOWNORMAL "" $(DESC_Menu_gpa) +no_gpa_quicklaunch: + + +no_quick_launch: + + +!endif +SectionEnd + + + +# +# Now for the generic parts to end the installation. +# +Var MYTMP + +# Last section is a hidden one. +Section + WriteUninstaller "$INSTDIR\gnupg-uninstall.exe" + + # Windows Add/Remove Programs support + StrCpy $MYTMP "Software\Microsoft\Windows\CurrentVersion\Uninstall\GnuPG" + WriteRegExpandStr HKLM $MYTMP "UninstallString" '"$INSTDIR\gnupg-uninstall.exe"' + WriteRegExpandStr HKLM $MYTMP "InstallLocation" "$INSTDIR" + WriteRegStr HKLM $MYTMP "DisplayName" "${PRETTY_PACKAGE}" + WriteRegStr HKLM $MYTMP "DisplayIcon" "$INSTDIR\bin\gpa.exe,0" + WriteRegStr HKLM $MYTMP "DisplayVersion" "${VERSION}" + WriteRegStr HKLM $MYTMP "Publisher" "The GnuPG Project" + WriteRegStr HKLM $MYTMP "URLInfoAbout" "https://gnupg.org" + WriteRegDWORD HKLM $MYTMP "NoModify" "1" + WriteRegDWORD HKLM $MYTMP "NoRepair" "1" +SectionEnd + + +Section Uninstall + +!ifdef HAVE_STARTMENU + # Make sure that the context of the automatic variables has been set to + # the "all users" shell folder. This guarantees that the menu gets written + # for all users. We have already checked that we are running as Admin; or + # we printed a warning that installation will not succeed. + SetShellVarContext all + + #--------------------------------------------------- + # Delete the menu entries and any empty parent menus + #--------------------------------------------------- + !insertmacro MUI_STARTMENU_GETFOLDER Application $MYTMP + Delete "$SMPROGRAMS\$MYTMP\GPA.lnk" + Delete "$SMPROGRAMS\$MYTMP\GnuPG Manual.lnk" + Delete "$SMPROGRAMS\$MYTMP\GnuPG README.lnk" + Delete "$SMPROGRAMS\$MYTMP\*.lnk" + StrCpy $MYTMP "$SMPROGRAMS\$MYTMP" + startMenuDeleteLoop: + ClearErrors + RMDir $MYTMP + GetFullPathName $MYTMP "$MYTMP\.." + IfErrors startMenuDeleteLoopDone + StrCmp $MYTMP $SMPROGRAMS startMenuDeleteLoopDone startMenuDeleteLoop + startMenuDeleteLoopDone: + + DeleteRegValue HKLM "Software\GNU\GnuPG" "Start Menu Folder" + + # Delete Desktop links. + Delete "$DESKTOP\GPA.lnk" + Delete "$DESKTOP\GnuPG Manual.lnk" + Delete "$DESKTOP\GnuPG README.lnk" + + # Delete Quick Launch Bar links. + StrCmp $QUICKLAUNCH $TEMP no_quick_launch_uninstall + Delete "$QUICKLAUNCH\GPA.lnk" +no_quick_launch_uninstall: + +!endif + + + Delete "$INSTDIR\gnupg-uninstall.exe" + RMDir "$INSTDIR" + + # Clean the registry. + DeleteRegValue HKLM "Software\GNU\GnuPG" "Install Directory" + DeleteRegKey /ifempty HKLM "Software\GNU\GnuPG" + # Remove Windows Add/Remove Programs support. + DeleteRegKey HKLM "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 000000000..75b252770 --- /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 000000000..69bb08bb2 --- /dev/null +++ b/build-aux/speedo/w32/pkg-copyright.txt @@ -0,0 +1,165 @@ +Here is a list with collected copyright notices. For details see the +description of each individual package. [Compiled by wk FIXME] + +GnuPG is + + Copyright (C) 1997-1998, 2013-2014 Werner Koch + Copyright (C) 1998-2013 Free Software Foundation, Inc. + Copyright (C) 2003-2013 g10 Code GmbH + Copyright (C) 2002 Klarälvdalens Datakonsult AB + Copyright (C) 1995-1997, 2000-2007 Ulrich Drepper + 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. + + 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, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA + + +GPA is + + Copyright (C) 2000-2002 G-N-U GmbH (http://www.g-n-u.de) + Copyright (C) 2002-2003 Miguel Coca. + Copyright (C) 2005, 2006, 2008, 2012, 2014 g10 Code GmbH. + Copyright (C) 1998-2000 Free Software Foundation, Inc. + Copyright (C) 2000-2001 Werner Koch + Copyright (C) 2000-2002 Timo Schulz + + GPA 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. + + GPA 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 . + + +GPGME is + + Copyright (C) 2000 Werner Koch (dd9jn) + Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006 g10 Code 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 . + +LIBGPG-ERROR is + + Copyright (C) 2003, 2004 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 . + + +GLIB is + + Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald + + This library 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 of the License, or (at your option) any later version. + + This library 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 library; if not, write to the + Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + + Modified by the GLib Team and others 1997-2000. See the AUTHORS + file for a list of people on the GLib Team. See the ChangeLog + files for a list of changes. These files are distributed with + GLib at ftp://ftp.gtk.org/pub/gtk/. + + +Pthreads-win32 is + + Copyright(C) 1998 John E. Bossom + Copyright(C) 1999,2002 Pthreads-win32 contributors + + Most of this is work available under the GNU Lesser General Public + License as published by the Free Software Foundation version 2.1 of + the License. The detailed terms are given in the file COPYING in + the source distribution; that very file may not be modified and thus + it is not possible to include it here. + + +NSIS is + + 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. + + The user interface used with the installer is + + Copyright (C) 2002-2005 Joost Verburg + + [It is distributed along with NSIS and the same conditions as stated + above apply] diff --git a/build-aux/speedo/zlib.pc b/build-aux/speedo/zlib.pc new file mode 100644 index 000000000..b75805090 --- /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}