From 23bbe4c4bb9989a5aff5fac1b264bb59249f75f4 Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Thu, 25 Apr 2019 13:01:02 +0200 Subject: [PATCH] Clean up memset_s() detection a bit more. Definining __STDC_WANT_LIB_EXT1__ to get memset_s() is required by the C11 standard, not a Solaris-ism. It's no use just to check for its presence in the library with AC_CHECK_FUNC() if it isn't going to compile, so make sure we check for it with AC_LINK_IFELSE() *and* with the warning flags that might include -Werror-implicit-function-declarations. Signed-off-by: David Woodhouse --- configure.ac | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/configure.ac b/configure.ac index 22a03ab2..17acb327 100644 --- a/configure.ac +++ b/configure.ac @@ -44,7 +44,6 @@ case $host_os in *solaris*|*sunos*) AC_MSG_NOTICE([Applying workaround for broken SunOS time() function]) AC_DEFINE(HAVE_SUNOS_BROKEN_TIME, 1, [On SunOS time() can go backwards]) - AC_DEFINE(__STDC_WANT_LIB_EXT1__, 1, [To make memset_s() visible]) symver_time="openconnect__time;" ;; *mingw32*|*mingw64*|*msys*) @@ -119,16 +118,6 @@ fi AC_DEFINE_UNQUOTED(DEFAULT_VPNCSCRIPT, "${with_vpnc_script}", [Default vpnc-script locatin]) AC_SUBST(DEFAULT_VPNCSCRIPT, "${with_vpnc_script}") -AC_CHECK_FUNC(memset_s, - [AC_DEFINE(HAVE_MEMSET_S, 1, [Have memset_s() function])], - [AC_CHECK_FUNC(explicit_memset, - [AC_DEFINE(HAVE_EXPLICIT_MEMSET, 1, [Have explicit_memset() function])], - [AC_CHECK_FUNC(explicit_bzero, - [AC_DEFINE(HAVE_EXPLICIT_BZERO, 1, [Have explicit_bzero() function])], - []) - ]) - ]) - AC_CHECK_FUNC(fdevname_r, [AC_DEFINE(HAVE_FDEVNAME_R, 1, [Have fdevname_r() function])], []) AC_CHECK_FUNC(statfs, [AC_DEFINE(HAVE_STATFS, 1, [Have statfs() function])], []) AC_CHECK_FUNC(getline, [AC_DEFINE(HAVE_GETLINE, 1, [Have getline() function])], @@ -187,6 +176,27 @@ AS_COMPILER_FLAGS(WFLAGS, -Wwrite-strings") AC_SUBST(WFLAGS, [$WFLAGS]) +oldCFLAGS="$CFLAGS" +CFLAGS="$CFLAGS $WFLAGS" +AC_MSG_CHECKING([For memset_s]) +AC_LINK_IFELSE([AC_LANG_PROGRAM([ + #define __STDC_WANT_LIB_EXT1__ 1 + #include ],[[ + unsigned char *foo[16]; + memset_s(foo, 16, 0, 16);]])], + [AC_MSG_RESULT([yes]) + AC_DEFINE(__STDC_WANT_LIB_EXT1__, 1, [To request memset_s]) + AC_DEFINE(HAVE_MEMSET_S, 1, [Have memset_s() function])], + [AC_MSG_RESULT([no]) + AC_CHECK_FUNC(explicit_memset, + [AC_DEFINE(HAVE_EXPLICIT_MEMSET, 1, [Have explicit_memset() function])], + [AC_CHECK_FUNC(explicit_bzero, + [AC_DEFINE(HAVE_EXPLICIT_BZERO, 1, [Have explicit_bzero() function])], + []) + ]) + ]) +CFLAGS="$oldCFLAGS" + if test "$have_win" = yes; then # Checking "properly" for __attribute__((dllimport,stdcall)) functions is non-trivial LIBS="$LIBS -lws2_32 -lshlwapi -lsecur32 -liphlpapi" -- 2.49.0