Skip to content

Commit 29a7df7

Browse files
authored
bpo-32521: nis libnsl (#5190)
The nismodule is now compatible with new libnsl and headers location Signed-off-by: Christian Heimes <christian@python.org>
1 parent 226e500 commit 29a7df7

File tree

2 files changed

+52
-19
lines changed

2 files changed

+52
-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

+51-19
Original file line numberDiff line numberDiff line change
@@ -1315,27 +1315,14 @@ class db_found(Exception): pass
13151315
exts.append( Extension('termios', ['termios.c']) )
13161316
# Jeremy Hylton's rlimit interface
13171317
exts.append( Extension('resource', ['resource.c']) )
1318+
else:
1319+
missing.extend(['resource', 'termios'])
13181320

1319-
# Sun yellow pages. Some systems have the functions in libc.
1320-
if (host_platform not in ['cygwin', 'qnx6'] and
1321-
find_file('rpcsvc/yp_prot.h', inc_dirs, []) is not None):
1322-
nis_libs = []
1323-
nis_includes = []
1324-
if self.compiler.find_library_file(lib_dirs, 'nsl'):
1325-
nis_libs.append('nsl')
1326-
if self.compiler.find_library_file(lib_dirs, 'tirpc'):
1327-
# Sun RPC has been moved from glibc to libtirpc
1328-
# rpcsvc/yp_prot.h is still in /usr/include, but
1329-
# rpc/rpc.h has been moved into tirpc/ subdir.
1330-
nis_libs.append('tirpc')
1331-
nis_includes.append('/usr/include/tirpc')
1332-
exts.append( Extension('nis', ['nismodule.c'],
1333-
libraries = nis_libs,
1334-
include_dirs=nis_includes) )
1335-
else:
1336-
missing.append('nis')
1321+
nis = self._detect_nis(inc_dirs, lib_dirs)
1322+
if nis is not None:
1323+
exts.append(nis)
13371324
else:
1338-
missing.extend(['nis', 'resource', 'termios'])
1325+
missing.append('nis')
13391326

13401327
# Curses support, requiring the System V version of curses, often
13411328
# provided by the ncurses library.
@@ -2175,6 +2162,51 @@ def split_var(name, sep):
21752162

21762163
return ssl_ext, hashlib_ext
21772164

2165+
def _detect_nis(self, inc_dirs, lib_dirs):
2166+
if host_platform in {'win32', 'cygwin', 'qnx6'}:
2167+
return None
2168+
2169+
libs = []
2170+
library_dirs = []
2171+
includes_dirs = []
2172+
2173+
# bpo-32521: glibc has deprecated Sun RPC for some time. Fedora 28
2174+
# moved headers and libraries to libtirpc and libnsl. The headers
2175+
# are in tircp and nsl sub directories.
2176+
rpcsvc_inc = find_file(
2177+
'rpcsvc/yp_prot.h', inc_dirs,
2178+
[os.path.join(inc_dir, 'nsl') for inc_dir in inc_dirs]
2179+
)
2180+
rpc_inc = find_file(
2181+
'rpc/rpc.h', inc_dirs,
2182+
[os.path.join(inc_dir, 'tirpc') for inc_dir in inc_dirs]
2183+
)
2184+
if rpcsvc_inc is None or rpc_inc is None:
2185+
# not found
2186+
return None
2187+
includes_dirs.extend(rpcsvc_inc)
2188+
includes_dirs.extend(rpc_inc)
2189+
2190+
if self.compiler.find_library_file(lib_dirs, 'nsl'):
2191+
libs.append('nsl')
2192+
else:
2193+
# libnsl-devel: check for libnsl in nsl/ subdirectory
2194+
nsl_dirs = [os.path.join(lib_dir, 'nsl') for lib_dir in lib_dirs]
2195+
libnsl = self.compiler.find_library_file(nsl_dirs, 'nsl')
2196+
if libnsl is not None:
2197+
library_dirs.append(os.path.dirname(libnsl))
2198+
libs.append('nsl')
2199+
2200+
if self.compiler.find_library_file(lib_dirs, 'tirpc'):
2201+
libs.append('tirpc')
2202+
2203+
return Extension(
2204+
'nis', ['nismodule.c'],
2205+
libraries=libs,
2206+
library_dirs=library_dirs,
2207+
include_dirs=includes_dirs
2208+
)
2209+
21782210

21792211
class PyBuildInstall(install):
21802212
# Suppress the warning about installation into the lib_dynload

0 commit comments

Comments
 (0)