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:
| M | configure.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([[