@@ -361,7 +361,7 @@ def find_module_file(module, dirlist):
361
361
return module
362
362
if len (dirs ) > 1 :
363
363
log .info (f"WARNING: multiple copies of { module } found" )
364
- return os .path .join (dirs [0 ], module )
364
+ return os .path .abspath ( os . path . join (dirs [0 ], module ) )
365
365
366
366
367
367
def parse_cflags (flags ):
@@ -454,7 +454,13 @@ def remove_disabled(self):
454
454
def update_sources_depends (self ):
455
455
# Fix up the autodetected modules, prefixing all the source files
456
456
# with Modules/.
457
- moddirlist = [os .path .join (self .srcdir , 'Modules' )]
457
+ # Add dependencies from MODULE_{name}_DEPS variable
458
+ moddirlist = [
459
+ # files in Modules/ directory
460
+ os .path .join (self .srcdir , 'Modules' ),
461
+ # files relative to build base, e.g. libmpdec.a, libexpat.a
462
+ os .getcwd ()
463
+ ]
458
464
459
465
# Fix up the paths for scripts, too
460
466
self .distribution .scripts = [os .path .join (self .srcdir , filename )
@@ -470,11 +476,16 @@ def update_sources_depends(self):
470
476
for ext in self .extensions :
471
477
ext .sources = [ find_module_file (filename , moddirlist )
472
478
for filename in ext .sources ]
473
- if ext .depends is not None :
474
- ext .depends = [find_module_file (filename , moddirlist )
475
- for filename in ext .depends ]
476
- else :
477
- ext .depends = []
479
+ # Update dependencies from Makefile
480
+ makedeps = sysconfig .get_config_var (f"MODULE_{ ext .name .upper ()} _DEPS" )
481
+ if makedeps :
482
+ # remove backslashes from line break continuations
483
+ ext .depends .extend (
484
+ dep for dep in makedeps .split () if dep != "\\ "
485
+ )
486
+ ext .depends = [
487
+ find_module_file (filename , moddirlist ) for filename in ext .depends
488
+ ]
478
489
# re-compile extensions if a header file has been changed
479
490
ext .depends .extend (headers )
480
491
@@ -966,12 +977,10 @@ def detect_simple_extensions(self):
966
977
967
978
# math library functions, e.g. sin()
968
979
self .add (Extension ('math' , ['mathmodule.c' ],
969
- depends = ['_math.h' ],
970
980
libraries = ['m' ]))
971
981
972
982
# complex math library functions
973
983
self .add (Extension ('cmath' , ['cmathmodule.c' ],
974
- depends = ['_math.h' ],
975
984
libraries = ['m' ]))
976
985
977
986
# time libraries: librt may be needed for clock_gettime()
@@ -1003,8 +1012,7 @@ def detect_simple_extensions(self):
1003
1012
# profiler (_lsprof is for cProfile.py)
1004
1013
self .add (Extension ('_lsprof' , ['_lsprof.c' , 'rotatingtree.c' ]))
1005
1014
# static Unicode character database
1006
- self .add (Extension ('unicodedata' , ['unicodedata.c' ],
1007
- depends = ['unicodedata_db.h' , 'unicodename_db.h' ]))
1015
+ self .add (Extension ('unicodedata' , ['unicodedata.c' ]))
1008
1016
# _opcode module
1009
1017
self .add (Extension ('_opcode' , ['_opcode.c' ]))
1010
1018
# asyncio speedups
@@ -1081,8 +1089,7 @@ def detect_simple_extensions(self):
1081
1089
1082
1090
def detect_test_extensions (self ):
1083
1091
# Python C API test module
1084
- self .add (Extension ('_testcapi' , ['_testcapimodule.c' ],
1085
- depends = ['testcapi_long.h' ]))
1092
+ self .add (Extension ('_testcapi' , ['_testcapimodule.c' ]))
1086
1093
1087
1094
# Python Internal C API test module
1088
1095
self .add (Extension ('_testinternalcapi' , ['_testinternalcapi.c' ]))
@@ -1263,7 +1270,7 @@ def detect_crypt(self):
1263
1270
self .add (Extension ('_crypt' , ['_cryptmodule.c' ], libraries = libs ))
1264
1271
1265
1272
def detect_socket (self ):
1266
- self .add (Extension ('_socket' , ['socketmodule.c' ], depends = [ 'socketmodule.h' ] ))
1273
+ self .add (Extension ('_socket' , ['socketmodule.c' ]))
1267
1274
1268
1275
def detect_dbm_gdbm (self ):
1269
1276
# Modules that provide persistent dictionary-like semantics. You will
@@ -1527,11 +1534,6 @@ def detect_expat_elementtree(self):
1527
1534
ldflags = parse_ldflags (sysconfig .get_config_var ("EXPAT_LDFLAGS" ))
1528
1535
library_dirs , libraries , extra_link_args = ldflags
1529
1536
1530
- expat_depends = []
1531
- libexpat_a = sysconfig .get_config_var ("LIBEXPAT_A" )
1532
- if libexpat_a :
1533
- expat_depends .append (libexpat_a )
1534
-
1535
1537
self .add (Extension ('pyexpat' ,
1536
1538
include_dirs = include_dirs ,
1537
1539
define_macros = define_macros ,
@@ -1540,8 +1542,7 @@ def detect_expat_elementtree(self):
1540
1542
library_dirs = library_dirs ,
1541
1543
libraries = libraries ,
1542
1544
extra_link_args = extra_link_args ,
1543
- sources = ['pyexpat.c' ],
1544
- depends = expat_depends ))
1545
+ sources = ['pyexpat.c' ]))
1545
1546
1546
1547
# Fredrik Lundh's cElementTree module. Note that this also
1547
1548
# uses expat (via the CAPI hook in pyexpat).
@@ -1551,8 +1552,7 @@ def detect_expat_elementtree(self):
1551
1552
undef_macros = undef_macros ,
1552
1553
extra_compile_args = extra_compile_args ,
1553
1554
# no EXPAT_LDFLAGS
1554
- sources = ['_elementtree.c' ],
1555
- depends = ['pyexpat.c' , * expat_depends ]))
1555
+ sources = ['_elementtree.c' ]))
1556
1556
1557
1557
def detect_multibytecodecs (self ):
1558
1558
# Hye-Shik Chang's CJKCodecs modules.
@@ -1961,7 +1961,6 @@ def detect_ctypes(self):
1961
1961
'_ctypes/callproc.c' ,
1962
1962
'_ctypes/stgdict.c' ,
1963
1963
'_ctypes/cfield.c' ]
1964
- depends = ['_ctypes/ctypes.h' ]
1965
1964
1966
1965
if MACOS :
1967
1966
sources .append ('_ctypes/malloc_closure.c' )
@@ -1988,8 +1987,7 @@ def detect_ctypes(self):
1988
1987
extra_compile_args = extra_compile_args ,
1989
1988
extra_link_args = extra_link_args ,
1990
1989
libraries = [],
1991
- sources = sources ,
1992
- depends = depends )
1990
+ sources = sources )
1993
1991
self .add (ext )
1994
1992
if TEST_EXTENSIONS :
1995
1993
# function my_sqrt() needs libm for sqrt()
@@ -2049,7 +2047,6 @@ def detect_ctypes(self):
2049
2047
def detect_decimal (self ):
2050
2048
# Stefan Krah's _decimal module
2051
2049
sources = ['_decimal/_decimal.c' ]
2052
- depends = ['_decimal/docstrings.h' ]
2053
2050
2054
2051
cflags = parse_cflags (sysconfig .get_config_var ("DECIMAL_CFLAGS" ))
2055
2052
include_dirs , define_macros , undef_macros , extra_compile_args = cflags
@@ -2058,10 +2055,6 @@ def detect_decimal(self):
2058
2055
ldflags = parse_ldflags (sysconfig .get_config_var ("DECIMAL_LDFLAGS" ))
2059
2056
library_dirs , libraries , extra_link_args = ldflags
2060
2057
2061
- libmpdec_a = sysconfig .get_config_var ("LIBMPDEC_A" )
2062
- if libmpdec_a :
2063
- depends .append (libmpdec_a )
2064
-
2065
2058
# Uncomment for extra functionality:
2066
2059
#define_macros.append(('EXTRA_FUNCTIONALITY', 1))
2067
2060
self .add (Extension ('_decimal' ,
@@ -2072,8 +2065,7 @@ def detect_decimal(self):
2072
2065
library_dirs = library_dirs ,
2073
2066
libraries = libraries ,
2074
2067
extra_link_args = extra_link_args ,
2075
- sources = sources ,
2076
- depends = depends ))
2068
+ sources = sources ))
2077
2069
2078
2070
def detect_openssl_hashlib (self ):
2079
2071
# Detect SSL support for the socket module (via _ssl)
@@ -2141,24 +2133,13 @@ def split_var(name, sep):
2141
2133
Extension (
2142
2134
'_ssl' ,
2143
2135
['_ssl.c' ],
2144
- depends = [
2145
- 'socketmodule.h' ,
2146
- '_ssl.h' ,
2147
- '_ssl_data_111.h' ,
2148
- '_ssl_data_300.h' ,
2149
- '_ssl_data.h' ,
2150
- '_ssl/debughelpers.c' ,
2151
- '_ssl/misc.c' ,
2152
- '_ssl/cert.c' ,
2153
- ],
2154
2136
** openssl_extension_kwargs
2155
2137
)
2156
2138
)
2157
2139
self .add (
2158
2140
Extension (
2159
2141
'_hashlib' ,
2160
2142
['_hashopenssl.c' ],
2161
- depends = ['hashlib.h' ],
2162
2143
** openssl_extension_kwargs ,
2163
2144
)
2164
2145
)
@@ -2182,52 +2163,38 @@ def detect_hash_builtins(self):
2182
2163
2183
2164
if "sha256" in configured :
2184
2165
self .add (Extension (
2185
- '_sha256' , ['sha256module.c' ],
2186
- depends = ['hashlib.h' ],
2166
+ '_sha256' , ['sha256module.c' ]
2187
2167
))
2188
2168
2189
2169
if "sha512" in configured :
2190
2170
self .add (Extension (
2191
2171
'_sha512' , ['sha512module.c' ],
2192
- depends = ['hashlib.h' ],
2193
2172
))
2194
2173
2195
2174
if "md5" in configured :
2196
2175
self .add (Extension (
2197
2176
'_md5' , ['md5module.c' ],
2198
- depends = ['hashlib.h' ],
2199
2177
))
2200
2178
2201
2179
if "sha1" in configured :
2202
2180
self .add (Extension (
2203
2181
'_sha1' , ['sha1module.c' ],
2204
- depends = ['hashlib.h' ],
2205
2182
))
2206
2183
2207
2184
if "blake2" in configured :
2208
- blake2_deps = glob (
2209
- os .path .join (escape (self .srcdir ), 'Modules/_blake2/impl/*' )
2210
- )
2211
- blake2_deps .append ('hashlib.h' )
2212
2185
self .add (Extension (
2213
2186
'_blake2' ,
2214
2187
[
2215
2188
'_blake2/blake2module.c' ,
2216
2189
'_blake2/blake2b_impl.c' ,
2217
2190
'_blake2/blake2s_impl.c'
2218
- ],
2219
- depends = blake2_deps ,
2191
+ ]
2220
2192
))
2221
2193
2222
2194
if "sha3" in configured :
2223
- sha3_deps = glob (
2224
- os .path .join (escape (self .srcdir ), 'Modules/_sha3/kcp/*' )
2225
- )
2226
- sha3_deps .append ('hashlib.h' )
2227
2195
self .add (Extension (
2228
2196
'_sha3' ,
2229
2197
['_sha3/sha3module.c' ],
2230
- depends = sha3_deps ,
2231
2198
))
2232
2199
2233
2200
def detect_nis (self ):
0 commit comments