1*820c1a8dSHiroo HAYASHI# serial 22 -*- Autoconf -*- 2*820c1a8dSHiroo HAYASHI# Enable extensions on systems that normally disable them. 3*820c1a8dSHiroo HAYASHI 4*820c1a8dSHiroo HAYASHI# Copyright (C) 2003, 2006-2021 Free Software Foundation, Inc. 5*820c1a8dSHiroo HAYASHI# This file is free software; the Free Software Foundation 6*820c1a8dSHiroo HAYASHI# gives unlimited permission to copy and/or distribute it, 7*820c1a8dSHiroo HAYASHI# with or without modifications, as long as this notice is preserved. 8*820c1a8dSHiroo HAYASHI 9*820c1a8dSHiroo HAYASHIdnl Define to empty for the benefit of Autoconf 2.69 and earlier, so that 10*820c1a8dSHiroo HAYASHIdnl AC_USE_SYSTEM_EXTENSIONS (below) can be used unchanged from Autoconf 2.70+. 11*820c1a8dSHiroo HAYASHIm4_ifndef([AC_CHECK_INCLUDES_DEFAULT], 12*820c1a8dSHiroo HAYASHI [AC_DEFUN([AC_CHECK_INCLUDES_DEFAULT], [])]) 13*820c1a8dSHiroo HAYASHI 14*820c1a8dSHiroo HAYASHI# This definition of AC_USE_SYSTEM_EXTENSIONS is stolen from git 15*820c1a8dSHiroo HAYASHI# Autoconf. Perhaps we can remove this once we can assume Autoconf 16*820c1a8dSHiroo HAYASHI# is recent-enough everywhere, but since Autoconf mutates rapidly 17*820c1a8dSHiroo HAYASHI# enough in this area it's likely we'll need to redefine 18*820c1a8dSHiroo HAYASHI# AC_USE_SYSTEM_EXTENSIONS for quite some time. 19*820c1a8dSHiroo HAYASHI 20*820c1a8dSHiroo HAYASHI# If autoconf reports a warning 21*820c1a8dSHiroo HAYASHI# warning: AC_COMPILE_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS 22*820c1a8dSHiroo HAYASHI# or warning: AC_RUN_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS 23*820c1a8dSHiroo HAYASHI# the fix is 24*820c1a8dSHiroo HAYASHI# 1) to ensure that AC_USE_SYSTEM_EXTENSIONS is never directly invoked 25*820c1a8dSHiroo HAYASHI# but always AC_REQUIREd, 26*820c1a8dSHiroo HAYASHI# 2) to ensure that for each occurrence of 27*820c1a8dSHiroo HAYASHI# AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) 28*820c1a8dSHiroo HAYASHI# or 29*820c1a8dSHiroo HAYASHI# AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) 30*820c1a8dSHiroo HAYASHI# the corresponding gnulib module description has 'extensions' among 31*820c1a8dSHiroo HAYASHI# its dependencies. This will ensure that the gl_USE_SYSTEM_EXTENSIONS 32*820c1a8dSHiroo HAYASHI# invocation occurs in gl_EARLY, not in gl_INIT. 33*820c1a8dSHiroo HAYASHI 34*820c1a8dSHiroo HAYASHIm4_version_prereq([2.70.1], [], [ 35*820c1a8dSHiroo HAYASHI 36*820c1a8dSHiroo HAYASHI# AC_USE_SYSTEM_EXTENSIONS 37*820c1a8dSHiroo HAYASHI# ------------------------ 38*820c1a8dSHiroo HAYASHI# Enable extensions on systems that normally disable them, 39*820c1a8dSHiroo HAYASHI# typically due to standards-conformance issues. 40*820c1a8dSHiroo HAYASHI# We unconditionally define as many of the known feature-enabling 41*820c1a8dSHiroo HAYASHI# as possible, reserving conditional behavior for macros that are 42*820c1a8dSHiroo HAYASHI# known to cause problems on some platforms (such as __EXTENSIONS__). 43*820c1a8dSHiroo HAYASHIAC_DEFUN_ONCE([AC_USE_SYSTEM_EXTENSIONS], 44*820c1a8dSHiroo HAYASHI[AC_BEFORE([$0], [AC_PREPROC_IFELSE])dnl 45*820c1a8dSHiroo HAYASHIAC_BEFORE([$0], [AC_COMPILE_IFELSE])dnl 46*820c1a8dSHiroo HAYASHIAC_BEFORE([$0], [AC_LINK_IFELSE])dnl 47*820c1a8dSHiroo HAYASHIAC_BEFORE([$0], [AC_RUN_IFELSE])dnl 48*820c1a8dSHiroo HAYASHIAC_BEFORE([$0], [AC_CHECK_INCLUDES_DEFAULT])dnl 49*820c1a8dSHiroo HAYASHIdnl #undef in AH_VERBATIM gets replaced with #define by AC_DEFINE. 50*820c1a8dSHiroo HAYASHIdnl Use a different key than __EXTENSIONS__, as that name broke existing 51*820c1a8dSHiroo HAYASHIdnl configure.ac when using autoheader 2.62. 52*820c1a8dSHiroo HAYASHIdnl The macros below are in alphabetical order ignoring leading _ or __ 53*820c1a8dSHiroo HAYASHIdnl prefixes. 54*820c1a8dSHiroo HAYASHIAH_VERBATIM([USE_SYSTEM_EXTENSIONS], 55*820c1a8dSHiroo HAYASHI[/* Enable extensions on AIX 3, Interix. */ 56*820c1a8dSHiroo HAYASHI#ifndef _ALL_SOURCE 57*820c1a8dSHiroo HAYASHI# undef _ALL_SOURCE 58*820c1a8dSHiroo HAYASHI#endif 59*820c1a8dSHiroo HAYASHI/* Enable general extensions on macOS. */ 60*820c1a8dSHiroo HAYASHI#ifndef _DARWIN_C_SOURCE 61*820c1a8dSHiroo HAYASHI# undef _DARWIN_C_SOURCE 62*820c1a8dSHiroo HAYASHI#endif 63*820c1a8dSHiroo HAYASHI/* Enable general extensions on Solaris. */ 64*820c1a8dSHiroo HAYASHI#ifndef __EXTENSIONS__ 65*820c1a8dSHiroo HAYASHI# undef __EXTENSIONS__ 66*820c1a8dSHiroo HAYASHI#endif 67*820c1a8dSHiroo HAYASHI/* Enable GNU extensions on systems that have them. */ 68*820c1a8dSHiroo HAYASHI#ifndef _GNU_SOURCE 69*820c1a8dSHiroo HAYASHI# undef _GNU_SOURCE 70*820c1a8dSHiroo HAYASHI#endif 71*820c1a8dSHiroo HAYASHI/* Enable X/Open compliant socket functions that do not require linking 72*820c1a8dSHiroo HAYASHI with -lxnet on HP-UX 11.11. */ 73*820c1a8dSHiroo HAYASHI#ifndef _HPUX_ALT_XOPEN_SOCKET_API 74*820c1a8dSHiroo HAYASHI# undef _HPUX_ALT_XOPEN_SOCKET_API 75*820c1a8dSHiroo HAYASHI#endif 76*820c1a8dSHiroo HAYASHI/* Identify the host operating system as Minix. 77*820c1a8dSHiroo HAYASHI This macro does not affect the system headers' behavior. 78*820c1a8dSHiroo HAYASHI A future release of Autoconf may stop defining this macro. */ 79*820c1a8dSHiroo HAYASHI#ifndef _MINIX 80*820c1a8dSHiroo HAYASHI# undef _MINIX 81*820c1a8dSHiroo HAYASHI#endif 82*820c1a8dSHiroo HAYASHI/* Enable general extensions on NetBSD. 83*820c1a8dSHiroo HAYASHI Enable NetBSD compatibility extensions on Minix. */ 84*820c1a8dSHiroo HAYASHI#ifndef _NETBSD_SOURCE 85*820c1a8dSHiroo HAYASHI# undef _NETBSD_SOURCE 86*820c1a8dSHiroo HAYASHI#endif 87*820c1a8dSHiroo HAYASHI/* Enable OpenBSD compatibility extensions on NetBSD. 88*820c1a8dSHiroo HAYASHI Oddly enough, this does nothing on OpenBSD. */ 89*820c1a8dSHiroo HAYASHI#ifndef _OPENBSD_SOURCE 90*820c1a8dSHiroo HAYASHI# undef _OPENBSD_SOURCE 91*820c1a8dSHiroo HAYASHI#endif 92*820c1a8dSHiroo HAYASHI/* Define to 1 if needed for POSIX-compatible behavior. */ 93*820c1a8dSHiroo HAYASHI#ifndef _POSIX_SOURCE 94*820c1a8dSHiroo HAYASHI# undef _POSIX_SOURCE 95*820c1a8dSHiroo HAYASHI#endif 96*820c1a8dSHiroo HAYASHI/* Define to 2 if needed for POSIX-compatible behavior. */ 97*820c1a8dSHiroo HAYASHI#ifndef _POSIX_1_SOURCE 98*820c1a8dSHiroo HAYASHI# undef _POSIX_1_SOURCE 99*820c1a8dSHiroo HAYASHI#endif 100*820c1a8dSHiroo HAYASHI/* Enable POSIX-compatible threading on Solaris. */ 101*820c1a8dSHiroo HAYASHI#ifndef _POSIX_PTHREAD_SEMANTICS 102*820c1a8dSHiroo HAYASHI# undef _POSIX_PTHREAD_SEMANTICS 103*820c1a8dSHiroo HAYASHI#endif 104*820c1a8dSHiroo HAYASHI/* Enable extensions specified by ISO/IEC TS 18661-5:2014. */ 105*820c1a8dSHiroo HAYASHI#ifndef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 106*820c1a8dSHiroo HAYASHI# undef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 107*820c1a8dSHiroo HAYASHI#endif 108*820c1a8dSHiroo HAYASHI/* Enable extensions specified by ISO/IEC TS 18661-1:2014. */ 109*820c1a8dSHiroo HAYASHI#ifndef __STDC_WANT_IEC_60559_BFP_EXT__ 110*820c1a8dSHiroo HAYASHI# undef __STDC_WANT_IEC_60559_BFP_EXT__ 111*820c1a8dSHiroo HAYASHI#endif 112*820c1a8dSHiroo HAYASHI/* Enable extensions specified by ISO/IEC TS 18661-2:2015. */ 113*820c1a8dSHiroo HAYASHI#ifndef __STDC_WANT_IEC_60559_DFP_EXT__ 114*820c1a8dSHiroo HAYASHI# undef __STDC_WANT_IEC_60559_DFP_EXT__ 115*820c1a8dSHiroo HAYASHI#endif 116*820c1a8dSHiroo HAYASHI/* Enable extensions specified by ISO/IEC TS 18661-4:2015. */ 117*820c1a8dSHiroo HAYASHI#ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__ 118*820c1a8dSHiroo HAYASHI# undef __STDC_WANT_IEC_60559_FUNCS_EXT__ 119*820c1a8dSHiroo HAYASHI#endif 120*820c1a8dSHiroo HAYASHI/* Enable extensions specified by ISO/IEC TS 18661-3:2015. */ 121*820c1a8dSHiroo HAYASHI#ifndef __STDC_WANT_IEC_60559_TYPES_EXT__ 122*820c1a8dSHiroo HAYASHI# undef __STDC_WANT_IEC_60559_TYPES_EXT__ 123*820c1a8dSHiroo HAYASHI#endif 124*820c1a8dSHiroo HAYASHI/* Enable extensions specified by ISO/IEC TR 24731-2:2010. */ 125*820c1a8dSHiroo HAYASHI#ifndef __STDC_WANT_LIB_EXT2__ 126*820c1a8dSHiroo HAYASHI# undef __STDC_WANT_LIB_EXT2__ 127*820c1a8dSHiroo HAYASHI#endif 128*820c1a8dSHiroo HAYASHI/* Enable extensions specified by ISO/IEC 24747:2009. */ 129*820c1a8dSHiroo HAYASHI#ifndef __STDC_WANT_MATH_SPEC_FUNCS__ 130*820c1a8dSHiroo HAYASHI# undef __STDC_WANT_MATH_SPEC_FUNCS__ 131*820c1a8dSHiroo HAYASHI#endif 132*820c1a8dSHiroo HAYASHI/* Enable extensions on HP NonStop. */ 133*820c1a8dSHiroo HAYASHI#ifndef _TANDEM_SOURCE 134*820c1a8dSHiroo HAYASHI# undef _TANDEM_SOURCE 135*820c1a8dSHiroo HAYASHI#endif 136*820c1a8dSHiroo HAYASHI/* Enable X/Open extensions. Define to 500 only if necessary 137*820c1a8dSHiroo HAYASHI to make mbstate_t available. */ 138*820c1a8dSHiroo HAYASHI#ifndef _XOPEN_SOURCE 139*820c1a8dSHiroo HAYASHI# undef _XOPEN_SOURCE 140*820c1a8dSHiroo HAYASHI#endif 141*820c1a8dSHiroo HAYASHI])dnl 142*820c1a8dSHiroo HAYASHI 143*820c1a8dSHiroo HAYASHI AC_REQUIRE([AC_CHECK_INCLUDES_DEFAULT])dnl 144*820c1a8dSHiroo HAYASHI _AC_CHECK_HEADER_ONCE([wchar.h]) 145*820c1a8dSHiroo HAYASHI _AC_CHECK_HEADER_ONCE([minix/config.h]) 146*820c1a8dSHiroo HAYASHI 147*820c1a8dSHiroo HAYASHIdnl Defining __EXTENSIONS__ may break the system headers on some systems. 148*820c1a8dSHiroo HAYASHIdnl (FIXME: Which ones?) 149*820c1a8dSHiroo HAYASHI AC_CACHE_CHECK([whether it is safe to define __EXTENSIONS__], 150*820c1a8dSHiroo HAYASHI [ac_cv_safe_to_define___extensions__], 151*820c1a8dSHiroo HAYASHI [AC_COMPILE_IFELSE( 152*820c1a8dSHiroo HAYASHI [AC_LANG_PROGRAM([[ 153*820c1a8dSHiroo HAYASHI# define __EXTENSIONS__ 1 154*820c1a8dSHiroo HAYASHI ]AC_INCLUDES_DEFAULT])], 155*820c1a8dSHiroo HAYASHI [ac_cv_safe_to_define___extensions__=yes], 156*820c1a8dSHiroo HAYASHI [ac_cv_safe_to_define___extensions__=no])]) 157*820c1a8dSHiroo HAYASHI 158*820c1a8dSHiroo HAYASHIdnl HP-UX 11.11 defines mbstate_t only if _XOPEN_SOURCE is defined to 159*820c1a8dSHiroo HAYASHIdnl 500, regardless of whether compiling with -Ae or -D_HPUX_SOURCE=1. 160*820c1a8dSHiroo HAYASHIdnl But defining _XOPEN_SOURCE may turn *off* extensions on platforms 161*820c1a8dSHiroo HAYASHIdnl not covered by turn-on-extensions macros (notably Dragonfly, Free, 162*820c1a8dSHiroo HAYASHIdnl and OpenBSD, which don't have any equivalent of _NETBSD_SOURCE) so 163*820c1a8dSHiroo HAYASHIdnl it should only be defined when necessary. 164*820c1a8dSHiroo HAYASHI AC_CACHE_CHECK([whether _XOPEN_SOURCE should be defined], 165*820c1a8dSHiroo HAYASHI [ac_cv_should_define__xopen_source], 166*820c1a8dSHiroo HAYASHI [ac_cv_should_define__xopen_source=no 167*820c1a8dSHiroo HAYASHI AS_IF([test $ac_cv_header_wchar_h = yes], 168*820c1a8dSHiroo HAYASHI [AC_COMPILE_IFELSE( 169*820c1a8dSHiroo HAYASHI [AC_LANG_PROGRAM([[ 170*820c1a8dSHiroo HAYASHI #include <wchar.h> 171*820c1a8dSHiroo HAYASHI mbstate_t x;]])], 172*820c1a8dSHiroo HAYASHI [], 173*820c1a8dSHiroo HAYASHI [AC_COMPILE_IFELSE( 174*820c1a8dSHiroo HAYASHI [AC_LANG_PROGRAM([[ 175*820c1a8dSHiroo HAYASHI #define _XOPEN_SOURCE 500 176*820c1a8dSHiroo HAYASHI #include <wchar.h> 177*820c1a8dSHiroo HAYASHI mbstate_t x;]])], 178*820c1a8dSHiroo HAYASHI [ac_cv_should_define__xopen_source=yes])])])]) 179*820c1a8dSHiroo HAYASHI 180*820c1a8dSHiroo HAYASHI AC_DEFINE([_ALL_SOURCE]) 181*820c1a8dSHiroo HAYASHI AC_DEFINE([_DARWIN_C_SOURCE]) 182*820c1a8dSHiroo HAYASHI AC_DEFINE([_GNU_SOURCE]) 183*820c1a8dSHiroo HAYASHI AC_DEFINE([_HPUX_ALT_XOPEN_SOCKET_API]) 184*820c1a8dSHiroo HAYASHI AC_DEFINE([_NETBSD_SOURCE]) 185*820c1a8dSHiroo HAYASHI AC_DEFINE([_OPENBSD_SOURCE]) 186*820c1a8dSHiroo HAYASHI AC_DEFINE([_POSIX_PTHREAD_SEMANTICS]) 187*820c1a8dSHiroo HAYASHI AC_DEFINE([__STDC_WANT_IEC_60559_ATTRIBS_EXT__]) 188*820c1a8dSHiroo HAYASHI AC_DEFINE([__STDC_WANT_IEC_60559_BFP_EXT__]) 189*820c1a8dSHiroo HAYASHI AC_DEFINE([__STDC_WANT_IEC_60559_DFP_EXT__]) 190*820c1a8dSHiroo HAYASHI AC_DEFINE([__STDC_WANT_IEC_60559_FUNCS_EXT__]) 191*820c1a8dSHiroo HAYASHI AC_DEFINE([__STDC_WANT_IEC_60559_TYPES_EXT__]) 192*820c1a8dSHiroo HAYASHI AC_DEFINE([__STDC_WANT_LIB_EXT2__]) 193*820c1a8dSHiroo HAYASHI AC_DEFINE([__STDC_WANT_MATH_SPEC_FUNCS__]) 194*820c1a8dSHiroo HAYASHI AC_DEFINE([_TANDEM_SOURCE]) 195*820c1a8dSHiroo HAYASHI AS_IF([test $ac_cv_header_minix_config_h = yes], 196*820c1a8dSHiroo HAYASHI [MINIX=yes 197*820c1a8dSHiroo HAYASHI AC_DEFINE([_MINIX]) 198*820c1a8dSHiroo HAYASHI AC_DEFINE([_POSIX_SOURCE]) 199*820c1a8dSHiroo HAYASHI AC_DEFINE([_POSIX_1_SOURCE], [2])], 200*820c1a8dSHiroo HAYASHI [MINIX=]) 201*820c1a8dSHiroo HAYASHI AS_IF([test $ac_cv_safe_to_define___extensions__ = yes], 202*820c1a8dSHiroo HAYASHI [AC_DEFINE([__EXTENSIONS__])]) 203*820c1a8dSHiroo HAYASHI AS_IF([test $ac_cv_should_define__xopen_source = yes], 204*820c1a8dSHiroo HAYASHI [AC_DEFINE([_XOPEN_SOURCE], [500])]) 205*820c1a8dSHiroo HAYASHI])# AC_USE_SYSTEM_EXTENSIONS 206*820c1a8dSHiroo HAYASHI]) 207*820c1a8dSHiroo HAYASHI 208*820c1a8dSHiroo HAYASHI# gl_USE_SYSTEM_EXTENSIONS 209*820c1a8dSHiroo HAYASHI# ------------------------ 210*820c1a8dSHiroo HAYASHI# Enable extensions on systems that normally disable them, 211*820c1a8dSHiroo HAYASHI# typically due to standards-conformance issues. 212*820c1a8dSHiroo HAYASHIAC_DEFUN_ONCE([gl_USE_SYSTEM_EXTENSIONS], 213*820c1a8dSHiroo HAYASHI[ 214*820c1a8dSHiroo HAYASHI AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) 215*820c1a8dSHiroo HAYASHI 216*820c1a8dSHiroo HAYASHI dnl On OpenBSD 6.8 with GCC, the include files contain a couple of 217*820c1a8dSHiroo HAYASHI dnl definitions that are only activated with an explicit -D_ISOC11_SOURCE. 218*820c1a8dSHiroo HAYASHI dnl That's because this version of GCC (4.2.1) supports the option 219*820c1a8dSHiroo HAYASHI dnl '-std=gnu99' but not the option '-std=gnu11'. 220*820c1a8dSHiroo HAYASHI AC_REQUIRE([AC_CANONICAL_HOST]) 221*820c1a8dSHiroo HAYASHI case "$host_os" in 222*820c1a8dSHiroo HAYASHI openbsd*) 223*820c1a8dSHiroo HAYASHI AC_DEFINE([_ISOC11_SOURCE], [1], 224*820c1a8dSHiroo HAYASHI [Define to enable the declarations of ISO C 11 types and functions.]) 225*820c1a8dSHiroo HAYASHI ;; 226*820c1a8dSHiroo HAYASHI esac 227*820c1a8dSHiroo HAYASHI]) 228