]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
pybind: refactor monkey_with_compiler() 33061/head
authorKefu Chai <kchai@redhat.com>
Tue, 4 Feb 2020 12:14:10 +0000 (20:14 +0800)
committerKefu Chai <kchai@redhat.com>
Thu, 6 Feb 2020 01:59:35 +0000 (09:59 +0800)
* remove `clang` global variable
* do not assume that `clang` is assigned before
  `filter_unsupported_flags()` is called.
* use a decorator-style function to do the monkey patch

Signed-off-by: Kefu Chai <kchai@redhat.com>
src/pybind/cephfs/setup.py
src/pybind/rados/setup.py
src/pybind/rbd/setup.py
src/pybind/rgw/setup.py

index 5edaaaae89df8d3a7616682e1b6dc2e8d436c198..c901ebe20488fba26b9f27dc0a316b0595c1f86c 100755 (executable)
@@ -9,34 +9,40 @@ import tempfile
 import textwrap
 from distutils.ccompiler import new_compiler
 from distutils.errors import CompileError, LinkError
+from itertools import filterfalse
 import distutils.sysconfig
 
-unwrapped_customize = distutils.sysconfig.customize_compiler
 
-clang = False
-
-def filter_unsupported_flags(flags):
-    if clang:
-        return [f for f in flags if not (f == '-mcet' or
-                                         f.startswith('-fcf-protection') or
-                                         f == '-fstack-clash-protection' or
-                                         f == '-fno-var-tracking-assignments' or
-                                         f == '-Wno-deprecated-register' or
-                                         f == '-Wno-gnu-designator')]
+def filter_unsupported_flags(compiler, flags):
+    if 'clang' in compiler:
+        return filterfalse(lambda f:
+                           f in ('-mcet',
+                                 '-fstack-clash-protection',
+                                 '-fno-var-tracking-assignments',
+                                 '-Wno-deprecated-register',
+                                 '-Wno-gnu-designator') or
+                           f.startswith('-fcf-protection'),
+                           flags)
     else:
         return flags
 
-def monkey_with_compiler(compiler):
-    unwrapped_customize(compiler)
-    if compiler.compiler_type == 'unix':
-        if compiler.compiler[0].find('clang') != -1:
-            global clang
-            clang = True
-            compiler.compiler = filter_unsupported_flags(compiler.compiler)
-            compiler.compiler_so = filter_unsupported_flags(
-                compiler.compiler_so)
 
-distutils.sysconfig.customize_compiler = monkey_with_compiler
+def monkey_with_compiler(customize):
+    def patched(compiler):
+        customize(compiler)
+        if compiler.compiler_type != 'unix':
+            return
+        compiler.compiler[1:] = \
+            filter_unsupported_flags(compiler.compiler[0],
+                                     compiler.compiler[1:])
+        compiler.compiler_so[1:] = \
+            filter_unsupported_flags(compiler.compiler_so[0],
+                                     compiler.compiler_so[1:])
+    return patched
+
+
+distutils.sysconfig.customize_compiler = \
+    monkey_with_compiler(distutils.sysconfig.customize_compiler)
 
 if not pkgutil.find_loader('setuptools'):
     from distutils.core import setup
@@ -54,11 +60,14 @@ __version__ = '2.0.0'
 def get_python_flags(libs):
     py_libs = sum((libs.split() for libs in
                    distutils.sysconfig.get_config_vars('LIBS', 'SYSLIBS')), [])
+    compiler = new_compiler()
     return dict(
         include_dirs=[distutils.sysconfig.get_python_inc()],
         library_dirs=distutils.sysconfig.get_config_vars('LIBDIR', 'LIBPL'),
         libraries=libs + [lib.replace('-l', '') for lib in py_libs],
-        extra_compile_args=filter_unsupported_flags(distutils.sysconfig.get_config_var('CFLAGS').split()),
+        extra_compile_args=filter_unsupported_flags(
+            compiler.compiler[0],
+            distutils.sysconfig.get_config_var('CFLAGS').split()),
         extra_link_args=(distutils.sysconfig.get_config_var('LDFLAGS').split() +
                          distutils.sysconfig.get_config_var('LINKFORSHARED').split()))
 
index 771a455eed2eeb06ff5b423c8765e220c9b09a47..e7d409c6aeccbea7105534d8d7000088270ad0a6 100755 (executable)
@@ -1,4 +1,8 @@
 from __future__ import print_function
+import distutils.sysconfig
+from distutils.errors import CompileError, LinkError
+from distutils.ccompiler import new_compiler
+from itertools import filterfalse
 
 import os
 import pkgutil
@@ -8,6 +12,38 @@ import sys
 import tempfile
 import textwrap
 
