Skip to content

Commit 12ae407

Browse files
authored
[3.6] bpo-32521: nis libnsl (GH-5190) (#5352)
* bpo-32521: nis libnsl (#5190) The nismodule is now compatible with new libnsl and headers location Signed-off-by: Christian Heimes <[email protected]> (cherry picked from commit 29a7df7)
1 parent 8f68cb7 commit 12ae407

File tree

2 files changed

+53
-19
lines changed

2 files changed

+53
-19
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
The nis module is now compatible with new libnsl and headers location.

setup.py

+52-19
Original file line numberDiff line numberDiff line change
@@ -1361,27 +1361,14 @@ class db_found(Exception): pass
13611361
exts.append( Extension('termios', ['termios.c']) )
13621362
# Jeremy Hylton's rlimit interface
13631363
exts.append( Extension('resource', ['resource.c']) )
1364+
else:
1365+
missing.extend(['resource', 'termios'])
13641366

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)
13831370
else:
1384-
missing.extend(['nis', 'resource', 'termios'])
1371+
missing.append('nis')
13851372

13861373
# Curses support, requiring the System V version of curses, often
13871374
# provided by the ncurses library.
@@ -2225,6 +2212,52 @@ def _decimal_ext(self):
22252212
)
22262213
return ext
22272214

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+
22282261
class PyBuildInstall(install):
22292262
# Suppress the warning about installation into the lib_dynload
22302263
# directory, which is not in sys.path when running Python during

0 commit comments

Comments
 (0)