aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIngo Klöcker <[email protected]>2024-06-06 09:38:28 +0000
committerIngo Klöcker <[email protected]>2024-06-11 12:58:00 +0000
commit67ebc53b0f7193dab53bb03e3536b0e81c78e2c1 (patch)
tree60874f93284789e8d252daa23b637184be11d5ec
parentbuild,qt: Support building Qt bindings as nested package of gpgme (diff)
downloadgpgme-67ebc53b0f7193dab53bb03e3536b0e81c78e2c1.tar.gz
gpgme-67ebc53b0f7193dab53bb03e3536b0e81c78e2c1.zip
build,python: Support building Python bindings as nested package
* autogen-all.sh (packages): Add lang/python. * configure.ac: Add python to available languages if subdir exists. Add python to nested languages if enabled to generate corresponding make targets. Call configure script of nested python package recursively. * lang/python/configure.ac: Check if Python bindings are built as nested package and set GPGME_CFLAGS and GPGME_LIBS accordingly. * lang/python/setup.py.in: Define some variables where they are used first. Extract library directories from GPGME_LIBS variable similar to the extraction of include directories from GPGME_CFLAGS. Adjust library locations in case of win32 the same way as the include locations. Prefer gpgme.h in the include directories from GPGME_CFLAGS over the one in the prefix, so that the correct gpgme.h is taken in case of nested builds. -- This re-adds the ability to build the Python bindings together with gpgme with a single `configure && make` command (if building from git). GnuPG-bug-id: 7110
-rwxr-xr-xautogen-all.sh2
-rw-r--r--configure.ac10
-rw-r--r--lang/python/configure.ac22
-rwxr-xr-xlang/python/setup.py.in39
4 files changed, 50 insertions, 23 deletions
diff --git a/autogen-all.sh b/autogen-all.sh
index 88fb15f7..83af1f0b 100755
--- a/autogen-all.sh
+++ b/autogen-all.sh
@@ -15,7 +15,7 @@
prog=$(basename "$0")
-packages=". lang/cpp lang/qt"
+packages=". lang/cpp lang/qt lang/python"
fatal () {
echo "${prog}:" "$*" >&2
diff --git a/configure.ac b/configure.ac
index 7ec79226..03324be3 100644
--- a/configure.ac
+++ b/configure.ac
@@ -238,7 +238,7 @@ have_macos_system=no
build_w32_glib=no
available_languages="cl"
default_languages="cl"
-for lang in cpp qt; do
+for lang in cpp qt python; do
if test -d $srcdir/lang/$lang; then
available_languages="$available_languages $lang"
fi
@@ -364,6 +364,10 @@ LIST_MEMBER("qt", $enabled_languages)
if test "$found" = "1"; then
nested_languages="$nested_languages qt"
fi
+LIST_MEMBER("python", $enabled_languages)
+if test "$found" = "1"; then
+ nested_languages="$nested_languages python"
+fi
AC_SUBST(NESTED_LANGUAGES, $nested_languages)
@@ -851,6 +855,10 @@ LIST_MEMBER("qt", $enabled_languages)
if test "$found" = "1"; then
AC_CONFIG_SUBDIRS([lang/qt])
fi
+LIST_MEMBER("python", $enabled_languages)
+if test "$found" = "1"; then
+ AC_CONFIG_SUBDIRS([lang/python])
+fi
AC_OUTPUT
diff --git a/lang/python/configure.ac b/lang/python/configure.ac
index 34033ed3..116d7d0b 100644
--- a/lang/python/configure.ac
+++ b/lang/python/configure.ac
@@ -409,8 +409,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 Python bindings are built as nested package of gpgme
+if test "${srcdir%/lang/python}/lang/python" == "$srcdir" -a \
+ "${builddir%/lang/python}/lang/python" == "$builddir"; then
+ AC_MSG_CHECKING(for GpgME - assuming nested build)
+ gpgme_build_dir=${builddir%/lang/python}
+ if test -f "$gpgme_build_dir/src/gpgme.h"; then
+ GPGME_CFLAGS="-I$gpgme_build_dir/src"
+ GPGME_LIBS="-L$gpgme_build_dir/src/.libs -lgpgme"
+ 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
#
diff --git a/lang/python/setup.py.in b/lang/python/setup.py.in
index fe20b0ef..3d44341d 100755
--- a/lang/python/setup.py.in
+++ b/lang/python/setup.py.in
@@ -33,10 +33,6 @@ import shutil
import subprocess
import sys
-# Out-of-tree build of the gpg bindings.
-gpgme_h = ''
-include_dirs = [os.getcwd()]
-library_dirs = []
if hasattr(subprocess, 'DEVNULL'):
devnull = subprocess.DEVNULL
@@ -52,12 +48,17 @@ major, minor, patch = map(int, version.split('.'))
if not (major > 1 or (major == 1 and minor >= 7)):
sys.exit('Need at least GPGME version 1.7, found {}.'.format(version_raw))
-define_macros = []
+library_dirs = []
+libs = []
if '@GPGME_LIBS@':
- libs = '@GPGME_LIBS@'.split(' ')
-else:
- libs = []
+ for item in '@GPGME_LIBS@'.split(' '):
+ if item.startswith('-L'):
+ library_dirs.append(item[2:])
+ else:
+ libs.append(item)
+include_dirs = [os.getcwd()]
+define_macros = []
if '@GPGME_CFLAGS@':
for item in '@GPGME_CFLAGS@'.split(' '):
if item.startswith('-I'):
@@ -87,23 +88,23 @@ if uname_s.startswith('MINGW32'):
extra_dirs.append(os.path.join(tgt, item))
break
include_dirs += extra_dirs
- for item in [x[2:] for x in libs if x.startswith('-L')]:
+ extra_dirs = []
+ for item in library_dirs:
for ln, mnt, tgt in tmplist:
if item.startswith(mnt):
item = os.path.normpath(item[ln:])
while item[0] == os.path.sep:
item = item[1:]
- library_dirs.append(os.path.join(tgt, item))
- break
-
-if not gpgme_h:
- if os.path.exists(os.path.join('@prefix@', 'include', 'gpgme.h')):
- gpgme_h = os.path.join('@prefix@', 'include', 'gpgme.h')
- else:
- for include_dir in (include_dirs or ['/usr/include']):
- if os.path.exists(os.path.join(include_dir, 'gpgme.h')):
- gpgme_h = os.path.join(include_dir, 'gpgme.h')
+ extra_dirs.append(os.path.join(tgt, item))
break
+ library_dirs += extra_dirs
+
+gpgme_h = None
+for include_dir in (include_dirs +
+ [os.path.join('@prefix@', 'include'), '/usr/include']):
+ if os.path.exists(os.path.join(include_dir, 'gpgme.h')):
+ gpgme_h = os.path.join(include_dir, 'gpgme.h')
+ break
if not gpgme_h:
sys.exit('gpgme.h not found.')