From 8b4500252debf1ae09de9a24230b1db95b8a6698 Mon Sep 17 00:00:00 2001 From: Jonathan Rajotte Date: Mon, 10 Aug 2015 14:45:34 -0400 Subject: [PATCH] Build: python agent: use setup.py over autoconf This change provides a valid way of installing the agent. The autoconf python macro provides the wrong installation path for python 3 under Debian and Ubuntu due to distro-specific packaging for python 2.7 and 3. Signed-off-by: Jonathan Rajotte Signed-off-by: Mathieu Desnoyers --- .gitignore | 5 +- configure.ac | 10 ++++ liblttng-ust-python-agent/Makefile.am | 47 ++++++++++--------- .../{ => lttngust}/__init__.py.in | 2 +- liblttng-ust-python-agent/setup.py.in | 25 ++++++++++ 5 files changed, 65 insertions(+), 24 deletions(-) rename liblttng-ust-python-agent/{ => lttngust}/__init__.py.in (96%) create mode 100644 liblttng-ust-python-agent/setup.py.in diff --git a/.gitignore b/.gitignore index 6b11c673..4fe8607e 100644 --- a/.gitignore +++ b/.gitignore @@ -64,5 +64,8 @@ org_lttng_ust_agent_log4j_LTTngLogAppender.h liblttng-ust-java-agent/java/liblttng-ust-jul.jar # Python agent -liblttng-ust-python-agent/__init__.py +liblttng-ust-python-agent/lttngust/__init__.py liblttng-ust-python-agent/**/*.pyc +liblttng-ust-python-agent/build +liblttng-ust-python-agent/install_files.txt +liblttng-ust-python-agent/setup.py diff --git a/configure.ac b/configure.ac index 431a3ce8..f29a4d20 100644 --- a/configure.ac +++ b/configure.ac @@ -391,6 +391,8 @@ AC_CONFIG_FILES([ liblttng-ust-libc-wrapper/Makefile liblttng-ust-cyg-profile/Makefile liblttng-ust-python-agent/Makefile + liblttng-ust-python-agent/setup.py + liblttng-ust-python-agent/lttngust/__init__.py tools/Makefile tests/Makefile tests/hello/Makefile @@ -402,6 +404,14 @@ AC_CONFIG_FILES([ lttng-ust.pc ]) +# Create link for python agent for the VPATH guru. +AC_CONFIG_LINKS([ + liblttng-ust-python-agent/lttngust/agent.py:liblttng-ust-python-agent/lttngust/agent.py + liblttng-ust-python-agent/lttngust/cmd.py:liblttng-ust-python-agent/lttngust/cmd.py + liblttng-ust-python-agent/lttngust/debug.py:liblttng-ust-python-agent/lttngust/debug.py + liblttng-ust-python-agent/lttngust/loghandler.py:liblttng-ust-python-agent/lttngust/loghandler.py +]) + AC_OUTPUT AS_ECHO() diff --git a/liblttng-ust-python-agent/Makefile.am b/liblttng-ust-python-agent/Makefile.am index 869add48..f80b8a3f 100644 --- a/liblttng-ust-python-agent/Makefile.am +++ b/liblttng-ust-python-agent/Makefile.am @@ -1,24 +1,3 @@ -# inputs/outputs -LTTNGUST_PY_PACKAGE_DIR = $(srcdir)/lttngust -LTTNGUST_PY_PACKAGE_FILES = agent.py cmd.py debug.py loghandler.py -LTTNGUST_PY_PACKAGE_SRC = \ - $(addprefix $(LTTNGUST_PY_PACKAGE_DIR)/,$(LTTNGUST_PY_PACKAGE_FILES)) -INIT_PY_IN = $(srcdir)/__init__.py.in -INIT_PY = __init__.py - -# dist files -EXTRA_DIST = $(INIT_PY_IN) $(LTTNGUST_PY_PACKAGE_SRC) - -# __init__.py with proper version string -all-local: $(INIT_PY) - -$(INIT_PY): $(INIT_PY_IN) - $(SED) "s/@LTTNG_UST_VERSION@/$(PACKAGE_VERSION)/g" < $< > $@ - -# Python package -nodist_lttngust_PYTHON = $(LTTNGUST_PY_PACKAGE_SRC) $(INIT_PY) -lttngustdir = $(pythondir)/lttngust - # tracepoint provider AM_CPPFLAGS = $(PYTHON_INCLUDE) -I$(top_srcdir)/include/ \ -I$(top_builddir)/include/ @@ -28,4 +7,28 @@ liblttng_ust_python_agent_la_SOURCES = lttng_ust_python.c lttng_ust_python.h liblttng_ust_python_agent_la_LIBADD = -lc -llttng-ust \ -L$(top_builddir)/liblttng-ust/.libs -CLEANFILES = $(INIT_PY) +# Use setup.py for the installation instead of Autoconf. +# This ease the installation process and assure a *pythonic* +# installation. +agent_path=lttngust +all-local: + $(PYTHON) setup.py build --verbose + +install-exec-local: + if [ "$(DESTDIR)" = "" ]; then \ + $(PYTHON) setup.py install --prefix=$(prefix) --record install_files.txt --verbose --no-compile $(DISTSETUPOPTS); \ + else \ + $(PYTHON) setup.py install --root=$(DESTDIR) --verbose install_files.txt --prefix=$(prefix) --no-compile $(DISTSETUPOPTS); \ + fi +clean-local: + rm -rf build + +uninstall-local: + cat install_files.txt | xargs rm -rf + rm -rf $(DESTDIR)$(pkgpythondir) + +EXTRA_DIST=$(agent_path) + +# Remove automake generated file before dist +dist-hook: + rm -rf $(distdir)/$(agent_path)/__init__.py diff --git a/liblttng-ust-python-agent/__init__.py.in b/liblttng-ust-python-agent/lttngust/__init__.py.in similarity index 96% rename from liblttng-ust-python-agent/__init__.py.in rename to liblttng-ust-python-agent/lttngust/__init__.py.in index 0b83d10e..b70c2e83 100644 --- a/liblttng-ust-python-agent/__init__.py.in +++ b/liblttng-ust-python-agent/lttngust/__init__.py.in @@ -21,4 +21,4 @@ from __future__ import unicode_literals import lttngust.agent -__version__ = '@LTTNG_UST_VERSION@' +__version__ = '@PACKAGE_VERSION@' diff --git a/liblttng-ust-python-agent/setup.py.in b/liblttng-ust-python-agent/setup.py.in new file mode 100644 index 00000000..7f21c5cf --- /dev/null +++ b/liblttng-ust-python-agent/setup.py.in @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2015 - Jonathan Rajotte +# +# This library is free software; you can redistribute it and/or modify it under +# the terms of the GNU Lesser General Public License as published by the Free +# Software Foundation; version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more +# details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this library; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +from distutils.core import setup, Extension + +setup(name='lttngust', + version='@PACKAGE_VERSION@', + description='Lttng ust agent', + packages=['lttngust'], + package_dir={'lttngust': 'lttngust'}, + options={'build': {'build_base': 'build'}}) -- 2.34.1