python: support .pydistutils.cfg mode

* lang/python/setup.py.in: Do not parse arguments.

--

The distutils settings can come from either command-line or
configuration file. Parsing parameters is not working in all cases.

Signed-off-by: Alon Bar-Lev <alon.barlev@gmail.com>
This commit is contained in:
Alon Bar-Lev 2017-04-07 17:31:47 +03:00 committed by Justus Winter
parent 49195c487e
commit 365c649ad0
No known key found for this signature in database
GPG Key ID: DD1A52F9DA8C9020

View File

@ -19,18 +19,12 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
from distutils.core import setup, Extension from distutils.core import setup, Extension
import argparse
import os, os.path, sys import os, os.path, sys
import glob import glob
import re import re
import shutil import shutil
import subprocess import subprocess
# We parse a subset of the arguments.
parser = argparse.ArgumentParser(add_help=False)
parser.add_argument('--build-base', default='')
options, _ = parser.parse_known_args()
# Out-of-tree build of the gpg bindings. # Out-of-tree build of the gpg bindings.
gpg_error_config = ["gpg-error-config"] gpg_error_config = ["gpg-error-config"]
gpgme_config_flags = ["--thread=pthread"] gpgme_config_flags = ["--thread=pthread"]
@ -142,8 +136,6 @@ if uname_s.startswith("MINGW32"):
def in_srcdir(name): def in_srcdir(name):
return os.path.join(os.environ.get("srcdir", ""), name) return os.path.join(os.environ.get("srcdir", ""), name)
def in_build_base(name):
return os.path.join(options.build_base, name)
def up_to_date(source, target): def up_to_date(source, target):
return (os.path.exists(target) return (os.path.exists(target)
and os.path.getmtime(source) <= os.path.getmtime(target)) and os.path.getmtime(source) <= os.path.getmtime(target))
@ -190,6 +182,9 @@ class BuildExtFirstHack(build):
continue continue
sink.write(rewrite_re.sub(r'%constant long \1 = \1;'+'\n', line.strip())) sink.write(rewrite_re.sub(r'%constant long \1 = \1;'+'\n', line.strip()))
def _in_build_base(self, name):
return os.path.join(self.build_base, name)
def _generate(self): def _generate(self):
print("Building python gpg module using {} and {}.".format(gpgme_h, gpg_error_h)) print("Building python gpg module using {} and {}.".format(gpgme_h, gpg_error_h))
@ -197,18 +192,18 @@ class BuildExtFirstHack(build):
if not os.path.exists(self.build_base): if not os.path.exists(self.build_base):
os.makedirs(self.build_base) os.makedirs(self.build_base)
self._generate_gpgme_h(gpgme_h, in_build_base("gpgme.h")) self._generate_gpgme_h(gpgme_h, self._in_build_base("gpgme.h"))
self._generate_errors_i(gpg_error_h, in_build_base("errors.i")) self._generate_errors_i(gpg_error_h, self._in_build_base("errors.i"))
# Keep timestamp to avoid rebuild # Keep timestamp to avoid rebuild
for source, target in ((gpgme_h, in_build_base("gpgme.h")), for source, target in ((gpgme_h, self._in_build_base("gpgme.h")),
(gpg_error_h, in_build_base("errors.i"))): (gpg_error_h, self._in_build_base("errors.i"))):
if not up_to_date(source, target): if not up_to_date(source, target):
shutil.copystat(source, target) shutil.copystat(source, target)
# Copy due to http://bugs.python.org/issue2624 # Copy due to http://bugs.python.org/issue2624
# Avoid creating in srcdir # Avoid creating in srcdir
for source, target in ((in_srcdir(n), in_build_base(n)) for source, target in ((in_srcdir(n), self._in_build_base(n))
for n in ('gpgme.i', 'helpers.c', 'private.h', 'helpers.h')): for n in ('gpgme.i', 'helpers.c', 'private.h', 'helpers.h')):
if not up_to_date(source, target): if not up_to_date(source, target):
shutil.copy2(source, target) shutil.copy2(source, target)
@ -221,7 +216,7 @@ class BuildExtFirstHack(build):
def run(self): def run(self):
self._generate() self._generate()
swig_sources.append(os.path.join(self.build_base, 'gpgme.i')) swig_sources.extend((self._in_build_base('gpgme.i'), self._in_build_base('helpers.c')))
swig_opts.extend(['-I' + self.build_base, swig_opts.extend(['-I' + self.build_base,
'-outdir', os.path.join(self.build_lib, 'gpg')]) '-outdir', os.path.join(self.build_lib, 'gpg')])
include_dirs.append(self.build_base) include_dirs.append(self.build_base)
@ -230,7 +225,7 @@ class BuildExtFirstHack(build):
build.run(self) build.run(self)
py3 = [] if sys.version_info.major < 3 else ['-py3'] py3 = [] if sys.version_info.major < 3 else ['-py3']
swig_sources = [in_build_base('helpers.c')] swig_sources = []
swig_opts = ['-threads'] + py3 + extra_swig_opts swig_opts = ['-threads'] + py3 + extra_swig_opts
swige = Extension("gpg._gpgme", swige = Extension("gpg._gpgme",
sources = swig_sources, sources = swig_sources,