changeset: 100342:d4190ed586a4 branch: 2.7 parent: 100335:ca1f87cda826 user: Martin Panter date: Wed Feb 03 05:19:44 2016 +0000 files: Makefile.pre.in Misc/NEWS setup.py description: Issue #24421: Compile _math.c separately to avoid race condition diff -r ca1f87cda826 -r d4190ed586a4 Makefile.pre.in --- a/Makefile.pre.in Thu Feb 25 20:14:10 2016 +0100 +++ b/Makefile.pre.in Wed Feb 03 05:19:44 2016 +0000 @@ -528,11 +528,15 @@ 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 -r ca1f87cda826 -r d4190ed586a4 Misc/NEWS --- a/Misc/NEWS Thu Feb 25 20:14:10 2016 +0100 +++ b/Misc/NEWS Wed Feb 03 05:19:44 2016 +0000 @@ -143,6 +143,10 @@ 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 -r ca1f87cda826 -r d4190ed586a4 setup.py --- a/setup.py Thu Feb 25 20:14:10 2016 +0100 +++ b/setup.py Wed Feb 03 05:19:44 2016 +0000 @@ -584,13 +584,17 @@ # 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']) )