[DTrace-devel] [PATCH v2 2/2] build: initial pkg-config support
Nick Alcock
nick.alcock at oracle.com
Thu May 23 21:41:33 UTC 2024
This initial pkg-config file, dtrace_sdt.pc, points at the location
of the sdt.h include file. We immediately use it in make check in the
installed testsuite, compensating for any install-time changes in the
location of the dtrace libdir.
Further changes will be forthcoming to properly support relocatable
installation.
Signed-off-by: Nick Alcock <nick.alcock at oracle.com>
---
GNUmakefile | 2 ++
configure | 2 ++
dtrace.spec | 1 +
runtest.sh | 2 +-
uts/Build | 14 +++++++++++++-
uts/dtrace_sdt.pc.in | 6 ++++++
6 files changed, 25 insertions(+), 2 deletions(-)
create mode 100644 uts/dtrace_sdt.pc.in
diff --git a/GNUmakefile b/GNUmakefile
index 30726332d762d..0390db77b4780 100644
--- a/GNUmakefile
+++ b/GNUmakefile
@@ -100,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..4b235fb1fd766 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";;
+ --pkg-config-dir=*) 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 2f1e489aab7b1..7823b13d981cf 100644
--- a/dtrace.spec
+++ b/dtrace.spec
@@ -236,6 +236,7 @@ systemctl start dtprobed || :
%{_libdir}/libdtrace.so.*
%{_sbindir}/dtrace
%{_sbindir}/dtprobed
+%{_datadir}/pkgconfig/dtrace_sdt.pc
%{_mandir}/man8/dtrace.8.gz
%doc %{_docdir}/dtrace-%{version}/*
%{_unitdir}/dtprobed.service
diff --git a/runtest.sh b/runtest.sh
index 3bcd676ea788d..cc9703e12c161 100755
--- a/runtest.sh
+++ b/runtest.sh
@@ -579,7 +579,7 @@ else
dtrace="/usr/sbin/dtrace"
test_libdir="installed"
test_ldflags=""
- test_cppflags="-DARCH_$arch -I/usr/lib64/dtrace/include"
+ test_cppflags="-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 864b2dfdacbf4..feafa21369f2e 100644
--- a/uts/Build
+++ b/uts/Build
@@ -14,11 +14,16 @@ SYS_HEADERS_INSTALL := common/sys/dtrace.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.
+# 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)))
@@ -26,3 +31,10 @@ install::
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, at SDTINCLUDEDIR@,$(SDTINCLUDEDIR),g; s, at 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}
--
2.45.1.275.g567cb0950c
More information about the DTrace-devel
mailing list