From: Kefu Chai Date: Mon, 8 Jul 2019 14:08:57 +0000 (+0800) Subject: pybind: use distutils.sysconfig for compiling flags X-Git-Tag: v15.1.0~2261^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=6050f28870e15ca80e59e0804783205d222f8493;p=ceph-ci.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 --- diff --git a/src/pybind/cephfs/setup.py b/src/pybind/cephfs/setup.py index 63858407374..a4374b1a486 100755 --- a/src/pybind/cephfs/setup.py +++ b/src/pybind/cephfs/setup.py @@ -48,37 +48,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(): @@ -178,8 +157,6 @@ if (len(sys.argv) >= 2 and def cythonize(x, **kwargs): return x -flags = get_python_flags() - setup( name='cephfs', version=__version__, @@ -200,10 +177,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 4f391703b3a..30d8718fa87 100755 --- a/src/pybind/rados/setup.py +++ b/src/pybind/rados/setup.py @@ -48,37 +48,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(): @@ -174,8 +153,6 @@ if (len(sys.argv) >= 2 and def cythonize(x, **kwargs): return x -flags = get_python_flags() - setup( name='rados', version=__version__, @@ -195,10 +172,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 c4232700fd2..6d88220e3c7 100755 --- a/src/pybind/rbd/setup.py +++ b/src/pybind/rbd/setup.py @@ -48,37 +48,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='rbd', version=__version__, @@ -199,10 +176,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 e1d7a35cbc6..771345bd001 100755 --- a/src/pybind/rgw/setup.py +++ b/src/pybind/rgw/setup.py @@ -50,37 +50,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(): @@ -179,8 +159,6 @@ if (len(sys.argv) >= 2 and def cythonize(x, **kwargs): return x -flags = get_python_flags() - setup( name='rgw', version=__version__, @@ -200,10 +178,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},