X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=blobdiff_plain;f=src%2Fbindings%2Fpython%2Fbt2%2Fsetup.py.in;h=5319214bf1fceb48c9529a2dff9891c64ea6d53f;hp=e57ac024dd6e399c4be1f4f902c3df9b0579f59b;hb=0235b0db7de5bcacdb3650c92461f2ce5eb2143d;hpb=7085eeaab415fdeb43a5f77c9383f831a4b85acf diff --git a/src/bindings/python/bt2/setup.py.in b/src/bindings/python/bt2/setup.py.in index e57ac024..5319214b 100644 --- a/src/bindings/python/bt2/setup.py.in +++ b/src/bindings/python/bt2/setup.py.in @@ -1,26 +1,11 @@ -# The MIT License (MIT) +# SPDX-License-Identifier: MIT # -# Copyright (C) 2017 - Francis Deslauriers -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. +# Copyright (C) 2017 Francis Deslauriers +# Copyright (C) 2020 Jérémie Galarneau import sys +import os +import distutils.sysconfig from distutils.core import setup, Extension @@ -34,47 +19,113 @@ following command to your .bashrc/.zshrc: -------------------------------------------------------------------------------- """ +original_get_config_vars = distutils.sysconfig.get_config_vars + + +def get_cflags(): + cflags = os.environ.get('CFLAGS') + + if cflags is None: + [cflags] = original_get_config_vars('CFLAGS') + + return cflags + + +# distutils performs a similar transformation step on LDSHARED on +# darwin to use the overriden CC as the default command for LDSHARED +# (see distutils' customize_compiler() step in the sysconfig module). +# +# This takes it a step further by using our own LDFLAGS (when available) +# along with the overriden compiler and ensure that flags that are unsupported +# by either the Python interprter's CC or the overriden CC don't cause a +# build failure. +def get_ldshared(): + cc = os.environ.get('CC') + ldflags = os.environ.get('LDFLAGS') + [py_cc] = original_get_config_vars('CC') + [py_ldshared] = original_get_config_vars('LDSHARED') + + if not py_ldshared.startswith(py_cc): + return py_ldshared + + if cc and ldflags: + return '{} -shared {}'.format(cc, ldflags) + elif cc: + return cc + py_ldshared[len(py_cc) :] + elif ldflags: + return py_cc + py_ldshared[len(py_cc) :] + else: + return py_ldshared + + +def our_get_config_vars(*args): + overridden_config_vars = { + 'CFLAGS': get_cflags(), + 'LDSHARED': get_ldshared(), + } + + if len(args) == 0: + all_config_vars = original_get_config_vars() + for name in overridden_config_vars: + all_config_vars[name] = overridden_config_vars[name] + return all_config_vars + + subset_config_vars = [] + for name in args: + if name not in overridden_config_vars: + [var] = original_get_config_vars(name) + subset_config_vars.append(var) + continue + + subset_config_vars.append(overridden_config_vars[name]) + + return subset_config_vars + + +distutils.sysconfig.get_config_vars = our_get_config_vars + + def main(): - babeltrace_ext = Extension('bt2._native_bt', - sources=['bt2/native_bt.i', 'bt2/logging.c'], - libraries=['babeltrace2', 'glib-2.0'], - extra_objects=['@top_builddir@/src/logging/.libs/libbabeltrace2-logging.a', - '@top_builddir@/src/common/.libs/libbabeltrace2-common.a', - '@top_builddir@/src/py-common/.libs/libbabeltrace2-py-common.a'], - swig_opts=['-I@top_srcdir@/include']) - - dist = setup(name='bt2', - version='@PACKAGE_VERSION@', - description='Babeltrace 2 Python Bindings', - packages=['bt2'], - package_dir={'bt2': 'bt2'}, - options={'build': - { - 'build_base': 'build', - 'build_lib': 'build/build_lib' - }, - 'build_ext': - { - 'build_lib': 'build/build_lib' - } - }, - url='http://diamon.org/babeltrace', - ext_modules=[babeltrace_ext], - license='MIT', - classifiers=[ - 'Development Status :: 5 - Production/Stable', - 'Intended Audience :: Developers', - 'License :: OSI Approved :: The MIT License', - 'Programming Language :: Python :: 3' - 'Topic :: System :: Logging', - ]) - -# After the installation, we check that the install directory is included in -# the Python search path and we print a warning message when it's not. -# We need to do this because Python search path differs depending on the distro -# and some distros don't include any /usr/local/ in the search path. This is -# also useful for out-of-tree installs and tests. -# It's only relevant to make this check on the `install` command. + babeltrace_ext = Extension( + 'bt2._native_bt', + sources=['bt2/native_bt.c', '@srcdir@/bt2/logging.c'], + libraries=['babeltrace2', 'glib-2.0'], + extra_objects=[ + '@top_builddir@/src/autodisc/.libs/libbabeltrace2-autodisc.a', + '@top_builddir@/src/logging/.libs/libbabeltrace2-logging.a', + '@top_builddir@/src/common/.libs/libbabeltrace2-common.a', + '@top_builddir@/src/py-common/.libs/libbabeltrace2-py-common.a', + '@top_builddir@/src/string-format/.libs/libbabeltrace2-string-format.a', + ], + ) + + dist = setup( + name='bt2', + version='@PACKAGE_VERSION@', + description='Babeltrace 2 Python Bindings', + packages=['bt2'], + package_dir={'bt2': 'bt2'}, + options={ + 'build': {'build_base': 'build', 'build_lib': 'build/build_lib'}, + 'build_ext': {'build_lib': 'build/build_lib'}, + }, + url='https://babeltrace.org/', + ext_modules=[babeltrace_ext], + license='MIT', + classifiers=[ + 'Development Status :: 5 - Production/Stable', + 'Intended Audience :: Developers', + 'License :: OSI Approved :: The MIT License', + 'Programming Language :: Python :: 3' 'Topic :: System :: Logging', + ], + ) + + # After the installation, we check that the install directory is included in + # the Python search path and we print a warning message when it's not. + # We need to do this because Python search path differs depending on the distro + # and some distros don't include any /usr/local/ in the search path. This is + # also useful for out-of-tree installs and tests. + # It's only relevant to make this check on the `install` command. if 'install' in dist.command_obj: install_dir = dist.command_obj['install'].install_libbase @@ -84,5 +135,6 @@ def main(): # extra configuration is needed to use the bindings print(PY_PATH_WARN_MSG.format(install_dir, install_dir)) + if __name__ == "__main__": main()