@@ -1361,27 +1361,14 @@ class db_found(Exception): pass
1361
1361
exts .append ( Extension ('termios' , ['termios.c' ]) )
1362
1362
# Jeremy Hylton's rlimit interface
1363
1363
exts .append ( Extension ('resource' , ['resource.c' ]) )
1364
+ else :
1365
+ missing .extend (['resource' , 'termios' ])
1364
1366
1365
- # Sun yellow pages. Some systems have the functions in libc.
1366
- if (host_platform not in ['cygwin' , 'qnx6' ] and
1367
- find_file ('rpcsvc/yp_prot.h' , inc_dirs , []) is not None ):
1368
- nis_libs = []
1369
- nis_includes = []
1370
- if self .compiler .find_library_file (lib_dirs , 'nsl' ):
1371
- nis_libs .append ('nsl' )
1372
- if self .compiler .find_library_file (lib_dirs , 'tirpc' ):
1373
- # Sun RPC has been moved from glibc to libtirpc
1374
- # rpcsvc/yp_prot.h is still in /usr/include, but
1375
- # rpc/rpc.h has been moved into tirpc/ subdir.
1376
- nis_libs .append ('tirpc' )
1377
- nis_includes .append ('/usr/include/tirpc' )
1378
- exts .append ( Extension ('nis' , ['nismodule.c' ],
1379
- libraries = nis_libs ,
1380
- include_dirs = nis_includes ) )
1381
- else :
1382
- missing .append ('nis' )
1367
+ nis = self ._detect_nis (inc_dirs , lib_dirs )
1368
+ if nis is not None :
1369
+ exts .append (nis )
1383
1370
else :
1384
- missing .extend ([ 'nis' , 'resource' , 'termios' ] )
1371
+ missing .append ( 'nis' )
1385
1372
1386
1373
# Curses support, requiring the System V version of curses, often
1387
1374
# provided by the ncurses library.
@@ -2225,6 +2212,52 @@ def _decimal_ext(self):
2225
2212
)
2226
2213
return ext
2227
2214
2215
+ def _detect_nis (self , inc_dirs , lib_dirs ):
2216
+ if host_platform in {'win32' , 'cygwin' , 'qnx6' }:
2217
+ return None
2218
+
2219
+ libs = []
2220
+ library_dirs = []
2221
+ includes_dirs = []
2222
+
2223
+ # bpo-32521: glibc has deprecated Sun RPC for some time. Fedora 28
2224
+ # moved headers and libraries to libtirpc and libnsl. The headers
2225
+ # are in tircp and nsl sub directories.
2226
+ rpcsvc_inc = find_file (
2227
+ 'rpcsvc/yp_prot.h' , inc_dirs ,
2228
+ [os .path .join (inc_dir , 'nsl' ) for inc_dir in inc_dirs ]
2229
+ )
2230
+ rpc_inc = find_file (
2231
+ 'rpc/rpc.h' , inc_dirs ,
2232
+ [os .path .join (inc_dir , 'tirpc' ) for inc_dir in inc_dirs ]
2233
+ )
2234
+ if rpcsvc_inc is None or rpc_inc is None :
2235
+ # not found
2236
+ return None
2237
+ includes_dirs .extend (rpcsvc_inc )
2238
+ includes_dirs .extend (rpc_inc )
2239
+
2240
+ if self .compiler .find_library_file (lib_dirs , 'nsl' ):
2241
+ libs .append ('nsl' )
2242
+ else :
2243
+ # libnsl-devel: check for libnsl in nsl/ subdirectory
2244
+ nsl_dirs = [os .path .join (lib_dir , 'nsl' ) for lib_dir in lib_dirs ]
2245
+ libnsl = self .compiler .find_library_file (nsl_dirs , 'nsl' )
2246
+ if libnsl is not None :
2247
+ library_dirs .append (os .path .dirname (libnsl ))
2248
+ libs .append ('nsl' )
2249
+
2250
+ if self .compiler .find_library_file (lib_dirs , 'tirpc' ):
2251
+ libs .append ('tirpc' )
2252
+
2253
+ return Extension (
2254
+ 'nis' , ['nismodule.c' ],
2255
+ libraries = libs ,
2256
+ library_dirs = library_dirs ,
2257
+ include_dirs = includes_dirs
2258
+ )
2259
+
2260
+
2228
2261
class PyBuildInstall (install ):
2229
2262
# Suppress the warning about installation into the lib_dynload
2230
2263
# directory, which is not in sys.path when running Python during
0 commit comments