]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
pybind: use distutils.sysconfig for compiling flags 41167/head
authorKefu Chai <kchai@redhat.com>
Mon, 8 Jul 2019 14:08:57 +0000 (22:08 +0800)
committerKefu Chai <kchai@redhat.com>
Wed, 5 May 2021 09:24:44 +0000 (17:24 +0800)
this allows maintainer to override the compiling flags when
cross-compiling Ceph.

Signed-off-by: Kefu Chai <kchai@redhat.com>
(cherry picked from commit 6050f28870e15ca80e59e0804783205d222f8493)

src/pybind/cephfs/setup.py
src/pybind/rados/setup.py
src/pybind/rbd/setup.py
src/pybind/rgw/setup.py

index 778804db8aca897b2c1855991a7ba79cb59126dc..4bcffb6dd248459d05163d9e08b228c5297e7303 100755 (executable)
@@ -47,37 +47,16 @@ else:
 __version__ = '2.0.0'
 
 
-def get_python_flags():
-    cflags = {'I': [], 'extras': []}
-    ldflags = {'l': [], 'L': [], 'extras': []}
-
-    if os.environ.get('VIRTUAL_ENV', None):
-        python = "python"
-    else:
-        python = 'python' + str(sys.version_info.major) + '.' + str(sys.version_info.minor)
-
-    python_config = python + '-config'
-
-    for cflag in filter_unsupported_flags(subprocess.check_output(
-            [python_config, "--cflags"]).strip().decode('utf-8').split()):
-        if cflag.startswith('-I'):
-            cflags['I'].append(cflag.replace('-I', ''))
-        else:
-            cflags['extras'].append(cflag)
-
-    for ldflag in filter_unsupported_flags(subprocess.check_output(
-            [python_config, "--ldflags"]).strip().decode('utf-8').split()):
-        if ldflag.startswith('-l'):
-            ldflags['l'].append(ldflag.replace('-l', ''))
-        if ldflag.startswith('-L'):
-            ldflags['L'].append(ldflag.replace('-L', ''))
-        else:
-            ldflags['extras'].append(ldflag)
-
-    return {
-        'cflags': cflags,
-        'ldflags': ldflags
-    }
+def get_python_flags(libs):
+    py_libs = sum((libs.split() for libs in
+                   distutils.sysconfig.get_config_vars('LIBS', 'SYSLIBS')), [])
+    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=distutils.sysconfig.get_config_var('CFLAGS').split(),
+        extra_link_args=(distutils.sysconfig.get_config_var('LDFLAGS').split() +
+                         distutils.sysconfig.get_config_var('LINKFORSHARED').split()))
 
 
 def check_sanity():
