-# The MIT License (MIT)
+# SPDX-License-Identifier: MIT
#
-# Copyright (C) 2017 - Francis Deslauriers <francis.deslauriers@efficios.com>
-# Copyright (C) 2020 - Jérémie Galarneau <jeremie.galarneau@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
+# Distutils was removed in Python 3.12, use setuptools as an alternative.
+if sys.version_info >= (3, 12):
+ from setuptools import setup, Extension
+else:
+ from distutils.core import setup, Extension
+
+# Starting with Debian's Python 3.10, the default install scheme is
+# 'posix_local' which is a Debian specific scheme based on 'posix_prefix' but
+# with an added 'local' prefix. This is the default so users doing system wide
+# manual installations of python modules end up in '/usr/local'. This
+# interferes with our autotools based install which already defaults to
+# '/usr/local' and expect a provided prefix to be used verbatim.
+#
+# Monkeypatch sysconfig to override this scheme and use 'posix_prefix' instead.
+if sys.version_info >= (3, 10):
+ import sysconfig
+
+ original_get_preferred_scheme = sysconfig.get_preferred_scheme
+
+ def our_get_preferred_scheme(key):
+ scheme = original_get_preferred_scheme(key)
+ if scheme == "posix_local":
+ return "posix_prefix"
+ else:
+ return scheme
+
+ sysconfig.get_preferred_scheme = our_get_preferred_scheme
+
+else:
+ import distutils.sysconfig as sysconfig
PY_PATH_WARN_MSG = """
-------------------------------------WARNING------------------------------------
--------------------------------------------------------------------------------
"""
-original_get_config_vars = distutils.sysconfig.get_config_vars
+original_get_config_vars = sysconfig.get_config_vars
def get_cflags():
- cflags = os.environ.get('CFLAGS')
+ cflags = os.environ.get("CFLAGS")
if cflags is None:
- [cflags] = original_get_config_vars('CFLAGS')
+ [cflags] = original_get_config_vars("CFLAGS")
return cflags
# 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')
+ 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)
+ return "{} -shared {}".format(cc, ldflags)
elif cc:
return cc + py_ldshared[len(py_cc) :]
elif ldflags:
def our_get_config_vars(*args):
overridden_config_vars = {
- 'CFLAGS': get_cflags(),
- 'LDSHARED': get_ldshared(),
+ "CFLAGS": get_cflags(),
+ "LDSHARED": get_ldshared(),
}
if len(args) == 0:
return subset_config_vars
-distutils.sysconfig.get_config_vars = our_get_config_vars
+sysconfig.get_config_vars = our_get_config_vars
def main():
babeltrace_ext = Extension(
- 'bt2._native_bt',
- sources=['bt2/native_bt.c', '@srcdir@/bt2/logging.c'],
- libraries=['babeltrace2', 'glib-2.0'],
+ "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',
+ "@top_builddir@/src/autodisc/.libs/libautodisc.a",
+ "@top_builddir@/src/logging/.libs/liblogging.a",
+ "@top_builddir@/src/common/.libs/libbabeltrace2-common.a",
+ "@top_builddir@/src/py-common/.libs/libpy-common.a",
+ "@top_builddir@/src/string-format/.libs/libstring-format.a",
],
)
dist = setup(
- name='bt2',
- version='@PACKAGE_VERSION@',
- description='Babeltrace 2 Python Bindings',
- packages=['bt2'],
- package_dir={'bt2': 'bt2'},
+ 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'},
+ "build": {"build_base": "build", "build_lib": "build/build_lib"},
+ "build_ext": {"build_lib": "build/build_lib"},
},
- url='https://babeltrace.org/',
+ url="https://babeltrace.org/",
ext_modules=[babeltrace_ext],
- license='MIT',
+ license="MIT",
classifiers=[
- 'Development Status :: 5 - Production/Stable',
- 'Intended Audience :: Developers',
- 'License :: OSI Approved :: The MIT License',
- 'Programming Language :: Python :: 3' 'Topic :: System :: Logging',
+ "Development Status :: 5 - Production/Stable",
+ "Intended Audience :: Developers",
+ "License :: OSI Approved :: The MIT License",
+ "Programming Language :: Python :: 3" "Topic :: System :: Logging",
],
)
# 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
+ if "install" in dist.command_obj:
+ install_dir = dist.command_obj["install"].install_libbase
if install_dir not in sys.path:
# We can't consider this an error because if affects every
# distro differently. We only warn the user that some