From: Nick Bowler Date: Sat, 29 Jul 2023 00:07:28 +0000 (-0400) Subject: Add a configure test for syslog support. X-Git-Url: https://git.draconx.ca/gitweb/dxcommon.git/commitdiff_plain/0ee27791cef1166e467dc0b3eba88656d835ab32 Add a configure test for syslog support. --- diff --git a/m4/syslog.m4 b/m4/syslog.m4 new file mode 100644 index 0000000..8262170 --- /dev/null +++ b/m4/syslog.m4 @@ -0,0 +1,26 @@ +dnl Copyright © 2021, 2023 Nick Bowler +dnl +dnl License WTFPL2: Do What The Fuck You Want To Public License, version 2. +dnl This is free software: you are free to do what the fuck you want to. +dnl There is NO WARRANTY, to the extent permitted by law. + +dnl DX_CHECK_SYSLOG +dnl +dnl Expands AC_CHECK_HEADERS([syslog.h]) +dnl +dnl Then, if syslog.h is available, checks that a program can be linked +dnl against the syslog family of functions. +dnl +dnl If successful, the cache variable dx_cv_have_syslog is set to "yes". +dnl Otherwise, dx_cv_have_syslog is set to "no". +AC_DEFUN([DX_CHECK_SYSLOG], +[AC_CHECK_HEADERS([syslog.h], [], [], [@&t@]) +AS_IF([test x"$ac_cv_header_syslog_h" = x"yes"], + [AC_CACHE_CHECK([for syslog], [dx_cv_have_syslog], + [AC_LINK_IFELSE([AC_LANG_PROGRAM([#include ], +[openlog("conftest", LOG_PID, LOG_USER); +syslog(LOG_ERR, "%s", "hello"); +closelog();])], [dx_cv_have_syslog=yes], [dx_cv_have_syslog=no])])]) +AS_IF([test x"$dx_cv_have_syslog" = x"yes"], + [AC_DEFINE([HAVE_SYSLOG], [1], + [Define to 1 if syslog et al. are available.])])]) diff --git a/t/libdummy.c b/t/libdummy.c index 3e40d13..1bfa48a 100644 --- a/t/libdummy.c +++ b/t/libdummy.c @@ -14,3 +14,5 @@ unsigned long mousemask(unsigned long a, unsigned long *b) { return 0; } struct MEVENT; int getmouse_nc_(struct MEVENT *mev) { return 0; } int getmouse_bogus_(void *p) { return 0; } + +void dx_closelog(void) { } diff --git a/tests/libs.at b/tests/libs.at index 1d327cc..f7cf534 100644 --- a/tests/libs.at +++ b/tests/libs.at @@ -1,4 +1,4 @@ -dnl Copyright © 2019-2020, 2022 Nick Bowler +dnl Copyright © 2019-2020, 2022-2023 Nick Bowler dnl dnl License WTFPL2: Do What The Fuck You Want To Public License, version 2. dnl This is free software: you are free to do what the fuck you want to. @@ -355,3 +355,43 @@ AT_CHECK([grep '#.*G_IMPLEMENT_INLINES' config.h], [0], ]) AT_CLEANUP + +AT_SETUP([DX_CHECK_SYSLOG]) + +AT_DATA([syslog.h], +[[/* since syslog is normally in the standard C library, to make negative +link tests possible we use a dummy external name */ +extern void dx_closelog(void); + +static void openlog(const char *, int, int) { dx_closelog(); } +static void syslog(int, const char *, ...) { dx_closelog(); } +static void closelog(void) { dx_closelog(); } + +#define LOG_PID 1 +#define LOG_USER 2 +#define LOG_ERR 0 +]]) + +AT_DATA([test.in], +[[@ac_cv_header_syslog_h@ +@dx_cv_have_syslog@ +]]) + +TEST_CONFIGURE_AC([[DX_CHECK_SYSLOG +AC_SUBST([ac_cv_header_syslog_h]) +AC_SUBST([dx_cv_have_syslog]) +AC_CONFIG_FILES([test]) +]]) +TEST_AUTORECONF + +TEST_CONFIGURE([CFLAGS=-I.]) +AT_CHECK([cat test], [0], [yes +no +]) + +TEST_CONFIGURE([CFLAGS=-I. LIBS="$builddir/t/libdummy.a"]) +AT_CHECK([cat test], [0], [yes +yes +]) + +AT_CLEANUP