Fixed #5941: added ARFLAGS for the archiver command.
This commit is contained in:
parent
ff748cd6eb
commit
99f660af3f
|
@ -165,9 +165,9 @@ def customize_compiler(compiler):
|
||||||
varies across Unices and is stored in Python's Makefile.
|
varies across Unices and is stored in Python's Makefile.
|
||||||
"""
|
"""
|
||||||
if compiler.compiler_type == "unix":
|
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',
|
get_config_vars('CC', 'CXX', 'OPT', 'CFLAGS',
|
||||||
'CCSHARED', 'LDSHARED', 'SO', 'AR')
|
'CCSHARED', 'LDSHARED', 'SO', 'AR', 'ARFLAGS')
|
||||||
|
|
||||||
if 'CC' in os.environ:
|
if 'CC' in os.environ:
|
||||||
cc = os.environ['CC']
|
cc = os.environ['CC']
|
||||||
|
@ -190,6 +190,10 @@ def customize_compiler(compiler):
|
||||||
ldshared = ldshared + ' ' + os.environ['CPPFLAGS']
|
ldshared = ldshared + ' ' + os.environ['CPPFLAGS']
|
||||||
if 'AR' in os.environ:
|
if 'AR' in os.environ:
|
||||||
ar = os.environ['AR']
|
ar = os.environ['AR']
|
||||||
|
if 'ARFLAGS' in os.environ:
|
||||||
|
archiver = ar + ' ' + os.environ['ARFLAGS']
|
||||||
|
else:
|
||||||
|
archiver = ar + ' ' + ar_flags
|
||||||
|
|
||||||
cc_cmd = cc + ' ' + cflags
|
cc_cmd = cc + ' ' + cflags
|
||||||
compiler.set_executables(
|
compiler.set_executables(
|
||||||
|
@ -199,7 +203,7 @@ def customize_compiler(compiler):
|
||||||
compiler_cxx=cxx,
|
compiler_cxx=cxx,
|
||||||
linker_so=ldshared,
|
linker_so=ldshared,
|
||||||
linker_exe=cc,
|
linker_exe=cc,
|
||||||
archiver=ar)
|
archiver=archiver)
|
||||||
|
|
||||||
compiler.shared_lib_extension = so_ext
|
compiler.shared_lib_extension = so_ext
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,12 @@
|
||||||
"""Tests for distutils.command.build_clib."""
|
"""Tests for distutils.command.build_clib."""
|
||||||
import unittest
|
import unittest
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
from distutils.command.build_clib import build_clib
|
from distutils.command.build_clib import build_clib
|
||||||
from distutils.errors import DistutilsSetupError
|
from distutils.errors import DistutilsSetupError
|
||||||
from distutils.tests import support
|
from distutils.tests import support
|
||||||
|
from distutils.spawn import find_executable
|
||||||
|
|
||||||
class BuildCLibTestCase(support.TempdirManager,
|
class BuildCLibTestCase(support.TempdirManager,
|
||||||
support.LoggingSilencer,
|
support.LoggingSilencer,
|
||||||
|
@ -97,6 +100,43 @@ class BuildCLibTestCase(support.TempdirManager,
|
||||||
cmd.distribution.libraries = 'WONTWORK'
|
cmd.distribution.libraries = 'WONTWORK'
|
||||||
self.assertRaises(DistutilsSetupError, cmd.finalize_options)
|
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():
|
def test_suite():
|
||||||
return unittest.makeSuite(BuildCLibTestCase)
|
return unittest.makeSuite(BuildCLibTestCase)
|
||||||
|
|
||||||
|
|
|
@ -49,7 +49,8 @@ class SysconfigTestCase(unittest.TestCase):
|
||||||
if get_default_compiler() != 'unix':
|
if get_default_compiler() != 'unix':
|
||||||
return
|
return
|
||||||
|
|
||||||
os.environ['AR'] = 'xxx'
|
os.environ['AR'] = 'my_ar'
|
||||||
|
os.environ['ARFLAGS'] = '-arflags'
|
||||||
|
|
||||||
# make sure AR gets caught
|
# make sure AR gets caught
|
||||||
class compiler:
|
class compiler:
|
||||||
|
@ -60,7 +61,7 @@ class SysconfigTestCase(unittest.TestCase):
|
||||||
|
|
||||||
comp = compiler()
|
comp = compiler()
|
||||||
sysconfig.customize_compiler(comp)
|
sysconfig.customize_compiler(comp)
|
||||||
self.assertEquals(comp.exes['archiver'], 'xxx')
|
self.assertEquals(comp.exes['archiver'], 'my_ar -arflags')
|
||||||
|
|
||||||
|
|
||||||
def test_suite():
|
def test_suite():
|
||||||
|
|
|
@ -67,6 +67,7 @@ LDLAST= @LDLAST@
|
||||||
SGI_ABI= @SGI_ABI@
|
SGI_ABI= @SGI_ABI@
|
||||||
CCSHARED= @CCSHARED@
|
CCSHARED= @CCSHARED@
|
||||||
LINKFORSHARED= @LINKFORSHARED@
|
LINKFORSHARED= @LINKFORSHARED@
|
||||||
|
ARFLAGS= @ARFLAGS@
|
||||||
# Extra C flags added for building the interpreter object files.
|
# Extra C flags added for building the interpreter object files.
|
||||||
CFLAGSFORSHARED=@CFLAGSFORSHARED@
|
CFLAGSFORSHARED=@CFLAGSFORSHARED@
|
||||||
# C flags used for building the interpreter object files
|
# C flags used for building the interpreter object files
|
||||||
|
@ -403,12 +404,12 @@ sharedmods: $(BUILDPYTHON)
|
||||||
# avoid long command lines, same as LIBRARY_OBJS
|
# avoid long command lines, same as LIBRARY_OBJS
|
||||||
$(LIBRARY): $(LIBRARY_OBJS)
|
$(LIBRARY): $(LIBRARY_OBJS)
|
||||||
-rm -f $@
|
-rm -f $@
|
||||||
$(AR) cr $@ Modules/getbuildinfo.o
|
$(AR) $(ARFLAGS) $@ Modules/getbuildinfo.o
|
||||||
$(AR) cr $@ $(PARSER_OBJS)
|
$(AR) $(ARFLAGS) $@ $(PARSER_OBJS)
|
||||||
$(AR) cr $@ $(OBJECT_OBJS)
|
$(AR) $(ARFLAGS) $@ $(OBJECT_OBJS)
|
||||||
$(AR) cr $@ $(PYTHON_OBJS)
|
$(AR) $(ARFLAGS) $@ $(PYTHON_OBJS)
|
||||||
$(AR) cr $@ $(MODULE_OBJS) $(SIGNAL_OBJS)
|
$(AR) $(ARFLAGS) $@ $(MODULE_OBJS) $(SIGNAL_OBJS)
|
||||||
$(AR) cr $@ $(MODOBJS)
|
$(AR) $(ARFLAGS) $@ $(MODOBJS)
|
||||||
$(RANLIB) $@
|
$(RANLIB) $@
|
||||||
|
|
||||||
libpython$(VERSION).so: $(LIBRARY_OBJS)
|
libpython$(VERSION).so: $(LIBRARY_OBJS)
|
||||||
|
|
|
@ -145,6 +145,7 @@ Aldo Cortesi
|
||||||
David Costanzo
|
David Costanzo
|
||||||
Scott Cotton
|
Scott Cotton
|
||||||
Greg Couch
|
Greg Couch
|
||||||
|
David Cournapeau
|
||||||
Steve Cousins
|
Steve Cousins
|
||||||
Alex Coventry
|
Alex Coventry
|
||||||
Matthew Dixon Cowles
|
Matthew Dixon Cowles
|
||||||
|
|
|
@ -285,6 +285,11 @@ Core and Builtins
|
||||||
Library
|
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 5955: aifc's close method did not close the file it wrapped,
|
- Issue 5955: aifc's close method did not close the file it wrapped,
|
||||||
now it does. This also means getfp method now returns the real fp.
|
now it does. This also means getfp method now returns the real fp.
|
||||||
|
|
||||||
|
|
|
@ -770,6 +770,13 @@ AC_PROG_RANLIB
|
||||||
AC_SUBST(AR)
|
AC_SUBST(AR)
|
||||||
AC_CHECK_PROGS(AR, ar aal, 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_SUBST(SVNVERSION)
|
||||||
AC_CHECK_PROG(SVNVERSION, svnversion, found, not-found)
|
AC_CHECK_PROG(SVNVERSION, svnversion, found, not-found)
|
||||||
if test $SVNVERSION = found
|
if test $SVNVERSION = found
|
||||||
|
|
Loading…
Reference in New Issue