1 /* Handle feature test macros at the start of a header. 2 Copyright (C) 2016-2022 Free Software Foundation, Inc. 3 This file is part of the GNU C Library. 4 5 The GNU C Library is free software; you can redistribute it and/or 6 modify it under the terms of the GNU Lesser General Public 7 License as published by the Free Software Foundation; either 8 version 2.1 of the License, or (at your option) any later version. 9 10 The GNU C Library is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 Lesser General Public License for more details. 14 15 You should have received a copy of the GNU Lesser General Public 16 License along with the GNU C Library; if not, see 17 <https://www.gnu.org/licenses/>. */ 18 19 /* This header is internal to glibc and should not be included outside 20 of glibc headers. Headers including it must define 21 __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION first. This header 22 cannot have multiple include guards because ISO C feature test 23 macros depend on the definition of the macro when an affected 24 header is included, not when the first system header is 25 included. */ 26 27 #ifndef __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION 28 # error "Never include <bits/libc-header-start.h> directly." 29 #endif 30 31 #undef __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION 32 33 #include <features.h> 34 35 /* ISO/IEC TR 24731-2:2010 defines the __STDC_WANT_LIB_EXT2__ 36 macro. */ 37 #undef __GLIBC_USE_LIB_EXT2 38 #if (defined __USE_GNU \ 39 || (defined __STDC_WANT_LIB_EXT2__ && __STDC_WANT_LIB_EXT2__ > 0)) 40 # define __GLIBC_USE_LIB_EXT2 1 41 #else 42 # define __GLIBC_USE_LIB_EXT2 0 43 #endif 44 45 /* ISO/IEC TS 18661-1:2014 defines the __STDC_WANT_IEC_60559_BFP_EXT__ 46 macro. Most but not all symbols enabled by that macro in TS 47 18661-1 are enabled unconditionally in C2X. In C2X, the symbols in 48 Annex F still require a new feature test macro 49 __STDC_WANT_IEC_60559_EXT__ instead (C2X does not define 50 __STDC_WANT_IEC_60559_BFP_EXT__), while a few features from TS 51 18661-1 are not included in C2X (and thus should depend on 52 __STDC_WANT_IEC_60559_BFP_EXT__ even when C2X features are 53 enabled). 54 55 __GLIBC_USE (IEC_60559_BFP_EXT) controls those features from TS 56 18661-1 not included in C2X. 57 58 __GLIBC_USE (IEC_60559_BFP_EXT_C2X) controls those features from TS 59 18661-1 that are also included in C2X (with no feature test macro 60 required in C2X). 61 62 __GLIBC_USE (IEC_60559_EXT) controls those features from TS 18661-1 63 that are included in C2X but conditional on 64 __STDC_WANT_IEC_60559_EXT__. (There are currently no features 65 conditional on __STDC_WANT_IEC_60559_EXT__ that are not in TS 66 18661-1.) */ 67 #undef __GLIBC_USE_IEC_60559_BFP_EXT 68 #if defined __USE_GNU || defined __STDC_WANT_IEC_60559_BFP_EXT__ 69 # define __GLIBC_USE_IEC_60559_BFP_EXT 1 70 #else 71 # define __GLIBC_USE_IEC_60559_BFP_EXT 0 72 #endif 73 #undef __GLIBC_USE_IEC_60559_BFP_EXT_C2X 74 #if __GLIBC_USE (IEC_60559_BFP_EXT) || __GLIBC_USE (ISOC2X) 75 # define __GLIBC_USE_IEC_60559_BFP_EXT_C2X 1 76 #else 77 # define __GLIBC_USE_IEC_60559_BFP_EXT_C2X 0 78 #endif 79 #undef __GLIBC_USE_IEC_60559_EXT 80 #if __GLIBC_USE (IEC_60559_BFP_EXT) || defined __STDC_WANT_IEC_60559_EXT__ 81 # define __GLIBC_USE_IEC_60559_EXT 1 82 #else 83 # define __GLIBC_USE_IEC_60559_EXT 0 84 #endif 85 86 /* ISO/IEC TS 18661-4:2015 defines the 87 __STDC_WANT_IEC_60559_FUNCS_EXT__ macro. Other than the reduction 88 functions, the symbols from this TS are enabled unconditionally in 89 C2X. */ 90 #undef __GLIBC_USE_IEC_60559_FUNCS_EXT 91 #if defined __USE_GNU || defined __STDC_WANT_IEC_60559_FUNCS_EXT__ 92 # define __GLIBC_USE_IEC_60559_FUNCS_EXT 1 93 #else 94 # define __GLIBC_USE_IEC_60559_FUNCS_EXT 0 95 #endif 96 #undef __GLIBC_USE_IEC_60559_FUNCS_EXT_C2X 97 #if __GLIBC_USE (IEC_60559_FUNCS_EXT) || __GLIBC_USE (ISOC2X) 98 # define __GLIBC_USE_IEC_60559_FUNCS_EXT_C2X 1 99 #else 100 # define __GLIBC_USE_IEC_60559_FUNCS_EXT_C2X 0 101 #endif 102 103 /* ISO/IEC TS 18661-3:2015 defines the 104 __STDC_WANT_IEC_60559_TYPES_EXT__ macro. */ 105 #undef __GLIBC_USE_IEC_60559_TYPES_EXT 106 #if defined __USE_GNU || defined __STDC_WANT_IEC_60559_TYPES_EXT__ 107 # define __GLIBC_USE_IEC_60559_TYPES_EXT 1 108 #else 109 # define __GLIBC_USE_IEC_60559_TYPES_EXT 0 110 #endif 111