1*820c1a8dSHiroo HAYASHI# gnulib-common.m4 serial 66 2*820c1a8dSHiroo HAYASHIdnl Copyright (C) 2007-2021 Free Software Foundation, Inc. 3*820c1a8dSHiroo HAYASHIdnl This file is free software; the Free Software Foundation 4*820c1a8dSHiroo HAYASHIdnl gives unlimited permission to copy and/or distribute it, 5*820c1a8dSHiroo HAYASHIdnl with or without modifications, as long as this notice is preserved. 6*820c1a8dSHiroo HAYASHI 7*820c1a8dSHiroo HAYASHIAC_PREREQ([2.62]) 8*820c1a8dSHiroo HAYASHI 9*820c1a8dSHiroo HAYASHI# gl_COMMON 10*820c1a8dSHiroo HAYASHI# is expanded unconditionally through gnulib-tool magic. 11*820c1a8dSHiroo HAYASHIAC_DEFUN([gl_COMMON], [ 12*820c1a8dSHiroo HAYASHI dnl Use AC_REQUIRE here, so that the code is expanded once only. 13*820c1a8dSHiroo HAYASHI AC_REQUIRE([gl_00GNULIB]) 14*820c1a8dSHiroo HAYASHI AC_REQUIRE([gl_COMMON_BODY]) 15*820c1a8dSHiroo HAYASHI AC_REQUIRE([gl_ZZGNULIB]) 16*820c1a8dSHiroo HAYASHI]) 17*820c1a8dSHiroo HAYASHIAC_DEFUN([gl_COMMON_BODY], [ 18*820c1a8dSHiroo HAYASHI AH_VERBATIM([_GL_GNUC_PREREQ], 19*820c1a8dSHiroo HAYASHI[/* True if the compiler says it groks GNU C version MAJOR.MINOR. */ 20*820c1a8dSHiroo HAYASHI#if defined __GNUC__ && defined __GNUC_MINOR__ 21*820c1a8dSHiroo HAYASHI# define _GL_GNUC_PREREQ(major, minor) \ 22*820c1a8dSHiroo HAYASHI ((major) < __GNUC__ + ((minor) <= __GNUC_MINOR__)) 23*820c1a8dSHiroo HAYASHI#else 24*820c1a8dSHiroo HAYASHI# define _GL_GNUC_PREREQ(major, minor) 0 25*820c1a8dSHiroo HAYASHI#endif 26*820c1a8dSHiroo HAYASHI]) 27*820c1a8dSHiroo HAYASHI AH_VERBATIM([_Noreturn], 28*820c1a8dSHiroo HAYASHI[/* The _Noreturn keyword of C11. */ 29*820c1a8dSHiroo HAYASHI#ifndef _Noreturn 30*820c1a8dSHiroo HAYASHI# if (defined __cplusplus \ 31*820c1a8dSHiroo HAYASHI && ((201103 <= __cplusplus && !(__GNUC__ == 4 && __GNUC_MINOR__ == 7)) \ 32*820c1a8dSHiroo HAYASHI || (defined _MSC_VER && 1900 <= _MSC_VER)) \ 33*820c1a8dSHiroo HAYASHI && 0) 34*820c1a8dSHiroo HAYASHI /* [[noreturn]] is not practically usable, because with it the syntax 35*820c1a8dSHiroo HAYASHI extern _Noreturn void func (...); 36*820c1a8dSHiroo HAYASHI would not be valid; such a declaration would only be valid with 'extern' 37*820c1a8dSHiroo HAYASHI and '_Noreturn' swapped, or without the 'extern' keyword. However, some 38*820c1a8dSHiroo HAYASHI AIX system header files and several gnulib header files use precisely 39*820c1a8dSHiroo HAYASHI this syntax with 'extern'. */ 40*820c1a8dSHiroo HAYASHI# define _Noreturn [[noreturn]] 41*820c1a8dSHiroo HAYASHI# elif ((!defined __cplusplus || defined __clang__) \ 42*820c1a8dSHiroo HAYASHI && (201112 <= (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) \ 43*820c1a8dSHiroo HAYASHI || (!defined __STRICT_ANSI__ \ 44*820c1a8dSHiroo HAYASHI && (_GL_GNUC_PREREQ (4, 7) \ 45*820c1a8dSHiroo HAYASHI || (defined __apple_build_version__ \ 46*820c1a8dSHiroo HAYASHI ? 6000000 <= __apple_build_version__ \ 47*820c1a8dSHiroo HAYASHI : 3 < __clang_major__ + (5 <= __clang_minor__)))))) 48*820c1a8dSHiroo HAYASHI /* _Noreturn works as-is. */ 49*820c1a8dSHiroo HAYASHI# elif _GL_GNUC_PREREQ (2, 8) || defined __clang__ || 0x5110 <= __SUNPRO_C 50*820c1a8dSHiroo HAYASHI# define _Noreturn __attribute__ ((__noreturn__)) 51*820c1a8dSHiroo HAYASHI# elif 1200 <= (defined _MSC_VER ? _MSC_VER : 0) 52*820c1a8dSHiroo HAYASHI# define _Noreturn __declspec (noreturn) 53*820c1a8dSHiroo HAYASHI# else 54*820c1a8dSHiroo HAYASHI# define _Noreturn 55*820c1a8dSHiroo HAYASHI# endif 56*820c1a8dSHiroo HAYASHI#endif 57*820c1a8dSHiroo HAYASHI]) 58*820c1a8dSHiroo HAYASHI AH_VERBATIM([isoc99_inline], 59*820c1a8dSHiroo HAYASHI[/* Work around a bug in Apple GCC 4.0.1 build 5465: In C99 mode, it supports 60*820c1a8dSHiroo HAYASHI the ISO C 99 semantics of 'extern inline' (unlike the GNU C semantics of 61*820c1a8dSHiroo HAYASHI earlier versions), but does not display it by setting __GNUC_STDC_INLINE__. 62*820c1a8dSHiroo HAYASHI __APPLE__ && __MACH__ test for Mac OS X. 63*820c1a8dSHiroo HAYASHI __APPLE_CC__ tests for the Apple compiler and its version. 64*820c1a8dSHiroo HAYASHI __STDC_VERSION__ tests for the C99 mode. */ 65*820c1a8dSHiroo HAYASHI#if defined __APPLE__ && defined __MACH__ && __APPLE_CC__ >= 5465 && !defined __cplusplus && __STDC_VERSION__ >= 199901L && !defined __GNUC_STDC_INLINE__ 66*820c1a8dSHiroo HAYASHI# define __GNUC_STDC_INLINE__ 1 67*820c1a8dSHiroo HAYASHI#endif]) 68*820c1a8dSHiroo HAYASHI AH_VERBATIM([attribute], 69*820c1a8dSHiroo HAYASHI[/* Attributes. */ 70*820c1a8dSHiroo HAYASHI#if (defined __has_attribute \ 71*820c1a8dSHiroo HAYASHI && (!defined __clang_minor__ \ 72*820c1a8dSHiroo HAYASHI || 3 < __clang_major__ + (5 <= __clang_minor__))) 73*820c1a8dSHiroo HAYASHI# define _GL_HAS_ATTRIBUTE(attr) __has_attribute (__##attr##__) 74*820c1a8dSHiroo HAYASHI#else 75*820c1a8dSHiroo HAYASHI# define _GL_HAS_ATTRIBUTE(attr) _GL_ATTR_##attr 76*820c1a8dSHiroo HAYASHI# define _GL_ATTR_alloc_size _GL_GNUC_PREREQ (4, 3) 77*820c1a8dSHiroo HAYASHI# define _GL_ATTR_always_inline _GL_GNUC_PREREQ (3, 2) 78*820c1a8dSHiroo HAYASHI# define _GL_ATTR_artificial _GL_GNUC_PREREQ (4, 3) 79*820c1a8dSHiroo HAYASHI# define _GL_ATTR_cold _GL_GNUC_PREREQ (4, 3) 80*820c1a8dSHiroo HAYASHI# define _GL_ATTR_const _GL_GNUC_PREREQ (2, 95) 81*820c1a8dSHiroo HAYASHI# define _GL_ATTR_deprecated _GL_GNUC_PREREQ (3, 1) 82*820c1a8dSHiroo HAYASHI# define _GL_ATTR_diagnose_if 0 83*820c1a8dSHiroo HAYASHI# define _GL_ATTR_error _GL_GNUC_PREREQ (4, 3) 84*820c1a8dSHiroo HAYASHI# define _GL_ATTR_externally_visible _GL_GNUC_PREREQ (4, 1) 85*820c1a8dSHiroo HAYASHI# define _GL_ATTR_fallthrough _GL_GNUC_PREREQ (7, 0) 86*820c1a8dSHiroo HAYASHI# define _GL_ATTR_format _GL_GNUC_PREREQ (2, 7) 87*820c1a8dSHiroo HAYASHI# define _GL_ATTR_leaf _GL_GNUC_PREREQ (4, 6) 88*820c1a8dSHiroo HAYASHI# ifdef _ICC 89*820c1a8dSHiroo HAYASHI# define _GL_ATTR_may_alias 0 90*820c1a8dSHiroo HAYASHI# else 91*820c1a8dSHiroo HAYASHI# define _GL_ATTR_may_alias _GL_GNUC_PREREQ (3, 3) 92*820c1a8dSHiroo HAYASHI# endif 93*820c1a8dSHiroo HAYASHI# define _GL_ATTR_malloc _GL_GNUC_PREREQ (3, 0) 94*820c1a8dSHiroo HAYASHI# define _GL_ATTR_noinline _GL_GNUC_PREREQ (3, 1) 95*820c1a8dSHiroo HAYASHI# define _GL_ATTR_nonnull _GL_GNUC_PREREQ (3, 3) 96*820c1a8dSHiroo HAYASHI# define _GL_ATTR_nonstring _GL_GNUC_PREREQ (8, 0) 97*820c1a8dSHiroo HAYASHI# define _GL_ATTR_nothrow _GL_GNUC_PREREQ (3, 3) 98*820c1a8dSHiroo HAYASHI# define _GL_ATTR_packed _GL_GNUC_PREREQ (2, 7) 99*820c1a8dSHiroo HAYASHI# define _GL_ATTR_pure _GL_GNUC_PREREQ (2, 96) 100*820c1a8dSHiroo HAYASHI# define _GL_ATTR_returns_nonnull _GL_GNUC_PREREQ (4, 9) 101*820c1a8dSHiroo HAYASHI# define _GL_ATTR_sentinel _GL_GNUC_PREREQ (4, 0) 102*820c1a8dSHiroo HAYASHI# define _GL_ATTR_unused _GL_GNUC_PREREQ (2, 7) 103*820c1a8dSHiroo HAYASHI# define _GL_ATTR_warn_unused_result _GL_GNUC_PREREQ (3, 4) 104*820c1a8dSHiroo HAYASHI#endif 105*820c1a8dSHiroo HAYASHI 106*820c1a8dSHiroo HAYASHI]dnl There is no _GL_ATTRIBUTE_ALIGNED; use stdalign's _Alignas instead. 107*820c1a8dSHiroo HAYASHI[ 108*820c1a8dSHiroo HAYASHI#if _GL_HAS_ATTRIBUTE (alloc_size) 109*820c1a8dSHiroo HAYASHI# define _GL_ATTRIBUTE_ALLOC_SIZE(args) __attribute__ ((__alloc_size__ args)) 110*820c1a8dSHiroo HAYASHI#else 111*820c1a8dSHiroo HAYASHI# define _GL_ATTRIBUTE_ALLOC_SIZE(args) 112*820c1a8dSHiroo HAYASHI#endif 113*820c1a8dSHiroo HAYASHI 114*820c1a8dSHiroo HAYASHI#if _GL_HAS_ATTRIBUTE (always_inline) 115*820c1a8dSHiroo HAYASHI# define _GL_ATTRIBUTE_ALWAYS_INLINE __attribute__ ((__always_inline__)) 116*820c1a8dSHiroo HAYASHI#else 117*820c1a8dSHiroo HAYASHI# define _GL_ATTRIBUTE_ALWAYS_INLINE 118*820c1a8dSHiroo HAYASHI#endif 119*820c1a8dSHiroo HAYASHI 120*820c1a8dSHiroo HAYASHI#if _GL_HAS_ATTRIBUTE (artificial) 121*820c1a8dSHiroo HAYASHI# define _GL_ATTRIBUTE_ARTIFICIAL __attribute__ ((__artificial__)) 122*820c1a8dSHiroo HAYASHI#else 123*820c1a8dSHiroo HAYASHI# define _GL_ATTRIBUTE_ARTIFICIAL 124*820c1a8dSHiroo HAYASHI#endif 125*820c1a8dSHiroo HAYASHI 126*820c1a8dSHiroo HAYASHI/* Avoid __attribute__ ((cold)) on MinGW; see thread starting at 127*820c1a8dSHiroo HAYASHI <https://lists.gnu.org/r/emacs-devel/2019-04/msg01152.html>. 128*820c1a8dSHiroo HAYASHI Also, Oracle Studio 12.6 requires 'cold' not '__cold__'. */ 129*820c1a8dSHiroo HAYASHI#if _GL_HAS_ATTRIBUTE (cold) && !defined __MINGW32__ 130*820c1a8dSHiroo HAYASHI# ifndef __SUNPRO_C 131*820c1a8dSHiroo HAYASHI# define _GL_ATTRIBUTE_COLD __attribute__ ((__cold__)) 132*820c1a8dSHiroo HAYASHI# else 133*820c1a8dSHiroo HAYASHI# define _GL_ATTRIBUTE_COLD __attribute__ ((cold)) 134*820c1a8dSHiroo HAYASHI# endif 135*820c1a8dSHiroo HAYASHI#else 136*820c1a8dSHiroo HAYASHI# define _GL_ATTRIBUTE_COLD 137*820c1a8dSHiroo HAYASHI#endif 138*820c1a8dSHiroo HAYASHI 139*820c1a8dSHiroo HAYASHI#if _GL_HAS_ATTRIBUTE (const) 140*820c1a8dSHiroo HAYASHI# define _GL_ATTRIBUTE_CONST __attribute__ ((__const__)) 141*820c1a8dSHiroo HAYASHI#else 142*820c1a8dSHiroo HAYASHI# define _GL_ATTRIBUTE_CONST 143*820c1a8dSHiroo HAYASHI#endif 144*820c1a8dSHiroo HAYASHI 145*820c1a8dSHiroo HAYASHI#if 201710L < __STDC_VERSION__ 146*820c1a8dSHiroo HAYASHI# define _GL_ATTRIBUTE_DEPRECATED [[__deprecated__]] 147*820c1a8dSHiroo HAYASHI#elif _GL_HAS_ATTRIBUTE (deprecated) 148*820c1a8dSHiroo HAYASHI# define _GL_ATTRIBUTE_DEPRECATED __attribute__ ((__deprecated__)) 149*820c1a8dSHiroo HAYASHI#else 150*820c1a8dSHiroo HAYASHI# define _GL_ATTRIBUTE_DEPRECATED 151*820c1a8dSHiroo HAYASHI#endif 152*820c1a8dSHiroo HAYASHI 153*820c1a8dSHiroo HAYASHI#if _GL_HAS_ATTRIBUTE (error) 154*820c1a8dSHiroo HAYASHI# define _GL_ATTRIBUTE_ERROR(msg) __attribute__ ((__error__ (msg))) 155*820c1a8dSHiroo HAYASHI# define _GL_ATTRIBUTE_WARNING(msg) __attribute__ ((__warning__ (msg))) 156*820c1a8dSHiroo HAYASHI#elif _GL_HAS_ATTRIBUTE (diagnose_if) 157*820c1a8dSHiroo HAYASHI# define _GL_ATTRIBUTE_ERROR(msg) __attribute__ ((__diagnose_if__ (1, msg, "error"))) 158*820c1a8dSHiroo HAYASHI# define _GL_ATTRIBUTE_WARNING(msg) __attribute__ ((__diagnose_if__ (1, msg, "warning"))) 159*820c1a8dSHiroo HAYASHI#else 160*820c1a8dSHiroo HAYASHI# define _GL_ATTRIBUTE_ERROR(msg) 161*820c1a8dSHiroo HAYASHI# define _GL_ATTRIBUTE_WARNING(msg) 162*820c1a8dSHiroo HAYASHI#endif 163*820c1a8dSHiroo HAYASHI 164*820c1a8dSHiroo HAYASHI#if _GL_HAS_ATTRIBUTE (externally_visible) 165*820c1a8dSHiroo HAYASHI# define _GL_ATTRIBUTE_EXTERNALLY_VISIBLE __attribute__ ((externally_visible)) 166*820c1a8dSHiroo HAYASHI#else 167*820c1a8dSHiroo HAYASHI# define _GL_ATTRIBUTE_EXTERNALLY_VISIBLE 168*820c1a8dSHiroo HAYASHI#endif 169*820c1a8dSHiroo HAYASHI 170*820c1a8dSHiroo HAYASHI/* FALLTHROUGH is special, because it always expands to something. */ 171*820c1a8dSHiroo HAYASHI#if 201710L < __STDC_VERSION__ 172*820c1a8dSHiroo HAYASHI# define _GL_ATTRIBUTE_FALLTHROUGH [[__fallthrough__]] 173*820c1a8dSHiroo HAYASHI#elif _GL_HAS_ATTRIBUTE (fallthrough) 174*820c1a8dSHiroo HAYASHI# define _GL_ATTRIBUTE_FALLTHROUGH __attribute__ ((__fallthrough__)) 175*820c1a8dSHiroo HAYASHI#else 176*820c1a8dSHiroo HAYASHI# define _GL_ATTRIBUTE_FALLTHROUGH ((void) 0) 177*820c1a8dSHiroo HAYASHI#endif 178*820c1a8dSHiroo HAYASHI 179*820c1a8dSHiroo HAYASHI#if _GL_HAS_ATTRIBUTE (format) 180*820c1a8dSHiroo HAYASHI# define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) 181*820c1a8dSHiroo HAYASHI#else 182*820c1a8dSHiroo HAYASHI# define _GL_ATTRIBUTE_FORMAT(spec) 183*820c1a8dSHiroo HAYASHI#endif 184*820c1a8dSHiroo HAYASHI 185*820c1a8dSHiroo HAYASHI#if _GL_HAS_ATTRIBUTE (leaf) 186*820c1a8dSHiroo HAYASHI# define _GL_ATTRIBUTE_LEAF __attribute__ ((__leaf__)) 187*820c1a8dSHiroo HAYASHI#else 188*820c1a8dSHiroo HAYASHI# define _GL_ATTRIBUTE_LEAF 189*820c1a8dSHiroo HAYASHI#endif 190*820c1a8dSHiroo HAYASHI 191*820c1a8dSHiroo HAYASHI/* Oracle Studio 12.6 mishandles may_alias despite __has_attribute OK. */ 192*820c1a8dSHiroo HAYASHI#if _GL_HAS_ATTRIBUTE (may_alias) && !defined __SUNPRO_C 193*820c1a8dSHiroo HAYASHI# define _GL_ATTRIBUTE_MAY_ALIAS __attribute__ ((__may_alias__)) 194*820c1a8dSHiroo HAYASHI#else 195*820c1a8dSHiroo HAYASHI# define _GL_ATTRIBUTE_MAY_ALIAS 196*820c1a8dSHiroo HAYASHI#endif 197*820c1a8dSHiroo HAYASHI 198*820c1a8dSHiroo HAYASHI#if 201710L < __STDC_VERSION__ 199*820c1a8dSHiroo HAYASHI# define _GL_ATTRIBUTE_MAYBE_UNUSED [[__maybe_unused__]] 200*820c1a8dSHiroo HAYASHI#elif _GL_HAS_ATTRIBUTE (unused) 201*820c1a8dSHiroo HAYASHI# define _GL_ATTRIBUTE_MAYBE_UNUSED __attribute__ ((__unused__)) 202*820c1a8dSHiroo HAYASHI#else 203*820c1a8dSHiroo HAYASHI# define _GL_ATTRIBUTE_MAYBE_UNUSED 204*820c1a8dSHiroo HAYASHI#endif 205*820c1a8dSHiroo HAYASHI/* Earlier spellings of this macro. */ 206*820c1a8dSHiroo HAYASHI#define _GL_UNUSED _GL_ATTRIBUTE_MAYBE_UNUSED 207*820c1a8dSHiroo HAYASHI#define _UNUSED_PARAMETER_ _GL_ATTRIBUTE_MAYBE_UNUSED 208*820c1a8dSHiroo HAYASHI 209*820c1a8dSHiroo HAYASHI#if _GL_HAS_ATTRIBUTE (malloc) 210*820c1a8dSHiroo HAYASHI# define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__)) 211*820c1a8dSHiroo HAYASHI#else 212*820c1a8dSHiroo HAYASHI# define _GL_ATTRIBUTE_MALLOC 213*820c1a8dSHiroo HAYASHI#endif 214*820c1a8dSHiroo HAYASHI 215*820c1a8dSHiroo HAYASHI#if 201710L < __STDC_VERSION__ 216*820c1a8dSHiroo HAYASHI# define _GL_ATTRIBUTE_NODISCARD [[__nodiscard__]] 217*820c1a8dSHiroo HAYASHI#elif _GL_HAS_ATTRIBUTE (warn_unused_result) 218*820c1a8dSHiroo HAYASHI# define _GL_ATTRIBUTE_NODISCARD __attribute__ ((__warn_unused_result__)) 219*820c1a8dSHiroo HAYASHI#else 220*820c1a8dSHiroo HAYASHI# define _GL_ATTRIBUTE_NODISCARD 221*820c1a8dSHiroo HAYASHI#endif 222*820c1a8dSHiroo HAYASHI 223*820c1a8dSHiroo HAYASHI#if _GL_HAS_ATTRIBUTE (noinline) 224*820c1a8dSHiroo HAYASHI# define _GL_ATTRIBUTE_NOINLINE __attribute__ ((__noinline__)) 225*820c1a8dSHiroo HAYASHI#else 226*820c1a8dSHiroo HAYASHI# define _GL_ATTRIBUTE_NOINLINE 227*820c1a8dSHiroo HAYASHI#endif 228*820c1a8dSHiroo HAYASHI 229*820c1a8dSHiroo HAYASHI#if _GL_HAS_ATTRIBUTE (nonnull) 230*820c1a8dSHiroo HAYASHI# define _GL_ATTRIBUTE_NONNULL(args) __attribute__ ((__nonnull__ args)) 231*820c1a8dSHiroo HAYASHI#else 232*820c1a8dSHiroo HAYASHI# define _GL_ATTRIBUTE_NONNULL(args) 233*820c1a8dSHiroo HAYASHI#endif 234*820c1a8dSHiroo HAYASHI 235*820c1a8dSHiroo HAYASHI#if _GL_HAS_ATTRIBUTE (nonstring) 236*820c1a8dSHiroo HAYASHI# define _GL_ATTRIBUTE_NONSTRING __attribute__ ((__nonstring__)) 237*820c1a8dSHiroo HAYASHI#else 238*820c1a8dSHiroo HAYASHI# define _GL_ATTRIBUTE_NONSTRING 239*820c1a8dSHiroo HAYASHI#endif 240*820c1a8dSHiroo HAYASHI 241*820c1a8dSHiroo HAYASHI/* There is no _GL_ATTRIBUTE_NORETURN; use _Noreturn instead. */ 242*820c1a8dSHiroo HAYASHI 243*820c1a8dSHiroo HAYASHI#if _GL_HAS_ATTRIBUTE (nothrow) && !defined __cplusplus 244*820c1a8dSHiroo HAYASHI# define _GL_ATTRIBUTE_NOTHROW __attribute__ ((__nothrow__)) 245*820c1a8dSHiroo HAYASHI#else 246*820c1a8dSHiroo HAYASHI# define _GL_ATTRIBUTE_NOTHROW 247*820c1a8dSHiroo HAYASHI#endif 248*820c1a8dSHiroo HAYASHI 249*820c1a8dSHiroo HAYASHI#if _GL_HAS_ATTRIBUTE (packed) 250*820c1a8dSHiroo HAYASHI# define _GL_ATTRIBUTE_PACKED __attribute__ ((__packed__)) 251*820c1a8dSHiroo HAYASHI#else 252*820c1a8dSHiroo HAYASHI# define _GL_ATTRIBUTE_PACKED 253*820c1a8dSHiroo HAYASHI#endif 254*820c1a8dSHiroo HAYASHI 255*820c1a8dSHiroo HAYASHI#if _GL_HAS_ATTRIBUTE (pure) 256*820c1a8dSHiroo HAYASHI# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) 257*820c1a8dSHiroo HAYASHI#else 258*820c1a8dSHiroo HAYASHI# define _GL_ATTRIBUTE_PURE 259*820c1a8dSHiroo HAYASHI#endif 260*820c1a8dSHiroo HAYASHI 261*820c1a8dSHiroo HAYASHI#if _GL_HAS_ATTRIBUTE (returns_nonnull) 262*820c1a8dSHiroo HAYASHI# define _GL_ATTRIBUTE_RETURNS_NONNULL __attribute__ ((__returns_nonnull__)) 263*820c1a8dSHiroo HAYASHI#else 264*820c1a8dSHiroo HAYASHI# define _GL_ATTRIBUTE_RETURNS_NONNULL 265*820c1a8dSHiroo HAYASHI#endif 266*820c1a8dSHiroo HAYASHI 267*820c1a8dSHiroo HAYASHI#if _GL_HAS_ATTRIBUTE (sentinel) 268*820c1a8dSHiroo HAYASHI# define _GL_ATTRIBUTE_SENTINEL(pos) __attribute__ ((__sentinel__ pos)) 269*820c1a8dSHiroo HAYASHI#else 270*820c1a8dSHiroo HAYASHI# define _GL_ATTRIBUTE_SENTINEL(pos) 271*820c1a8dSHiroo HAYASHI#endif 272*820c1a8dSHiroo HAYASHI 273*820c1a8dSHiroo HAYASHI]dnl There is no _GL_ATTRIBUTE_VISIBILITY; see m4/visibility.m4 instead. 274*820c1a8dSHiroo HAYASHI[ 275*820c1a8dSHiroo HAYASHI/* To support C++ as well as C, use _GL_UNUSED_LABEL with trailing ';'. */ 276*820c1a8dSHiroo HAYASHI#if !defined __cplusplus || _GL_GNUC_PREREQ (4, 5) 277*820c1a8dSHiroo HAYASHI# define _GL_UNUSED_LABEL _GL_ATTRIBUTE_MAYBE_UNUSED 278*820c1a8dSHiroo HAYASHI#else 279*820c1a8dSHiroo HAYASHI# define _GL_UNUSED_LABEL 280*820c1a8dSHiroo HAYASHI#endif 281*820c1a8dSHiroo HAYASHI]) 282*820c1a8dSHiroo HAYASHI AH_VERBATIM([async_safe], 283*820c1a8dSHiroo HAYASHI[/* The _GL_ASYNC_SAFE marker should be attached to functions that are 284*820c1a8dSHiroo HAYASHI signal handlers (for signals other than SIGABRT, SIGPIPE) or can be 285*820c1a8dSHiroo HAYASHI invoked from such signal handlers. Such functions have some restrictions: 286*820c1a8dSHiroo HAYASHI * All functions that it calls should be marked _GL_ASYNC_SAFE as well, 287*820c1a8dSHiroo HAYASHI or should be listed as async-signal-safe in POSIX 288*820c1a8dSHiroo HAYASHI <https://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tag_15_04> 289*820c1a8dSHiroo HAYASHI section 2.4.3. Note that malloc(), sprintf(), and fwrite(), in 290*820c1a8dSHiroo HAYASHI particular, are NOT async-signal-safe. 291*820c1a8dSHiroo HAYASHI * All memory locations (variables and struct fields) that these functions 292*820c1a8dSHiroo HAYASHI access must be marked 'volatile'. This holds for both read and write 293*820c1a8dSHiroo HAYASHI accesses. Otherwise the compiler might optimize away stores to and 294*820c1a8dSHiroo HAYASHI reads from such locations that occur in the program, depending on its 295*820c1a8dSHiroo HAYASHI data flow analysis. For example, when the program contains a loop 296*820c1a8dSHiroo HAYASHI that is intended to inspect a variable set from within a signal handler 297*820c1a8dSHiroo HAYASHI while (!signal_occurred) 298*820c1a8dSHiroo HAYASHI ; 299*820c1a8dSHiroo HAYASHI the compiler is allowed to transform this into an endless loop if the 300*820c1a8dSHiroo HAYASHI variable 'signal_occurred' is not declared 'volatile'. 301*820c1a8dSHiroo HAYASHI Additionally, recall that: 302*820c1a8dSHiroo HAYASHI * A signal handler should not modify errno (except if it is a handler 303*820c1a8dSHiroo HAYASHI for a fatal signal and ends by raising the same signal again, thus 304*820c1a8dSHiroo HAYASHI provoking the termination of the process). If it invokes a function 305*820c1a8dSHiroo HAYASHI that may clobber errno, it needs to save and restore the value of 306*820c1a8dSHiroo HAYASHI errno. */ 307*820c1a8dSHiroo HAYASHI#define _GL_ASYNC_SAFE 308*820c1a8dSHiroo HAYASHI]) 309*820c1a8dSHiroo HAYASHI AH_VERBATIM([micro_optimizations], 310*820c1a8dSHiroo HAYASHI[/* _GL_CMP (n1, n2) performs a three-valued comparison on n1 vs. n2, where 311*820c1a8dSHiroo HAYASHI n1 and n2 are expressions without side effects, that evaluate to real 312*820c1a8dSHiroo HAYASHI numbers (excluding NaN). 313*820c1a8dSHiroo HAYASHI It returns 314*820c1a8dSHiroo HAYASHI 1 if n1 > n2 315*820c1a8dSHiroo HAYASHI 0 if n1 == n2 316*820c1a8dSHiroo HAYASHI -1 if n1 < n2 317*820c1a8dSHiroo HAYASHI The naïve code (n1 > n2 ? 1 : n1 < n2 ? -1 : 0) produces a conditional 318*820c1a8dSHiroo HAYASHI jump with nearly all GCC versions up to GCC 10. 319*820c1a8dSHiroo HAYASHI This variant (n1 < n2 ? -1 : n1 > n2) produces a conditional with many 320*820c1a8dSHiroo HAYASHI GCC versions up to GCC 9. 321*820c1a8dSHiroo HAYASHI The better code (n1 > n2) - (n1 < n2) from Hacker's Delight § 2-9 322*820c1a8dSHiroo HAYASHI avoids conditional jumps in all GCC versions >= 3.4. */ 323*820c1a8dSHiroo HAYASHI#define _GL_CMP(n1, n2) (((n1) > (n2)) - ((n1) < (n2))) 324*820c1a8dSHiroo HAYASHI]) 325*820c1a8dSHiroo HAYASHI dnl Hint which direction to take regarding cross-compilation guesses: 326*820c1a8dSHiroo HAYASHI dnl When a user installs a program on a platform they are not intimately 327*820c1a8dSHiroo HAYASHI dnl familiar with, --enable-cross-guesses=conservative is the appropriate 328*820c1a8dSHiroo HAYASHI dnl choice. It implements the "If we don't know, assume the worst" principle. 329*820c1a8dSHiroo HAYASHI dnl However, when an operating system developer (on a platform which is not 330*820c1a8dSHiroo HAYASHI dnl yet known to gnulib) builds packages for their platform, they want to 331*820c1a8dSHiroo HAYASHI dnl expose, not hide, possible platform bugs; in this case, 332*820c1a8dSHiroo HAYASHI dnl --enable-cross-guesses=risky is the appropriate choice. 333*820c1a8dSHiroo HAYASHI dnl Sets the variables 334*820c1a8dSHiroo HAYASHI dnl gl_cross_guess_normal (to be used when 'yes' is good and 'no' is bad), 335*820c1a8dSHiroo HAYASHI dnl gl_cross_guess_inverted (to be used when 'no' is good and 'yes' is bad). 336*820c1a8dSHiroo HAYASHI AC_ARG_ENABLE([cross-guesses], 337*820c1a8dSHiroo HAYASHI [AS_HELP_STRING([--enable-cross-guesses={conservative|risky}], 338*820c1a8dSHiroo HAYASHI [specify policy for cross-compilation guesses])], 339*820c1a8dSHiroo HAYASHI [if test "x$enableval" != xconservative && test "x$enableval" != xrisky; then 340*820c1a8dSHiroo HAYASHI AC_MSG_WARN([invalid argument supplied to --enable-cross-guesses]) 341*820c1a8dSHiroo HAYASHI enableval=conservative 342*820c1a8dSHiroo HAYASHI fi 343*820c1a8dSHiroo HAYASHI gl_cross_guesses="$enableval"], 344*820c1a8dSHiroo HAYASHI [gl_cross_guesses=conservative]) 345*820c1a8dSHiroo HAYASHI if test $gl_cross_guesses = risky; then 346*820c1a8dSHiroo HAYASHI gl_cross_guess_normal="guessing yes" 347*820c1a8dSHiroo HAYASHI gl_cross_guess_inverted="guessing no" 348*820c1a8dSHiroo HAYASHI else 349*820c1a8dSHiroo HAYASHI gl_cross_guess_normal="guessing no" 350*820c1a8dSHiroo HAYASHI gl_cross_guess_inverted="guessing yes" 351*820c1a8dSHiroo HAYASHI fi 352*820c1a8dSHiroo HAYASHI dnl Preparation for running test programs: 353*820c1a8dSHiroo HAYASHI dnl Tell glibc to write diagnostics from -D_FORTIFY_SOURCE=2 to stderr, not 354*820c1a8dSHiroo HAYASHI dnl to /dev/tty, so they can be redirected to log files. Such diagnostics 355*820c1a8dSHiroo HAYASHI dnl arise e.g., in the macros gl_PRINTF_DIRECTIVE_N, gl_SNPRINTF_DIRECTIVE_N. 356*820c1a8dSHiroo HAYASHI LIBC_FATAL_STDERR_=1 357*820c1a8dSHiroo HAYASHI export LIBC_FATAL_STDERR_ 358*820c1a8dSHiroo HAYASHI]) 359*820c1a8dSHiroo HAYASHI 360*820c1a8dSHiroo HAYASHI# gl_MODULE_INDICATOR_INIT_VARIABLE([variablename]) 361*820c1a8dSHiroo HAYASHI# gl_MODULE_INDICATOR_INIT_VARIABLE([variablename], [initialvalue]) 362*820c1a8dSHiroo HAYASHI# initializes the shell variable that indicates the presence of the given module 363*820c1a8dSHiroo HAYASHI# as a C preprocessor expression. 364*820c1a8dSHiroo HAYASHIAC_DEFUN([gl_MODULE_INDICATOR_INIT_VARIABLE], 365*820c1a8dSHiroo HAYASHI[ 366*820c1a8dSHiroo HAYASHI GL_MODULE_INDICATOR_PREFIX[]_[$1]=m4_if([$2], , [0], [$2]) 367*820c1a8dSHiroo HAYASHI AC_SUBST(GL_MODULE_INDICATOR_PREFIX[]_[$1]) 368*820c1a8dSHiroo HAYASHI]) 369*820c1a8dSHiroo HAYASHI 370*820c1a8dSHiroo HAYASHI# gl_MODULE_INDICATOR_CONDITION 371*820c1a8dSHiroo HAYASHI# expands to a C preprocessor expression that evaluates to 1 or 0, depending 372*820c1a8dSHiroo HAYASHI# whether a gnulib module that has been requested shall be considered present 373*820c1a8dSHiroo HAYASHI# or not. 374*820c1a8dSHiroo HAYASHIm4_define([gl_MODULE_INDICATOR_CONDITION], [1]) 375*820c1a8dSHiroo HAYASHI 376*820c1a8dSHiroo HAYASHI# gl_MODULE_INDICATOR_SET_VARIABLE([modulename]) 377*820c1a8dSHiroo HAYASHI# sets the shell variable that indicates the presence of the given module to 378*820c1a8dSHiroo HAYASHI# a C preprocessor expression that will evaluate to 1. 379*820c1a8dSHiroo HAYASHIAC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE], 380*820c1a8dSHiroo HAYASHI[ 381*820c1a8dSHiroo HAYASHI gl_MODULE_INDICATOR_SET_VARIABLE_AUX( 382*820c1a8dSHiroo HAYASHI [GL_MODULE_INDICATOR_PREFIX[]_GNULIB_[]m4_translit([[$1]], 383*820c1a8dSHiroo HAYASHI [abcdefghijklmnopqrstuvwxyz./-], 384*820c1a8dSHiroo HAYASHI [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])], 385*820c1a8dSHiroo HAYASHI [gl_MODULE_INDICATOR_CONDITION]) 386*820c1a8dSHiroo HAYASHI]) 387*820c1a8dSHiroo HAYASHI 388*820c1a8dSHiroo HAYASHI# gl_MODULE_INDICATOR_SET_VARIABLE_AUX([variable]) 389*820c1a8dSHiroo HAYASHI# modifies the shell variable to include the gl_MODULE_INDICATOR_CONDITION. 390*820c1a8dSHiroo HAYASHI# The shell variable's value is a C preprocessor expression that evaluates 391*820c1a8dSHiroo HAYASHI# to 0 or 1. 392*820c1a8dSHiroo HAYASHIAC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE_AUX], 393*820c1a8dSHiroo HAYASHI[ 394*820c1a8dSHiroo HAYASHI m4_if(m4_defn([gl_MODULE_INDICATOR_CONDITION]), [1], 395*820c1a8dSHiroo HAYASHI [ 396*820c1a8dSHiroo HAYASHI dnl Simplify the expression VALUE || 1 to 1. 397*820c1a8dSHiroo HAYASHI $1=1 398*820c1a8dSHiroo HAYASHI ], 399*820c1a8dSHiroo HAYASHI [gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR([$1], 400*820c1a8dSHiroo HAYASHI [gl_MODULE_INDICATOR_CONDITION])]) 401*820c1a8dSHiroo HAYASHI]) 402*820c1a8dSHiroo HAYASHI 403*820c1a8dSHiroo HAYASHI# gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR([variable], [condition]) 404*820c1a8dSHiroo HAYASHI# modifies the shell variable to include the given condition. The shell 405*820c1a8dSHiroo HAYASHI# variable's value is a C preprocessor expression that evaluates to 0 or 1. 406*820c1a8dSHiroo HAYASHIAC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR], 407*820c1a8dSHiroo HAYASHI[ 408*820c1a8dSHiroo HAYASHI dnl Simplify the expression 1 || CONDITION to 1. 409*820c1a8dSHiroo HAYASHI if test "$[]$1" != 1; then 410*820c1a8dSHiroo HAYASHI dnl Simplify the expression 0 || CONDITION to CONDITION. 411*820c1a8dSHiroo HAYASHI if test "$[]$1" = 0; then 412*820c1a8dSHiroo HAYASHI $1=$2 413*820c1a8dSHiroo HAYASHI else 414*820c1a8dSHiroo HAYASHI $1="($[]$1 || $2)" 415*820c1a8dSHiroo HAYASHI fi 416*820c1a8dSHiroo HAYASHI fi 417*820c1a8dSHiroo HAYASHI]) 418*820c1a8dSHiroo HAYASHI 419*820c1a8dSHiroo HAYASHI# gl_MODULE_INDICATOR([modulename]) 420*820c1a8dSHiroo HAYASHI# defines a C macro indicating the presence of the given module 421*820c1a8dSHiroo HAYASHI# in a location where it can be used. 422*820c1a8dSHiroo HAYASHI# | Value | Value | 423*820c1a8dSHiroo HAYASHI# | in lib/ | in tests/ | 424*820c1a8dSHiroo HAYASHI# --------------------------------------------+---------+-----------+ 425*820c1a8dSHiroo HAYASHI# Module present among main modules: | 1 | 1 | 426*820c1a8dSHiroo HAYASHI# --------------------------------------------+---------+-----------+ 427*820c1a8dSHiroo HAYASHI# Module present among tests-related modules: | 0 | 1 | 428*820c1a8dSHiroo HAYASHI# --------------------------------------------+---------+-----------+ 429*820c1a8dSHiroo HAYASHI# Module not present at all: | 0 | 0 | 430*820c1a8dSHiroo HAYASHI# --------------------------------------------+---------+-----------+ 431*820c1a8dSHiroo HAYASHIAC_DEFUN([gl_MODULE_INDICATOR], 432*820c1a8dSHiroo HAYASHI[ 433*820c1a8dSHiroo HAYASHI AC_DEFINE_UNQUOTED([GNULIB_]m4_translit([[$1]], 434*820c1a8dSHiroo HAYASHI [abcdefghijklmnopqrstuvwxyz./-], 435*820c1a8dSHiroo HAYASHI [ABCDEFGHIJKLMNOPQRSTUVWXYZ___]), 436*820c1a8dSHiroo HAYASHI [gl_MODULE_INDICATOR_CONDITION], 437*820c1a8dSHiroo HAYASHI [Define to a C preprocessor expression that evaluates to 1 or 0, 438*820c1a8dSHiroo HAYASHI depending whether the gnulib module $1 shall be considered present.]) 439*820c1a8dSHiroo HAYASHI]) 440*820c1a8dSHiroo HAYASHI 441*820c1a8dSHiroo HAYASHI# gl_MODULE_INDICATOR_FOR_TESTS([modulename]) 442*820c1a8dSHiroo HAYASHI# defines a C macro indicating the presence of the given module 443*820c1a8dSHiroo HAYASHI# in lib or tests. This is useful to determine whether the module 444*820c1a8dSHiroo HAYASHI# should be tested. 445*820c1a8dSHiroo HAYASHI# | Value | Value | 446*820c1a8dSHiroo HAYASHI# | in lib/ | in tests/ | 447*820c1a8dSHiroo HAYASHI# --------------------------------------------+---------+-----------+ 448*820c1a8dSHiroo HAYASHI# Module present among main modules: | 1 | 1 | 449*820c1a8dSHiroo HAYASHI# --------------------------------------------+---------+-----------+ 450*820c1a8dSHiroo HAYASHI# Module present among tests-related modules: | 1 | 1 | 451*820c1a8dSHiroo HAYASHI# --------------------------------------------+---------+-----------+ 452*820c1a8dSHiroo HAYASHI# Module not present at all: | 0 | 0 | 453*820c1a8dSHiroo HAYASHI# --------------------------------------------+---------+-----------+ 454*820c1a8dSHiroo HAYASHIAC_DEFUN([gl_MODULE_INDICATOR_FOR_TESTS], 455*820c1a8dSHiroo HAYASHI[ 456*820c1a8dSHiroo HAYASHI AC_DEFINE([GNULIB_TEST_]m4_translit([[$1]], 457*820c1a8dSHiroo HAYASHI [abcdefghijklmnopqrstuvwxyz./-], 458*820c1a8dSHiroo HAYASHI [ABCDEFGHIJKLMNOPQRSTUVWXYZ___]), [1], 459*820c1a8dSHiroo HAYASHI [Define to 1 when the gnulib module $1 should be tested.]) 460*820c1a8dSHiroo HAYASHI]) 461*820c1a8dSHiroo HAYASHI 462*820c1a8dSHiroo HAYASHI# gl_ASSERT_NO_GNULIB_POSIXCHECK 463*820c1a8dSHiroo HAYASHI# asserts that there will never be a need to #define GNULIB_POSIXCHECK. 464*820c1a8dSHiroo HAYASHI# and thereby enables an optimization of configure and config.h. 465*820c1a8dSHiroo HAYASHI# Used by Emacs. 466*820c1a8dSHiroo HAYASHIAC_DEFUN([gl_ASSERT_NO_GNULIB_POSIXCHECK], 467*820c1a8dSHiroo HAYASHI[ 468*820c1a8dSHiroo HAYASHI dnl Override gl_WARN_ON_USE_PREPARE. 469*820c1a8dSHiroo HAYASHI dnl But hide this definition from 'aclocal'. 470*820c1a8dSHiroo HAYASHI AC_DEFUN([gl_W][ARN_ON_USE_PREPARE], []) 471*820c1a8dSHiroo HAYASHI]) 472*820c1a8dSHiroo HAYASHI 473*820c1a8dSHiroo HAYASHI# gl_ASSERT_NO_GNULIB_TESTS 474*820c1a8dSHiroo HAYASHI# asserts that there will be no gnulib tests in the scope of the configure.ac 475*820c1a8dSHiroo HAYASHI# and thereby enables an optimization of config.h. 476*820c1a8dSHiroo HAYASHI# Used by Emacs. 477*820c1a8dSHiroo HAYASHIAC_DEFUN([gl_ASSERT_NO_GNULIB_TESTS], 478*820c1a8dSHiroo HAYASHI[ 479*820c1a8dSHiroo HAYASHI dnl Override gl_MODULE_INDICATOR_FOR_TESTS. 480*820c1a8dSHiroo HAYASHI AC_DEFUN([gl_MODULE_INDICATOR_FOR_TESTS], []) 481*820c1a8dSHiroo HAYASHI]) 482*820c1a8dSHiroo HAYASHI 483*820c1a8dSHiroo HAYASHI# Test whether <features.h> exists. 484*820c1a8dSHiroo HAYASHI# Set HAVE_FEATURES_H. 485*820c1a8dSHiroo HAYASHIAC_DEFUN([gl_FEATURES_H], 486*820c1a8dSHiroo HAYASHI[ 487*820c1a8dSHiroo HAYASHI AC_CHECK_HEADERS_ONCE([features.h]) 488*820c1a8dSHiroo HAYASHI if test $ac_cv_header_features_h = yes; then 489*820c1a8dSHiroo HAYASHI HAVE_FEATURES_H=1 490*820c1a8dSHiroo HAYASHI else 491*820c1a8dSHiroo HAYASHI HAVE_FEATURES_H=0 492*820c1a8dSHiroo HAYASHI fi 493*820c1a8dSHiroo HAYASHI AC_SUBST([HAVE_FEATURES_H]) 494*820c1a8dSHiroo HAYASHI]) 495*820c1a8dSHiroo HAYASHI 496*820c1a8dSHiroo HAYASHI# gl_PROG_CC_C99 497*820c1a8dSHiroo HAYASHI# Modifies the value of the shell variable CC in an attempt to make $CC 498*820c1a8dSHiroo HAYASHI# understand ISO C99 source code. 499*820c1a8dSHiroo HAYASHIAC_DEFUN([gl_PROG_CC_C99], 500*820c1a8dSHiroo HAYASHI[ 501*820c1a8dSHiroo HAYASHI dnl Just use AC_PROG_CC_C99. 502*820c1a8dSHiroo HAYASHI dnl When AC_PROG_CC_C99 and AC_PROG_CC_STDC are used together, the substituted 503*820c1a8dSHiroo HAYASHI dnl value of CC will contain the C99 enabling options twice. But this is only 504*820c1a8dSHiroo HAYASHI dnl a cosmetic problem. 505*820c1a8dSHiroo HAYASHI dnl With Autoconf >= 2.70, use AC_PROG_CC since it implies AC_PROG_CC_C99; 506*820c1a8dSHiroo HAYASHI dnl this avoids a "warning: The macro `AC_PROG_CC_C99' is obsolete." 507*820c1a8dSHiroo HAYASHI m4_version_prereq([2.70], 508*820c1a8dSHiroo HAYASHI [AC_REQUIRE([AC_PROG_CC])], 509*820c1a8dSHiroo HAYASHI [AC_REQUIRE([AC_PROG_CC_C99])]) 510*820c1a8dSHiroo HAYASHI]) 511*820c1a8dSHiroo HAYASHI 512*820c1a8dSHiroo HAYASHI# gl_PROG_AR_RANLIB 513*820c1a8dSHiroo HAYASHI# Determines the values for AR, ARFLAGS, RANLIB that fit with the compiler. 514*820c1a8dSHiroo HAYASHI# The user can set the variables AR, ARFLAGS, RANLIB if he wants to override 515*820c1a8dSHiroo HAYASHI# the values. 516*820c1a8dSHiroo HAYASHIAC_DEFUN([gl_PROG_AR_RANLIB], 517*820c1a8dSHiroo HAYASHI[ 518*820c1a8dSHiroo HAYASHI dnl Minix 3 comes with two toolchains: The Amsterdam Compiler Kit compiler 519*820c1a8dSHiroo HAYASHI dnl as "cc", and GCC as "gcc". They have different object file formats and 520*820c1a8dSHiroo HAYASHI dnl library formats. In particular, the GNU binutils programs ar and ranlib 521*820c1a8dSHiroo HAYASHI dnl produce libraries that work only with gcc, not with cc. 522*820c1a8dSHiroo HAYASHI AC_REQUIRE([AC_PROG_CC]) 523*820c1a8dSHiroo HAYASHI dnl The '][' hides this use from 'aclocal'. 524*820c1a8dSHiroo HAYASHI AC_BEFORE([$0], [A][M_PROG_AR]) 525*820c1a8dSHiroo HAYASHI AC_CACHE_CHECK([for Minix Amsterdam compiler], [gl_cv_c_amsterdam_compiler], 526*820c1a8dSHiroo HAYASHI [ 527*820c1a8dSHiroo HAYASHI AC_EGREP_CPP([Amsterdam], 528*820c1a8dSHiroo HAYASHI [ 529*820c1a8dSHiroo HAYASHI#ifdef __ACK__ 530*820c1a8dSHiroo HAYASHIAmsterdam 531*820c1a8dSHiroo HAYASHI#endif 532*820c1a8dSHiroo HAYASHI ], 533*820c1a8dSHiroo HAYASHI [gl_cv_c_amsterdam_compiler=yes], 534*820c1a8dSHiroo HAYASHI [gl_cv_c_amsterdam_compiler=no]) 535*820c1a8dSHiroo HAYASHI ]) 536*820c1a8dSHiroo HAYASHI 537*820c1a8dSHiroo HAYASHI dnl Don't compete with AM_PROG_AR's decision about AR/ARFLAGS if we are not 538*820c1a8dSHiroo HAYASHI dnl building with __ACK__. 539*820c1a8dSHiroo HAYASHI if test $gl_cv_c_amsterdam_compiler = yes; then 540*820c1a8dSHiroo HAYASHI if test -z "$AR"; then 541*820c1a8dSHiroo HAYASHI AR='cc -c.a' 542*820c1a8dSHiroo HAYASHI fi 543*820c1a8dSHiroo HAYASHI if test -z "$ARFLAGS"; then 544*820c1a8dSHiroo HAYASHI ARFLAGS='-o' 545*820c1a8dSHiroo HAYASHI fi 546*820c1a8dSHiroo HAYASHI else 547*820c1a8dSHiroo HAYASHI dnl AM_PROG_AR was added in automake v1.11.2. AM_PROG_AR does not AC_SUBST 548*820c1a8dSHiroo HAYASHI dnl ARFLAGS variable (it is filed into Makefile.in directly by automake 549*820c1a8dSHiroo HAYASHI dnl script on-demand, if not specified by ./configure of course). 550*820c1a8dSHiroo HAYASHI dnl Don't AC_REQUIRE the AM_PROG_AR otherwise the code for __ACK__ above 551*820c1a8dSHiroo HAYASHI dnl will be ignored. Also, pay attention to call AM_PROG_AR in else block 552*820c1a8dSHiroo HAYASHI dnl because AM_PROG_AR is written so it could re-set AR variable even for 553*820c1a8dSHiroo HAYASHI dnl __ACK__. It may seem like its easier to avoid calling the macro here, 554*820c1a8dSHiroo HAYASHI dnl but we need to AC_SUBST both AR/ARFLAGS (thus those must have some good 555*820c1a8dSHiroo HAYASHI dnl default value and automake should usually know them). 556*820c1a8dSHiroo HAYASHI dnl 557*820c1a8dSHiroo HAYASHI dnl The '][' hides this use from 'aclocal'. 558*820c1a8dSHiroo HAYASHI m4_ifdef([A][M_PROG_AR], [A][M_PROG_AR], [:]) 559*820c1a8dSHiroo HAYASHI fi 560*820c1a8dSHiroo HAYASHI 561*820c1a8dSHiroo HAYASHI dnl In case the code above has not helped with setting AR/ARFLAGS, use 562*820c1a8dSHiroo HAYASHI dnl Automake-documented default values for AR and ARFLAGS, but prefer 563*820c1a8dSHiroo HAYASHI dnl ${host}-ar over ar (useful for cross-compiling). 564*820c1a8dSHiroo HAYASHI AC_CHECK_TOOL([AR], [ar], [ar]) 565*820c1a8dSHiroo HAYASHI if test -z "$ARFLAGS"; then 566*820c1a8dSHiroo HAYASHI ARFLAGS='cr' 567*820c1a8dSHiroo HAYASHI fi 568*820c1a8dSHiroo HAYASHI 569*820c1a8dSHiroo HAYASHI AC_SUBST([AR]) 570*820c1a8dSHiroo HAYASHI AC_SUBST([ARFLAGS]) 571*820c1a8dSHiroo HAYASHI if test -z "$RANLIB"; then 572*820c1a8dSHiroo HAYASHI if test $gl_cv_c_amsterdam_compiler = yes; then 573*820c1a8dSHiroo HAYASHI RANLIB=':' 574*820c1a8dSHiroo HAYASHI else 575*820c1a8dSHiroo HAYASHI dnl Use the ranlib program if it is available. 576*820c1a8dSHiroo HAYASHI AC_PROG_RANLIB 577*820c1a8dSHiroo HAYASHI fi 578*820c1a8dSHiroo HAYASHI fi 579*820c1a8dSHiroo HAYASHI AC_SUBST([RANLIB]) 580*820c1a8dSHiroo HAYASHI]) 581*820c1a8dSHiroo HAYASHI 582*820c1a8dSHiroo HAYASHI# AC_C_RESTRICT 583*820c1a8dSHiroo HAYASHI# This definition is copied from post-2.70 Autoconf and overrides the 584*820c1a8dSHiroo HAYASHI# AC_C_RESTRICT macro from autoconf 2.60..2.70. 585*820c1a8dSHiroo HAYASHIm4_version_prereq([2.70.1], [], [ 586*820c1a8dSHiroo HAYASHIAC_DEFUN([AC_C_RESTRICT], 587*820c1a8dSHiroo HAYASHI[AC_CACHE_CHECK([for C/C++ restrict keyword], [ac_cv_c_restrict], 588*820c1a8dSHiroo HAYASHI [ac_cv_c_restrict=no 589*820c1a8dSHiroo HAYASHI # Put '__restrict__' first, to avoid problems with glibc and non-GCC; see: 590*820c1a8dSHiroo HAYASHI # https://lists.gnu.org/archive/html/bug-autoconf/2016-02/msg00006.html 591*820c1a8dSHiroo HAYASHI # Put 'restrict' last, because C++ lacks it. 592*820c1a8dSHiroo HAYASHI for ac_kw in __restrict__ __restrict _Restrict restrict; do 593*820c1a8dSHiroo HAYASHI AC_COMPILE_IFELSE( 594*820c1a8dSHiroo HAYASHI [AC_LANG_PROGRAM( 595*820c1a8dSHiroo HAYASHI [[typedef int *int_ptr; 596*820c1a8dSHiroo HAYASHI int foo (int_ptr $ac_kw ip) { return ip[0]; } 597*820c1a8dSHiroo HAYASHI int bar (int [$ac_kw]); /* Catch GCC bug 14050. */ 598*820c1a8dSHiroo HAYASHI int bar (int ip[$ac_kw]) { return ip[0]; } 599*820c1a8dSHiroo HAYASHI ]], 600*820c1a8dSHiroo HAYASHI [[int s[1]; 601*820c1a8dSHiroo HAYASHI int *$ac_kw t = s; 602*820c1a8dSHiroo HAYASHI t[0] = 0; 603*820c1a8dSHiroo HAYASHI return foo (t) + bar (t); 604*820c1a8dSHiroo HAYASHI ]])], 605*820c1a8dSHiroo HAYASHI [ac_cv_c_restrict=$ac_kw]) 606*820c1a8dSHiroo HAYASHI test "$ac_cv_c_restrict" != no && break 607*820c1a8dSHiroo HAYASHI done 608*820c1a8dSHiroo HAYASHI ]) 609*820c1a8dSHiroo HAYASHI AH_VERBATIM([restrict], 610*820c1a8dSHiroo HAYASHI[/* Define to the equivalent of the C99 'restrict' keyword, or to 611*820c1a8dSHiroo HAYASHI nothing if this is not supported. Do not define if restrict is 612*820c1a8dSHiroo HAYASHI supported only directly. */ 613*820c1a8dSHiroo HAYASHI#undef restrict 614*820c1a8dSHiroo HAYASHI/* Work around a bug in older versions of Sun C++, which did not 615*820c1a8dSHiroo HAYASHI #define __restrict__ or support _Restrict or __restrict__ 616*820c1a8dSHiroo HAYASHI even though the corresponding Sun C compiler ended up with 617*820c1a8dSHiroo HAYASHI "#define restrict _Restrict" or "#define restrict __restrict__" 618*820c1a8dSHiroo HAYASHI in the previous line. This workaround can be removed once 619*820c1a8dSHiroo HAYASHI we assume Oracle Developer Studio 12.5 (2016) or later. */ 620*820c1a8dSHiroo HAYASHI#if defined __SUNPRO_CC && !defined __RESTRICT && !defined __restrict__ 621*820c1a8dSHiroo HAYASHI# define _Restrict 622*820c1a8dSHiroo HAYASHI# define __restrict__ 623*820c1a8dSHiroo HAYASHI#endif]) 624*820c1a8dSHiroo HAYASHI case $ac_cv_c_restrict in 625*820c1a8dSHiroo HAYASHI restrict) ;; 626*820c1a8dSHiroo HAYASHI no) AC_DEFINE([restrict], []) ;; 627*820c1a8dSHiroo HAYASHI *) AC_DEFINE_UNQUOTED([restrict], [$ac_cv_c_restrict]) ;; 628*820c1a8dSHiroo HAYASHI esac 629*820c1a8dSHiroo HAYASHI])# AC_C_RESTRICT 630*820c1a8dSHiroo HAYASHI]) 631*820c1a8dSHiroo HAYASHI 632*820c1a8dSHiroo HAYASHI# gl_BIGENDIAN 633*820c1a8dSHiroo HAYASHI# is like AC_C_BIGENDIAN, except that it can be AC_REQUIREd. 634*820c1a8dSHiroo HAYASHI# Note that AC_REQUIRE([AC_C_BIGENDIAN]) does not work reliably because some 635*820c1a8dSHiroo HAYASHI# macros invoke AC_C_BIGENDIAN with arguments. 636*820c1a8dSHiroo HAYASHIAC_DEFUN([gl_BIGENDIAN], 637*820c1a8dSHiroo HAYASHI[ 638*820c1a8dSHiroo HAYASHI AC_C_BIGENDIAN 639*820c1a8dSHiroo HAYASHI]) 640*820c1a8dSHiroo HAYASHI 641*820c1a8dSHiroo HAYASHI# A temporary file descriptor. 642*820c1a8dSHiroo HAYASHI# Must be less than 10, because dash 0.5.8 does not support redirections 643*820c1a8dSHiroo HAYASHI# with multi-digit file descriptors. 644*820c1a8dSHiroo HAYASHIm4_define([GL_TMP_FD], 9) 645*820c1a8dSHiroo HAYASHI 646*820c1a8dSHiroo HAYASHI# gl_SILENT(command) 647*820c1a8dSHiroo HAYASHI# executes command, but without the normal configure output. 648*820c1a8dSHiroo HAYASHI# This is useful when you want to invoke AC_CACHE_CHECK (or AC_CHECK_FUNC etc.) 649*820c1a8dSHiroo HAYASHI# inside another AC_CACHE_CHECK. 650*820c1a8dSHiroo HAYASHIAC_DEFUN([gl_SILENT], 651*820c1a8dSHiroo HAYASHI[ 652*820c1a8dSHiroo HAYASHI exec GL_TMP_FD>&AS_MESSAGE_FD AS_MESSAGE_FD>/dev/null 653*820c1a8dSHiroo HAYASHI $1 654*820c1a8dSHiroo HAYASHI exec AS_MESSAGE_FD>&GL_TMP_FD GL_TMP_FD>&- 655*820c1a8dSHiroo HAYASHI]) 656*820c1a8dSHiroo HAYASHI 657*820c1a8dSHiroo HAYASHI# gl_CACHE_VAL_SILENT(cache-id, command-to-set-it) 658*820c1a8dSHiroo HAYASHI# is like AC_CACHE_VAL(cache-id, command-to-set-it), except that it does not 659*820c1a8dSHiroo HAYASHI# output a spurious "(cached)" mark in the midst of other configure output. 660*820c1a8dSHiroo HAYASHI# This macro should be used instead of AC_CACHE_VAL when it is not surrounded 661*820c1a8dSHiroo HAYASHI# by an AC_MSG_CHECKING/AC_MSG_RESULT pair. 662*820c1a8dSHiroo HAYASHIAC_DEFUN([gl_CACHE_VAL_SILENT], 663*820c1a8dSHiroo HAYASHI[ 664*820c1a8dSHiroo HAYASHI gl_SILENT([ 665*820c1a8dSHiroo HAYASHI AC_CACHE_VAL([$1], [$2]) 666*820c1a8dSHiroo HAYASHI ]) 667*820c1a8dSHiroo HAYASHI]) 668*820c1a8dSHiroo HAYASHI 669*820c1a8dSHiroo HAYASHI# gl_CC_ALLOW_WARNINGS 670*820c1a8dSHiroo HAYASHI# sets and substitutes a variable GL_CFLAG_ALLOW_WARNINGS, to a $(CC) option 671*820c1a8dSHiroo HAYASHI# that reverts a preceding '-Werror' option, if available. 672*820c1a8dSHiroo HAYASHI# This is expected to be '-Wno-error' on gcc, clang (except clang/MSVC), xlclang 673*820c1a8dSHiroo HAYASHI# and empty otherwise. 674*820c1a8dSHiroo HAYASHIAC_DEFUN([gl_CC_ALLOW_WARNINGS], 675*820c1a8dSHiroo HAYASHI[ 676*820c1a8dSHiroo HAYASHI AC_REQUIRE([AC_PROG_CC]) 677*820c1a8dSHiroo HAYASHI AC_CACHE_CHECK([for C compiler option to allow warnings], 678*820c1a8dSHiroo HAYASHI [gl_cv_cc_wallow], 679*820c1a8dSHiroo HAYASHI [rm -f conftest* 680*820c1a8dSHiroo HAYASHI echo 'int dummy;' > conftest.c 681*820c1a8dSHiroo HAYASHI AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -c conftest.c 2>conftest1.err]) >/dev/null 682*820c1a8dSHiroo HAYASHI AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -Wno-error -c conftest.c 2>conftest2.err]) >/dev/null 683*820c1a8dSHiroo HAYASHI dnl Test the number of error output lines, because AIX xlc accepts the 684*820c1a8dSHiroo HAYASHI dnl option '-Wno-error', just to produce a warning 685*820c1a8dSHiroo HAYASHI dnl "Option -Wno-error was incorrectly specified. The option will be ignored." 686*820c1a8dSHiroo HAYASHI dnl afterwards. 687*820c1a8dSHiroo HAYASHI if test $? = 0 && test `wc -l < conftest1.err` = `wc -l < conftest2.err`; then 688*820c1a8dSHiroo HAYASHI gl_cv_cc_wallow='-Wno-error' 689*820c1a8dSHiroo HAYASHI else 690*820c1a8dSHiroo HAYASHI gl_cv_cc_wallow=none 691*820c1a8dSHiroo HAYASHI fi 692*820c1a8dSHiroo HAYASHI rm -f conftest* 693*820c1a8dSHiroo HAYASHI ]) 694*820c1a8dSHiroo HAYASHI case "$gl_cv_cc_wallow" in 695*820c1a8dSHiroo HAYASHI none) GL_CFLAG_ALLOW_WARNINGS='' ;; 696*820c1a8dSHiroo HAYASHI *) GL_CFLAG_ALLOW_WARNINGS="$gl_cv_cc_wallow" ;; 697*820c1a8dSHiroo HAYASHI esac 698*820c1a8dSHiroo HAYASHI AC_SUBST([GL_CFLAG_ALLOW_WARNINGS]) 699*820c1a8dSHiroo HAYASHI]) 700*820c1a8dSHiroo HAYASHI 701*820c1a8dSHiroo HAYASHI# gl_CXX_ALLOW_WARNINGS 702*820c1a8dSHiroo HAYASHI# sets and substitutes a variable GL_CXXFLAG_ALLOW_WARNINGS, to a $(CC) option 703*820c1a8dSHiroo HAYASHI# that reverts a preceding '-Werror' option, if available. 704*820c1a8dSHiroo HAYASHIAC_DEFUN([gl_CXX_ALLOW_WARNINGS], 705*820c1a8dSHiroo HAYASHI[ 706*820c1a8dSHiroo HAYASHI dnl Requires AC_PROG_CXX or gl_PROG_ANSI_CXX. 707*820c1a8dSHiroo HAYASHI if test -n "$CXX" && test "$CXX" != no; then 708*820c1a8dSHiroo HAYASHI AC_CACHE_CHECK([for C++ compiler option to allow warnings], 709*820c1a8dSHiroo HAYASHI [gl_cv_cxx_wallow], 710*820c1a8dSHiroo HAYASHI [rm -f conftest* 711*820c1a8dSHiroo HAYASHI echo 'int dummy;' > conftest.cc 712*820c1a8dSHiroo HAYASHI AC_TRY_COMMAND([${CXX-c++} $CXXFLAGS $CPPFLAGS -c conftest.cc 2>conftest1.err]) >/dev/null 713*820c1a8dSHiroo HAYASHI AC_TRY_COMMAND([${CXX-c++} $CXXFLAGS $CPPFLAGS -Wno-error -c conftest.cc 2>conftest2.err]) >/dev/null 714*820c1a8dSHiroo HAYASHI dnl Test the number of error output lines, because AIX xlC accepts the 715*820c1a8dSHiroo HAYASHI dnl option '-Wno-error', just to produce a warning 716*820c1a8dSHiroo HAYASHI dnl "Option -Wno-error was incorrectly specified. The option will be ignored." 717*820c1a8dSHiroo HAYASHI dnl afterwards. 718*820c1a8dSHiroo HAYASHI if test $? = 0 && test `wc -l < conftest1.err` = `wc -l < conftest2.err`; then 719*820c1a8dSHiroo HAYASHI gl_cv_cxx_wallow='-Wno-error' 720*820c1a8dSHiroo HAYASHI else 721*820c1a8dSHiroo HAYASHI gl_cv_cxx_wallow=none 722*820c1a8dSHiroo HAYASHI fi 723*820c1a8dSHiroo HAYASHI rm -f conftest* 724*820c1a8dSHiroo HAYASHI ]) 725*820c1a8dSHiroo HAYASHI case "$gl_cv_cxx_wallow" in 726*820c1a8dSHiroo HAYASHI none) GL_CXXFLAG_ALLOW_WARNINGS='' ;; 727*820c1a8dSHiroo HAYASHI *) GL_CXXFLAG_ALLOW_WARNINGS="$gl_cv_cxx_wallow" ;; 728*820c1a8dSHiroo HAYASHI esac 729*820c1a8dSHiroo HAYASHI else 730*820c1a8dSHiroo HAYASHI GL_CXXFLAG_ALLOW_WARNINGS='' 731*820c1a8dSHiroo HAYASHI fi 732*820c1a8dSHiroo HAYASHI AC_SUBST([GL_CXXFLAG_ALLOW_WARNINGS]) 733*820c1a8dSHiroo HAYASHI]) 734*820c1a8dSHiroo HAYASHI 735*820c1a8dSHiroo HAYASHIdnl Expands to some code for use in .c programs that, on native Windows, defines 736*820c1a8dSHiroo HAYASHIdnl the Microsoft deprecated alias function names to the underscore-prefixed 737*820c1a8dSHiroo HAYASHIdnl actual function names. With this macro, these function names are available 738*820c1a8dSHiroo HAYASHIdnl without linking with '-loldnames' and without generating warnings. 739*820c1a8dSHiroo HAYASHIdnl Usage: Use it after all system header files are included. 740*820c1a8dSHiroo HAYASHIdnl #include <...> 741*820c1a8dSHiroo HAYASHIdnl #include <...> 742*820c1a8dSHiroo HAYASHIdnl ]GL_MDA_DEFINES[ 743*820c1a8dSHiroo HAYASHIdnl ... 744*820c1a8dSHiroo HAYASHIAC_DEFUN([GL_MDA_DEFINES],[ 745*820c1a8dSHiroo HAYASHIAC_REQUIRE([_GL_MDA_DEFINES]) 746*820c1a8dSHiroo HAYASHI[$gl_mda_defines] 747*820c1a8dSHiroo HAYASHI]) 748*820c1a8dSHiroo HAYASHIAC_DEFUN([_GL_MDA_DEFINES], 749*820c1a8dSHiroo HAYASHI[gl_mda_defines=' 750*820c1a8dSHiroo HAYASHI#if defined _WIN32 && !defined __CYGWIN__ 751*820c1a8dSHiroo HAYASHI#define access _access 752*820c1a8dSHiroo HAYASHI#define chdir _chdir 753*820c1a8dSHiroo HAYASHI#define chmod _chmod 754*820c1a8dSHiroo HAYASHI#define close _close 755*820c1a8dSHiroo HAYASHI#define creat _creat 756*820c1a8dSHiroo HAYASHI#define dup _dup 757*820c1a8dSHiroo HAYASHI#define dup2 _dup2 758*820c1a8dSHiroo HAYASHI#define ecvt _ecvt 759*820c1a8dSHiroo HAYASHI#define execl _execl 760*820c1a8dSHiroo HAYASHI#define execle _execle 761*820c1a8dSHiroo HAYASHI#define execlp _execlp 762*820c1a8dSHiroo HAYASHI#define execv _execv 763*820c1a8dSHiroo HAYASHI#define execve _execve 764*820c1a8dSHiroo HAYASHI#define execvp _execvp 765*820c1a8dSHiroo HAYASHI#define execvpe _execvpe 766*820c1a8dSHiroo HAYASHI#define fcloseall _fcloseall 767*820c1a8dSHiroo HAYASHI#define fcvt _fcvt 768*820c1a8dSHiroo HAYASHI#define fdopen _fdopen 769*820c1a8dSHiroo HAYASHI#define fileno _fileno 770*820c1a8dSHiroo HAYASHI#define gcvt _gcvt 771*820c1a8dSHiroo HAYASHI#define getcwd _getcwd 772*820c1a8dSHiroo HAYASHI#define getpid _getpid 773*820c1a8dSHiroo HAYASHI#define getw _getw 774*820c1a8dSHiroo HAYASHI#define isatty _isatty 775*820c1a8dSHiroo HAYASHI#define j0 _j0 776*820c1a8dSHiroo HAYASHI#define j1 _j1 777*820c1a8dSHiroo HAYASHI#define jn _jn 778*820c1a8dSHiroo HAYASHI#define lfind _lfind 779*820c1a8dSHiroo HAYASHI#define lsearch _lsearch 780*820c1a8dSHiroo HAYASHI#define lseek _lseek 781*820c1a8dSHiroo HAYASHI#define memccpy _memccpy 782*820c1a8dSHiroo HAYASHI#define mkdir _mkdir 783*820c1a8dSHiroo HAYASHI#define mktemp _mktemp 784*820c1a8dSHiroo HAYASHI#define open _open 785*820c1a8dSHiroo HAYASHI#define putenv _putenv 786*820c1a8dSHiroo HAYASHI#define putw _putw 787*820c1a8dSHiroo HAYASHI#define read _read 788*820c1a8dSHiroo HAYASHI#define rmdir _rmdir 789*820c1a8dSHiroo HAYASHI#define strdup _strdup 790*820c1a8dSHiroo HAYASHI#define swab _swab 791*820c1a8dSHiroo HAYASHI#define tempnam _tempnam 792*820c1a8dSHiroo HAYASHI#define tzset _tzset 793*820c1a8dSHiroo HAYASHI#define umask _umask 794*820c1a8dSHiroo HAYASHI#define unlink _unlink 795*820c1a8dSHiroo HAYASHI#define utime _utime 796*820c1a8dSHiroo HAYASHI#define wcsdup _wcsdup 797*820c1a8dSHiroo HAYASHI#define write _write 798*820c1a8dSHiroo HAYASHI#define y0 _y0 799*820c1a8dSHiroo HAYASHI#define y1 _y1 800*820c1a8dSHiroo HAYASHI#define yn _yn 801*820c1a8dSHiroo HAYASHI#endif 802*820c1a8dSHiroo HAYASHI' 803*820c1a8dSHiroo HAYASHI]) 804