libmicrohttpd2

HTTP server C library (MHD 2.x, alpha)
Log | Files | Refs | README | LICENSE

commit 6d3f2a4b44890e8017bed8d49dacd63d4a9740a5
parent 56eee7f46f06bd129d58841f10ed42006c572ead
Author: Evgeny Grin (Karlson2k) <k2k@drgrin.dev>
Date:   Mon, 22 Dec 2025 15:50:43 +0100

configure: improved compatibility with C++ compilers

Diffstat:
Mconfigure.ac | 138+++++++++++++++++++++++++++++++++++++++++++++++--------------------------------
1 file changed, 82 insertions(+), 56 deletions(-)

diff --git a/configure.ac b/configure.ac @@ -175,6 +175,55 @@ AC_FUNC_FSEEKO LT_INIT([win32-dll]) LT_LANG([Windows Resource]) +AC_LANG_CONFTEST([AC_LANG_SOURCE([[ +]AC_INCLUDES_DEFAULT[ +#include <stdio.h> + +int main (int argc, char *argv[]) +{ + if (1 <= argc) + return (0 < printf ("Self-name: %s\n", argv[0])) ? 0 : 1; + return 2; +} + ]] + ) + ] +) +AC_CACHE_CHECK([whether $CC compiles simple C code without warnings], + [mhd_cv_cc_warnless_c_noflags], + [ + ac_c_werror_flag="yes" + AC_LINK_IFELSE([],[mhd_cv_cc_warnless_c_noflags="yes"], + [mhd_cv_cc_warnless_c_noflags="no"]) + ac_c_werror_flag="no" + ] +) +AS_VAR_IF([mhd_cv_cc_warnless_c_noflags],["yes"], + [mhd_cv_cc_warnless_c_flags=""], + [ + AC_CACHE_CHECK([for $CC flags to mute warnings for simple C code], + [mhd_cv_cc_warnless_c_flags], + [ + mhd_cv_cc_warnless_c_flags="no" + ac_c_werror_flag="yes" + for flag_chk in '-Wno-deprecated' '-fpermissive' + do + CFLAGS="${CFLAGS_ac} ${flag_chk} ${user_CFLAGS}" + AC_LINK_IFELSE([],[mhd_cv_cc_warnless_c_flags="${flag_chk}"]) + CFLAGS="${CFLAGS_ac} ${user_CFLAGS}" + test "X${mhd_cv_cc_warnless_c_flags}" = "Xno" || break + done + AS_UNSET([flag_chk]) + ac_c_werror_flag="no" + ] + ) + AS_VAR_IF([mhd_cv_cc_warnless_c_flags],["no"],[:], + [MHD_PREPEND_FLAG_TO_VAR([user_CFLAGS],[${mhd_cv_cc_warnless_c_flags}])] + ) + CFLAGS="${CFLAGS_ac} ${user_CFLAGS}" + ] +) + AC_ARG_ENABLE([compact-code], [AS_HELP_STRING([[--enable-compact-code]], [enable use of a reduced size version of the code, resulting in smaller ] @@ -392,8 +441,7 @@ AS_CASE([${enable_build_type}],[debug|debugger], AC_CACHE_CHECK([whether format warnings work with v*printf() functions], [mhd_cv_wformat_works_vfprintf], [ - SAVE_ac_c_werror_flag="$ac_c_werror_flag" - ac_c_werror_flag="yes" + AS_VAR_IF([mhd_cv_cc_warnless_c_flags],["no"],[:],[ac_c_werror_flag="yes"]) CFLAGS="${CFLAGS_ac} ${user_CFLAGS}" AC_COMPILE_IFELSE( [ @@ -430,7 +478,7 @@ int main(void) [mhd_cv_wformat_works_vfprintf="no"] ) CFLAGS="${user_CFLAGS}" - ac_c_werror_flag="$SAVE_ac_c_werror_flag" + ac_c_werror_flag="no" ] ) AS_VAR_IF([mhd_cv_wformat_works_vfprintf],["no"], @@ -503,8 +551,7 @@ int main(void) AC_CACHE_CHECK([whether $[]CC -Wused-but-marked-unused works with system headers], [mhd_cv_wused_but_marked_unused_sys_header], [ - SAVE_ac_c_werror_flag="$ac_c_werror_flag" - ac_c_werror_flag="yes" + AS_VAR_IF([mhd_cv_cc_warnless_c_flags],["no"],[:],[ac_c_werror_flag="yes"]) CFLAGS="${CFLAGS_ac} -Wused-but-marked-unused ${user_CFLAGS}" AC_COMPILE_IFELSE( [ @@ -522,7 +569,7 @@ int main(void) [mhd_cv_wused_but_marked_unused_sys_header="yes"], [mhd_cv_wused_but_marked_unused_sys_header="no"] ) - ac_c_werror_flag="$SAVE_ac_c_werror_flag" + ac_c_werror_flag="no" ] ) AS_VAR_IF([mhd_cv_wused_but_marked_unused_sys_header],["yes"], @@ -1055,8 +1102,7 @@ AC_CACHE_CHECK([whether $CC supports variadic macros],[mhd_cv_cc_macro_variadic] ) AS_VAR_SET_IF([mhd_cv_cc_macro_variadic],[:], [ - MHD_SAVED_ac_c_werror_flag="$ac_c_werror_flag" - ac_c_werror_flag=yes + AS_VAR_IF([mhd_cv_cc_warnless_c_flags],["no"],[:],[ac_c_werror_flag="yes"]) AC_COMPILE_IFELSE( [ AC_LANG_SOURCE([[ @@ -1076,8 +1122,7 @@ int main(void) [mhd_cv_cc_macro_variadic="yes"], [mhd_cv_cc_macro_variadic="no"] ) - ac_c_werror_flag="$MHD_SAVED_ac_c_werror_flag" - AS_UNSET([MHD_SAVED_ac_c_werror_flag]) + ac_c_werror_flag="no" ] ) ] @@ -1089,8 +1134,7 @@ AS_VAR_IF([mhd_cv_cc_macro_variadic],["yes"], CFLAGS="${CFLAGS_ac} ${user_CFLAGS} ${nocxx_compat_CFLAGS}" AC_CACHE_CHECK([whether $CC supports compound literals],[mhd_cv_cc_compound_literals], [ - MHD_SAVED_ac_c_werror_flag="$ac_c_werror_flag" - ac_c_werror_flag=yes + AS_VAR_IF([mhd_cv_cc_warnless_c_flags],["no"],[:],[ac_c_werror_flag="yes"]) AC_COMPILE_IFELSE( [ AC_LANG_SOURCE([[ @@ -1120,8 +1164,7 @@ int main(void) [mhd_cv_cc_compound_literals="yes"], [mhd_cv_cc_compound_literals="no"] ) - ac_c_werror_flag="$MHD_SAVED_ac_c_werror_flag" - AS_UNSET([MHD_SAVED_ac_c_werror_flag]) + ac_c_werror_flag="no" ] ) AS_VAR_IF([mhd_cv_cc_compound_literals],["yes"], @@ -1130,8 +1173,7 @@ AS_VAR_IF([mhd_cv_cc_compound_literals],["yes"], AC_CACHE_CHECK([whether $CC supports compound literals as arrays of the scope],[mhd_cv_cc_compound_literals_arr_scope], [ - MHD_SAVED_ac_c_werror_flag="$ac_c_werror_flag" - ac_c_werror_flag=yes + AS_VAR_IF([mhd_cv_cc_warnless_c_flags],["no"],[:],[ac_c_werror_flag="yes"]) AC_COMPILE_IFELSE( [ AC_LANG_SOURCE([[ @@ -1203,8 +1245,7 @@ choke me now; /* Actually, some C++ compilers *may* handle this properly, [mhd_cv_cc_compound_literals_arr_scope="yes"], [mhd_cv_cc_compound_literals_arr_scope="no"] ) - ac_c_werror_flag="$MHD_SAVED_ac_c_werror_flag" - AS_UNSET([MHD_SAVED_ac_c_werror_flag]) + ac_c_werror_flag="no" ] ) AS_VAR_IF([mhd_cv_cc_compound_literals_arr_scope],["yes"], @@ -1213,8 +1254,7 @@ choke me now; /* Actually, some C++ compilers *may* handle this properly, AC_CACHE_CHECK([whether $CC supports compound literals as local arrays],[mhd_cv_cc_compound_literals_arr_local], [ - MHD_SAVED_ac_c_werror_flag="$ac_c_werror_flag" - ac_c_werror_flag=yes + AS_VAR_IF([mhd_cv_cc_warnless_c_flags],["no"],[:],[ac_c_werror_flag="yes"]) AC_COMPILE_IFELSE( [ AC_LANG_SOURCE([[ @@ -1242,8 +1282,7 @@ int main(void) [mhd_cv_cc_compound_literals_arr_local="yes"], [mhd_cv_cc_compound_literals_arr_local="no"] ) - ac_c_werror_flag="$MHD_SAVED_ac_c_werror_flag" - AS_UNSET([MHD_SAVED_ac_c_werror_flag]) + ac_c_werror_flag="no" ] ) AS_VAR_IF([mhd_cv_cc_compound_literals_arr_local],["yes"], @@ -1252,8 +1291,7 @@ int main(void) AC_CACHE_CHECK([whether $CC supports compound literals as lvalue],[mhd_cv_cc_compound_literals_lvalues], [ - MHD_SAVED_ac_c_werror_flag="$ac_c_werror_flag" - ac_c_werror_flag=yes + AS_VAR_IF([mhd_cv_cc_warnless_c_flags],["no"],[:],[ac_c_werror_flag="yes"]) AC_COMPILE_IFELSE( [ AC_LANG_SOURCE([[ @@ -1290,8 +1328,7 @@ int main(void) [mhd_cv_cc_compound_literals_lvalues="yes"], [mhd_cv_cc_compound_literals_lvalues="no"] ) - ac_c_werror_flag="$MHD_SAVED_ac_c_werror_flag" - AS_UNSET([MHD_SAVED_ac_c_werror_flag]) + ac_c_werror_flag="no" ] ) AS_VAR_IF([mhd_cv_cc_compound_literals_lvalues],["yes"], @@ -1307,14 +1344,13 @@ int main(void) CFLAGS="${CFLAGS_ac} ${user_CFLAGS}" AC_CACHE_CHECK([whether $CC supports trailing comma in enum],[mhd_cv_enum_trailing_comma], [ - SAVE_c_werror_flag="$ac_c_werror_flag" - ac_c_werror_flag="yes" + AS_VAR_IF([mhd_cv_cc_warnless_c_flags],["no"],[:],[ac_c_werror_flag="yes"]) AC_COMPILE_IFELSE( [AC_LANG_SOURCE([[enum TestEnum {ENM_VAL_A, ENM_VAL_B,};]])], [mhd_cv_enum_trailing_comma="yes"], [mhd_cv_enum_trailing_comma="no"] ) - ac_c_werror_flag="$SAVE_c_werror_flag" + ac_c_werror_flag="no" ] ) AS_VAR_IF([mhd_cv_enum_trailing_comma],["yes"],[], @@ -1334,21 +1370,21 @@ AC_CACHE_CHECK([whether $CC supports enum fixed underlying type],[mhd_cv_enum_ba ) AS_VAR_IF([mhd_cv_enum_base_type],["yes"], [ + AS_VAR_IF([mhd_cv_cc_warnless_c_flags],["no"],[:],[mhd_cv_enum_base_type_warnless="yes"]) AC_DEFINE([HAVE_ENUM_BASE_TYPE],[1],[Define to '1' if your compiler supports enum with fixed underlying type]) - AC_CACHE_CHECK([whether enum fixed underlying type works without warnings],[mhd_cv_enum_base_type_warnless], + AC_CACHE_CHECK([whether enum fixed underlying type works without extra warnings],[mhd_cv_enum_base_type_warnless], [ - SAVE_c_werror_flag="$ac_c_werror_flag" - ac_c_werror_flag="yes" + AS_VAR_IF([mhd_cv_cc_warnless_c_flags],["no"],[:],[ac_c_werror_flag="yes"]) AC_COMPILE_IFELSE( [AC_LANG_SOURCE([[enum TestEnum : unsigned char {ENM_VAL_A, ENM_VAL_B};]])], [mhd_cv_enum_base_type_warnless="yes"], [mhd_cv_enum_base_type_warnless="no"] ) - ac_c_werror_flag="$SAVE_c_werror_flag" + ac_c_werror_flag="no" ] ) AS_VAR_IF([mhd_cv_enum_base_type_warnless],["yes"], - [AC_DEFINE([HAVE_ENUM_BASE_TYPE_WARNLESS],[1],[Define to '1' if your compiler supports enum with fixed underlying type without warnings])] + [AC_DEFINE([HAVE_ENUM_BASE_TYPE_WARNLESS],[1],[Define to '1' if your compiler supports enum with fixed underlying type without extra warnings])] ) ] ) @@ -1408,8 +1444,7 @@ AS_IF([test "x$ac_cv_c_inline" != "xno"], AC_DEFINE([HAVE_INLINE_FUNCS],[1],[Define to 1 if your C compiler supports inline functions.]) AC_CACHE_CHECK([for function force static inline keywords supported by $CC],[mhd_cv_cc_kwd_static_forceinline], [ - MHD_SAVED_ac_c_werror_flag="$ac_c_werror_flag" - ac_c_werror_flag=yes + AS_VAR_IF([mhd_cv_cc_warnless_c_flags],["no"],[:],[ac_c_werror_flag="yes"]) mhd_cv_cc_kwd_static_forceinline="none" CFLAGS="${CFLAGS_ac} ${user_CFLAGS} $errattr_CFLAGS" for keyword_chk in 'static inline __attribute__((always_inline))' 'static __forceinline' '_Pragma("inline=forced") static inline' @@ -1445,8 +1480,7 @@ int main(void) test "x${mhd_cv_cc_kwd_static_forceinline}" != "xnone" && break done CFLAGS="${CFLAGS_ac} ${user_CFLAGS}" - ac_c_werror_flag="$MHD_SAVED_ac_c_werror_flag" - AS_UNSET([MHD_SAVED_ac_c_werror_flag]) + ac_c_werror_flag="no" ] ) ] @@ -1457,8 +1491,7 @@ AS_IF([test "x$ac_cv_c_inline" != "xno" && test "x${mhd_cv_cc_kwd_static_forcein [AC_DEFINE([mhd_static_inline],[static inline],[Define to prefix which will be used with MHD static inline functions.])] ) -SAVE_ac_c_werror_flag="$ac_c_werror_flag" -ac_c_werror_flag="yes" +AS_VAR_IF([mhd_cv_cc_warnless_c_flags],["no"],[:],[ac_c_werror_flag="yes"]) AC_CACHE_CHECK([whether 'constexpr' keywords supported by $CC],[mhd_cv_cc_kwd_constexpr], [ AC_LINK_IFELSE([ @@ -1586,8 +1619,7 @@ int main(int argc, char *const *argv) AS_IF([test "x${mhd_cv_cc_kwd_assume}" != "xnone"], [AC_DEFINE_UNQUOTED([MHD_ASSUME_KEYWORD(statement)],[$mhd_cv_cc_kwd_assume],[Define to keyword supported to indicate a hard promise])] ) -ac_c_werror_flag="$SAVE_ac_c_werror_flag" -AS_UNSET([SAVE_ac_c_werror_flag]) +ac_c_werror_flag="no" # Check for 'fallthrough' keywords save_CFLAGS_ac="${CFLAGS_ac}" @@ -1599,8 +1631,7 @@ AC_CACHE_CHECK([for 'fallthrough' keyword supported by $CC],[mhd_cv_cc_kwd_fallt [ mhd_cv_cc_kwd_fallthrough="no" CFLAGS="${CFLAGS_ac} ${user_CFLAGS} ${errattr_CFLAGS}" - SAVE_ac_c_werror_flag="$ac_c_werror_flag" - ac_c_werror_flag="yes" + AS_VAR_IF([mhd_cv_cc_warnless_c_flags],["no"],[:],[ac_c_werror_flag="yes"]) [for keyword_chk in '[[fallthrough]]' '[[__fallthrough__]]' '[[gnu::fallthrough]]' '[[clang::fallthrough]]' '__attribute__((fallthrough))' ''] do AC_LINK_IFELSE([ @@ -1633,7 +1664,7 @@ int main(int argc, char *argv[]) test "x${mhd_cv_cc_kwd_fallthrough}" != "xno" && break done AS_IF([test -z "${mhd_cv_cc_kwd_fallthrough}"], [mhd_cv_cc_kwd_fallthrough="none needed"]) - ac_c_werror_flag="$SAVE_ac_c_werror_flag" + ac_c_werror_flag="no" ] ) AH_TEMPLATE([mhd_FALLTHROUGH],[Define to keyword marking intentional missing 'break' at the end of 'case:']) @@ -1872,8 +1903,7 @@ AS_IF([test "x${mhd_cv_cc_attr_aligned}${mhd_cv_cc_declspec_align}${mhd_cv_c_ali AC_CACHE_CHECK([fo][r large alignment number supported],[mhd_cv_alignment_large_num], [ CFLAGS="${CFLAGS_ac} ${user_CFLAGS} ${errattr_CFLAGS}" - MHD_SAVED_ac_c_werror_flag="$ac_c_werror_flag" - ac_c_werror_flag=yes + AS_VAR_IF([mhd_cv_cc_warnless_c_flags],["no"],[:],[ac_c_werror_flag="yes"]) for mhd_cv_alignment_large_num in 65536 32768 16384 8192 4096 2048 1024 512 256 128 64 32 16 8 4 2 1 0; do AC_LINK_IFELSE( [ @@ -1909,7 +1939,7 @@ int main(void) ] ) done - ac_c_werror_flag="$MHD_SAVED_ac_c_werror_flag" + ac_c_werror_flag="no" CFLAGS="${CFLAGS_ac} ${user_CFLAGS}" ] ) @@ -3710,8 +3740,7 @@ AC_CACHE_CHECK([for supported 'noreturn' keyword], [mhd_cv_decl_noreturn], [ mhd_cv_decl_noreturn="none" CFLAGS="${CFLAGS_ac} ${user_CFLAGS} ${errattr_CFLAGS}" - MHD_SAVED_ac_c_werror_flag="$ac_c_werror_flag" - ac_c_werror_flag=yes + AS_VAR_IF([mhd_cv_cc_warnless_c_flags],["no"],[:],[ac_c_werror_flag="yes"]) for decl_noret in ['[[noreturn]]'] '_Noreturn' '__attribute__((__noreturn__))' '__declspec(noreturn)' do AC_LINK_IFELSE([AC_LANG_SOURCE( @@ -3741,8 +3770,7 @@ int main (int argc, char *const *argv) ) AS_IF([test "x${mhd_cv_decl_noreturn}" != "xnone"], [break]) done - ac_c_werror_flag="$MHD_SAVED_ac_c_werror_flag" - AS_UNSET([MHD_SAVED_ac_c_werror_flag]) + ac_c_werror_flag="no" CFLAGS="${CFLAGS_ac} ${user_CFLAGS}" ] ) @@ -4688,8 +4716,7 @@ MHD_CHECK_FUNC([[usleep]], [[#include <unistd.h>]], [[usleep(100000);]]) MHD_CHECK_FUNC([[nanosleep]], [[#include <time.h>]], [[struct timespec ts2, ts1 = {0, 0}; nanosleep(&ts1, &ts2);]]) # NOTE: require setting of errattr_CFLAGS above -SAVE_ac_c_werror_flag="$ac_c_werror_flag" -ac_c_werror_flag="yes" +AS_VAR_IF([mhd_cv_cc_warnless_c_flags],["no"],[:],[ac_c_werror_flag="yes"]) CFLAGS="${CFLAGS_ac} ${user_CFLAGS} ${errattr_CFLAGS}" AC_CACHE_CHECK([whether $CC supports __attribute__((used))],[mhd_cv_cc_attr_used], [ @@ -5368,8 +5395,7 @@ AS_VAR_IF([mhd_cv_cc_attr_flag_enum],["yes"], ) ] ) -ac_c_werror_flag="$SAVE_ac_c_werror_flag" -AS_UNSET([SAVE_ac_c_werror_flag]) +ac_c_werror_flag="no" AC_CACHE_CHECK([[whether $CC supports array[static N] with fixed N as a function parameter]],[mhd_cv_cc_func_param_arr_static_fixed], [ AC_COMPILE_IFELSE([AC_LANG_SOURCE([[