+
+def filter_unsupported_flags(compiler, flags):
+    if 'clang' in compiler:
+        return filterfalse(lambda f:
+                           f in ('-mcet',
+                                 '-fstack-clash-protection',
+                                 '-fno-var-tracking-assignments',
+                                 '-Wno-deprecated-register',
+                                 '-Wno-gnu-designator') or
+                           f.startswith('-fcf-protection'),
+                           flags)
+    else:
+        return flags
+
+
+def monkey_with_compiler(customize):
+    def patched(compiler):
+        customize(compiler)
+        if compiler.compiler_type != 'unix':
+            return
+        compiler.compiler[1:] = \
+            filter_unsupported_flags(compiler.compiler[0],
+                                     compiler.compiler[1:])
+        compiler.compiler_so[1:] = \
+            filter_unsupported_flags(compiler.compiler_so[0],
+                                     compiler.compiler_so[1:])
+    return patched
+
+
+distutils.sysconfig.customize_compiler = \
+    monkey_with_compiler(distutils.sysconfig.customize_compiler)
+
 if not pkgutil.find_loader('setuptools'):
     from distutils.core import setup
     from distutils.extension import Extension
@@ -15,36 +51,9 @@ else:
     from setuptools import setup
     from setuptools.extension import Extension
 
-from distutils.ccompiler import new_compiler
-from distutils.errors import CompileError, LinkError
-import distutils.sysconfig
-
-unwrapped_customize = distutils.sysconfig.customize_compiler
-
-clang = False
 
-def filter_unsupported_flags(flags):
-    if clang:
-        return [f for f in flags if not (f == '-mcet' or
-                                         f.startswith('-fcf-protection') or
-                                         f == '-fstack-clash-protection' or
-                                         f == '-fno-var-tracking-assignments' or
-                                         f == '-Wno-deprecated-register' or
-                                         f == '-Wno-gnu-designator')]
-    else:
-        return flags
-
-def monkey_with_compiler(compiler):
-    unwrapped_customize(compiler)
-    if compiler.compiler_type == 'unix':
-        if compiler.compiler[0].find('clang') != -1:
-            global clang
-            clang = True
-            compiler.compiler = filter_unsupported_flags(compiler.compiler)
-            compiler.compiler_so = filter_unsupported_flags(
-                compiler.compiler_so)
-
-distutils.sysconfig.customize_compiler = monkey_with_compiler
+distutils.sysconfig.customize_compiler = \
+    monkey_with_compiler(distutils.sysconfig.customize_compiler)
 
 # PEP 440 versioning of the Rados package on PyPI
 # Bump this version, after every changeset
@@ -54,11 +63,14 @@ __version__ = '2.0.0'
 def get_python_flags(libs):
     py_libs = sum((libs.split() for libs in
                    distutils.sysconfig.get_config_vars('LIBS', 'SYSLIBS')), [])
+    compiler = new_compiler()
     return dict(
         include_dirs=[distutils.sysconfig.get_python_inc()],
         library_dirs=distutils.sysconfig.get_config_vars('LIBDIR', 'LIBPL'),
         libraries=libs + [lib.replace('-l', '') for lib in py_libs],
-        extra_compile_args=filter_unsupported_flags(distutils.sysconfig.get_config_var('CFLAGS').split()),
+        extra_compile_args=filter_unsupported_flags(
+            compiler.compiler[0],
+            distutils.sysconfig.get_config_var('CFLAGS').split()),
         extra_link_args=(distutils.sysconfig.get_config_var('LDFLAGS').split() +
                          distutils.sysconfig.get_config_var('LINKFORSHARED').split()))
 
index 7f3983d6bfef98e399718f262e4fa4d3fdb65d3f..da72cf932619c22ae68c6962e10da21b2aaa4a9c 100755 (executable)
@@ -9,34 +9,40 @@ import tempfile
 import textwrap
 from distutils.ccompiler import new_compiler
 from distutils.errors import CompileError, LinkError
+from itertools import filterfalse
 import distutils.sysconfig
 
-unwrapped_customize = distutils.sysconfig.customize_compiler
 
-clang = False
-
-def filter_unsupported_flags(flags):
-    if clang:
-        return [f for f in flags if not (f == '-mcet' or
-                                         f.startswith('-fcf-protection') or
-                                         f == '-fstack-clash-protection' or
-                                         f == '-fno-var-tracking-assignments' or
-                                         f == '-Wno-deprecated-register' or
-                                         f == '-Wno-gnu-designator')]
+def filter_unsupported_flags(compiler, flags):
+    if 'clang' in compiler:
+        return filterfalse(lambda f:
+                           f in ('-mcet',
+                                 '-fstack-clash-protection',
+                                 '-fno-var-tracking-assignments',
+                                 '-Wno-deprecated-register',
+                                 '-Wno-gnu-designator') or
+                           f.startswith('-fcf-protection'),
+                           flags)
     else:
         return flags
 
-def monkey_with_compiler(compiler):
-    unwrapped_customize(compiler)
-    if compiler.compiler_type == 'unix':
-        if compiler.compiler[0].find('clang') != -1:
-            global clang
-            clang = True
-            compiler.compiler = filter_unsupported_flags(compiler.compiler)
-            compiler.compiler_so = filter_unsupported_flags(
-                compiler.compiler_so)
 
