git: c4705d66d1b0 - main - Uses/dbus-testing.mk: Introduce new USES
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sun, 28 Dec 2025 15:44:33 UTC
The branch main has been updated by arrowd:
URL: https://cgit.FreeBSD.org/ports/commit/?id=c4705d66d1b0a9ef2a48a439ae63992783532423
commit c4705d66d1b0a9ef2a48a439ae63992783532423
Author: Gleb Popov <arrowd@FreeBSD.org>
AuthorDate: 2024-09-11 17:58:00 +0000
Commit: Gleb Popov <arrowd@FreeBSD.org>
CommitDate: 2025-12-28 15:44:29 +0000
Uses/dbus-testing.mk: Introduce new USES
This USES starts a system- and session-level D-Bus daemons before the
test stage and stops them after, much like Uses/display.mk provides an
X11 display.
It is intended to be used with ports whose testing require a running dbus daemon.
Approved by: portmgr (bapt)
Sponsored by: Future Crew, LLC
Differential Revision: https://reviews.freebsd.org/D53464
---
Mk/Uses/dbus-testing.mk | 55 ++++++++++++++++++++++++++++++++
Templates/dbus-testing-system-local.conf | 9 ++++++
2 files changed, 64 insertions(+)
diff --git a/Mk/Uses/dbus-testing.mk b/Mk/Uses/dbus-testing.mk
new file mode 100644
index 000000000000..1c0046897d43
--- /dev/null
+++ b/Mk/Uses/dbus-testing.mk
@@ -0,0 +1,55 @@
+# sets dbus daemon up for testing
+#
+# Feature: dbus-testing
+# Usage: USES=dbus-testing
+#
+# MAINTAINER: arrowd@FreeBSD.org
+
+.if !defined(_INCLUDE_USES_DBUS_TESTINGS_MK)
+_INCLUDE_USES_DBUS_TESTINGS_MK=yes
+
+TEST_DEPENDS+= dbus-launch:devel/dbus
+TEST_ENV+= DBUS_SESSION_BUS_ADDRESS=unix:path=${_SESSION_BUS_SOCKET}
+
+_DBUS_LAUNCH?= ${LOCALBASE}/bin/dbus-launch
+
+_DBUS_LOCAL_CONF_SRC= ${PORTSDIR}/Templates/dbus-testing-system-local.conf
+_DBUS_LOCAL_CONF_DST= ${LOCALBASE}/etc/dbus-1/system-local.conf
+
+_ALREADY_STARTED_COOKIE=${WRKDIR}/.dbus-testing-was-already-running
+_SESSION_BUS_SOCKET= ${WRKDIR}/.dbus-session-bus-socket
+_SESSION_BUS_PIDFILE= ${WRKDIR}/.dbus-session-bus-pid
+
+_USES_test= 299:dbus-testing-pre-test \
+ 801:dbus-testing-post-test
+
+dbus-testing-pre-test:
+. if defined(PACKAGE_BUILDING) && ${UID} == 0
+# When running in Poudriere we can afford installing a permissive config
+# that allows anyone to own any D-Bus name. This is useful for running tests
+# without prior "make install".
+ ${INSTALL_DATA} ${_DBUS_LOCAL_CONF_SRC} ${_DBUS_LOCAL_CONF_DST}
+. endif
+# Start the system bus via rc script
+ (/usr/sbin/service dbus onestatus && \
+ ${TOUCH} ${_ALREADY_STARTED_COOKIE}) || ${TRUE}
+ /usr/sbin/service dbus onestart || ${TRUE}
+# Now start an isolated session bus. This is complicated because 'make test'
+# wraps everything into ${SETENVI}, so we can't easily pass the bus address via
+# environment. Instead we put the bus' socket under a well-known path
+# ${_SESSION_BUS_SOCKET} and pass it to make via usual ${TEST_ENV}.
+# Typical value for DBUS_SESSION_BUS_ADDRESS looks like
+# unix:path=/tmp/dbus-xZF47bxeMf,guid=227e19aaa3a87a1bbdb96cd56901b7e0
+ session_bus_env=$$(${SETENVI} ${WRK_ENV} ${MAKE_ENV} ${_DBUS_LAUNCH} | ${XARGS}) ; \
+ session_bus_sock=$$(echo $$session_bus_env | grep -o 'path=.*' | sed -e 's|path=||' -e 's|,.*||') ; \
+ ${LN} -fs $$session_bus_sock ${_SESSION_BUS_SOCKET} ;\
+ ${SETENVI} $$session_bus_env ${SH} -c 'echo $$DBUS_SESSION_BUS_PID' > ${_SESSION_BUS_PIDFILE}
+
+dbus-testing-post-test:
+ (${CAT} ${_SESSION_BUS_PIDFILE} | ${XARGS} kill) || ${TRUE}
+ ${RM} ${_SESSION_BUS_SOCKET} ${_SESSION_BUS_PIDFILE}
+ [ ! -f ${_ALREADY_STARTED_COOKIE} ] && \
+ /usr/sbin/service dbus onestop || ${TRUE}
+ ${RM} ${_ALREADY_STARTED_COOKIE}
+
+.endif
diff --git a/Templates/dbus-testing-system-local.conf b/Templates/dbus-testing-system-local.conf
new file mode 100644
index 000000000000..54ea728029c6
--- /dev/null
+++ b/Templates/dbus-testing-system-local.conf
@@ -0,0 +1,9 @@
+<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-Bus Bus Configuration 1.0//EN"
+ "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
+<busconfig>
+ <policy context="default">
+ <allow send_destination="*" eavesdrop="true"/>
+ <allow eavesdrop="true"/>
+ <allow own="*"/>
+ </policy>
+</busconfig>