From: Kefu Chai Date: Mon, 8 Jul 2019 14:08:57 +0000 (+0800) Subject: pybind: use distutils.sysconfig for compiling flags X-Git-Tag: v14.2.22~26^2~5^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F41167%2Fhead;p=ceph.git pybind: use distutils.sysconfig for compiling flags this allows maintainer to override the compiling flags when cross-compiling Ceph. Signed-off-by: Kefu Chai (cherry picked from commit 6050f28870e15ca80e59e0804783205d222f8493) --- diff --git a/src/pybind/cephfs/setup.py b/src/pybind/cephfs/setup.py index 778804db8aca..4bcffb6dd248 100755 --- a/src/pybind/cephfs/setup.py +++ b/src/pybind/cephfs/setup.py @@ -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}, diff --git a/src/pybind/rados/setup.py b/src/pybind/rados/setup.py index 3d229453903c..12c7c4cb1142 100755 --- a/src/pybind/rados/setup.py +++ b/src/pybind/rados/setup.py @@ -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}, diff --git a/src/pybind/rbd/setup.py b/src/pybind/rbd/setup.py index f3dd5be95830..d35d600afeea 100755 --- a/src/pybind/rbd/setup.py +++ b/src/pybind/rbd/setup.py @@ -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}, diff --git a/src/pybind/rgw/setup.py b/src/pybind/rgw/setup.py index 3cb9490d2aba..6365e97a0301 100755 --- a/src/pybind/rgw/setup.py +++ b/src/pybind/rgw/setup.py @@ -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},