From 051fa3d9b533d1323dab03b7d989c732e0875e3f Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Sun, 15 Mar 2020 10:47:44 +0800 Subject: [PATCH] pybind: move linker flags out of "libraries" sometimes, `distutils.sysconfig.get_config_vars('LIBS')` returns flags not starting with `-l`, and hence we should not allow `setuptools.extension.Extension` to rebuild the `-l` options from those flags, otherwise the linker just fails as the `-l-flags_for_linker` will be passed to the linker. in this change, those linker flags are passed directly to linker. Signed-off-by: Kefu Chai --- src/pybind/cephfs/setup.py | 7 +++++-- src/pybind/rados/setup.py | 7 +++++-- src/pybind/rbd/setup.py | 7 +++++-- src/pybind/rgw/setup.py | 7 +++++-- 4 files changed, 20 insertions(+), 8 deletions(-) diff --git a/src/pybind/cephfs/setup.py b/src/pybind/cephfs/setup.py index 19ae6c329af..9d2e672e944 100755 --- a/src/pybind/cephfs/setup.py +++ b/src/pybind/cephfs/setup.py @@ -61,17 +61,20 @@ __version__ = '2.0.0' def get_python_flags(libs): py_libs = sum((libs.split() for libs in distutils.sysconfig.get_config_vars('LIBS', 'SYSLIBS')), []) + ldflags = list(filterfalse(lambda lib: lib.startswith('-l'), py_libs)) + py_libs = [lib.replace('-l', '') for lib in + filter(lambda lib: lib.startswith('-l'), py_libs)] compiler = new_compiler() distutils.sysconfig.customize_compiler(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], + libraries=libs + py_libs, 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())) + ldflags)) def check_sanity(): diff --git a/src/pybind/rados/setup.py b/src/pybind/rados/setup.py index e2c56964040..5036e0668e7 100755 --- a/src/pybind/rados/setup.py +++ b/src/pybind/rados/setup.py @@ -64,17 +64,20 @@ __version__ = '2.0.0' def get_python_flags(libs): py_libs = sum((libs.split() for libs in distutils.sysconfig.get_config_vars('LIBS', 'SYSLIBS')), []) + ldflags = list(filterfalse(lambda lib: lib.startswith('-l'), py_libs)) + py_libs = [lib.replace('-l', '') for lib in + filter(lambda lib: lib.startswith('-l'), py_libs)] compiler = new_compiler() distutils.sysconfig.customize_compiler(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], + libraries=libs + py_libs, 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())) + ldflags)) def check_sanity(): diff --git a/src/pybind/rbd/setup.py b/src/pybind/rbd/setup.py index 634484f1402..2f4a2a5339f 100755 --- a/src/pybind/rbd/setup.py +++ b/src/pybind/rbd/setup.py @@ -61,17 +61,20 @@ __version__ = '2.0.0' def get_python_flags(libs): py_libs = sum((libs.split() for libs in distutils.sysconfig.get_config_vars('LIBS', 'SYSLIBS')), []) + ldflags = list(filterfalse(lambda lib: lib.startswith('-l'), py_libs)) + py_libs = [lib.replace('-l', '') for lib in + filter(lambda lib: lib.startswith('-l'), py_libs)] compiler = new_compiler() distutils.sysconfig.customize_compiler(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], + libraries=libs + py_libs, 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())) + ldflags)) def check_sanity(): diff --git a/src/pybind/rgw/setup.py b/src/pybind/rgw/setup.py index eb1591a460a..882807cd014 100755 --- a/src/pybind/rgw/setup.py +++ b/src/pybind/rgw/setup.py @@ -62,17 +62,20 @@ __version__ = '2.0.0' def get_python_flags(libs): py_libs = sum((libs.split() for libs in distutils.sysconfig.get_config_vars('LIBS', 'SYSLIBS')), []) + ldflags = list(filterfalse(lambda lib: lib.startswith('-l'), py_libs)) + py_libs = [lib.replace('-l', '') for lib in + filter(lambda lib: lib.startswith('-l'), py_libs)] compiler = new_compiler() distutils.sysconfig.customize_compiler(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], + libraries=libs + py_libs, 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())) + ldflags)) def check_sanity(): -- 2.39.5