]> granicus.if.org Git - python/commitdiff
Issue #24421: Compile _math.c separately to avoid race condition
authorMartin Panter <vadmium+py@gmail.com>
Wed, 3 Feb 2016 05:19:44 +0000 (05:19 +0000)
committerMartin Panter <vadmium+py@gmail.com>
Wed, 3 Feb 2016 05:19:44 +0000 (05:19 +0000)
Makefile.pre.in
Misc/NEWS
setup.py

index 91fa06eca76a45ad5dbce90bfddde33dffca5835..9b4ab8def1ebdefaeef1e0cc1db9fd340caf2a4c 100644 (file)
@@ -586,11 +586,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_CORE_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="";; \
index 029b334e5689cf1f88cb05838e0d0bf61f3c0176..18d3efe1f20497add908d20119e00cffad82ac29 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -261,6 +261,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 #25348: Added ``--pgo`` and ``--pgo-job`` arguments to
   ``PCbuild\build.bat`` for building with Profile-Guided Optimization.  The
   old ``PCbuild\build_pgo.bat`` script is now deprecated, and simply calls
index 3ebc3deb825dc53233322dfa9fffe359efeadc1e..de6e5ad8dcae65b1ba3a436e2b96b4cebc3504b9 100644 (file)
--- a/setup.py
+++ b/setup.py
@@ -598,13 +598,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) )
 
         # time libraries: librt may be needed for clock_gettime()