From db167520c89939aaacc89b7be744fa9fa26f0508 Mon Sep 17 00:00:00 2001 From: Michael Jeanson Date: Wed, 14 Jun 2023 16:55:28 -0400 Subject: [PATCH] fix: python agent: use stdlib distutils when setuptools is installed When the setuptools package is installed, it monkey patches the standard library distutils even if the user code doesn't import setuptools. This results in a failure to install the python agent in a directory which ins't in the current PYTHONPATH. To allow this setuptools requires the '--single-version-externally-managed' options which is not implemented in distutils. To resolve this, force the use of distutils for python < 3.12 even when setuptools is installed with the 'SETUPTOOLS_USE_DISTUTILS' environment variable and use the proper setuptools option with python >= 3.12 which doesn't include distutils anymore. Change-Id: Idf477ca61bed460c9f6be7f481fe3b84624f328c Signed-off-by: Michael Jeanson Signed-off-by: Mathieu Desnoyers --- configure.ac | 2 ++ src/python-lttngust/Makefile.am | 11 ++++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index d3785e13..cf331a02 100644 --- a/configure.ac +++ b/configure.ac @@ -484,6 +484,7 @@ environment variable. ]) AX_COMPARE_VERSION(["$PYTHON_VERSION"], [ge], ["3.12"], [ + have_python_312_or_greater=yes AC_MSG_CHECKING([for python setuptools]) AS_IF(["$PYTHON" -c "import setuptools" 2>/dev/null], [ AC_MSG_RESULT([yes]) @@ -577,6 +578,7 @@ AM_CONDITIONAL([HAVE_CMAKE], [test "x$CMAKE" != "x"]) AM_CONDITIONAL([HAVE_CXX], [test "$HAVE_CXX11" = "1"]) AM_CONDITIONAL([HAVE_JAVAH], [test "x$JAVAH" != "x"]) AM_CONDITIONAL([HAVE_PERF_EVENT], [test "x$ac_cv_header_linux_perf_event_h" = "xyes"]) +AM_CONDITIONAL([HAVE_PYTHON_312_OR_GREATER], [test "x$have_python_312_or_greater" = "xyes"]) ## ## diff --git a/src/python-lttngust/Makefile.am b/src/python-lttngust/Makefile.am index 64800e6f..d53e21da 100644 --- a/src/python-lttngust/Makefile.am +++ b/src/python-lttngust/Makefile.am @@ -14,6 +14,15 @@ GENERATED_BINDINGS_DEPS = \ lttngust/version.py \ setup.py +# For python < 3.12, force the use of distutils even if setuptools is +# installed. For python >= 3.12, set the externally managed option to allow +# installation in a directory which isn't in the current PYTHONPATH. +if HAVE_PYTHON_312_OR_GREATER +PY_INSTALL_OPTS = --single-version-externally-managed +else +export SETUPTOOLS_USE_DISTUTILS=stdlib +endif + all-local: build-python-bindings.stamp copy-static-deps.stamp: $(addprefix $(srcdir)/, $(STATIC_BINDINGS_DEPS)) @@ -36,7 +45,7 @@ install-exec-local: build-python-bindings.stamp if [ "$(DESTDIR)" != "" ]; then \ opts="$$opts --root=$(DESTDIR)"; \ fi; \ - $(PYTHON) $(builddir)/setup.py install $$opts; + $(PYTHON) $(builddir)/setup.py install $(PY_INSTALL_OPTS) $$opts; clean-local: rm -rf $(builddir)/build -- 2.34.1