commit eb200338a0fc1d1a23147bf3633c776cca700019
parent 08a76b6bd65390c60c370941c2ce3450ba00e06b
Author: Evgeny Grin (Karlson2k) <k2k@drgrin.dev>
Date: Tue, 7 Oct 2025 21:20:43 +0200
configure: added check for enums with fixed base type
Diffstat:
2 files changed, 43 insertions(+), 0 deletions(-)
diff --git a/configure.ac b/configure.ac
@@ -1277,6 +1277,38 @@ AC_CACHE_CHECK([whether $CC supports trailing comma in enum],[mhd_cv_enum_traili
AS_VAR_IF([mhd_cv_enum_trailing_comma],["yes"],[],
[AC_DEFINE([MHD_ENUMS_NEED_TRAILING_VALUE],[1],[Define to '1' if your compiler does not support enum with trailing comma])]
)
+AC_CACHE_CHECK([whether $CC supports enum fixed underlying type],[mhd_cv_enum_base_type],
+ [
+ AC_COMPILE_IFELSE(
+ [AC_LANG_SOURCE([[enum TestEnum : unsigned char {ENM_VAL_A, ENM_VAL_B};]])],
+ [mhd_cv_enum_base_type="yes"],
+ [
+ mhd_cv_enum_base_type="no"
+ mhd_cv_enum_base_type_warnless="no"
+ ]
+ )
+ ]
+)
+AS_VAR_IF([mhd_cv_enum_base_type],["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],
+ [
+ SAVE_c_werror_flag="$ac_c_werror_flag"
+ 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"
+ ]
+ )
+ 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])]
+ )
+ ]
+)
AS_VAR_SET_IF([ac_cv_c_restrict],[],
diff --git a/src/incl_priv/mhd_sys_options.h b/src/incl_priv/mhd_sys_options.h
@@ -368,6 +368,16 @@
# define MHD_FIXED_FLAGS_ENUM_MHD_APP_SET_ MHD_FLAGS_ENUM_ /* enum can be extended in next MHD versions */
#endif
+// TODO: support warnings mute
+#ifdef HAVE_ENUM_BASE_TYPE_WARNLESS
+# define mhd_USE_ENUM_BASE_T 1
+#endif
+#ifdef mhd_USE_ENUM_BASE_T
+# define mhd_ENUM_BASE_T(fixed_type) : fixed_type
+#else
+# define mhd_ENUM_BASE_T(fixed_type) /* empty */
+#endif
+
/**
* Automatic string with the name of the current function
*/
@@ -643,6 +653,7 @@
# define HAVE_STDBOOL_H 1
# endif
# endif
+# define mhd_ENUM_BASE_T(base) /* nothing */
# if ((__STDC_VERSION__ + 0) >= 202311)
# define alignof _Alignof
# endif