-distutils.sysconfig.customize_compiler = monkey_with_compiler
+def monkey_with_compiler(customize):
+    def patched(compiler):
+        customize(compiler)
+        if compiler.compiler_type != 'unix':
+            return
+        compiler.compiler[1:] = \
+            filter_unsupported_flags(compiler.compiler[0],
+                                     compiler.compiler[1:])
+        compiler.compiler_so[1:] = \
+            filter_unsupported_flags(compiler.compiler_so[0],
+                                     compiler.compiler_so[1:])
+    return patched
+
+
+distutils.sysconfig.customize_compiler = \
+    monkey_with_compiler(distutils.sysconfig.customize_compiler)
 
 if not pkgutil.find_loader('setuptools'):
     from distutils.core import setup
@@ -54,11 +60,14 @@ __version__ = '2.0.0'
 def get_python_flags(libs):
     py_libs = sum((libs.split() for libs in
                    distutils.sysconfig.get_config_vars('LIBS', 'SYSLIBS')), [])
+    compiler = new_compiler()
     return dict(
         include_dirs=[distutils.sysconfig.get_python_inc()],
         library_dirs=distutils.sysconfig.get_config_vars('LIBDIR', 'LIBPL'),
         libraries=libs + [lib.replace('-l', '') for lib in py_libs],
-        extra_compile_args=filter_unsupported_flags(distutils.sysconfig.get_config_var('CFLAGS').split()),
+        extra_compile_args=filter_unsupported_flags(
+            compiler.compiler[0],
+            distutils.sysconfig.get_config_var('CFLAGS').split()),
         extra_link_args=(distutils.sysconfig.get_config_var('LDFLAGS').split() +
                          distutils.sysconfig.get_config_var('LINKFORSHARED').split()))
 
index ce77605c7db4f1f95d695fdf7072e9acb5a10306..8b760b63b891e6df3175a1f2f172ff6def8e43be 100755 (executable)
@@ -1,4 +1,5 @@
 from __future__ import print_function
+import distutils.core
 
 import os
 import pkgutil
@@ -11,35 +12,37 @@ from distutils.ccompiler import new_compiler
 from distutils.errors import CompileError, LinkError
 import distutils.sysconfig
 
-unwrapped_customize = distutils.sysconfig.customize_compiler
 
-clang = False
+def filter_unsupported_flags(compiler, flags):
+    if 'clang' in compiler:
+        return filterfalse(lambda f:
+                           f in ('-mcet',
+                                 '-fstack-clash-protection',
+                                 '-fno-var-tracking-assignments',
+                                 '-Wno-deprecated-register',
+                                 '-Wno-gnu-designator') or
+                           f.startswith('-fcf-protection'),
+                           flags)
+    else:
+        return flags
 
-def filter_unsupported_flags(flags):
-    if clang:
-        return [f for f in flags if not (f == '-mcet' or
-                                         f.startswith('-fcf-protection') or
-                                         f == '-fstack-clash-protection' or
-                                         f == '-fno-var-tracking-assignments' or
-                                         f == '-Wno-deprecated-register' or
-                                         f == '-Wno-gnu-designator')]
-    return flags
 
-def monkey_with_compiler(compiler):
-    unwrapped_customize(compiler)
-    if compiler.compiler_type == 'unix':
-        if compiler.compiler[0].find('clang') != -1:
-            global clang
-            clang = True
-            compiler.compiler = filter_unsupported_flags(compiler.compiler)
-            compiler.compiler_so = filter_unsupported_flags(
-                compiler.compiler_so)
+def monkey_with_compiler(customize):
+    def patched(compiler):
+        customize(compiler)
+        if compiler.compiler_type != 'unix':
+            return
+        compiler.compiler[1:] = \
+            filter_unsupported_flags(compiler.compiler[0],
+                                     compiler.compiler[1:])
+        compiler.compiler_so[1:] = \
+            filter_unsupported_flags(compiler.compiler_so[0],
+                                     compiler.compiler_so[1:])
+    return patched
 
-# See what you made me do?
 
-distutils.sysconfig.customize_compiler = monkey_with_compiler
-
-import distutils.core
+distutils.sysconfig.customize_compiler = \
+    monkey_with_compiler(distutils.sysconfig.customize_compiler)
 
 if not pkgutil.find_loader('setuptools'):
     from distutils.core import setup
@@ -57,11 +60,14 @@ __version__ = '2.0.0'
 def get_python_flags(libs):
     py_libs = sum((libs.split() for libs in
                    distutils.sysconfig.get_config_vars('LIBS', 'SYSLIBS')), [])
+    compiler = new_compiler()
     return dict(
         include_dirs=[distutils.sysconfig.get_python_inc()],
         library_dirs=distutils.sysconfig.get_config_vars('LIBDIR', 'LIBPL'),
         libraries=libs + [lib.replace('-l', '') for lib in py_libs],
-        extra_compile_args=filter_unsupported_flags(distutils.sysconfig.get_config_var('CFLAGS').split()),
+        extra_compile_args=filter_unsupported_flags(
+            compiler.compiler[0],
+            distutils.sysconfig.get_config_var('CFLAGS').split()),
         extra_link_args=(distutils.sysconfig.get_config_var('LDFLAGS').split() +
                          distutils.sysconfig.get_config_var('LINKFORSHARED').split()))