Commit
f6430390 broke builds on RHEL 5, where glibc (2.5) is too
old to support mkostemp (2.7) or htole64 (2.9). While gnulib
has mkostemp, it still lacks htole64; and it's not worth dragging
in replacements on systems where journald is unlikely to exist
in the first place, so we just use an extra configure-time check
as our witness of whether to attempt compiling the code.
* src/util/logging.c (virLogParseOutputs): Don't attempt to
compile journald on older glibc.
* configure.ac (AC_CHECK_DECLS): Check for htole64.
AC_CHECK_HEADERS([pwd.h paths.h regex.h sys/un.h \
sys/poll.h syslog.h mntent.h net/ethernet.h linux/magic.h \
sys/un.h sys/syscall.h netinet/tcp.h ifaddrs.h libtasn1.h])
+dnl Check whether endian provides handy macros.
+AC_CHECK_DECLS([htole64], [], [], [[#include <endian.h>]])
dnl We need to decide at configure time if libvirt will use real atomic
dnl operations ("lock free") or emulated ones with a mutex.
#include "virtime.h"
#include "intprops.h"
+/* Journald output is only supported on Linux new enough to expose
+ * htole64. */
+#if HAVE_SYSLOG_H && defined(__linux__) && HAVE_DECL_HTOLE64
+# define USE_JOURNALD 1
+#endif
+
#define VIR_FROM_THIS VIR_FROM_NONE
VIR_ENUM_DECL(virLogSource)
}
-# ifdef __linux__
+# if USE_JOURNALD
# define IOVEC_SET_STRING(iov, str) \
do { \
struct iovec *_i = &(iov); \
}
return 0;
}
-# endif /* __linux__ */
+# endif /* USE_JOURNALD */
#endif /* HAVE_SYSLOG_H */
#define IS_SPACE(cur) \
VIR_FREE(abspath);
} else if (STREQLEN(cur, "journald", 8)) {
cur += 8;
-#if HAVE_SYSLOG_H
-# ifdef __linux__
+#if USE_JOURNALD
if (virLogAddOutputToJournald(prio) == 0)
count++;
-# endif /* __linux__ */
-#endif /* HAVE_SYSLOG_H */
+#endif /* USE_JOURNALD */
} else {
goto cleanup;
}