@@ -1346,26 +1346,11 @@ class db_found(Exception): pass
1346
1346
else :
1347
1347
missing .append ('resource' )
1348
1348
1349
- # Sun yellow pages. Some systems have the functions in libc.
1350
- if (host_platform not in ['cygwin' , 'atheos' , 'qnx6' ] and
1351
- find_file ('rpcsvc/yp_prot.h' , inc_dirs , []) is not None ):
1352
- nis_libs = []
1353
- nis_includes = []
1354
- if self .compiler .find_library_file (lib_dirs , 'nsl' ):
1355
- nis_libs .append ('nsl' )
1356
- if self .compiler .find_library_file (lib_dirs , 'tirpc' ):
1357
- # Sun RPC has been moved from glibc to libtirpc
1358
- # rpcsvc/yp_prot.h is still in /usr/include, but
1359
- # rpc/rpc.h has been moved into tirpc/ subdir.
1360
- nis_libs .append ('tirpc' )
1361
- nis_includes .append ('/usr/include/tirpc' )
1362
- exts .append ( Extension ('nis' , ['nismodule.c' ],
1363
- libraries = nis_libs ,
1364
- include_dirs = nis_includes ) )
1349
+ nis = self ._detect_nis (inc_dirs , lib_dirs )
1350
+ if nis is not None :
1351
+ exts .append (nis )
1365
1352
else :
1366
1353
missing .append ('nis' )
1367
- else :
1368
- missing .extend (['nis' , 'resource' , 'termios' ])
1369
1354
1370
1355
# Curses support, requiring the System V version of curses, often
1371
1356
# provided by the ncurses library.
@@ -2164,6 +2149,51 @@ def detect_ctypes(self, inc_dirs, lib_dirs):
2164
2149
ext .libraries .append (ffi_lib )
2165
2150
self .use_system_libffi = True
2166
2151
2152
+ def _detect_nis (self , inc_dirs , lib_dirs ):
2153
+ if host_platform in {'win32' , 'cygwin' , 'qnx6' }:
2154
+ return None
2155
+
2156
+ libs = []
2157
+ library_dirs = []
2158
+ includes_dirs = []
2159
+
2160
+ # bpo-32521: glibc has deprecated Sun RPC for some time. Fedora 28
2161
+ # moved headers and libraries to libtirpc and libnsl. The headers
2162
+ # are in tircp and nsl sub directories.
2163
+ rpcsvc_inc = find_file (
2164
+ 'rpcsvc/yp_prot.h' , inc_dirs ,
2165
+ [os .path .join (inc_dir , 'nsl' ) for inc_dir in inc_dirs ]
2166
+ )
2167
+ rpc_inc = find_file (
2168
+ 'rpc/rpc.h' , inc_dirs ,
2169
+ [os .path .join (inc_dir , 'tirpc' ) for inc_dir in inc_dirs ]
2170
+ )
2171
+ if rpcsvc_inc is None or rpc_inc is None :
2172
+ # not found
2173
+ return None
2174
+ includes_dirs .extend (rpcsvc_inc )
2175
+ includes_dirs .extend (rpc_inc )
2176
+
2177
+ if self .compiler .find_library_file (lib_dirs , 'nsl' ):
2178
+ libs .append ('nsl' )
2179
+ else :
2180
+ # libnsl-devel: check for libnsl in nsl/ subdirectory
2181
+ nsl_dirs = [os .path .join (lib_dir , 'nsl' ) for lib_dir in lib_dirs ]
2182
+ libnsl = self .compiler .find_library_file (nsl_dirs , 'nsl' )
2183
+ if libnsl is not None :
2184
+ library_dirs .append (os .path .dirname (libnsl ))
2185
+ libs .append ('nsl' )
2186
+
2187
+ if self .compiler .find_library_file (lib_dirs , 'tirpc' ):
2188
+ libs .append ('tirpc' )
2189
+
2190
+ return Extension (
2191
+ 'nis' , ['nismodule.c' ],
2192
+ libraries = libs ,
2193
+ library_dirs = library_dirs ,
2194
+ include_dirs = includes_dirs
2195
+ )
2196
+
2167
2197
2168
2198
class PyBuildInstall (install ):
2169
2199
# Suppress the warning about installation into the lib_dynload
0 commit comments