diff --git a/Makefile.am b/Makefile.am index 71046b2f..ff93fc0a 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,6 +1,6 @@ # Makefile.am - Top level Makefile for GPGME. # Copyright (C) 2000 Werner Koch (dd9jn) -# Copyright (C) 2001, 2002, 2004, 2005, 2008, 2009 g10 Code GmbH +# Copyright (C) 2001, 2002, 2004, 2005, 2008, 2009, 2024 g10 Code GmbH # # This file is part of GPGME. # @@ -70,8 +70,6 @@ distcheck-hook: esac;\ done ) | tee $(distdir).swdb -.PHONY: gen-ChangeLog release sign-release - gen_start_date = 2011-12-01T00:00:00 gen-ChangeLog: if test -d $(top_srcdir)/.git; then \ @@ -142,3 +140,58 @@ sign-release: echo ' * All done; for checksums see dist/swdb.snippet' ;\ echo ' */' ;\ ) + +languages = $(NESTED_LANGUAGES) + +dist_languages = $(languages:%=dist-%) +$(dist_languages): + +(set -e;\ + lang=$$(echo "$@" | sed 's/.*-//');\ + cd "lang/$$lang";\ + $(MAKE) dist;\ + ) + +distcheck_languages = $(languages:%=distcheck-%) +$(distcheck_languages): + +(set -e;\ + lang=$$(echo "$@" | sed 's/.*-//');\ + cd "lang/$$lang";\ + $(MAKE) distcheck;\ + ) + +release_languages = $(languages:%=release-%) +$(release_languages): + +(set -e;\ + lang=$$(echo "$@" | sed 's/.*-//');\ + cd "lang/$$lang";\ + $(MAKE) release;\ + ) + +sign_release_languages = $(languages:%=sign-release-%) +$(sign_release_languages): + +(set -e;\ + lang=$$(echo "$@" | sed 's/.*-//');\ + cd "lang/$$lang";\ + $(MAKE) sign-release;\ + ) + +distclean_languages = $(languages:%=distclean-%) +$(distclean_languages): + +(set -e;\ + lang=$$(echo "$@" | sed 's/.*-//');\ + cd "lang/$$lang";\ + $(MAKE) distclean;\ + ) +distclean-local: $(distclean_languages) + +dist-all: dist $(dist_languages) + +distcheck-all: distcheck $(distcheck_languages) + +release-all: release $(release_languages) + +sign-release-all: sign-release $(sign_release_languages) + +.PHONY: gen-ChangeLog release sign-release dist-all $(dist_languages) \ + distcheck-all $(distcheck_languages) release-all $release_languages) \ + sign-release-all $(sign_release_languages) $(distclean_languages) diff --git a/autogen-all.sh b/autogen-all.sh new file mode 100755 index 00000000..a57863fe --- /dev/null +++ b/autogen-all.sh @@ -0,0 +1,67 @@ +#! /bin/sh +# autogen-all.sh +# Copyright (C) 2024 g10 Code GmbH +# +# This file is free software; as a special exception the author gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# +# This script is a helper to run the autogen.sh script for gpgme and the +# nested packages of the C++, Qt, and Python bindings. + +prog=$(basename "$0") + +packages=". lang/cpp" + +fatal () { + echo "${prog}:" "$*" >&2 + DIE=yes +} + +info () { + if [ -z "${SILENT}" ]; then + echo "${prog}:" "$*" >&2 + fi +} + +die_p () { + if [ "$DIE" = "yes" ]; then + echo "autogen.sh: Stop." >&2 + exit 1 + fi +} + +DIE=no +SILENT= +tmp=$(dirname "$0") +tsdir=$(cd "${tmp}"; pwd) + +am_lf=' +' + +if test x"$1" = x"--help"; then + tmp="$(pwd)" + cd "$tsdir" || fatal "error cd-ing to $tsdir" + die_p + ./autogen.sh --help | sed "s/autogen.sh/${prog}/" || fatal "error running ./autogen.sh --help" + die_p + exit 0 +fi +if test x"$1" = x"--silent"; then + SILENT=" --silent" +fi + +for p in $packages; do + info Running ./autogen.sh "$@" in $p ... + curdir="$(pwd)" + cd "$tsdir/$p" || fatal "error cd-ing to $tsdir/$p" + die_p + ./autogen.sh "$@" | sed "s/autogen.sh/${prog}/" || fatal "error running ./autogen.sh $@" + die_p + cd "$curdir" || fatal "error cd-ing back to $curdir" + die_p +done diff --git a/configure.ac b/configure.ac index b22e8517..bb21e754 100644 --- a/configure.ac +++ b/configure.ac @@ -238,6 +238,11 @@ have_macos_system=no build_w32_glib=no available_languages="cl" default_languages="cl" +for lang in cpp; do + if test -d $srcdir/lang/$lang; then + available_languages="$available_languages $lang" + fi +done case "${host}" in x86_64-*mingw32*) have_w64_system=yes @@ -323,8 +328,7 @@ fi # lang/Makefile.am's DIST_SUBDIRS. AC_ARG_ENABLE([languages], AS_HELP_STRING([--enable-languages=languages], - [enable only specific language bindings: - cl]), + [enable only specific language bindings]), [enabled_languages=`echo $enableval | \ tr ',:' ' ' | tr '[A-Z]' '[a-z]'`], [enabled_languages="maybe"]) @@ -351,6 +355,14 @@ done AC_SUBST(ENABLED_LANGUAGES, $enabled_languages) +nested_languages= +LIST_MEMBER("cpp", $enabled_languages) +if test "$found" = "1"; then + nested_languages="$nested_languages cpp" +fi + +AC_SUBST(NESTED_LANGUAGES, $nested_languages) + # # Provide information about the build. # @@ -825,6 +837,13 @@ AC_CONFIG_FILES([lang/Makefile lang/cl/Makefile lang/cl/gpgme.asd]) AC_CONFIG_FILES([lang/js/Makefile lang/js/src/Makefile lang/js/BrowserTestExtension/Makefile lang/js/DemoExtension/Makefile]) + +# Call ./configure scripts of nested packages recursively. +LIST_MEMBER("cpp", $enabled_languages) +if test "$found" = "1"; then + AC_CONFIG_SUBDIRS([lang/cpp]) +fi + AC_OUTPUT echo " diff --git a/lang/cpp/configure.ac b/lang/cpp/configure.ac index 9f8414ac..22065317 100644 --- a/lang/cpp/configure.ac +++ b/lang/cpp/configure.ac @@ -354,8 +354,26 @@ AM_CONDITIONAL(USE_GPGRT_CONFIG, [test -n "$GPGRT_CONFIG" \ # And for gpgme. have_gpgme=no -AM_PATH_GPGME("$NEED_GPGME_VERSION", - have_gpgme=yes, have_gpgme=no) +builddir=`pwd` +# Check if gpgmepp is built as nested package of gpgme +if test "${srcdir%/lang/cpp}/lang/cpp" == "$srcdir" -a \ + "${builddir%/lang/cpp}/lang/cpp" == "$builddir"; then + AC_MSG_CHECKING(for GpgME - assuming nested build) + gpgme_build_dir=${builddir%/lang/cpp} + if test -f "$gpgme_build_dir/src/gpgme.h"; then + GPGME_CFLAGS="-I$gpgme_build_dir/src" + GPGME_LIBS="$gpgme_build_dir/src/libgpgme.la" + have_gpgme=yes + AC_MSG_RESULT(yes) + else + AC_MSG_RESULT(no) + fi +fi + +if test "$have_gpgme" = "no"; then + AM_PATH_GPGME("$NEED_GPGME_VERSION", + have_gpgme=yes, have_gpgme=no) +fi # Substitution used for gpgmepp.pc