Workaround sd_bus_message_append_cmdline

Unable to get libmapper built without systemd being patched with the
sd_bus_message_append_cmdline function. Until it is pushed upstream,
this is a workaround to get the available systemd install built for unit
testing.

Change-Id: Ieca78955a4182eebd469a860c37ccaedfe75d323
Signed-off-by: Matthew Barth <msbarth@us.ibm.com>
diff --git a/configure.ac b/configure.ac
index 40b1ad6..45d9c0e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -6,6 +6,10 @@
 AM_INIT_AUTOMAKE([subdir-objects -Wall -Werror foreign dist-xz])
 AM_SILENT_RULES([yes])
 
+# Modify header template
+AH_TOP([#pragma once])
+AH_BOTTOM([#include "workaround/systemd.h"])
+
 # Checks for programs.
 AC_PROG_CC
 AM_PROG_AR
@@ -57,6 +61,16 @@
 AC_DEFINE([MAPPER_INTERFACE], ["xyz.openbmc_project.ObjectMapper"], [Object mapper interface])
 AC_DEFINE([MAPPER_PATH], ["/xyz/openbmc_project/ObjectMapper"], [Object mapper DBUS path])
 
+# Workaround for unpatched systemd installs
+AC_ARG_ENABLE([unpatched-systemd],
+    AS_HELP_STRING([--enable-unpatched-systemd], [Enable unpatched systemd workarounds]))
+AS_IF([test "x$enable_unpatched_systemd" == "xyes"],
+    AC_MSG_NOTICE([Enabling unpatched systemd workarounds])
+    [
+        AC_DEFINE([IS_UNPATCHED_SYSTEMD], ,[Enable unpatched systemd workarounds])
+    ]
+)
+
 # Create configured output
 AC_CONFIG_FILES([Makefile setup.py])
 AC_OUTPUT
diff --git a/libmapper/app.c b/libmapper/app.c
index f0d6b03..887d02f 100644
--- a/libmapper/app.c
+++ b/libmapper/app.c
@@ -13,6 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+#include "config.h"
 #include <stdlib.h>
 #include <stdio.h>
 #include <systemd/sd-bus.h>
diff --git a/libmapper/workaround/systemd.h b/libmapper/workaround/systemd.h
new file mode 100644
index 0000000..1b32753
--- /dev/null
+++ b/libmapper/workaround/systemd.h
@@ -0,0 +1,6 @@
+#ifdef IS_UNPATCHED_SYSTEMD
+#include <systemd/sd-bus.h>
+
+int sd_bus_message_append_cmdline(sd_bus_message *m, const char *signature,
+    char ***x) { return 0; }
+#endif