Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 81669d1

Browse files
authored
bpo-45595: Make extensions depend on header files (GH-29198)
``setup.py`` and ``makesetup`` now track build dependencies on all Python header files and module specific header files. Signed-off-by: Christian Heimes <[email protected]>
1 parent 77e3f22 commit 81669d1

File tree

4 files changed

+34
-3
lines changed

4 files changed

+34
-3
lines changed

Makefile.pre.in

+22
Original file line numberDiff line numberDiff line change
@@ -2117,6 +2117,28 @@ Python/thread.o: @THREADHEADERS@ $(srcdir)/Python/condvar.h
21172117
.PHONY: build_all_generate_profile build_all_merge_profile
21182118
.PHONY: gdbhooks
21192119

2120+
##########################################################################
2121+
# Module dependencies
2122+
2123+
MODULE_CMATH_DEPS=$(srcdir)/Modules/_math.h $(srcdir)/Modules/_math.c
2124+
MODULE_MATH_DEPS=$(srcdir)/Modules/_math.h $(srcdir)/Modules/_math.c
2125+
MODULE_PYEXPAT_DEPS=$(srcdir)/Modules/expat/ascii.h $(srcdir)/Modules/expat/asciitab.h $(srcdir)/Modules/expat/expat.h $(srcdir)/Modules/expat/expat_config.h $(srcdir)/Modules/expat/expat_external.h $(srcdir)/Modules/expat/internal.h $(srcdir)/Modules/expat/latin1tab.h $(srcdir)/Modules/expat/utf8tab.h $(srcdir)/Modules/expat/xmlrole.h $(srcdir)/Modules/expat/xmltok.h $(srcdir)/Modules/expat/xmltok_impl.h
2126+
MODULE_UNICODEDATA_DEPS=$(srcdir)/Modules/unicodedata_db.h $(srcdir)/Modules/unicodename_db.h
2127+
MODULE__BLAKE2_DEPS=$(srcdir)/Modules/_blake2/impl/blake2-config.h $(srcdir)/Modules/_blake2/impl/blake2-dispatch.c $(srcdir)/Modules/_blake2/impl/blake2-impl.h $(srcdir)/Modules/_blake2/impl/blake2-kat.h $(srcdir)/Modules/_blake2/impl/blake2.h $(srcdir)/Modules/_blake2/impl/blake2b-load-sse2.h $(srcdir)/Modules/_blake2/impl/blake2b-load-sse41.h $(srcdir)/Modules/_blake2/impl/blake2b-ref.c $(srcdir)/Modules/_blake2/impl/blake2b-round.h $(srcdir)/Modules/_blake2/impl/blake2b-test.c $(srcdir)/Modules/_blake2/impl/blake2b.c $(srcdir)/Modules/_blake2/impl/blake2bp-test.c $(srcdir)/Modules/_blake2/impl/blake2bp.c $(srcdir)/Modules/_blake2/impl/blake2s-load-sse2.h $(srcdir)/Modules/_blake2/impl/blake2s-load-sse41.h $(srcdir)/Modules/_blake2/impl/blake2s-load-xop.h $(srcdir)/Modules/_blake2/impl/blake2s-ref.c $(srcdir)/Modules/_blake2/impl/blake2s-round.h $(srcdir)/Modules/_blake2/impl/blake2s-test.c $(srcdir)/Modules/_blake2/impl/blake2s.c $(srcdir)/Modules/_blake2/impl/blake2sp-test.c $(srcdir)/Modules/_blake2/impl/blake2sp.c $(srcdir)/Modules/hashlib.h
2128+
MODULE__CTYPES_DEPS=$(srcdir)/Modules/_ctypes/ctypes.h
2129+
MODULE__DECIMAL_DEPS=$(srcdir)/Modules/_decimal/docstrings.h $(srcdir)/Modules/_decimal/libmpdec/basearith.h $(srcdir)/Modules/_decimal/libmpdec/bits.h $(srcdir)/Modules/_decimal/libmpdec/constants.h $(srcdir)/Modules/_decimal/libmpdec/convolute.h $(srcdir)/Modules/_decimal/libmpdec/crt.h $(srcdir)/Modules/_decimal/libmpdec/difradix2.h $(srcdir)/Modules/_decimal/libmpdec/fnt.h $(srcdir)/Modules/_decimal/libmpdec/fourstep.h $(srcdir)/Modules/_decimal/libmpdec/io.h $(srcdir)/Modules/_decimal/libmpdec/mpalloc.h $(srcdir)/Modules/_decimal/libmpdec/mpdecimal.h $(srcdir)/Modules/_decimal/libmpdec/numbertheory.h $(srcdir)/Modules/_decimal/libmpdec/sixstep.h $(srcdir)/Modules/_decimal/libmpdec/transpose.h $(srcdir)/Modules/_decimal/libmpdec/typearith.h $(srcdir)/Modules/_decimal/libmpdec/umodarith.h
2130+
MODULE__ELEMENTTREE_DEPS=$(srcdir)/Modules/expat/ascii.h $(srcdir)/Modules/expat/asciitab.h $(srcdir)/Modules/expat/expat.h $(srcdir)/Modules/expat/expat_config.h $(srcdir)/Modules/expat/expat_external.h $(srcdir)/Modules/expat/internal.h $(srcdir)/Modules/expat/latin1tab.h $(srcdir)/Modules/expat/utf8tab.h $(srcdir)/Modules/expat/xmlparse.c $(srcdir)/Modules/expat/xmlrole.c $(srcdir)/Modules/expat/xmlrole.h $(srcdir)/Modules/expat/xmltok.c $(srcdir)/Modules/expat/xmltok.h $(srcdir)/Modules/expat/xmltok_impl.h $(srcdir)/Modules/pyexpat.c
2131+
MODULE__HASHLIB_DEPS=$(srcdir)/Modules/hashlib.h
2132+
MODULE__IO_DEPS=$(srcdir)/Modules/_io/_iomodule.h
2133+
MODULE__MD5_DEPS=$(srcdir)/Modules/hashlib.h
2134+
MODULE__SHA1_DEPS=$(srcdir)/Modules/hashlib.h
2135+
MODULE__SHA256_DEPS=$(srcdir)/Modules/hashlib.h
2136+
MODULE__SHA3_DEPS=$(srcdir)/Modules/_sha3/kcp/KeccakHash.c $(srcdir)/Modules/_sha3/kcp/KeccakHash.h $(srcdir)/Modules/_sha3/kcp/KeccakP-1600-64.macros $(srcdir)/Modules/_sha3/kcp/KeccakP-1600-SnP-opt32.h $(srcdir)/Modules/_sha3/kcp/KeccakP-1600-SnP-opt64.h $(srcdir)/Modules/_sha3/kcp/KeccakP-1600-SnP.h $(srcdir)/Modules/_sha3/kcp/KeccakP-1600-inplace32BI.c $(srcdir)/Modules/_sha3/kcp/KeccakP-1600-opt64-config.h $(srcdir)/Modules/_sha3/kcp/KeccakP-1600-opt64.c $(srcdir)/Modules/_sha3/kcp/KeccakP-1600-unrolling.macros $(srcdir)/Modules/_sha3/kcp/KeccakSponge.c $(srcdir)/Modules/_sha3/kcp/KeccakSponge.h $(srcdir)/Modules/_sha3/kcp/KeccakSponge.inc $(srcdir)/Modules/_sha3/kcp/PlSnP-Fallback.inc $(srcdir)/Modules/_sha3/kcp/SnP-Relaned.h $(srcdir)/Modules/_sha3/kcp/align.h $(srcdir)/Modules/hashlib.h
2137+
MODULE__SHA512_DEPS=$(srcdir)/Modules/hashlib.h
2138+
MODULE__SOCKET_DEPS=$(srcdir)/Modules/socketmodule.h
2139+
MODULE__SSL_DEPS=$(srcdir)/Modules/_ssl.h $(srcdir)/Modules/_ssl/cert.c $(srcdir)/Modules/_ssl/debughelpers.c $(srcdir)/Modules/_ssl/misc.c $(srcdir)/Modules/_ssl_data.h $(srcdir)/Modules/_ssl_data_111.h $(srcdir)/Modules/_ssl_data_300.h $(srcdir)/Modules/socketmodule.h
2140+
MODULE__TESTCAPI_DEPS=$(srcdir)/Modules/testcapi_long.h
2141+
21202142
# IF YOU PUT ANYTHING HERE IT WILL GO AWAY
21212143
# Local Variables:
21222144
# mode: makefile
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
``setup.py`` and ``makesetup`` now track build dependencies on all Python
2+
header files and module specific header files.

