From 5662d3e676088b43d3138d48819ce7410292198d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tarek=20Ziad=C3=A9?= Date: Thu, 7 May 2009 21:24:43 +0000 Subject: Merged revisions 72445 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r72445 | tarek.ziade | 2009-05-07 23:20:34 +0200 (Thu, 07 May 2009) | 1 line Fixed #5941: added ARFLAGS for the archiver command. ........ --- Lib/distutils/sysconfig.py | 10 ++++++--- Lib/distutils/tests/test_build_clib.py | 40 ++++++++++++++++++++++++++++++++++ Lib/distutils/tests/test_sysconfig.py | 5 +++-- Makefile.pre.in | 13 ++++++----- Misc/ACKS | 1 + Misc/NEWS | 5 +++++ configure.in | 7 ++++++ 7 files changed, 70 insertions(+), 11 deletions(-) diff --git a/Lib/distutils/sysconfig.py b/Lib/distutils/sysconfig.py index fbeb45f..223ff67 100644 --- a/Lib/distutils/sysconfig.py +++ b/Lib/distutils/sysconfig.py @@ -160,9 +160,9 @@ def customize_compiler(compiler): varies across Unices and is stored in Python's Makefile. """ if compiler.compiler_type == "unix": - (cc, cxx, opt, cflags, ccshared, ldshared, so_ext, ar) = \ + (cc, cxx, opt, cflags, ccshared, ldshared, so_ext, ar, ar_flags) = \ get_config_vars('CC', 'CXX', 'OPT', 'CFLAGS', - 'CCSHARED', 'LDSHARED', 'SO', 'AR') + 'CCSHARED', 'LDSHARED', 'SO', 'AR', 'ARFLAGS') if 'CC' in os.environ: cc = os.environ['CC'] @@ -185,6 +185,10 @@ def customize_compiler(compiler): ldshared = ldshared + ' ' + os.environ['CPPFLAGS'] if 'AR' in os.environ: ar = os.environ['AR'] + if 'ARFLAGS' in os.environ: + archiver = ar + ' ' + os.environ['ARFLAGS'] + else: + archiver = ar + ' ' + ar_flags cc_cmd = cc + ' ' + cflags compiler.set_executables( @@ -194,7 +198,7 @@ def customize_compiler(compiler): compiler_cxx=cxx, linker_so=ldshared, linker_exe=cc, - archiver=ar) + archiver=archiver) compiler.shared_lib_extension = so_ext diff --git a/Lib/distutils/tests/test_build_clib.py b/Lib/distutils/tests/test_build_clib.py index 7374c49..3c6643f 100644 --- a/Lib/distutils/tests/test_build_clib.py +++ b/Lib/distutils/tests/test_build_clib.py @@ -1,9 +1,12 @@ """Tests for distutils.command.build_clib.""" import unittest +import os +import sys from distutils.command.build_clib import build_clib from distutils.errors import DistutilsSetupError from distutils.tests import support +from distutils.spawn import find_executable class BuildCLibTestCase(support.TempdirManager, support.LoggingSilencer, @@ -97,6 +100,43 @@ class BuildCLibTestCase(support.TempdirManager, cmd.distribution.libraries = 'WONTWORK' self.assertRaises(DistutilsSetupError, cmd.finalize_options) + def test_run(self): + # can't test on windows + if sys.platform == 'win32': + return + + pkg_dir, dist = self.create_dist() + cmd = build_clib(dist) + + foo_c = os.path.join(pkg_dir, 'foo.c') + self.write_file(foo_c, 'int main(void) { return 1;}') + cmd.libraries = [('foo', {'sources': [foo_c]})] + + build_temp = os.path.join(pkg_dir, 'build') + os.mkdir(build_temp) + cmd.build_temp = build_temp + cmd.build_clib = build_temp + + # before we run the command, we want to make sure + # all commands are present on the system + # by creating a compiler and checking its executables + from distutils.ccompiler import new_compiler + from distutils.sysconfig import customize_compiler + + compiler = new_compiler() + customize_compiler(compiler) + for ccmd in compiler.executables.values(): + if ccmd is None: + continue + if find_executable(ccmd[0]) is None: + return # can't test + + # this should work + cmd.run() + + # let's check the result + self.assert_('libfoo.a' in os.listdir(build_temp)) + def test_suite(): return unittest.makeSuite(BuildCLibTestCase) diff --git a/Lib/distutils/tests/test_sysconfig.py b/Lib/distutils/tests/test_sysconfig.py index 1e9dbd5..971aac6 100644 --- a/Lib/distutils/tests/test_sysconfig.py +++ b/Lib/distutils/tests/test_sysconfig.py @@ -49,7 +49,8 @@ class SysconfigTestCase(unittest.TestCase): if get_default_compiler() != 'unix': return - os.environ['AR'] = 'xxx' + os.environ['AR'] = 'my_ar' + os.environ['ARFLAGS'] = '-arflags' # make sure AR gets caught class compiler: @@ -60,7 +61,7 @@ class SysconfigTestCase(unittest.TestCase): comp = compiler() sysconfig.customize_compiler(comp) - self.assertEquals(comp.exes['archiver'], 'xxx') + self.assertEquals(comp.exes['archiver'], 'my_ar -arflags') def test_suite(): diff --git a/Makefile.pre.in b/Makefile.pre.in index b2525e2..d8b0abb 100644 --- a/Makefile.pre.in +++ b/Makefile.pre.in @@ -67,6 +67,7 @@ LDLAST= @LDLAST@ SGI_ABI= @SGI_ABI@ CCSHARED= @CCSHARED@ LINKFORSHARED= @LINKFORSHARED@ +ARFLAGS= @ARFLAGS@ # Extra C flags added for building the interpreter object files. CFLAGSFORSHARED=@CFLAGSFORSHARED@ # C flags used for building the interpreter object files @@ -422,12 +423,12 @@ sharedmods: $(BUILDPYTHON) # avoid long command lines, same as LIBRARY_OBJS $(LIBRARY): $(LIBRARY_OBJS) -rm -f $@ - $(AR) cr $@ Modules/getbuildinfo.o - $(AR) cr $@ $(PARSER_OBJS) - $(AR) cr $@ $(OBJECT_OBJS) - $(AR) cr $@ $(PYTHON_OBJS) - $(AR) cr $@ $(MODULE_OBJS) $(SIGNAL_OBJS) - $(AR) cr $@ $(MODOBJS) + $(AR) $(ARFLAGS) $@ Modules/getbuildinfo.o + $(AR) $(ARFLAGS) $@ $(PARSER_OBJS) + $(AR) $(ARFLAGS) $@ $(OBJECT_OBJS) + $(AR) $(ARFLAGS) $@ $(PYTHON_OBJS) + $(AR) $(ARFLAGS) $@ $(MODULE_OBJS) $(SIGNAL_OBJS) + $(AR) $(ARFLAGS) $@ $(MODOBJS) $(RANLIB) $@ libpython$(VERSION).so: $(LIBRARY_OBJS) diff --git a/Misc/ACKS b/Misc/ACKS index e26940a..5623bad 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -144,6 +144,7 @@ Aldo Cortesi David Costanzo Scott Cotton Greg Couch +David Cournapeau Steve Cousins Alex Coventry Matthew Dixon Cowles diff --git a/Misc/NEWS b/Misc/NEWS index 1c5734c..4051323 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -581,6 +581,11 @@ Core and Builtins Library ------- +- Issue #5941: Distutils build_clib command was not working anymore because + of an incomplete costumization of the archiver command. Added ARFLAGS in the + Makefile besides AR and make Distutils use it. Original patch by David + Cournapeau. + - Issue #2245: aifc now skips chunk types it doesn't recognize, per spec. - Issue #5874: distutils.tests.test_config_cmd is not locale-sensitive diff --git a/configure.in b/configure.in index ba43b21..2591d8d 100644 --- a/configure.in +++ b/configure.in @@ -726,6 +726,13 @@ AC_PROG_RANLIB AC_SUBST(AR) AC_CHECK_PROGS(AR, ar aal, ar) +# tweak ARFLAGS only if the user didn't set it on the command line +AC_SUBST(ARFLAGS) +if test -z "$ARFLAGS" +then + ARFLAGS="rc" +fi + AC_SUBST(SVNVERSION) AC_CHECK_PROG(SVNVERSION, svnversion, found, not-found) if test $SVNVERSION = found -- cgit v0.12