Skip to content

Commit

Permalink
app-crypt/gpgme: add python bindings
Browse files Browse the repository at this point in the history
  • Loading branch information
alonbl committed Sep 23, 2016
1 parent 79f4674 commit 8642c01
Show file tree
Hide file tree
Showing 2 changed files with 170 additions and 3 deletions.
136 changes: 136 additions & 0 deletions app-crypt/gpgme/files/gpgme-1.7.0-build-python.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
From a46cd3926d629da23b365b70b7bf24201c25d430 Mon Sep 17 00:00:00 2001
From: Alon Bar-Lev <[email protected]>
Date: Sat, 24 Sep 2016 01:26:19 +0300
Subject: [PATCH] build: lang: python: cleanups

1. Make setup.py executable when generated.

2. Add prepare target to enable prepare the source tree without building
anything. This is handy to enable standard distutils build outside of
gpgme build system.

3. Treat data.h in similar manner as other VPATH issues, just copy it to
the srcdir to simplify build, remove the CFLAGS requirement of
distutils.

4. Add environment variable (binary_builddir) for setup to use alternate
build directory so that for multiple targets same binaries may be
used without rebuilding the C part.

The above does not alter the behavior of current build but supports the
following sequence:

$ mkdir common
$ cd common
$ ../configure --enable-languages=
$ make
$ cd ..
$ mkdir python
$ cd python
$ ../configure --enable-languages=
$ cd lang/python
$ make prepare
$ binary_builddir="../../../common" ./setup.py build
$ binary_builddir="../../../common" ./setup.py install

Notice the standard use of distutils which is required for package
manager to control the python selection and build process.

Signed-off-by: Alon Bar-Lev <[email protected]>
---
configure.ac | 2 +-
lang/python/Makefile.am | 11 ++++++-----
lang/python/gpgme.i | 2 +-
lang/python/setup.py.in | 9 +++++----
4 files changed, 13 insertions(+), 11 deletions(-)

diff --git a/configure.ac b/configure.ac
index 4a29f2f..efa1f19 100644
--- a/configure.ac
+++ b/configure.ac
@@ -886,9 +886,9 @@ AC_CONFIG_FILES([lang/Makefile lang/cl/Makefile lang/cl/gpgme.asd])
AM_COND_IF([HAVE_DOXYGEN], [AC_CONFIG_FILES([lang/qt/doc/Doxyfile])])
AC_CONFIG_FILES(lang/qt/doc/Makefile)
AC_CONFIG_FILES([lang/python/Makefile
- lang/python/setup.py
lang/python/pyme/version.py
lang/python/tests/Makefile])
+AC_CONFIG_FILES([lang/python/setup.py], [chmod a+x lang/python/setup.py])
AC_OUTPUT

echo "
diff --git a/lang/python/Makefile.am b/lang/python/Makefile.am
index 2271ce0..fb1eebf 100644
--- a/lang/python/Makefile.am
+++ b/lang/python/Makefile.am
@@ -51,17 +51,18 @@ copystamp: $(COPY_FILES) $(COPY_FILES_PYME)
cp -R $(COPY_FILES) . ; \
cp -R $(COPY_FILES_PYME) pyme ; \
fi
+ cp "$(top_srcdir)/src/data.h" .
touch $@

+prepare: copystamp
+
all-local: copystamp
for PYTHON in $(PYTHONS); do \
- CFLAGS="$(CFLAGS) -I$(top_srcdir)" \
- $$PYTHON setup.py build --verbose ; \
+ $$PYTHON setup.py build --verbose ; \
done

dist/pyme3-$(VERSION).tar.gz dist/pyme3-$(VERSION).tar.gz.asc: copystamp
- CFLAGS="$(CFLAGS) -I$(top_srcdir)" \
- $(PYTHON) setup.py sdist --verbose
+ $(PYTHON) setup.py sdist --verbose
gpg2 --detach-sign --armor dist/pyme3-$(VERSION).tar.gz

.PHONY: sdist
@@ -72,7 +73,7 @@ upload: dist/pyme3-$(VERSION).tar.gz dist/pyme3-$(VERSION).tar.gz.asc
twine upload $^

CLEANFILES = gpgme.h errors.i gpgme_wrap.c pyme/gpgme.py \
- copystamp
+ data.h copystamp

