From: Martin Panter Date: Wed, 3 Feb 2016 05:19:44 +0000 (+0000) Subject: Issue #24421: Compile _math.c separately to avoid race condition X-Git-Tag: v2.7.12rc1~210 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=83e9b5763245c727993eab0a0133b2b337605f88;p=thirdparty%2FPython%2Fcpython.git Issue #24421: Compile _math.c separately to avoid race condition --- diff --git a/Makefile.pre.in b/Makefile.pre.in index 3b43f1be8e74..cf9bec3afcfb 100644 --- a/Makefile.pre.in +++ b/Makefile.pre.in @@ -528,11 +528,15 @@ pybuilddir.txt: $(BUILDPYTHON) exit 1 ; \ fi +# This is shared by the math and cmath modules +Modules/_math.o: Modules/_math.c Modules/_math.h + $(CC) -c $(CCSHARED) $(PY_CFLAGS) -o $@ $< + # Build the shared modules # Under GNU make, MAKEFLAGS are sorted and normalized; the 's' for # -s, --silent or --quiet is always the first char. # Under BSD make, MAKEFLAGS might be " -s -v x=y". -sharedmods: $(BUILDPYTHON) pybuilddir.txt +sharedmods: $(BUILDPYTHON) pybuilddir.txt Modules/_math.o @case "$$MAKEFLAGS" in \ *\ -s*|s*) quiet="-q";; \ *) quiet="";; \ diff --git a/Misc/NEWS b/Misc/NEWS index 10eee93ea287..49d3fd105907 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -143,6 +143,10 @@ Tests Build ----- +- Issue #24421: Compile Modules/_math.c once, before building extensions. + Previously it could fail to compile properly if the math and cmath builds + were concurrent. + - Issue #25824: Fixes sys.winver to not include any architecture suffix. - Issue #25348: Added ``--pgo`` and ``--pgo-job`` arguments to diff --git a/setup.py b/setup.py index 094318849a79..780889fb8e64 100644 --- a/setup.py +++ b/setup.py @@ -584,13 +584,17 @@ class PyBuildExt(build_ext): # array objects exts.append( Extension('array', ['arraymodule.c']) ) + + shared_math = 'Modules/_math.o' # complex math library functions - exts.append( Extension('cmath', ['cmathmodule.c', '_math.c'], - depends=['_math.h'], + exts.append( Extension('cmath', ['cmathmodule.c'], + extra_objects=[shared_math], + depends=['_math.h', shared_math], libraries=math_libs) ) # math library functions, e.g. sin() - exts.append( Extension('math', ['mathmodule.c', '_math.c'], - depends=['_math.h'], + exts.append( Extension('math', ['mathmodule.c'], + extra_objects=[shared_math], + depends=['_math.h', shared_math], libraries=math_libs) ) # fast string operations implemented in C exts.append( Extension('strop', ['stropmodule.c']) )