Commit def8072c authored by Victor Stinner's avatar Victor Stinner

setup.py: add missing libm dependency

Issue #21668: Link audioop, _datetime, _ctypes_test modules to libm, except on
Mac OS X. Patch written by Xavier de Gaye.
parent ddd9917a
...@@ -400,12 +400,15 @@ Tests ...@@ -400,12 +400,15 @@ Tests
Build Build
----- -----
- Issue #21668: Link audioop, _datetime, _ctypes_test modules to libm,
except on Mac OS X. Patch written by Xavier de Gaye.
- Issue #25702: A --with-lto configure option has been added that will - Issue #25702: A --with-lto configure option has been added that will
enable link time optimizations at build time during a make profile-opt. enable link time optimizations at build time during a make profile-opt.
Some compilers and toolchains are known to not produce stable code when Some compilers and toolchains are known to not produce stable code when
using LTO, be sure to test things thoroughly before relying on it. using LTO, be sure to test things thoroughly before relying on it.
It can provide a few % speed up over profile-opt alone. It can provide a few % speed up over profile-opt alone.
- Issue #26624: Adds validation of ucrtbase[d].dll version with warning - Issue #26624: Adds validation of ucrtbase[d].dll version with warning
for old versions. for old versions.
......
...@@ -480,6 +480,13 @@ class PyBuildExt(build_ext): ...@@ -480,6 +480,13 @@ class PyBuildExt(build_ext):
finally: finally:
os.unlink(tmpfile) os.unlink(tmpfile)
def detect_math_libs(self):
# Check for MacOS X, which doesn't need libm.a at all
if host_platform == 'darwin':
return []
else:
return ['m']
def detect_modules(self): def detect_modules(self):
# Ensure that /usr/local is always used, but the local build # Ensure that /usr/local is always used, but the local build
# directories (i.e. '.' and 'Include') must be first. See issue # directories (i.e. '.' and 'Include') must be first. See issue
...@@ -584,10 +591,7 @@ class PyBuildExt(build_ext): ...@@ -584,10 +591,7 @@ class PyBuildExt(build_ext):
if item.startswith('-L'): if item.startswith('-L'):
lib_dirs.append(item[2:]) lib_dirs.append(item[2:])
# Check for MacOS X, which doesn't need libm.a at all math_libs = self.detect_math_libs()
math_libs = ['m']
if host_platform == 'darwin':
math_libs = []
# XXX Omitted modules: gl, pure, dl, SGI-specific modules # XXX Omitted modules: gl, pure, dl, SGI-specific modules
...@@ -620,7 +624,10 @@ class PyBuildExt(build_ext): ...@@ -620,7 +624,10 @@ class PyBuildExt(build_ext):
# time operations and variables # time operations and variables
exts.append( Extension('time', ['timemodule.c'], exts.append( Extension('time', ['timemodule.c'],
libraries=time_libs) ) libraries=time_libs) )
exts.append( Extension('_datetime', ['_datetimemodule.c']) ) # math_libs is needed by delta_new() that uses round() and by accum()
# that uses modf().
exts.append( Extension('_datetime', ['_datetimemodule.c'],
libraries=math_libs) )
# random number generator implemented in C # random number generator implemented in C
exts.append( Extension("_random", ["_randommodule.c"]) ) exts.append( Extension("_random", ["_randommodule.c"]) )
# bisect # bisect
...@@ -691,11 +698,14 @@ class PyBuildExt(build_ext): ...@@ -691,11 +698,14 @@ class PyBuildExt(build_ext):
# Multimedia modules # Multimedia modules
# These don't work for 64-bit platforms!!! # These don't work for 64-bit platforms!!!
# These represent audio samples or images as strings: # These represent audio samples or images as strings:
#
# Operations on audio samples # Operations on audio samples
# According to #993173, this one should actually work fine on # According to #993173, this one should actually work fine on
# 64-bit platforms. # 64-bit platforms.
exts.append( Extension('audioop', ['audioop.c']) ) #
# audioop needs math_libs for floor() in multiple functions.
exts.append( Extension('audioop', ['audioop.c'],
libraries=math_libs) )
# readline # readline
do_readline = self.compiler.find_library_file(lib_dirs, 'readline') do_readline = self.compiler.find_library_file(lib_dirs, 'readline')
...@@ -1937,6 +1947,7 @@ class PyBuildExt(build_ext): ...@@ -1937,6 +1947,7 @@ class PyBuildExt(build_ext):
'_ctypes/stgdict.c', '_ctypes/stgdict.c',
'_ctypes/cfield.c'] '_ctypes/cfield.c']
depends = ['_ctypes/ctypes.h'] depends = ['_ctypes/ctypes.h']
math_libs = self.detect_math_libs()
if host_platform == 'darwin': if host_platform == 'darwin':
sources.append('_ctypes/malloc_closure.c') sources.append('_ctypes/malloc_closure.c')
...@@ -1967,8 +1978,10 @@ class PyBuildExt(build_ext): ...@@ -1967,8 +1978,10 @@ class PyBuildExt(build_ext):
libraries=[], libraries=[],
sources=sources, sources=sources,
depends=depends) depends=depends)
# function my_sqrt() needs math library for sqrt()
ext_test = Extension('_ctypes_test', ext_test = Extension('_ctypes_test',
sources=['_ctypes/_ctypes_test.c']) sources=['_ctypes/_ctypes_test.c'],
libraries=math_libs)
self.extensions.extend([ext, ext_test]) self.extensions.extend([ext, ext_test])
if not '--with-system-ffi' in sysconfig.get_config_var("CONFIG_ARGS"): if not '--with-system-ffi' in sysconfig.get_config_var("CONFIG_ARGS"):
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment