Add makefiles to build a w32 development package.

This commit is contained in:
Werner Koch 2010-06-11 13:51:11 +00:00
parent 13dab2af8b
commit 28b3b74cbb
3 changed files with 316 additions and 0 deletions

View File

@ -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 <http://www.gnu.org/licenses/>.
# 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

View File

@ -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.

View File

@ -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 <http://www.gnu.org/licenses/>.
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