Move to kernel style SPDX license identifiers
[babeltrace.git] / src / bindings / python / bt2 / setup.py.in
index 78398605fc67488d4d04b0e4dc85bd0bb4b20191..5319214bf1fceb48c9529a2dff9891c64ea6d53f 100644 (file)
@@ -1,26 +1,11 @@
-# The MIT License (MIT)
+# SPDX-License-Identifier: MIT
 #
-# Copyright (C) 2017 - Francis Deslauriers <francis.deslauriers@efficios.com>
-#
-# 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 <francis.deslauriers@efficios.com>
+# Copyright (C) 2020 Jérémie Galarneau <jeremie.galarneau@efficios.com>
 
 import sys
+import os
+import distutils.sysconfig
 
 from distutils.core import setup, Extension
 
@@ -34,46 +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'],
-                        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
@@ -83,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()
This page took 0.02462 seconds and 4 git commands to generate.