summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile.am6
-rw-r--r--configure.ac3
-rw-r--r--introspect.awk13
-rw-r--r--src/dbus-automount.c2
-rw-r--r--src/dbus-device.c2
-rw-r--r--src/dbus-job.c2
-rw-r--r--src/dbus-manager.c2
-rw-r--r--src/dbus-mount.c2
-rw-r--r--src/dbus-path.c2
-rw-r--r--src/dbus-service.c2
-rw-r--r--src/dbus-snapshot.c2
-rw-r--r--src/dbus-socket.c2
-rw-r--r--src/dbus-swap.c2
-rw-r--r--src/dbus-target.c2
-rw-r--r--src/dbus-timer.c2
-rw-r--r--src/dbus-unit.c2
-rw-r--r--src/macro.h1
17 files changed, 35 insertions, 14 deletions
diff --git a/Makefile.am b/Makefile.am
index 4330db06dd..694ec57a9b 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1118,8 +1118,12 @@ CLEANFILES += \
${XML_IN_FILES:.xml.in=.html.in}
endif
+DBUS_PREPROCESS = $(CPP) -P $(DBUS_CFLAGS) -imacros dbus/dbus-protocol.h
+
org.freedesktop.systemd1.%.xml: systemd
- $(AM_V_GEN)SYSTEMD_SKIP_API_MOUNTS=1 ./systemd --introspect=${@:.xml=} > $@
+ $(AM_V_GEN)$(OBJCOPY) -O binary -j introspect.$* $< $@.tmp && \
+ $(STRINGS) $@.tmp | $(AWK) -f introspect.awk | \
+ $(DBUS_PREPROCESS) -o $@ - && rm $@.tmp
CLEANFILES += \
$(dbusinterface_DATA)
diff --git a/configure.ac b/configure.ac
index 247806d747..f9f5eeea3b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -48,6 +48,9 @@ AM_PROG_CC_C_O
AC_PROG_GCC_TRADITIONAL
AC_USE_SYSTEM_EXTENSIONS
+AC_CHECK_TOOL(OBJCOPY, objcopy)
+AC_CHECK_TOOL(STRINGS, strings)
+
CC_CHECK_CFLAGS_APPEND([ \
-pipe \
-Wall \
diff --git a/introspect.awk b/introspect.awk
new file mode 100644
index 0000000000..593191384a
--- /dev/null
+++ b/introspect.awk
@@ -0,0 +1,13 @@
+BEGIN {
+ print "<!DOCTYPE node PUBLIC DBUS_INTROSPECT_1_0_XML_PUBLIC_IDENTIFIER"
+ print "DBUS_INTROSPECT_1_0_XML_SYSTEM_IDENTIFIER>"
+ print "<node>"
+}
+
+// {
+ print
+}
+
+END {
+ print "</node>"
+}
diff --git a/src/dbus-automount.c b/src/dbus-automount.c
index 3bccb4e5f7..af277af39c 100644
--- a/src/dbus-automount.c
+++ b/src/dbus-automount.c
@@ -38,7 +38,7 @@
BUS_INTROSPECTABLE_INTERFACE \
"</node>\n"
-const char bus_automount_interface[] = BUS_AUTOMOUNT_INTERFACE;
+const char bus_automount_interface[] _introspect_("Automount") = BUS_AUTOMOUNT_INTERFACE;
DBusHandlerResult bus_automount_message_handler(Unit *u, DBusConnection *c, DBusMessage *message) {
const BusProperty properties[] = {
diff --git a/src/dbus-device.c b/src/dbus-device.c
index fcb05a441e..aafe5d61fa 100644
--- a/src/dbus-device.c
+++ b/src/dbus-device.c
@@ -37,7 +37,7 @@
BUS_INTROSPECTABLE_INTERFACE \
"</node>\n"
-const char bus_device_interface[] = BUS_DEVICE_INTERFACE;
+const char bus_device_interface[] _introspect_("Device") = BUS_DEVICE_INTERFACE;
const char bus_device_invalidating_properties[] =
"SysFSPath\0"
diff --git a/src/dbus-job.c b/src/dbus-job.c
index 667eb04a69..18da72d67a 100644
--- a/src/dbus-job.c
+++ b/src/dbus-job.c
@@ -43,7 +43,7 @@
BUS_INTROSPECTABLE_INTERFACE \
"</node>\n"
-const char bus_job_interface[] = BUS_JOB_INTERFACE;
+const char bus_job_interface[] _introspect_("Job") = BUS_JOB_INTERFACE;
#define INVALIDATING_PROPERTIES \
"State\0" \
diff --git a/src/dbus-manager.c b/src/dbus-manager.c
index 28986e5426..d160e7bba3 100644
--- a/src/dbus-manager.c
+++ b/src/dbus-manager.c
@@ -202,7 +202,7 @@
#define INTROSPECTION_END \
"</node>\n"
-const char bus_manager_interface[] = BUS_MANAGER_INTERFACE;
+const char bus_manager_interface[] _introspect_("Manager") = BUS_MANAGER_INTERFACE;
static DEFINE_BUS_PROPERTY_APPEND_ENUM(bus_manager_append_running_as, manager_running_as, ManagerRunningAs);
diff --git a/src/dbus-mount.c b/src/dbus-mount.c
index 4de00f7fac..fa319febd5 100644
--- a/src/dbus-mount.c
+++ b/src/dbus-mount.c
@@ -50,7 +50,7 @@
BUS_INTROSPECTABLE_INTERFACE \
"</node>\n"
-const char bus_mount_interface[] = BUS_MOUNT_INTERFACE;
+const char bus_mount_interface[] _introspect_("Mount") = BUS_MOUNT_INTERFACE;
const char bus_mount_invalidating_properties[] =
"What\0"
diff --git a/src/dbus-path.c b/src/dbus-path.c
index c8c302ab37..9692d6a247 100644
--- a/src/dbus-path.c
+++ b/src/dbus-path.c
@@ -41,7 +41,7 @@
BUS_INTROSPECTABLE_INTERFACE \
"</node>\n"
-const char bus_path_interface[] = BUS_PATH_INTERFACE;
+const char bus_path_interface[] _introspect_("Path") = BUS_PATH_INTERFACE;
static int bus_path_append_paths(Manager *m, DBusMessageIter *i, const char *property, void *data) {
Path *p = data;
diff --git a/src/dbus-service.c b/src/dbus-service.c
index a79f769e94..f929627666 100644
--- a/src/dbus-service.c
+++ b/src/dbus-service.c
@@ -90,7 +90,7 @@
BUS_INTROSPECTABLE_INTERFACE \
"</node>\n"
-const char bus_service_interface[] = BUS_SERVICE_INTERFACE;
+const char bus_service_interface[] _introspect_("Service") = BUS_SERVICE_INTERFACE;
const char bus_service_invalidating_properties[] =
"ExecStartPre\0"
diff --git a/src/dbus-snapshot.c b/src/dbus-snapshot.c
index efaec7df3d..a9903ec484 100644
--- a/src/dbus-snapshot.c
+++ b/src/dbus-snapshot.c
@@ -38,7 +38,7 @@
BUS_INTROSPECTABLE_INTERFACE \
"</node>\n"
-const char bus_snapshot_interface[] = BUS_SNAPSHOT_INTERFACE;
+const char bus_snapshot_interface[] _introspect_("Snapshot") = BUS_SNAPSHOT_INTERFACE;
DBusHandlerResult bus_snapshot_message_handler(Unit *u, DBusConnection *c, DBusMessage *message) {
const BusProperty properties[] = {
diff --git a/src/dbus-socket.c b/src/dbus-socket.c
index 5931f006c2..a9cb1c38f8 100644
--- a/src/dbus-socket.c
+++ b/src/dbus-socket.c
@@ -64,7 +64,7 @@
BUS_INTROSPECTABLE_INTERFACE \
"</node>\n"
-const char bus_socket_interface[] = BUS_SOCKET_INTERFACE;
+const char bus_socket_interface[] _introspect_("Socket") = BUS_SOCKET_INTERFACE;
const char bus_socket_invalidating_properties[] =
"ExecStartPre\0"
diff --git a/src/dbus-swap.c b/src/dbus-swap.c
index 70cccdcab8..06acb22dcc 100644
--- a/src/dbus-swap.c
+++ b/src/dbus-swap.c
@@ -47,7 +47,7 @@
BUS_INTROSPECTABLE_INTERFACE \
"</node>\n"
-const char bus_swap_interface[] = BUS_SWAP_INTERFACE;
+const char bus_swap_interface[] _introspect_("Swap") = BUS_SWAP_INTERFACE;
const char bus_swap_invalidating_properties[] =
"What\0"
diff --git a/src/dbus-target.c b/src/dbus-target.c
index 69e8212076..1eb3c249f8 100644
--- a/src/dbus-target.c
+++ b/src/dbus-target.c
@@ -38,7 +38,7 @@
BUS_INTROSPECTABLE_INTERFACE \
"</node>\n"
-const char bus_target_interface[] = BUS_TARGET_INTERFACE;
+const char bus_target_interface[] _introspect_("Target") = BUS_TARGET_INTERFACE;
DBusHandlerResult bus_target_message_handler(Unit *u, DBusConnection *c, DBusMessage *message) {
const BusProperty properties[] = {
diff --git a/src/dbus-timer.c b/src/dbus-timer.c
index e57e97303a..56044661e7 100644
--- a/src/dbus-timer.c
+++ b/src/dbus-timer.c
@@ -42,7 +42,7 @@
BUS_INTROSPECTABLE_INTERFACE \
"</node>\n"
-const char bus_timer_interface[] = BUS_TIMER_INTERFACE;
+const char bus_timer_interface[] _introspect_("Timer") = BUS_TIMER_INTERFACE;
const char bus_timer_invalidating_properties[] =
"Timers\0"
diff --git a/src/dbus-unit.c b/src/dbus-unit.c
index 47aa8d338c..835eeda329 100644
--- a/src/dbus-unit.c
+++ b/src/dbus-unit.c
@@ -26,7 +26,7 @@
#include "dbus-unit.h"
#include "bus-errors.h"
-const char bus_unit_interface[] = BUS_UNIT_INTERFACE;
+const char bus_unit_interface[] _introspect_("Unit") = BUS_UNIT_INTERFACE;
#define INVALIDATING_PROPERTIES \
"LoadState\0" \
diff --git a/src/macro.h b/src/macro.h
index b3da60f13e..85a7fbccfd 100644
--- a/src/macro.h
+++ b/src/macro.h
@@ -45,6 +45,7 @@
#define _public_ __attribute__ ((visibility("default")))
#define _hidden_ __attribute__ ((visibility("hidden")))
#define _weakref_(x) __attribute__((weakref(#x)))
+#define _introspect_(x) __attribute__((section("introspect." x)))
/* Rounds up */
static inline size_t ALIGN(size_t l) {