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 "" + print "" +} + +// { + print +} + +END { + print "" +} 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 \ "\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 \ "\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 \ "\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 \ "\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 \ "\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 \ "\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 \ "\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 \ "\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 \ "\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 \ "\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 \ "\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 \ "\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) {