]> granicus.if.org Git - python/commitdiff
Merged revisions 72445 via svnmerge from
authorTarek Ziadé <ziade.tarek@gmail.com>
Thu, 7 May 2009 21:24:43 +0000 (21:24 +0000)
committerTarek Ziadé <ziade.tarek@gmail.com>
Thu, 7 May 2009 21:24:43 +0000 (21:24 +0000)
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
Lib/distutils/tests/test_build_clib.py
Lib/distutils/tests/test_sysconfig.py
Makefile.pre.in
Misc/ACKS
Misc/NEWS
configure.in

index fbeb45f8cc08ad11d16f6268d40672af28013b6a..223ff672b94d64eecfd945891cb76d1130e5f362 100644 (file)
@@ -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
 
index 7374c4956afefbc4f9fdf89da06cb3dd4b7084d1..3c6643f354d78b36a3a906d573f9ae14e0e00f34 100644 (file)
@@ -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)
 
index 1e9dbd542ffa139002a184f07a7494d5a9934b2a..971aac6daf47eaa71ee83588fabd62c010fb19d6 100644 (file)
@@ -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():
index b2525e20489522c58a55c9fefa93ed8ac48a6021..d8b0abb73fed4e8769acf921af8d13f63c57e2b9 100644 (file)
@@ -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)
index e26940ab35b2c444ef5cecb526c3a805524fedb2..5623bad637072210be0f777e83143449c83527ce 100644 (file)
--- 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
index 1c5734c3cdca7e8970bc3c3ed0cd602e4f4a6485..4051323b81b1bdcf84d92ced352ab7a591594431 100644 (file)
--- 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 
index ba43b2121ef5e38d1821be69bb096ebe0f81af7a..2591d8dffbd95c7178f5a9e1cb49ec53abe29190 100644 (file)
@@ -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