python3.12/00289-fix-nis-compilation.p...

84 lines
3.0 KiB
Diff

diff --git a/setup.py b/setup.py
index 3eb6ad1..3437e48 100644
--- a/setup.py
+++ b/setup.py
@@ -1331,20 +1331,14 @@ class PyBuildExt(build_ext):
exts.append( Extension('termios', ['termios.c']) )
# Jeremy Hylton's rlimit interface
exts.append( Extension('resource', ['resource.c']) )
+ else:
+ missing.extend(['resource', 'termios'])
- # Sun yellow pages. Some systems have the functions in libc.
- if (host_platform not in ['cygwin', 'qnx6'] and
- find_file('rpcsvc/yp_prot.h', inc_dirs, []) is not None):
- if (self.compiler.find_library_file(lib_dirs, 'nsl')):
- libs = ['nsl']
- else:
- libs = []
- exts.append( Extension('nis', ['nismodule.c'],
- libraries = libs) )
- else:
- missing.append('nis')
+ nis = self._detect_nis(inc_dirs, lib_dirs)
+ if nis is not None:
+ exts.append(nis)
else:
- missing.extend(['nis', 'resource', 'termios'])
+ missing.append('nis')
# Curses support, requiring the System V version of curses, often
# provided by the ncurses library.
@@ -2179,6 +2173,51 @@ class PyBuildExt(build_ext):
)
return ext
+ def _detect_nis(self, inc_dirs, lib_dirs):
+ if host_platform in {'win32', 'cygwin', 'qnx6'}:
+ return None
+
+ libs = []
+ library_dirs = []
+ includes_dirs = []
+
+ # Latest glibc has moved Sun RPC headers into tircp and nsl sub
+ # directories. rpc code has been moved to libtirpc.
+ rpcsvc_inc = find_file(
+ 'rpcsvc/yp_prot.h', inc_dirs,
+ ['/usr/local/include/nsl', '/usr/include/nsl']
+ )
+ rpc_inc = find_file(
+ 'rpc/rpc.h', inc_dirs,
+ ['/usr/local/include/tirpc', '/usr/include/tirpc']
+ )
+ if rpcsvc_inc is None or rpc_inc is None:
+ # not found
+ return None
+ includes_dirs.extend(rpcsvc_inc)
+ includes_dirs.extend(rpc_inc)
+
+ if self.compiler.find_library_file(lib_dirs, 'nsl'):
+ libs.append('nsl')
+ else:
+ # libnsl-devel: check for libnsl in nsl/ subdirectory
+ nsl_dirs = [os.path.join(lib_dir, 'nsl') for lib_dir in lib_dirs]
+ libnsl = self.compiler.find_library_file(nsl_dirs, 'nsl')
+ if libnsl is not None:
+ library_dirs.append(os.path.dirname(libnsl))
+ libs.append('nsl')
+
+ if self.compiler.find_library_file(lib_dirs, 'tirpc'):
+ libs.append('tirpc')
+
+ return Extension(
+ 'nis', ['nismodule.c'],
+ libraries=libs,
+ library_dirs=library_dirs,
+ include_dirs=includes_dirs
+ )
+
+
class PyBuildInstall(install):
# Suppress the warning about installation into the lib_dynload
# directory, which is not in sys.path when running Python during