aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIngo Klöcker <[email protected]>2024-06-04 12:34:46 +0000
committerIngo Klöcker <[email protected]>2024-06-11 12:58:00 +0000
commit6334960bbe0be78680d5b24890b569a8375496b0 (patch)
tree52cb66d78169cd786457095b5f33c9f69a38a942
parentbuild,python: Separate Python bindings from gpgme (diff)
downloadgpgme-6334960bbe0be78680d5b24890b569a8375496b0.tar.gz
gpgme-6334960bbe0be78680d5b24890b569a8375496b0.zip
build,cpp: Support building C++ bindings as nested package of gpgme
* Makefile.am: Add variables languages, dist_languages, distcheck_languages, release_languages, sign_release_languages, distclean_languages. Add rules for nested language bindings. (distclean-local, dist-all, distcheck-all, release-all, sign-release-all): New rules. (.PHONY): Add all new rules. * autogen-all.sh: New. * configure.ac: Add cpp to available languages if subdir exists. Add cpp to nested languages if enabled to generate corresponding make targets. Call configure script of nested cpp package recursively. * lang/cpp/configure.ac: Check if gpgmepp is built as nested package and set GPGME_CFLAGS and GPGME_LIBS accordingly. -- This re-adds the ability to build the C++ bindings together with gpgme with a single `configure && make` command (if building from git). It also adds make targets for running dist, distcheck, release and sign-release for gpgme and all enabled nested languages with a single make command. GnuPG-bug-id: 7110
-rw-r--r--Makefile.am59
-rwxr-xr-xautogen-all.sh67
-rw-r--r--configure.ac23
-rw-r--r--lang/cpp/configure.ac22
4 files changed, 164 insertions, 7 deletions
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