From: Kris Van Hees <kris.van.hees@oracle.com>
To: Nick Alcock <nick.alcock@oracle.com>
Cc: dtrace@lists.linux.dev, dtrace-devel@oss.oracle.com
Subject: Re: [PATCH] build: install sdt*.h in /usr/lib64/dtrace/include/sys
Date: Thu, 23 May 2024 14:41:32 -0400 [thread overview]
Message-ID: <Zk+N3P7NnwzL1ZSz@oracle.com> (raw)
In-Reply-To: <20240523175654.462908-1-nick.alcock@oracle.com>
Can you split the move of sdt.h and sdt_internal.h into its own patch
please? And I guess the pkg-config stuff in a follw-up patch? Still
need to look into that a bit more because I have reservations. But
the moving of the header files is definitely something that should be
in its own patch.
Introducing pkg-config as a mechanism that people can use is a separate
thing (and as far as I can see, could use some extra work anyway because
e.g. runtest.sh still has other absolute paths in it that cause failures
when the DTrace build is configured to install things in non-standard
locations).
On Thu, May 23, 2024 at 06:56:54PM +0100, Nick Alcock wrote:
> This moves it out of the way of SystemTap's rather different sdt.h,
> and lets us remove the barely-working kludgery in the specfile
> to work around it. We point at the new location with a pkg-config
> file, and can immediately use it in make check in the installed
> testsuite, compensating for any install-time changes in the
> location of the dtrace libdir.
>
> With this change, we no longer confict with any systemtap packages!
>
> Signed-off-by: Nick Alcock <nick.alcock@oracle.com>
> ---
> GNUmakefile | 4 ++++
> configure | 2 ++
> dtrace.spec | 19 +------------------
> runtest.sh | 2 +-
> uts/Build | 26 +++++++++++++++++++++++---
> uts/dtrace_sdt.pc.in | 6 ++++++
> 6 files changed, 37 insertions(+), 22 deletions(-)
> create mode 100644 uts/dtrace_sdt.pc.in
>
> This is a provisional patch so people can see what I'm up to --
> tests are still running. Don't commit yet.
>
> diff --git a/GNUmakefile b/GNUmakefile
> index 7d1af5641f54a..0390db77b4780 100644
> --- a/GNUmakefile
> +++ b/GNUmakefile
> @@ -86,6 +86,8 @@ BINDIR = $(prefix)/bin
> INSTBINDIR = $(DESTDIR)$(BINDIR)
> INCLUDEDIR = $(prefix)/include
> INSTINCLUDEDIR = $(DESTDIR)$(INCLUDEDIR)
> +SDTINCLUDEDIR = $(LIBDIR)/dtrace/include
> +INSTSDTINCLUDEDIR = $(DESTDIR)$(SDTINCLUDEDIR)
> SBINDIR = $(prefix)/sbin
> INSTSBINDIR = $(DESTDIR)$(SBINDIR)
> UDEVDIR = $(prefix)/lib/udev/rules.d
> @@ -98,6 +100,8 @@ DOCDIR = $(prefix)/share/doc/dtrace-$(VERSION)
> INSTDOCDIR = $(DESTDIR)$(DOCDIR)
> MANDIR = $(prefix)/share/man/man8
> INSTMANDIR = $(DESTDIR)$(MANDIR)
> +PKGCONFIGDIR = $(prefix)/share/pkgconfig
> +INSTPKGCONFIGDIR = $(DESTDIR)$(PKGCONFIGDIR)
> TESTDIR = $(prefix)/lib$(BITNESS)/dtrace/testsuite
> INSTTESTDIR = $(DESTDIR)$(TESTDIR)
> TARGETS =
> diff --git a/configure b/configure
> index 40b870f81d6ff..bc42c4f49a3fa 100755
> --- a/configure
> +++ b/configure
> @@ -60,6 +60,7 @@ Installation paths:
> --sbindir=PREFIX/sbin Alias for --bindir
> --includedir=PREFIX/include #include directory
> --mandir=PREFIX/share/man/man8 Manpage directory
> +--pkg-config-dir=PREFIX/share/pkgconfig Pkg-config directory
> --udevdir=PREFIX/lib/udev/rules.d udev rules directory
> --systemd-unit-dir=PREFIX/lib/systemd/system systemd unit directory
> --docdir=PREFIX/share/doc/dtrace Documentation directory
> @@ -130,6 +131,7 @@ for option in "$@"; do
> --systemd-unit-dir=*) write_make_var SYSTEMDUNITDIR "$option";;
> --docdir=*) write_make_var DOCDIR "$option";;
> --mandir=*) write_make_var MANDIR "$option";;
> + --mandir=*) write_make_var PKGCONFIGDIR "$option";;
> --testdir=*) write_make_var TESTDIR "$option";;
> CC=*) write_make_var CC "$option";;
> CPP=*) write_make_var PREPROCESS "$option";;
> diff --git a/dtrace.spec b/dtrace.spec
> index 42ea9bc339586..7823b13d981cf 100644
> --- a/dtrace.spec
> +++ b/dtrace.spec
> @@ -86,8 +86,6 @@ BuildRequires: binutils-devel >= 2.30-58.0.8
> Requires: libdtrace-ctf >= 1.1.0
> BuildRequires: libdtrace-ctf-devel >= 1.1.0
> %endif
> -Conflicts: systemtap-sdt-devel
> -Provides: systemtap-sdt-devel
> Summary: DTrace user interface.
> Version: 2.0.1
> Release: 0%{?dist}
> @@ -194,11 +192,6 @@ make DESTDIR=$RPM_BUILD_ROOT VERSION=%{version} \
> sed -i '/^ProtectSystem=/d; /^ProtectControlGroups=/d; /^RuntimeDirectory/d;' $RPM_BUILD_ROOT/usr/lib/systemd/system/dtprobed.service
> %endif
>
> -# Because systemtap creates a sdt.h header file we have to rename
> -# ours and then shift theirs out of the way.
> -mv $RPM_BUILD_ROOT/usr/include/sys/sdt.h \
> - $RPM_BUILD_ROOT/usr/include/sys/sdt-dtrace.h
> -
> %clean
> [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf "$RPM_BUILD_ROOT"
> rm -rf $RPM_BUILD_DIR/%{name}-%{version}
> @@ -222,15 +215,6 @@ if [ $1 -ge 2 ] ; then
> %systemd_postun_with_restart dtprobed.service
> fi
>
> -# if sdt-systemtap.h doesn't exist then we can move the existing dtrace sdt.h
> -SYSINCDIR=/usr/include/sys
> -if [ -e $SYSINCDIR/sdt.h -a ! -e $SYSINCDIR/sdt-systemtap.h ]; then
> - mv $SYSINCDIR/sdt.h $SYSINCDIR/sdt-systemtap.h
> - ln -s $SYSINCDIR/sdt-dtrace.h $SYSINCDIR/sdt.h
> -elif [ ! -e $SYSINCDIR/sdt.h ]; then
> - ln -s $SYSINCDIR/sdt-dtrace.h $SYSINCDIR/sdt.h
> -fi
> -
> %preun
> %systemd_preun dtprobed.service
>
> @@ -252,9 +236,8 @@ systemctl start dtprobed || :
> %{_libdir}/libdtrace.so.*
> %{_sbindir}/dtrace
> %{_sbindir}/dtprobed
> +%{_datadir}/pkgconfig/dtrace_sdt.pc
> %{_mandir}/man8/dtrace.8.gz
> -%{_includedir}/sys/sdt-dtrace.h
> -%{_includedir}/sys/sdt_internal.h
> %doc %{_docdir}/dtrace-%{version}/*
> %{_unitdir}/dtprobed.service
> %{_unitdir}/dtrace-usdt.target
> diff --git a/runtest.sh b/runtest.sh
> index 35d5006978469..78f47c23897c8 100755
> --- a/runtest.sh
> +++ b/runtest.sh
> @@ -579,7 +579,7 @@ else
> dtrace="/usr/sbin/dtrace"
> test_libdir="installed"
> test_ldflags=""
> - test_incflags="-DARCH_$arch"
> + test_incflags="-DARCH_$arch $(pkg-config --cflags dtrace_sdt)"
>
> if [[ ! -x $dtrace ]]; then
> echo "$dtrace not available." >&2
> diff --git a/uts/Build b/uts/Build
> index f445115d683db..99bdf19638a50 100644
> --- a/uts/Build
> +++ b/uts/Build
> @@ -10,11 +10,31 @@ uts_DIR := $(current-dir)
> # provide the userspace versions of types defined distincty by the kernel.
>
> SYS_HEADERS_INSTALL := common/sys/dtrace.h \
> - common/sys/dtrace_types.h \
> - common/sys/sdt.h \
> - common/sys/sdt_internal.h
> + common/sys/dtrace_types.h
> +
> +# sdt*.h are used by programs that contain USDT probes that want to define
> +# probes by hand rather than using dtrace -h. SystemTap has another header
> +# with the same name, so we install these out of the way and provide a
> +# pkg-config file to pull them in.
> +
> +PROBE_HEADERS_INSTALL := common/sys/sdt.h \
> + common/sys/sdt_internal.h
> +
> +# The pkg-config files undergo a few translations with sed before installation.
> +
> +SHARE_PKG_CONFIG_INSTALL := dtrace_sdt.pc
>
> install::
> mkdir -p $(INSTINCLUDEDIR)/sys
> $(call describe-install-target,$(INSTINCLUDEDIR)/sys,$(notdir $(SYS_HEADERS_INSTALL)))
> cd $(uts_DIR) && install -m 644 $(SYS_HEADERS_INSTALL) $(INSTINCLUDEDIR)/sys
> + mkdir -p $(INSTSDTINCLUDEDIR)/sys
> + $(call describe-install-target,$(INSTSDTINCLUDEDIR)/sys,$(notdir $(PROBE_HEADERS_INSTALL)))
> + cd $(uts_DIR) && install -m 644 $(PROBE_HEADERS_INSTALL) $(INSTSDTINCLUDEDIR)/sys
> + mkdir -p $(INSTPKGCONFIGDIR)
> + $(call describe-install-target,$(INSTPKGCONFIGDIR),$(SHARE_PKG_CONFIG_INSTALL))
> + for name in $(SHARE_PKG_CONFIG_INSTALL); do \
> + cd $(uts_DIR) && \
> + sed 's,@SDTINCLUDEDIR@,$(SDTINCLUDEDIR),g; s,@VERSION@,$(VERSION),g' < \
> + $${name}.in > $(INSTPKGCONFIGDIR)/$$name; \
> + done
> diff --git a/uts/dtrace_sdt.pc.in b/uts/dtrace_sdt.pc.in
> new file mode 100644
> index 0000000000000..c5506f9355d92
> --- /dev/null
> +++ b/uts/dtrace_sdt.pc.in
> @@ -0,0 +1,6 @@
> +sdtincludedir = @SDTINCLUDEDIR@
> +
> +Name: DTrace SDT
> +Description: DTrace raw SDT headers
> +Version: @VERSION@
> +Cflags: -I${sdtincludedir}
>
> base-commit: 0f499300c150a3a8878361e31f3ba167f7d5b851
> --
> 2.45.1.275.g567cb0950c
>
next prev parent reply other threads:[~2024-05-23 18:41 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-05-23 17:56 [PATCH] build: install sdt*.h in /usr/lib64/dtrace/include/sys Nick Alcock
2024-05-23 18:41 ` Kris Van Hees [this message]
2024-05-23 18:49 ` Nick Alcock
2024-05-23 18:56 ` Kris Van Hees
2024-05-23 20:02 ` Nick Alcock
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Zk+N3P7NnwzL1ZSz@oracle.com \
--to=kris.van.hees@oracle.com \
--cc=dtrace-devel@oss.oracle.com \
--cc=dtrace@lists.linux.dev \
--cc=nick.alcock@oracle.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox