diff --git a/scripts/gpg-w32-dev/GNUmakefile b/scripts/gpg-w32-dev/GNUmakefile new file mode 100644 index 000000000..f6502c279 --- /dev/null +++ b/scripts/gpg-w32-dev/GNUmakefile @@ -0,0 +1,142 @@ +# Makefile - Makefile for speedo +# Copyright (C) 2008 g10 Code GmbH +# +# This file is part of speedo. +# +# speedo is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# speedo is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, see . + +# speedo builds gnupg-related packages from SVN and installs them in a +# user directory, thereby providing a non-obstrusive test environment. +# The build system is similar to that of gpg4win. The following commands +# are supported: +# +# make all or make +# +# Builds all packages and installs them under playground/install. +# At the end, speedo prints commands that can be executed in the local shell +# to make use of the installed packages. +# +# make clean or make clean-PACKAGE +# +# Removes all packages or the package PACKAGE from the installation +# and build tree. A subsequent make will rebuild these (and only +# these) packages. +# +# make report or make report-PACKAGE +# +# Lists packages and versions. +# +# make dist +# +# Create a development ZIP archive. + + +# -------- + +# The packages that should be built. The order is also the build order. +speedo_spkgs = libgpg-error libgcrypt libassuan libksba gpgme + +# For each package, the following variables can be defined: +# +# speedo_pkg_PACKAGE_svn: The SVN repository that should be built. +# Branches or specific revisions can also be specified. +# +# speedo_pkg_PACKAGE_tar: URL to the tar file that should be built. +# +# Exactly one of the above variables is required. Note that this +# version of speedo does not cache repositories or tar files, and does +# not test the integrity of the downloaded software. If you care +# about this, you can also specify filenames to locally verified files. +# Filenames are differentiated from URLs by starting with a slash '/'. +# +# speedo_pkg_PACKAGE_configure: Extra arguments to configure. +# +# speedo_pkg_PACKAGE_make_args: Extra arguments to make. +# +# speedo_pkg_PACKAGE_make_args_inst: Extra arguments to make install. +# +# Note that you can override the defaults in this file in a local file +# "config.mk" + +# Set this to "svn" or "release". +WHAT=release + +ifeq ($(WHAT),svn) + svnrep = svn://cvs.gnupg.org/ + speedo_pkg_libgpg_error_svn = $(svnrep)/libgpg-error/trunk + speedo_pkg_libassuan_svn = $(svnrep)/libassuan/trunk + speedo_pkg_libgcrypt_svn = $(svnrep)/libgcrypt/trunk + speedo_pkg_libksba_svn = $(svnrep)/libksba/trunk + speedo_pkg_gpgme_svn = $(svnrep)/gpgme/trunk +else + pkgrep = ftp://ftp.gnupg.org/gcrypt + speedo_pkg_libgpg_error_tar = $(pkgrep)/libgpg-error/libgpg-error-1.8.tar.bz2 + speedo_pkg_libassuan_tar = $(pkgrep)/libassuan/libassuan-2.0.0.tar.bz2 + speedo_pkg_libgcrypt_tar = $(pkgrep)/libgcrypt/libgcrypt-1.4.5.tar.bz2 + speedo_pkg_libksba_tar = $(pkgrep)/libksba/libksba-1.0.7.tar.bz2 + speedo_pkg_gpgme_tar = $(pkgrep)/gpgme/gpgme-1.3.0.tar.bz2 +endif + +speedo_pkg_gnupg_configure = --with-pinentry-pgm=$(idir)/bin/pinentry \ + --with-dirmngr-pgm=$(idir)/bin/dirmngr + +speedo_pkg_dirmngr_configure = --localstatedir=/var --sysconfdir=/etc \ + --with-libgcrypt-prefix=$(idir) --with-gpg-error-prefix=$(idir) \ + --with-libassuan-prefix=$(idir) --with-libksba-prefix=$(idir) + +speedo_pkg_gpgme_configure = --with-gpg=$(idir)/bin/gpg2 \ + --with-gpgsm=$(idir)/bin/gpgsm \ + --with-gpgconf=$(idir)/bin/gpgconf + +speedo_pkg_pinentry_configure = --disable-pinentry-qt4 + +speedo_pkg_libgcrypt_configure = --disable-static + +speedo_pkg_libksba_configure = --disable-static + + +# --------- + +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 + + +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/ ; \ + i586-mingw32msvc-strip $${pkgname}/bin/*.dll ; \ + zip -r9 $${pkgname}.zip $${pkgname} >/dev/null ; \ + rm -rf $$pkgname; \ + echo "$$pkgname.zip ready for distribution" >&2 + + +speedo_build_list = $(speedo_spkgs) + +-include config.mk +include speedo.mk diff --git a/scripts/gpg-w32-dev/README b/scripts/gpg-w32-dev/README new file mode 100644 index 000000000..ac2ffeba8 --- /dev/null +++ b/scripts/gpg-w32-dev/README @@ -0,0 +1,6 @@ +These makefiles are used to build a simple development package of +GnuPG related libraries for Windoze. The ZIP archive includes only +the binaries, import libraries and header files. On a file server you +should keep the original source tarballs close to the archive file and +explain where to find the sources. GNU make is required. + diff --git a/scripts/gpg-w32-dev/speedo.mk b/scripts/gpg-w32-dev/speedo.mk new file mode 100644 index 000000000..4e0e63a9f --- /dev/null +++ b/scripts/gpg-w32-dev/speedo.mk @@ -0,0 +1,168 @@ +# speedo.mk - Speedo rebuilds speedily. +# Copyright (C) 2008 g10 Code GmbH +# +# This file is part of speedo. +# +# speedo is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# speedo is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, see . + +MKDIR=mkdir +STOW=stow + +# These paths must be absolute, as we switch directories pretty often. +root := $(shell pwd)/playground +bdir := $(root)/build +idir := $(root)/install +ipdir := $(root)/install/pkgs + +# The playground area is our scratch area, where we unpack, build and +# install the packages. +stamps/stamp-directories: + $(MKDIR) stamps + $(MKDIR) playground + $(MKDIR) $(bdir) + $(MKDIR) $(idir) + #$(MKDIR) $(ipdir) + touch stamps/stamp-directories + +# Frob the name $1 by converting all '-' and '+' characters to '_'. +define FROB_macro +$(subst +,_,$(subst -,_,$(1))) +endef + +# Get the variable $(1) (which may contain '-' and '+' characters). +define GETVAR +$($(call FROB_macro,$(1))) +endef + +# Set a couple of common variables. +define SETVARS + pkg="$(1)"; \ + svn="$(call GETVAR,speedo_pkg_$(1)_svn)"; \ + tar="$(call GETVAR,speedo_pkg_$(1)_tar)"; \ + pkgsdir="$(bdir)/$(1)"; \ + pkgbdir="$(bdir)/$(1)-build"; \ + pkgidir="$(ipdir)/$(1)"; \ + pkgcfg="$(call GETVAR,speedo_pkg_$(1)_configure)"; \ + pkgmkargs="$(call GETVAR,speedo_pkg_$(1)_make_args)"; \ + pkgmkargs_inst="$(call GETVAR,speedo_pkg_$(1)_make_args_inst)"; \ + export PATH="$(idir)/bin:$${PATH}"; \ + export LD_LIBRARY_PATH="$(idir)/lib:$${LD_LIBRARY_PATH}" +endef + + +# Template for source packages. + +define SPKG_template + +stamps/stamp-$(1)-00-unpack: stamps/stamp-directories + (cd $(bdir); \ + $(call SETVARS,$(1)); \ + if [ -n "$$$${svn}" ]; then \ + svn checkout "$$$${svn}" "$$$${pkg}"; \ + cd "$$$${pkg}"; \ + ./autogen.sh; \ + elif [ -n "$$$${tar}" ]; then \ + case "$$$${tar}" in \ + (*.gz) opt=z ;; \ + (*.bz2) opt=j ;; \ + (*) opt= ;; \ + esac; \ + case "$$$${tar}" in \ + (/*) cmd=cat ;; \ + (*) cmd="wget -q -O -" ;; \ + esac; \ + $$$${cmd} "$$$${tar}" | tar x$$$${opt}f - ; \ + base=`echo "$$$${tar}" | sed -e 's,^.*/,,' \ + | sed -e 's,\.tar.*$$$$,,'`; \ + mv $$$${base} $(1); \ + fi) + touch stamps/stamp-$(1)-00-unpack + +stamps/stamp-$(1)-01-configure: stamps/stamp-$(1)-00-unpack + ($(call SETVARS,$(1)); \ + mkdir "$$$${pkgbdir}"; \ + cd "$$$${pkgbdir}"; \ + eval "../$$$${pkg}/configure" \ + --enable-maintainer-mode \ + --prefix="$(idir)" \ + --host=i586-mingw32msvc \ + $$$${pkgcfg}) + touch stamps/stamp-$(1)-01-configure + +stamps/stamp-$(1)-02-make: stamps/stamp-$(1)-01-configure + ($(call SETVARS,$(1)); \ + cd "$$$${pkgbdir}"; \ + $(MAKE) $$$${pkgmkargs}) + touch stamps/stamp-$(1)-02-make + +# Note that post_install must come last because it may be empty and +# "; ;" is a syntax error. +stamps/stamp-$(1)-03-install: stamps/stamp-$(1)-02-make + ($(call SETVARS,$(1)); \ + cd "$$$${pkgbdir}"; \ + $(MAKE) $$$${pkgmkargs_inst} install-strip ; \ + $(call gpg4win_pkg_$(call FROB_macro,$(1))_post_install)) + touch stamps/stamp-$(1)-03-install + +stamps/stamp-final-$(1): stamps/stamp-$(1)-03-install + touch stamps/stamp-final-$(1) + +.PHONY : clean-$(1) +clean-$(1): + ($(call SETVARS,$(1)); \ + (cd $(ipdir) && \ + ($(STOW) -D "$$$${pkg}"; \ + rm -fR "$$$${pkg}")); \ + rm -fR "$$$${pkgsdir}" "$$$${pkgbdir}") + rm -f stamps/stamp-final-$(1) stamps/stamp-$(1)-* + +.PHONY : report-$(1) +report-$(1): + @($(call SETVARS,$(1)); \ + echo -n $(1):\ ; \ + if [ -n "$$$${svn}" ]; then \ + if [ -e .svn ]; then \ + cd $(bdir)/$(1) && \ + svn info | grep Repository ; \ + else \ + echo missing; \ + fi \ + elif [ -n "$$$${tar}" ]; then \ + base=`echo "$$$${tar}" | sed -e 's,^.*/,,' \ + | sed -e 's,\.tar.*$$$$,,'`; \ + echo $$$${base} ; \ + fi) + +endef + + +# Insert the template for each source package. +$(foreach spkg, $(speedo_spkgs), $(eval $(call SPKG_template,$(spkg)))) + +stamps/stamp-final: stamps/stamp-directories +stamps/stamp-final: $(addprefix stamps/stamp-final-,$(speedo_build_list)) + touch stamps/stamp-final + +all-speedo: stamps/stamp-final + +report-speedo: $(addprefix report-,$(speedo_build_list)) + +# Just to check if we catched all stamps. +clean-stamps: + $(RM) -fR $(stamps) + +clean-speedo: + $(RM) -fR playground stamps + +.PHONY : all-speedo report-speedo clean-stamps clean-speedo