Modules/makesetup

+3-2
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,8 @@ sed -e 's/[ ]*#.*//' -e '/^[ ]*$/d' |
235235
*)
236236
cc="$cc \$(PY_BUILTIN_MODULE_CFLAGS)";;
237237
esac
238-
rule="$obj: $src; $cc $cpps -c $src -o $obj"
238+
mods_upper=$(echo $mods | tr '[a-z]' '[A-Z]')
239+
rule="$obj: $src \$(MODULE_${mods_upper}_DEPS) \$(PYTHON_HEADERS); $cc $cpps -c \$< -o \$@"
239240
echo "$rule" >>$rulesf
240241
done
241242
case $doconfig in
@@ -248,7 +249,7 @@ sed -e 's/[ ]*#.*//' -e '/^[ ]*$/d' |
248249
no) SHAREDMODS="$SHAREDMODS $file";;
249250
esac
250251
rule="$file: $objs"
251-
rule="$rule; \$(BLDSHARED) $objs $libs $ExtraLibs -o $file"
252+
rule="$rule; \$(BLDSHARED) $objs $libs $ExtraLibs -o \$@"
252253
echo "$rule" >>$rulesf
253254
done
254255
done

setup.py

+7-1
Original file line numberDiff line numberDiff line change
@@ -409,8 +409,11 @@ def update_sources_depends(self):
409409
for filename in self.distribution.scripts]
410410

411411
# Python header files
412+
include_dir = escape(sysconfig.get_path('include'))
412413
headers = [sysconfig.get_config_h_filename()]
413-
headers += glob(os.path.join(escape(sysconfig.get_path('include')), "*.h"))
414+
headers.extend(glob(os.path.join(include_dir, "*.h")))
415+
headers.extend(glob(os.path.join(include_dir, "cpython", "*.h")))
416+
headers.extend(glob(os.path.join(include_dir, "internal", "*.h")))
414417

415418
for ext in self.extensions:
416419
ext.sources = [ find_module_file(filename, moddirlist)
@@ -2473,6 +2476,9 @@ def split_var(name, sep):
24732476
depends=[
24742477
'socketmodule.h',
24752478
'_ssl.h',
2479+
'_ssl_data_111.h',
2480+
'_ssl_data_300.h',
2481+
'_ssl_data.h',
24762482
'_ssl/debughelpers.c',
24772483
'_ssl/misc.c',
24782484
'_ssl/cert.c',

0 commit comments

Comments
 (0)