Mercurial
comparison third_party/libuv/m4/libuv-check-flags.m4 @ 160:948de3f54cea
[ThirdParty] Added libuv
| author | June Park <parkjune1995@gmail.com> |
|---|---|
| date | Wed, 14 Jan 2026 19:39:52 -0800 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 159:05cf9467a1c3 | 160:948de3f54cea |
|---|---|
| 1 dnl Macros to check the presence of generic (non-typed) symbols. | |
| 2 dnl Copyright (c) 2006-2008 Diego Pettenò <flameeyes gmail com> | |
| 3 dnl Copyright (c) 2006-2008 xine project | |
| 4 dnl Copyright (c) 2021 libuv project | |
| 5 dnl | |
| 6 dnl This program is free software; you can redistribute it and/or modify | |
| 7 dnl it under the terms of the GNU General Public License as published by | |
| 8 dnl the Free Software Foundation; either version 3, or (at your option) | |
| 9 dnl any later version. | |
| 10 dnl | |
| 11 dnl This program is distributed in the hope that it will be useful, | |
| 12 dnl but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 13 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 14 dnl GNU General Public License for more details. | |
| 15 dnl | |
| 16 dnl You should have received a copy of the GNU General Public License | |
| 17 dnl along with this program; if not, write to the Free Software | |
| 18 dnl Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA | |
| 19 dnl 02110-1301, USA. | |
| 20 dnl | |
| 21 dnl As a special exception, the copyright owners of the | |
| 22 dnl macro gives unlimited permission to copy, distribute and modify the | |
| 23 dnl configure scripts that are the output of Autoconf when processing the | |
| 24 dnl Macro. You need not follow the terms of the GNU General Public | |
| 25 dnl License when using or distributing such scripts, even though portions | |
| 26 dnl of the text of the Macro appear in them. The GNU General Public | |
| 27 dnl License (GPL) does govern all other use of the material that | |
| 28 dnl constitutes the Autoconf Macro. | |
| 29 dnl | |
| 30 dnl This special exception to the GPL applies to versions of the | |
| 31 dnl Autoconf Macro released by this project. When you make and | |
| 32 dnl distribute a modified version of the Autoconf Macro, you may extend | |
| 33 dnl this special exception to the GPL to apply to your modified version as | |
| 34 dnl well. | |
| 35 | |
| 36 dnl Check if the flag is supported by compiler | |
| 37 dnl CC_CHECK_CFLAGS_SILENT([FLAG], [ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND]) | |
| 38 | |
| 39 AC_DEFUN([CC_CHECK_CFLAGS_SILENT], [ | |
| 40 AC_CACHE_VAL(AS_TR_SH([cc_cv_cflags_$1]), | |
| 41 [ac_save_CFLAGS="$CFLAGS" | |
| 42 CFLAGS="$CFLAGS $1" | |
| 43 AC_COMPILE_IFELSE([AC_LANG_SOURCE([int a;])], | |
| 44 [eval "AS_TR_SH([cc_cv_cflags_$1])='yes'"], | |
| 45 [eval "AS_TR_SH([cc_cv_cflags_$1])='no'"]) | |
| 46 CFLAGS="$ac_save_CFLAGS" | |
| 47 ]) | |
| 48 | |
| 49 AS_IF([eval test x$]AS_TR_SH([cc_cv_cflags_$1])[ = xyes], | |
| 50 [$2], [$3]) | |
| 51 ]) | |
| 52 | |
| 53 dnl Check if the flag is supported by compiler (cacheable) | |
| 54 dnl CC_CHECK_CFLAGS([FLAG], [ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND]) | |
| 55 | |
| 56 AC_DEFUN([CC_CHECK_CFLAGS], [ | |
| 57 AC_CACHE_CHECK([if $CC supports $1 flag], | |
| 58 AS_TR_SH([cc_cv_cflags_$1]), | |
| 59 CC_CHECK_CFLAGS_SILENT([$1]) dnl Don't execute actions here! | |
| 60 ) | |
| 61 | |
| 62 AS_IF([eval test x$]AS_TR_SH([cc_cv_cflags_$1])[ = xyes], | |
| 63 [$2], [$3]) | |
| 64 ]) | |
| 65 | |
| 66 dnl CC_CHECK_CFLAG_APPEND(FLAG, [action-if-found], [action-if-not-found]) | |
| 67 dnl Check for CFLAG and appends them to AM_CFLAGS if supported | |
| 68 AC_DEFUN([CC_CHECK_CFLAG_APPEND], [ | |
| 69 AC_CACHE_CHECK([if $CC supports $1 flag], | |
| 70 AS_TR_SH([cc_cv_cflags_$1]), | |
| 71 CC_CHECK_CFLAGS_SILENT([$1]) dnl Don't execute actions here! | |
| 72 ) | |
| 73 | |
| 74 AS_IF([eval test x$]AS_TR_SH([cc_cv_cflags_$1])[ = xyes], | |
| 75 [AM_CFLAGS="$AM_CFLAGS $1"; DEBUG_CFLAGS="$DEBUG_CFLAGS $1"; $2], [$3]) | |
| 76 | |
| 77 AC_SUBST([AM_CFLAGS]) | |
| 78 ]) | |
| 79 | |
| 80 dnl CC_CHECK_CFLAGS_APPEND([FLAG1 FLAG2], [action-if-found], [action-if-not]) | |
| 81 AC_DEFUN([CC_CHECK_CFLAGS_APPEND], [ | |
| 82 for flag in $1; do | |
| 83 CC_CHECK_CFLAG_APPEND($flag, [$2], [$3]) | |
| 84 done | |
| 85 ]) | |
| 86 | |
| 87 dnl Check if the flag is supported by linker (cacheable) | |
| 88 dnl CC_CHECK_LDFLAGS([FLAG], [ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND]) | |
| 89 | |
| 90 AC_DEFUN([CC_CHECK_LDFLAGS], [ | |
| 91 AC_CACHE_CHECK([if $CC supports $1 flag], | |
| 92 AS_TR_SH([cc_cv_ldflags_$1]), | |
| 93 [ac_save_LDFLAGS="$LDFLAGS" | |
| 94 LDFLAGS="$LDFLAGS $1" | |
| 95 AC_LANG_PUSH([C]) | |
| 96 AC_LINK_IFELSE([AC_LANG_SOURCE([int main() { return 1; }])], | |
| 97 [eval "AS_TR_SH([cc_cv_ldflags_$1])='yes'"], | |
| 98 [eval "AS_TR_SH([cc_cv_ldflags_$1])="]) | |
| 99 AC_LANG_POP([C]) | |
| 100 LDFLAGS="$ac_save_LDFLAGS" | |
| 101 ]) | |
| 102 | |
| 103 AS_IF([eval test x$]AS_TR_SH([cc_cv_ldflags_$1])[ = xyes], | |
| 104 [$2], [$3]) | |
| 105 ]) | |
| 106 | |
| 107 dnl Check if flag is supported by both compiler and linker | |
| 108 dnl If so, append it to AM_CFLAGS | |
| 109 dnl CC_CHECK_FLAG_SUPPORTED_APPEND([FLAG]) | |
| 110 | |
| 111 AC_DEFUN([CC_CHECK_FLAG_SUPPORTED_APPEND], [ | |
| 112 CC_CHECK_CFLAGS([$1], | |
| 113 [CC_CHECK_LDFLAGS([$1], | |
| 114 [AM_CFLAGS="$AM_CFLAGS $1"; | |
| 115 DEBUG_CFLAGS="$DEBUG_CFLAGS $1"; | |
| 116 AC_SUBST([AM_CFLAGS]) | |
| 117 ]) | |
| 118 ]) | |
| 119 ]) | |
| 120 | |
| 121 dnl define the LDFLAGS_NOUNDEFINED variable with the correct value for | |
| 122 dnl the current linker to avoid undefined references in a shared object. | |
| 123 AC_DEFUN([CC_NOUNDEFINED], [ | |
| 124 dnl We check $host for which systems to enable this for. | |
| 125 AC_REQUIRE([AC_CANONICAL_HOST]) | |
| 126 | |
| 127 case $host in | |
| 128 dnl FreeBSD (et al.) does not complete linking for shared objects when pthreads | |
| 129 dnl are requested, as different implementations are present; to avoid problems | |
| 130 dnl use -Wl,-z,defs only for those platform not behaving this way. | |
| 131 *-freebsd* | *-openbsd*) ;; | |
| 132 *) | |
| 133 dnl First of all check for the --no-undefined variant of GNU ld. This allows | |
| 134 dnl for a much more readable commandline, so that people can understand what | |
| 135 dnl it does without going to look for what the heck -z defs does. | |
| 136 for possible_flags in "-Wl,--no-undefined" "-Wl,-z,defs"; do | |
| 137 CC_CHECK_LDFLAGS([$possible_flags], [LDFLAGS_NOUNDEFINED="$possible_flags"]) | |
| 138 break | |
| 139 done | |
| 140 ;; | |
| 141 esac | |
| 142 | |
| 143 AC_SUBST([LDFLAGS_NOUNDEFINED]) | |
| 144 ]) | |
| 145 | |
| 146 dnl Check for a -Werror flag or equivalent. -Werror is the GCC | |
| 147 dnl and ICC flag that tells the compiler to treat all the warnings | |
| 148 dnl as fatal. We usually need this option to make sure that some | |
| 149 dnl constructs (like attributes) are not simply ignored. | |
| 150 dnl | |
| 151 dnl Other compilers don't support -Werror per se, but they support | |
| 152 dnl an equivalent flag: | |
| 153 dnl - Sun Studio compiler supports -errwarn=%all | |
| 154 AC_DEFUN([CC_CHECK_WERROR], [ | |
| 155 AC_CACHE_CHECK( | |
| 156 [for $CC way to treat warnings as errors], | |
| 157 [cc_cv_werror], | |
| 158 [CC_CHECK_CFLAGS_SILENT([-Werror], [cc_cv_werror=-Werror], | |
| 159 [CC_CHECK_CFLAGS_SILENT([-errwarn=%all], [cc_cv_werror=-errwarn=%all])]) | |
| 160 ]) | |
| 161 ]) | |
| 162 | |
| 163 AC_DEFUN([CC_CHECK_ATTRIBUTE], [ | |
| 164 AC_REQUIRE([CC_CHECK_WERROR]) | |
| 165 AC_CACHE_CHECK([if $CC supports __attribute__(( ifelse([$2], , [$1], [$2]) ))], | |
| 166 AS_TR_SH([cc_cv_attribute_$1]), | |
| 167 [ac_save_CFLAGS="$CFLAGS" | |
| 168 CFLAGS="$CFLAGS $cc_cv_werror" | |
| 169 AC_LANG_PUSH([C]) | |
| 170 AC_COMPILE_IFELSE([AC_LANG_SOURCE([$3])], | |
| 171 [eval "AS_TR_SH([cc_cv_attribute_$1])='yes'"], | |
| 172 [eval "AS_TR_SH([cc_cv_attribute_$1])='no'"]) | |
| 173 AC_LANG_POP([C]) | |
| 174 CFLAGS="$ac_save_CFLAGS" | |
| 175 ]) | |
| 176 | |
| 177 AS_IF([eval test x$]AS_TR_SH([cc_cv_attribute_$1])[ = xyes], | |
| 178 [AC_DEFINE( | |
| 179 AS_TR_CPP([SUPPORT_ATTRIBUTE_$1]), 1, | |
| 180 [Define this if the compiler supports __attribute__(( ifelse([$2], , [$1], [$2]) ))] | |
| 181 ) | |
| 182 $4], | |
| 183 [$5]) | |
| 184 ]) | |
| 185 | |
| 186 AC_DEFUN([CC_ATTRIBUTE_CONSTRUCTOR], [ | |
| 187 CC_CHECK_ATTRIBUTE( | |
| 188 [constructor],, | |
| 189 [void __attribute__((constructor)) ctor() { int a; }], | |
| 190 [$1], [$2]) | |
| 191 ]) | |
| 192 | |
| 193 AC_DEFUN([CC_ATTRIBUTE_FORMAT], [ | |
| 194 CC_CHECK_ATTRIBUTE( | |
| 195 [format], [format(printf, n, n)], | |
| 196 [void __attribute__((format(printf, 1, 2))) printflike(const char *fmt, ...) { fmt = (void *)0; }], | |
| 197 [$1], [$2]) | |
| 198 ]) | |
| 199 | |
| 200 AC_DEFUN([CC_ATTRIBUTE_FORMAT_ARG], [ | |
| 201 CC_CHECK_ATTRIBUTE( | |
| 202 [format_arg], [format_arg(printf)], | |
| 203 [char *__attribute__((format_arg(1))) gettextlike(const char *fmt) { fmt = (void *)0; }], | |
| 204 [$1], [$2]) | |
| 205 ]) | |
| 206 | |
| 207 AC_DEFUN([CC_ATTRIBUTE_VISIBILITY], [ | |
| 208 CC_CHECK_ATTRIBUTE( | |
| 209 [visibility_$1], [visibility("$1")], | |
| 210 [void __attribute__((visibility("$1"))) $1_function() { }], | |
| 211 [$2], [$3]) | |
| 212 ]) | |
| 213 | |
| 214 AC_DEFUN([CC_ATTRIBUTE_NONNULL], [ | |
| 215 CC_CHECK_ATTRIBUTE( | |
| 216 [nonnull], [nonnull()], | |
| 217 [void __attribute__((nonnull())) some_function(void *foo, void *bar) { foo = (void*)0; bar = (void*)0; }], | |
| 218 [$1], [$2]) | |
| 219 ]) | |
| 220 | |
| 221 AC_DEFUN([CC_ATTRIBUTE_UNUSED], [ | |
| 222 CC_CHECK_ATTRIBUTE( | |
| 223 [unused], , | |
| 224 [void some_function(void *foo, __attribute__((unused)) void *bar);], | |
| 225 [$1], [$2]) | |
| 226 ]) | |
| 227 | |
| 228 AC_DEFUN([CC_ATTRIBUTE_SENTINEL], [ | |
| 229 CC_CHECK_ATTRIBUTE( | |
| 230 [sentinel], , | |
| 231 [void some_function(void *foo, ...) __attribute__((sentinel));], | |
| 232 [$1], [$2]) | |
| 233 ]) | |
| 234 | |
| 235 AC_DEFUN([CC_ATTRIBUTE_DEPRECATED], [ | |
| 236 CC_CHECK_ATTRIBUTE( | |
| 237 [deprecated], , | |
| 238 [void some_function(void *foo, ...) __attribute__((deprecated));], | |
| 239 [$1], [$2]) | |
| 240 ]) | |
| 241 | |
| 242 AC_DEFUN([CC_ATTRIBUTE_ALIAS], [ | |
| 243 CC_CHECK_ATTRIBUTE( | |
| 244 [alias], [weak, alias], | |
| 245 [void other_function(void *foo) { } | |
| 246 void some_function(void *foo) __attribute__((weak, alias("other_function")));], | |
| 247 [$1], [$2]) | |
| 248 ]) | |
| 249 | |
| 250 AC_DEFUN([CC_ATTRIBUTE_MALLOC], [ | |
| 251 CC_CHECK_ATTRIBUTE( | |
| 252 [malloc], , | |
| 253 [void * __attribute__((malloc)) my_alloc(int n);], | |
| 254 [$1], [$2]) | |
| 255 ]) | |
| 256 | |
| 257 AC_DEFUN([CC_ATTRIBUTE_PACKED], [ | |
| 258 CC_CHECK_ATTRIBUTE( | |
| 259 [packed], , | |
| 260 [struct astructure { char a; int b; long c; void *d; } __attribute__((packed));], | |
| 261 [$1], [$2]) | |
| 262 ]) | |
| 263 | |
| 264 AC_DEFUN([CC_ATTRIBUTE_CONST], [ | |
| 265 CC_CHECK_ATTRIBUTE( | |
| 266 [const], , | |
| 267 [int __attribute__((const)) twopow(int n) { return 1 << n; } ], | |
| 268 [$1], [$2]) | |
| 269 ]) | |
| 270 | |
| 271 AC_DEFUN([CC_FLAG_VISIBILITY], [ | |
| 272 AC_REQUIRE([CC_CHECK_WERROR]) | |
| 273 AC_CACHE_CHECK([if $CC supports -fvisibility=hidden], | |
| 274 [cc_cv_flag_visibility], | |
| 275 [cc_flag_visibility_save_CFLAGS="$CFLAGS" | |
| 276 CFLAGS="$CFLAGS $cc_cv_werror" | |
| 277 CC_CHECK_CFLAGS_SILENT([-fvisibility=hidden], | |
| 278 cc_cv_flag_visibility='yes', | |
| 279 cc_cv_flag_visibility='no') | |
| 280 CFLAGS="$cc_flag_visibility_save_CFLAGS"]) | |
| 281 | |
| 282 AS_IF([test "x$cc_cv_flag_visibility" = "xyes"], | |
| 283 [AC_DEFINE([SUPPORT_FLAG_VISIBILITY], 1, | |
| 284 [Define this if the compiler supports the -fvisibility flag]) | |
| 285 $1], | |
| 286 [$2]) | |
| 287 ]) | |
| 288 | |
| 289 AC_DEFUN([CC_FUNC_EXPECT], [ | |
| 290 AC_REQUIRE([CC_CHECK_WERROR]) | |
| 291 AC_CACHE_CHECK([if compiler has __builtin_expect function], | |
| 292 [cc_cv_func_expect], | |
| 293 [ac_save_CFLAGS="$CFLAGS" | |
| 294 CFLAGS="$CFLAGS $cc_cv_werror" | |
| 295 AC_LANG_PUSH([C]) | |
| 296 AC_COMPILE_IFELSE([AC_LANG_SOURCE( | |
| 297 [int some_function() { | |
| 298 int a = 3; | |
| 299 return (int)__builtin_expect(a, 3); | |
| 300 }])], | |
| 301 [cc_cv_func_expect=yes], | |
| 302 [cc_cv_func_expect=no]) | |
| 303 AC_LANG_POP([C]) | |
| 304 CFLAGS="$ac_save_CFLAGS" | |
| 305 ]) | |
| 306 | |
| 307 AS_IF([test "x$cc_cv_func_expect" = "xyes"], | |
| 308 [AC_DEFINE([SUPPORT__BUILTIN_EXPECT], 1, | |
| 309 [Define this if the compiler supports __builtin_expect() function]) | |
| 310 $1], | |
| 311 [$2]) | |
| 312 ]) | |
| 313 | |
| 314 AC_DEFUN([CC_ATTRIBUTE_ALIGNED], [ | |
| 315 AC_REQUIRE([CC_CHECK_WERROR]) | |
| 316 AC_CACHE_CHECK([highest __attribute__ ((aligned ())) supported], | |
| 317 [cc_cv_attribute_aligned], | |
| 318 [ac_save_CFLAGS="$CFLAGS" | |
| 319 CFLAGS="$CFLAGS $cc_cv_werror" | |
| 320 AC_LANG_PUSH([C]) | |
| 321 for cc_attribute_align_try in 64 32 16 8 4 2; do | |
| 322 AC_COMPILE_IFELSE([AC_LANG_SOURCE([ | |
| 323 int main() { | |
| 324 static char c __attribute__ ((aligned($cc_attribute_align_try))) = 0; | |
| 325 return c; | |
| 326 }])], [cc_cv_attribute_aligned=$cc_attribute_align_try; break]) | |
| 327 done | |
| 328 AC_LANG_POP([C]) | |
| 329 CFLAGS="$ac_save_CFLAGS" | |
| 330 ]) | |
| 331 | |
| 332 if test "x$cc_cv_attribute_aligned" != "x"; then | |
| 333 AC_DEFINE_UNQUOTED([ATTRIBUTE_ALIGNED_MAX], [$cc_cv_attribute_aligned], | |
| 334 [Define the highest alignment supported]) | |
| 335 fi | |
| 336 ]) |