python: Generate files into build directory
* lang/python/setup.py.in: Generate files within BuildExtFirstHack adjust build flags at this point instead of global. * lang/python/Makefile.am: Remove logic of separate source directory per python version in favor of build directory. * lang/python/tests/run-tests.py: Adjust build directory location. -- Generate files into build directory, leaving the source directory clean. Use the same source directory for multiple python version build. Result of 'prepare' target is a standard distutil layout that can be used easily by downstream to build all python targets in-place. Signed-off-by: Alon Bar-Lev <alon.barlev@gmail.com>
This commit is contained in:
parent
adfa09699c
commit
801d7d8c5d
@ -27,70 +27,45 @@ EXTRA_DIST = \
|
|||||||
|
|
||||||
SUBDIRS = . tests
|
SUBDIRS = . tests
|
||||||
|
|
||||||
COPY_FILES = \
|
|
||||||
$(srcdir)/gpgme.i \
|
|
||||||
$(srcdir)/README \
|
|
||||||
$(srcdir)/MANIFEST.in \
|
|
||||||
$(srcdir)/gpgme-h-clean.py \
|
|
||||||
$(srcdir)/examples \
|
|
||||||
$(srcdir)/helpers.c $(srcdir)/helpers.h $(srcdir)/private.h
|
|
||||||
|
|
||||||
COPY_FILES_GPG = \
|
|
||||||
$(srcdir)/gpg/callbacks.py \
|
|
||||||
$(srcdir)/gpg/constants \
|
|
||||||
$(srcdir)/gpg/core.py \
|
|
||||||
$(srcdir)/gpg/errors.py \
|
|
||||||
$(srcdir)/gpg/__init__.py \
|
|
||||||
$(srcdir)/gpg/results.py \
|
|
||||||
$(srcdir)/gpg/util.py
|
|
||||||
|
|
||||||
.PHONY: prepare
|
.PHONY: prepare
|
||||||
prepare:
|
prepare: copystamp
|
||||||
test -n "$(PREPAREDIR)"
|
|
||||||
$(MKDIR_P) "$(PREPAREDIR)/gpg"
|
|
||||||
cp -R $(COPY_FILES) "$(PREPAREDIR)"
|
|
||||||
cp setup.py "$(PREPAREDIR)"
|
|
||||||
cp gpg/version.py "$(PREPAREDIR)/gpg"
|
|
||||||
ln -sf "$(abs_top_srcdir)/src/data.h" "$(PREPAREDIR)"
|
|
||||||
ln -sf "$(abs_top_builddir)/config.h" "$(PREPAREDIR)"
|
|
||||||
cp -R $(COPY_FILES_GPG) "$(PREPAREDIR)/gpg"
|
|
||||||
|
|
||||||
# For VPATH builds we need to copy some files because Python's
|
# For VPATH builds we need to copy some files because Python's
|
||||||
# distutils are not VPATH-aware.
|
# distutils are not VPATH-aware.
|
||||||
copystamp: $(COPY_FILES) $(COPY_FILES_GPG)
|
copystamp:
|
||||||
set -e ; for VERSION in $(PYTHON_VERSIONS); do \
|
ln -sf "$(abs_top_srcdir)/src/data.h" .
|
||||||
$(MAKE) PREPAREDIR=python$${VERSION}-gpg prepare; \
|
ln -sf "$(abs_top_builddir)/config.h" .
|
||||||
done
|
|
||||||
touch $@
|
touch $@
|
||||||
|
|
||||||
all-local: copystamp
|
all-local: copystamp
|
||||||
set -e ; set $(PYTHONS); for VERSION in $(PYTHON_VERSIONS); do \
|
set -e ; set $(PYTHONS); for VERSION in $(PYTHON_VERSIONS); do \
|
||||||
PYTHON="$$1" ; shift ; \
|
PYTHON="$$1" ; shift ; \
|
||||||
cd python$${VERSION}-gpg && \
|
|
||||||
CFLAGS="$(CFLAGS)" \
|
CFLAGS="$(CFLAGS)" \
|
||||||
abs_top_builddir="$(abs_top_builddir)" \
|
abs_top_builddir="$(abs_top_builddir)" \
|
||||||
$$PYTHON setup.py build --verbose ; \
|
$$PYTHON setup.py build --verbose --build-base=python$${VERSION}-gpg ; \
|
||||||
cd .. ; \
|
|
||||||
done
|
done
|
||||||
|
|
||||||
python$(PYTHON_VERSION)-gpg/dist/gpg-$(VERSION).tar.gz \
|
|
||||||
python$(PYTHON_VERSION)-gpg/dist/gpg-$(VERSION).tar.gz.asc: copystamp
|
python$(PYTHON_VERSION)-gpg/dist/gpg-$(VERSION).tar.gz.asc: copystamp
|
||||||
cd python$(PYTHON_VERSION)-gpg && \
|
$(MKDIR_P) python$(PYTHON_VERSION)-gpg-dist
|
||||||
CFLAGS="$(CFLAGS)" \
|
CFLAGS="$(CFLAGS)" \
|
||||||
abs_top_builddir="$(abs_top_builddir)" \
|
abs_top_builddir="$(abs_top_builddir)" \
|
||||||
$(PYTHON) setup.py sdist --verbose
|
$(PYTHON) setup.py sdist --verbose --dist-dir=python$(PYTHON_VERSION)-gpg-dist \
|
||||||
gpg2 --detach-sign --armor python$(PYTHON_VERSION)-gpg/dist/gpg-$(VERSION).tar.gz
|
--manifest=python$(PYTHON_VERSION)-gpg-dist/MANIFEST
|
||||||
|
gpg2 --detach-sign --armor python$(PYTHON_VERSION)-gpg-dist/gpg-$(VERSION).tar.gz
|
||||||
|
|
||||||
.PHONY: sdist
|
.PHONY: sdist
|
||||||
sdist: python$(PYTHON_VERSION)-gpg/dist/gpg-$(VERSION).tar.gz \
|
sdist: python$(PYTHON_VERSION)-gpg/dist/gpg-$(VERSION).tar.gz.asc
|
||||||
python$(PYTHON_VERSION)-gpg/dist/gpg-$(VERSION).tar.gz.asc
|
|
||||||
|
|
||||||
.PHONY: upload
|
.PHONY: upload
|
||||||
upload: python$(PYTHON_VERSION)-gpg/dist/gpg-$(VERSION).tar.gz \
|
upload: python$(PYTHON_VERSION)-gpg-dist/gpg-$(VERSION).tar.gz \
|
||||||
python$(PYTHON_VERSION)-gpg/dist/gpg-$(VERSION).tar.gz.asc
|
python$(PYTHON_VERSION)-gpg-dist/gpg-$(VERSION).tar.gz.asc
|
||||||
twine upload $^
|
twine upload $^
|
||||||
|
|
||||||
CLEANFILES = copystamp
|
CLEANFILES = copystamp \
|
||||||
|
config.h \
|
||||||
|
data.h \
|
||||||
|
files.txt \
|
||||||
|
install_files.txt
|
||||||
|
|
||||||
# Remove the rest.
|
# Remove the rest.
|
||||||
#
|
#
|
||||||
@ -104,22 +79,22 @@ clean-local:
|
|||||||
done
|
done
|
||||||
|
|
||||||
install-exec-local:
|
install-exec-local:
|
||||||
rm -f install_files.txt
|
|
||||||
set -e ; set $(PYTHONS); for VERSION in $(PYTHON_VERSIONS); do \
|
set -e ; set $(PYTHONS); for VERSION in $(PYTHON_VERSIONS); do \
|
||||||
PYTHON="$$1" ; shift ; \
|
PYTHON="$$1" ; shift ; \
|
||||||
cd python$${VERSION}-gpg ; \
|
|
||||||
abs_top_builddir="$(abs_top_builddir)" \
|
abs_top_builddir="$(abs_top_builddir)" \
|
||||||
$$PYTHON setup.py install \
|
$$PYTHON setup.py \
|
||||||
--prefix $(DESTDIR)$(prefix) \
|
build \
|
||||||
|
--build-base=python$${VERSION}-gpg \
|
||||||
|
install \
|
||||||
|
--prefix "$(DESTDIR)$(prefix)" \
|
||||||
--record files.txt \
|
--record files.txt \
|
||||||
--verbose ; \
|
--verbose ; \
|
||||||
cat files.txt >> ../install_files.txt ; \
|
cat files.txt >> install_files.txt ; \
|
||||||
rm files.txt ; \
|
rm files.txt ; \
|
||||||
cd .. ; \
|
|
||||||
done
|
done
|
||||||
$(MKDIR_P) $(DESTDIR)$(pythondir)/gpg
|
$(MKDIR_P) "$(DESTDIR)$(pythondir)/gpg"
|
||||||
mv install_files.txt $(DESTDIR)$(pythondir)/gpg
|
mv install_files.txt "$(DESTDIR)$(pythondir)/gpg"
|
||||||
|
|
||||||
uninstall-local:
|
uninstall-local:
|
||||||
xargs <$(DESTDIR)$(pythondir)/gpg/install_files.txt -- rm -rf --
|
xargs < "$(DESTDIR)$(pythondir)/gpg/install_files.txt" -- rm -rf --
|
||||||
rm -rf -- $(DESTDIR)$(pythondir)/gpg
|
rm -rf -- "$(DESTDIR)$(pythondir)/gpg"
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
from distutils.core import setup, Extension
|
from distutils.core import setup, Extension
|
||||||
import os, os.path, sys
|
import os, os.path, sys
|
||||||
import glob
|
import glob
|
||||||
|
import shutil
|
||||||
import subprocess
|
import subprocess
|
||||||
|
|
||||||
# Out-of-tree build of the gpg bindings.
|
# Out-of-tree build of the gpg bindings.
|
||||||
@ -89,14 +90,6 @@ if not os.path.exists(gpg_error_h):
|
|||||||
glob.glob(os.path.join(gpg_error_prefix, "include",
|
glob.glob(os.path.join(gpg_error_prefix, "include",
|
||||||
"*", "gpg-error.h"))[0]
|
"*", "gpg-error.h"))[0]
|
||||||
|
|
||||||
print("Building python gpg module using {} and {}.".format(gpgme_h, gpg_error_h))
|
|
||||||
|
|
||||||
# Cleanup gpgme.h from deprecated functions and typedefs.
|
|
||||||
subprocess.check_call([sys.executable, "gpgme-h-clean.py", gpgme_h],
|
|
||||||
stdout=open("gpgme.h", "w"))
|
|
||||||
subprocess.check_call([sys.executable, "gpgme-h-clean.py", gpg_error_h],
|
|
||||||
stdout=open("errors.i", "w"))
|
|
||||||
|
|
||||||
define_macros = []
|
define_macros = []
|
||||||
libs = getconfig('libs')
|
libs = getconfig('libs')
|
||||||
|
|
||||||
@ -149,14 +142,47 @@ if uname_s.startswith("MINGW32"):
|
|||||||
# http://stackoverflow.com/questions/12491328/python-distutils-not-include-the-swig-generated-module
|
# http://stackoverflow.com/questions/12491328/python-distutils-not-include-the-swig-generated-module
|
||||||
from distutils.command.build import build
|
from distutils.command.build import build
|
||||||
class BuildExtFirstHack(build):
|
class BuildExtFirstHack(build):
|
||||||
|
|
||||||
|
def _generate(self):
|
||||||
|
print("Building python gpg module using {} and {}.".format(gpgme_h, gpg_error_h))
|
||||||
|
|
||||||
|
# Cleanup gpgme.h from deprecated functions and typedefs.
|
||||||
|
# Keep timestamp to avoid rebuild
|
||||||
|
if not os.path.exists(self.build_base):
|
||||||
|
os.makedirs(self.build_base)
|
||||||
|
|
||||||
|
for src, dst in (
|
||||||
|
(gpgme_h, os.path.join(self.build_base, "gpgme.h")),
|
||||||
|
(gpg_error_h, os.path.join(self.build_base, "errors.i"))
|
||||||
|
):
|
||||||
|
subprocess.check_call([sys.executable, "gpgme-h-clean.py", src],
|
||||||
|
stdout=open(dst, "w"))
|
||||||
|
shutil.copystat(src, dst)
|
||||||
|
|
||||||
|
# Copy due to http://bugs.python.org/issue2624
|
||||||
|
# Avoid creating in srcdir
|
||||||
|
shutil.copy2("gpgme.i", self.build_base)
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
|
self._generate()
|
||||||
|
|
||||||
|
# Append generated files via build_base
|
||||||
|
if not os.path.exists(os.path.join(self.build_lib, "gpg")):
|
||||||
|
os.makedirs(os.path.join(self.build_lib, "gpg"))
|
||||||
|
|
||||||
|
swig_sources.append(os.path.join(self.build_base, 'gpgme.i'))
|
||||||
|
swig_opts.extend(['-I' + self.build_base, '-outdir', os.path.join(self.build_lib, 'gpg')])
|
||||||
|
include_dirs.append(self.build_base)
|
||||||
|
|
||||||
self.run_command('build_ext')
|
self.run_command('build_ext')
|
||||||
build.run(self)
|
build.run(self)
|
||||||
|
|
||||||
py3 = [] if sys.version_info.major < 3 else ['-py3']
|
py3 = [] if sys.version_info.major < 3 else ['-py3']
|
||||||
swige = Extension("gpg._gpgme", ["gpgme.i", "helpers.c"],
|
swig_sources = ['helpers.c']
|
||||||
swig_opts = ['-threads',
|
swig_opts = ['-threads'] + py3 + extra_swig_opts
|
||||||
'-outdir', 'gpg'] + py3 + extra_swig_opts,
|
swige = Extension("gpg._gpgme",
|
||||||
|
sources = swig_sources,
|
||||||
|
swig_opts = swig_opts,
|
||||||
include_dirs = include_dirs,
|
include_dirs = include_dirs,
|
||||||
define_macros = define_macros,
|
define_macros = define_macros,
|
||||||
library_dirs = library_dirs,
|
library_dirs = library_dirs,
|
||||||
|
@ -71,7 +71,6 @@ for interpreter in args.interpreters:
|
|||||||
|
|
||||||
pattern = os.path.join(args.builddir, "..",
|
pattern = os.path.join(args.builddir, "..",
|
||||||
"python{0}-gpg".format(version),
|
"python{0}-gpg".format(version),
|
||||||
"build",
|
|
||||||
"lib*"+version)
|
"lib*"+version)
|
||||||
builddirs = glob.glob(pattern)
|
builddirs = glob.glob(pattern)
|
||||||
if len(builddirs) == 0:
|
if len(builddirs) == 0:
|
||||||
|
Loading…
Reference in New Issue
Block a user