@@ -177,8 +156,6 @@ if (len(sys.argv) >= 2 and
     def cythonize(x, **kwargs):
         return x
 
-flags = get_python_flags()
-
 setup(
     name='cephfs',
     version=__version__,
@@ -199,10 +176,7 @@ setup(
             Extension(
                 "cephfs",
                 [source],
-                include_dirs=flags['cflags']['I'],
-                library_dirs=flags['ldflags']['L'],
-                libraries=['cephfs'] + flags['ldflags']['l'],
-                extra_compile_args=flags['cflags']['extras'] + flags['ldflags']['extras'],
+                **get_python_flags(['cephfs'])
             )
         ],
         compiler_directives={'language_level': sys.version_info.major},
index 3d229453903c50fae56f6028706e93b373d5fc94..12c7c4cb1142574ddb8ec0f16f5c20de1c015e18 100755 (executable)
@@ -47,37 +47,16 @@ distutils.sysconfig.customize_compiler = monkey_with_compiler
 __version__ = '2.0.0'
 
 
-def get_python_flags():
-    cflags = {'I': [], 'extras': []}
-    ldflags = {'l': [], 'L': [], 'extras': []}
-
-    if os.environ.get('VIRTUAL_ENV', None):
-        python = "python"
-    else:
-        python = 'python' + str(sys.version_info.major) + '.' + str(sys.version_info.minor)
-
-    python_config = python + '-config'
-
-    for cflag in filter_unsupported_flags(subprocess.check_output(
-            [python_config, "--cflags"]).strip().decode('utf-8').split()):
-        if cflag.startswith('-I'):
-            cflags['I'].append(cflag.replace('-I', ''))
-        else:
-            cflags['extras'].append(cflag)
-
-    for ldflag in filter_unsupported_flags(subprocess.check_output(
-            [python_config, "--ldflags"]).strip().decode('utf-8').split()):
-        if ldflag.startswith('-l'):
-            ldflags['l'].append(ldflag.replace('-l', ''))
-        if ldflag.startswith('-L'):
-            ldflags['L'].append(ldflag.replace('-L', ''))
-        else:
-            ldflags['extras'].append(ldflag)
-
-    return {
-        'cflags': cflags,
-        'ldflags': ldflags
-    }
+def get_python_flags(libs):
+    py_libs = sum((libs.split() for libs in
+                   distutils.sysconfig.get_config_vars('LIBS', 'SYSLIBS')), [])
+    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=distutils.sysconfig.get_config_var('CFLAGS').split(),
+        extra_link_args=(distutils.sysconfig.get_config_var('LDFLAGS').split() +
+                         distutils.sysconfig.get_config_var('LINKFORSHARED').split()))
 
 
 def check_sanity():
@@ -173,8 +152,6 @@ if (len(sys.argv) >= 2 and
     def cythonize(x, **kwargs):
         return x
 
-flags = get_python_flags()
-
 setup(
     name='rados',
     version=__version__,
@@ -194,10 +171,7 @@ setup(
             Extension(
                 "rados",
                 [source],
-                include_dirs=flags['cflags']['I'],
-                library_dirs=flags['ldflags']['L'],
-                libraries=["rados"] + flags['ldflags']['l'],
-                extra_compile_args=flags['cflags']['extras'] + flags['ldflags']['extras'],
+                **get_python_flags(['rados'])
             )
         ],
         compiler_directives={'language_level': sys.version_info.major},
index f3dd5be95830dfc34676a64df82b2bc80f38023a..d35d600afeea2e812899175419bfb8c7da2208e6 100755 (executable)
@@ -47,37 +47,16 @@ else:
 __version__ = '2.0.0'
 
 
-def get_python_flags():
-    cflags = {'I': [], 'extras': []}
-    ldflags = {'l': [], 'L': [], 'extras': []}
-
-    if os.environ.get('VIRTUAL_ENV', None):
-        python = "python"
-    else:
-        python = 'python' + str(sys.version_info.major) + '.' + str(sys.version_info.minor)
-
-    python_config = python + '-config'
-
-    for cflag in filter_unsupported_flags(subprocess.check_output(
-            [python_config, "--cflags"]).strip().decode('utf-8').split()):
-        if cflag.startswith('-I'):
-            cflags['I'].append(cflag.replace('-I', ''))
-        else:
-            cflags['extras'].append(cflag)
-
-    for ldflag in filter_unsupported_flags(subprocess.check_output(
-            [python_config, "--ldflags"]).strip().decode('utf-8').split()):
-        if ldflag.startswith('-l'):
-            ldflags['l'].append(ldflag.replace('-l', ''))
-        if ldflag.startswith('-L'):
-            ldflags['L'].append(ldflag.replace('-L', ''))
-        else:
-            ldflags['extras'].append(ldflag)
-
-    return {
-        'cflags': cflags,
-        'ldflags': ldflags
-    }
+def get_python_flags(libs):
+    py_libs = sum((libs.split() for libs in
+                   distutils.sysconfig.get_config_vars('LIBS', 'SYSLIBS')), [])
+    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=distutils.sysconfig.get_config_var('CFLAGS').split(),
+        extra_link_args=(distutils.sysconfig.get_config_var('LDFLAGS').split() +
+                         distutils.sysconfig.get_config_var('LINKFORSHARED').split()))
 
 
 def check_sanity():
@@ -176,8 +155,6 @@ if (len(sys.argv) >= 2 and
     def cythonize(x, **kwargs):
         return x
 
-flags = get_python_flags()
-
 setup(
     name='rbd',
     version=__version__,
@@ -198,10 +175,7 @@ setup(
             Extension(
                 "rbd",
                 [source],
-                include_dirs=flags['cflags']['I'],
-                library_dirs=flags['ldflags']['L'],
-                libraries=['rbd', 'rados'] + flags['ldflags']['l'],
-                extra_compile_args=flags['cflags']['extras'] + flags['ldflags']['extras'],
+                **get_python_flags(['rbd', 'rados'])
             )
         ],
         compiler_directives={'language_level': sys.version_info.major},
index 3cb9490d2aba9357cec5f7c1b55ee4ead9cf8f9f..6365e97a0301476e50b97bebb0d4614f17532ddc 100755 (executable)
@@ -49,37 +49,17 @@ else:
 
 __version__ = '2.0.0'
 
-def get_python_flags():
-    cflags = {'I': [], 'extras': []}
-    ldflags = {'l': [], 'L': [], 'extras': []}
 
-    if os.environ.get('VIRTUAL_ENV', None):
-        python = "python"
-    else:
-        python = 'python' + str(sys.version_info.major) + '.' + str(sys.version_info.minor)
-
-    python_config = python + '-config'
-
-    for cflag in filter_unsupported_flags(subprocess.check_output(
-            [python_config, "--cflags"]).strip().decode('utf-8').split()):
-        if cflag.startswith('-I'):
-            cflags['I'].append(cflag.replace('-I', ''))
-        else:
-            cflags['extras'].append(cflag)
-
-    for ldflag in filter_unsupported_flags(subprocess.check_output(
-            [python_config, "--ldflags"]).strip().decode('utf-8').split()):
-        if ldflag.startswith('-l'):
-            ldflags['l'].append(ldflag.replace('-l', ''))
-        if ldflag.startswith('-L'):
-            ldflags['L'].append(ldflag.replace('-L', ''))
-        else:
-            ldflags['extras'].append(ldflag)
-
-    return {
-        'cflags': cflags,
-        'ldflags': ldflags
-    }
+def get_python_flags(libs):
+    py_libs = sum((libs.split() for libs in
+                   distutils.sysconfig.get_config_vars('LIBS', 'SYSLIBS')), [])
+    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=distutils.sysconfig.get_config_var('CFLAGS').split(),
+        extra_link_args=(distutils.sysconfig.get_config_var('LDFLAGS').split() +
+                         distutils.sysconfig.get_config_var('LINKFORSHARED').split()))
 
 
 def check_sanity():
@@ -178,8 +158,6 @@ if (len(sys.argv) >= 2 and
     def cythonize(x, **kwargs):
         return x
 
-flags = get_python_flags()
-
 setup(
     name='rgw',
     version=__version__,
@@ -199,10 +177,7 @@ setup(
             Extension(
                 "rgw",
                 [source],
-                include_dirs=flags['cflags']['I'],
-                library_dirs=flags['ldflags']['L'],
-                libraries=['rados', 'rgw'] + flags['ldflags']['l'],
-                extra_compile_args=flags['cflags']['extras'] + flags['ldflags']['extras'],
+                **get_python_flags(['rados', 'rgw'])
             )
         ],
         compiler_directives={'language_level': sys.version_info.major},