besser82 / rpms / python3

Forked from rpms/python3 5 years ago
Clone

Blame 00289-fix-nis-compilation.patch

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