diff --git a/ConfigureChecks.cmake b/ConfigureChecks.cmake index 1b8d28a695..328292e699 100644 --- a/ConfigureChecks.cmake +++ b/ConfigureChecks.cmake @@ -103,7 +103,31 @@ check_struct_has_member("struct tm" tm_zone time.h HAVE_STRUC #Symbols but NOT enums or types check_symbol_exists(tzname "time.h" HAVE_TZNAME) -# Check for stuff that isn't testable via the tests above +# +# Check if the libc vsnprintf() conforms to C99. If this fails we may +# need to fall-back on GLib I/O. +# +check_c_source_runs(" + #include + int main(void) + { + /* Check that snprintf() and vsnprintf() don't return + * -1 if the buffer is too small. C99 says this value + * is the length that would be written not including + * the nul byte. */ + char buf[3]; + return snprintf(buf, sizeof(buf), \"%s\", \"ABCDEF\") > 0 ? 0 : 1; + }" + HAVE_C99_VSNPRINTF +) +if (NOT HAVE_C99_VSNPRINTF) + message(FATAL_ERROR +"Building Wireshark requires a C99 compliant vsnprintf() and this \ +target does not meet that requirement. Compiling for ${CMAKE_SYSTEM} \ +using ${CMAKE_C_COMPILER_ID}. Please report this issue to the Wireshark \ +developers at wireshark-dev@wireshark.org." + ) +endif() # # *If* we found libnl, check if we can use nl80211 stuff with it.