# Remove the rest.
#
diff --git a/lang/python/gpgme.i b/lang/python/gpgme.i
index 84addae..ac666f4 100644
--- a/lang/python/gpgme.i
+++ b/lang/python/gpgme.i
@@ -183,7 +183,7 @@
representation of struct gpgme_data for an very efficient check if
the buffer has been modified. */
%{
-#include "src/data.h" /* For struct gpgme_data. */
+#include "data.h" /* For struct gpgme_data. */
%}
#endif

diff --git a/lang/python/setup.py.in b/lang/python/setup.py.in
index 31892c1..ce06758 100755
--- a/lang/python/setup.py.in
+++ b/lang/python/setup.py.in
@@ -32,13 +32,14 @@ library_dirs = []
in_tree = False
extra_swig_opts = []
extra_macros = dict()
+binary_builddir=os.environ.get('binary_builddir', '../..')

-if os.path.exists("../../src/gpgme-config"):
+if os.path.exists(os.path.join(binary_builddir, "src/gpgme-config")):
# In-tree build.
in_tree = True
- gpgme_config = ["../../src/gpgme-config"] + gpgme_config_flags
- gpgme_h = "../../src/gpgme.h"
- library_dirs = ["../../src/.libs"] # XXX uses libtool internals
+ gpgme_config = [os.path.join(binary_builddir, "src/gpgme-config")] + gpgme_config_flags
+ gpgme_h = os.path.join(binary_builddir, "src/gpgme.h")
+ library_dirs = [os.path.join(binary_builddir, "src/.libs")] # XXX uses libtool internals
extra_macros.update(
HAVE_DATA_H=1,
IN_TREE_BUILD=1,
--
2.7.3

37 changes: 34 additions & 3 deletions app-crypt/gpgme/gpgme-1.7.0.ebuild
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,10 @@

EAPI="6"

inherit autotools eutils
PYTHON_COMPAT=( python2_7 python3_{3,4} )
DISTUTILS_OPTIONAL=1

inherit autotools distutils-r1 eutils

DESCRIPTION="GnuPG Made Easy is a library for making GnuPG easier to use"
HOMEPAGE="http://www.gnupg.org/related_software/gpgme"
Expand All @@ -13,7 +16,7 @@ SRC_URI="mirror://gnupg/gpgme/${P}.tar.bz2"
LICENSE="GPL-2 LGPL-2.1"
SLOT="1/11" # subslot = soname major version
KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~mips ~ppc ~ppc64 ~sparc ~x86 ~x86-fbsd ~x64-freebsd ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos ~sparc64-solaris ~x64-solaris ~x86-solaris"
IUSE="common-lisp static-libs cxx qt5 test"
IUSE="common-lisp static-libs cxx python qt5 test"

RDEPEND="app-crypt/gnupg
>=dev-libs/libassuan-2.0.2
Expand All @@ -22,7 +25,8 @@ RDEPEND="app-crypt/gnupg
dev-qt/qtcore:5
!kde-apps/gpgmepp:4
!kde-apps/kdepimlibs:4
)"
)
python? ( ${PYTHON_DEPS} )"
#doc? ( app-doc/doxygen[dot] )
DEPEND="${RDEPEND}
qt5? (
Expand All @@ -35,11 +39,21 @@ PATCHES=(
"${FILESDIR}"/${PN}-1.1.8-et_EE.patch
"${FILESDIR}"/${P}-build-tests.patch
"${FILESDIR}"/${P}-build-tests-disable.patch
"${FILESDIR}"/${P}-build-python.patch
)

do_python() {
if use python; then
pushd lang/python > /dev/null || die
binary_builddir="${S}" distutils-r1_src_${EBUILD_PHASE}
popd > /dev/null
fi
}

src_prepare() {
default
eautoreconf
do_python
}

src_configure() {
Expand All @@ -56,9 +70,26 @@ src_configure() {
--includedir="${EPREFIX}/usr/include/gpgme" \
--enable-languages="${languages[*]}" \
$(use_enable static-libs static)

python_conf() {
econf --enable-languages=
}
use python && python_foreach_impl python_conf
do_python
}

src_compile() {
default

python_build() {
make -C lang/python prepare
}
use python && python_foreach_impl python_build
do_python
}

src_install() {
default
do_python
prune_libtool_files
}

0 comments on commit 8642c01

Please sign in to comment.