1*820c1a8dSHiroo HAYASHI /* System definitions for code taken from the GNU C Library 2*820c1a8dSHiroo HAYASHI 3*820c1a8dSHiroo HAYASHI Copyright 2017-2021 Free Software Foundation, Inc. 4*820c1a8dSHiroo HAYASHI 5*820c1a8dSHiroo HAYASHI This program is free software; you can redistribute it and/or 6*820c1a8dSHiroo HAYASHI modify it under the terms of the GNU Lesser General Public 7*820c1a8dSHiroo HAYASHI License as published by the Free Software Foundation; either 8*820c1a8dSHiroo HAYASHI version 2.1 of the License, or (at your option) any later version. 9*820c1a8dSHiroo HAYASHI 10*820c1a8dSHiroo HAYASHI This program is distributed in the hope that it will be useful, 11*820c1a8dSHiroo HAYASHI but WITHOUT ANY WARRANTY; without even the implied warranty of 12*820c1a8dSHiroo HAYASHI MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13*820c1a8dSHiroo HAYASHI Lesser General Public License for more details. 14*820c1a8dSHiroo HAYASHI 15*820c1a8dSHiroo HAYASHI You should have received a copy of the GNU Lesser General Public 16*820c1a8dSHiroo HAYASHI License along with this program; if not, see 17*820c1a8dSHiroo HAYASHI <https://www.gnu.org/licenses/>. */ 18*820c1a8dSHiroo HAYASHI 19*820c1a8dSHiroo HAYASHI /* Written by Paul Eggert. */ 20*820c1a8dSHiroo HAYASHI 21*820c1a8dSHiroo HAYASHI /* This is intended to be a good-enough substitute for glibc system 22*820c1a8dSHiroo HAYASHI macros like those defined in <sys/cdefs.h>, so that Gnulib code 23*820c1a8dSHiroo HAYASHI shared with glibc can do this as the first #include: 24*820c1a8dSHiroo HAYASHI 25*820c1a8dSHiroo HAYASHI #ifndef _LIBC 26*820c1a8dSHiroo HAYASHI # include <libc-config.h> 27*820c1a8dSHiroo HAYASHI #endif 28*820c1a8dSHiroo HAYASHI 29*820c1a8dSHiroo HAYASHI When compiled as part of glibc this is a no-op; when compiled as 30*820c1a8dSHiroo HAYASHI part of Gnulib this includes Gnulib's <config.h> and defines macros 31*820c1a8dSHiroo HAYASHI that glibc library code would normally assume. 32*820c1a8dSHiroo HAYASHI 33*820c1a8dSHiroo HAYASHI Note: This header file MUST NOT be included by public header files 34*820c1a8dSHiroo HAYASHI of Gnulib. */ 35*820c1a8dSHiroo HAYASHI 36*820c1a8dSHiroo HAYASHI #include <config.h> 37*820c1a8dSHiroo HAYASHI 38*820c1a8dSHiroo HAYASHI /* On glibc this includes <features.h> and <sys/cdefs.h> and #defines 39*820c1a8dSHiroo HAYASHI _FEATURES_H, __WORDSIZE, and __set_errno. On FreeBSD 11 and 40*820c1a8dSHiroo HAYASHI DragonFlyBSD 5.9 it includes <sys/cdefs.h> which defines __nonnull. 41*820c1a8dSHiroo HAYASHI Elsewhere it is harmless. */ 42*820c1a8dSHiroo HAYASHI #include <errno.h> 43*820c1a8dSHiroo HAYASHI 44*820c1a8dSHiroo HAYASHI /* From glibc <errno.h>. */ 45*820c1a8dSHiroo HAYASHI #ifndef __set_errno 46*820c1a8dSHiroo HAYASHI # define __set_errno(val) (errno = (val)) 47*820c1a8dSHiroo HAYASHI #endif 48*820c1a8dSHiroo HAYASHI 49*820c1a8dSHiroo HAYASHI /* From glibc <features.h>. */ 50*820c1a8dSHiroo HAYASHI 51*820c1a8dSHiroo HAYASHI #ifndef __GNUC_PREREQ 52*820c1a8dSHiroo HAYASHI # if defined __GNUC__ && defined __GNUC_MINOR__ 53*820c1a8dSHiroo HAYASHI # define __GNUC_PREREQ(maj, min) ((maj) < __GNUC__ + ((min) <= __GNUC_MINOR__)) 54*820c1a8dSHiroo HAYASHI # else 55*820c1a8dSHiroo HAYASHI # define __GNUC_PREREQ(maj, min) 0 56*820c1a8dSHiroo HAYASHI # endif 57*820c1a8dSHiroo HAYASHI #endif 58*820c1a8dSHiroo HAYASHI 59*820c1a8dSHiroo HAYASHI #ifndef __glibc_clang_prereq 60*820c1a8dSHiroo HAYASHI # if defined __clang_major__ && defined __clang_minor__ 61*820c1a8dSHiroo HAYASHI # ifdef __apple_build_version__ 62*820c1a8dSHiroo HAYASHI /* Apple for some reason renumbers __clang_major__ and __clang_minor__. 63*820c1a8dSHiroo HAYASHI Gnulib code uses only __glibc_clang_prereq (3, 5); map it to 64*820c1a8dSHiroo HAYASHI 6000000 <= __apple_build_version__. Support for other calls to 65*820c1a8dSHiroo HAYASHI __glibc_clang_prereq can be added here as needed. */ 66*820c1a8dSHiroo HAYASHI # define __glibc_clang_prereq(maj, min) \ 67*820c1a8dSHiroo HAYASHI ((maj) == 3 && (min) == 5 ? 6000000 <= __apple_build_version__ : 0) 68*820c1a8dSHiroo HAYASHI # else 69*820c1a8dSHiroo HAYASHI # define __glibc_clang_prereq(maj, min) \ 70*820c1a8dSHiroo HAYASHI ((maj) < __clang_major__ + ((min) <= __clang_minor__)) 71*820c1a8dSHiroo HAYASHI # endif 72*820c1a8dSHiroo HAYASHI # else 73*820c1a8dSHiroo HAYASHI # define __glibc_clang_prereq(maj, min) 0 74*820c1a8dSHiroo HAYASHI # endif 75*820c1a8dSHiroo HAYASHI #endif 76*820c1a8dSHiroo HAYASHI 77*820c1a8dSHiroo HAYASHI #ifndef __attribute_nonnull__ 78*820c1a8dSHiroo HAYASHI /* <sys/cdefs.h> either does not exist, or is too old for Gnulib. 79*820c1a8dSHiroo HAYASHI Prepare to include <cdefs.h>, which is Gnulib's version of a 80*820c1a8dSHiroo HAYASHI more-recent glibc <sys/cdefs.h>. */ 81*820c1a8dSHiroo HAYASHI 82*820c1a8dSHiroo HAYASHI /* Define _FEATURES_H so that <cdefs.h> does not include <features.h>. */ 83*820c1a8dSHiroo HAYASHI # ifndef _FEATURES_H 84*820c1a8dSHiroo HAYASHI # define _FEATURES_H 1 85*820c1a8dSHiroo HAYASHI # endif 86*820c1a8dSHiroo HAYASHI /* Define __GNULIB_CDEFS so that <cdefs.h> does not attempt to include 87*820c1a8dSHiroo HAYASHI nonexistent files. */ 88*820c1a8dSHiroo HAYASHI # define __GNULIB_CDEFS 89*820c1a8dSHiroo HAYASHI /* Undef the macros unconditionally defined by our copy of glibc 90*820c1a8dSHiroo HAYASHI <sys/cdefs.h>, so that they do not clash with any system-defined 91*820c1a8dSHiroo HAYASHI versions. */ 92*820c1a8dSHiroo HAYASHI # undef _SYS_CDEFS_H 93*820c1a8dSHiroo HAYASHI # undef __ASMNAME 94*820c1a8dSHiroo HAYASHI # undef __ASMNAME2 95*820c1a8dSHiroo HAYASHI # undef __BEGIN_DECLS 96*820c1a8dSHiroo HAYASHI # undef __CONCAT 97*820c1a8dSHiroo HAYASHI # undef __END_DECLS 98*820c1a8dSHiroo HAYASHI # undef __HAVE_GENERIC_SELECTION 99*820c1a8dSHiroo HAYASHI # undef __LDBL_COMPAT 100*820c1a8dSHiroo HAYASHI # undef __LDBL_REDIR 101*820c1a8dSHiroo HAYASHI # undef __LDBL_REDIR1 102*820c1a8dSHiroo HAYASHI # undef __LDBL_REDIR1_DECL 103*820c1a8dSHiroo HAYASHI # undef __LDBL_REDIR1_NTH 104*820c1a8dSHiroo HAYASHI # undef __LDBL_REDIR2_DECL 105*820c1a8dSHiroo HAYASHI # undef __LDBL_REDIR_DECL 106*820c1a8dSHiroo HAYASHI # undef __LDBL_REDIR_NTH 107*820c1a8dSHiroo HAYASHI # undef __LEAF 108*820c1a8dSHiroo HAYASHI # undef __LEAF_ATTR 109*820c1a8dSHiroo HAYASHI # undef __NTH 110*820c1a8dSHiroo HAYASHI # undef __NTHNL 111*820c1a8dSHiroo HAYASHI # undef __REDIRECT 112*820c1a8dSHiroo HAYASHI # undef __REDIRECT_LDBL 113*820c1a8dSHiroo HAYASHI # undef __REDIRECT_NTH 114*820c1a8dSHiroo HAYASHI # undef __REDIRECT_NTHNL 115*820c1a8dSHiroo HAYASHI # undef __REDIRECT_NTH_LDBL 116*820c1a8dSHiroo HAYASHI # undef __STRING 117*820c1a8dSHiroo HAYASHI # undef __THROW 118*820c1a8dSHiroo HAYASHI # undef __THROWNL 119*820c1a8dSHiroo HAYASHI # undef __attr_access 120*820c1a8dSHiroo HAYASHI # undef __attribute__ 121*820c1a8dSHiroo HAYASHI # undef __attribute_alloc_size__ 122*820c1a8dSHiroo HAYASHI # undef __attribute_artificial__ 123*820c1a8dSHiroo HAYASHI # undef __attribute_const__ 124*820c1a8dSHiroo HAYASHI # undef __attribute_deprecated__ 125*820c1a8dSHiroo HAYASHI # undef __attribute_deprecated_msg__ 126*820c1a8dSHiroo HAYASHI # undef __attribute_format_arg__ 127*820c1a8dSHiroo HAYASHI # undef __attribute_format_strfmon__ 128*820c1a8dSHiroo HAYASHI # undef __attribute_malloc__ 129*820c1a8dSHiroo HAYASHI # undef __attribute_noinline__ 130*820c1a8dSHiroo HAYASHI # undef __attribute_nonstring__ 131*820c1a8dSHiroo HAYASHI # undef __attribute_pure__ 132*820c1a8dSHiroo HAYASHI # undef __attribute_returns_twice__ 133*820c1a8dSHiroo HAYASHI # undef __attribute_used__ 134*820c1a8dSHiroo HAYASHI # undef __attribute_warn_unused_result__ 135*820c1a8dSHiroo HAYASHI # undef __bos 136*820c1a8dSHiroo HAYASHI # undef __bos0 137*820c1a8dSHiroo HAYASHI # undef __errordecl 138*820c1a8dSHiroo HAYASHI # undef __extension__ 139*820c1a8dSHiroo HAYASHI # undef __extern_always_inline 140*820c1a8dSHiroo HAYASHI # undef __extern_inline 141*820c1a8dSHiroo HAYASHI # undef __flexarr 142*820c1a8dSHiroo HAYASHI # undef __fortify_function 143*820c1a8dSHiroo HAYASHI # undef __glibc_c99_flexarr_available 144*820c1a8dSHiroo HAYASHI # undef __glibc_has_attribute 145*820c1a8dSHiroo HAYASHI # undef __glibc_has_builtin 146*820c1a8dSHiroo HAYASHI # undef __glibc_has_extension 147*820c1a8dSHiroo HAYASHI # undef __glibc_macro_warning 148*820c1a8dSHiroo HAYASHI # undef __glibc_macro_warning1 149*820c1a8dSHiroo HAYASHI # undef __glibc_objsize 150*820c1a8dSHiroo HAYASHI # undef __glibc_objsize0 151*820c1a8dSHiroo HAYASHI # undef __glibc_unlikely 152*820c1a8dSHiroo HAYASHI # undef __inline 153*820c1a8dSHiroo HAYASHI # undef __ptr_t 154*820c1a8dSHiroo HAYASHI # undef __restrict 155*820c1a8dSHiroo HAYASHI # undef __restrict_arr 156*820c1a8dSHiroo HAYASHI # undef __va_arg_pack 157*820c1a8dSHiroo HAYASHI # undef __va_arg_pack_len 158*820c1a8dSHiroo HAYASHI # undef __warnattr 159*820c1a8dSHiroo HAYASHI 160*820c1a8dSHiroo HAYASHI /* Include our copy of glibc <sys/cdefs.h>. */ 161*820c1a8dSHiroo HAYASHI # include <cdefs.h> 162*820c1a8dSHiroo HAYASHI 163*820c1a8dSHiroo HAYASHI /* <cdefs.h> __inline is too pessimistic for non-GCC. */ 164*820c1a8dSHiroo HAYASHI # undef __inline 165*820c1a8dSHiroo HAYASHI # ifndef HAVE___INLINE 166*820c1a8dSHiroo HAYASHI # if 199901 <= __STDC_VERSION__ || defined inline 167*820c1a8dSHiroo HAYASHI # define __inline inline 168*820c1a8dSHiroo HAYASHI # else 169*820c1a8dSHiroo HAYASHI # define __inline 170*820c1a8dSHiroo HAYASHI # endif 171*820c1a8dSHiroo HAYASHI # endif 172*820c1a8dSHiroo HAYASHI 173*820c1a8dSHiroo HAYASHI #endif /* defined __glibc_likely */ 174*820c1a8dSHiroo HAYASHI 175*820c1a8dSHiroo HAYASHI 176*820c1a8dSHiroo HAYASHI /* A substitute for glibc <libc-symbols.h>, good enough for Gnulib. */ 177*820c1a8dSHiroo HAYASHI #define attribute_hidden 178*820c1a8dSHiroo HAYASHI #define libc_hidden_proto(name) 179*820c1a8dSHiroo HAYASHI #define libc_hidden_def(name) 180*820c1a8dSHiroo HAYASHI #define libc_hidden_weak(name) 181*820c1a8dSHiroo HAYASHI #define libc_hidden_ver(local, name) 182*820c1a8dSHiroo HAYASHI #define strong_alias(name, aliasname) 183*820c1a8dSHiroo HAYASHI #define weak_alias(name, aliasname) 184*820c1a8dSHiroo HAYASHI 185*820c1a8dSHiroo HAYASHI /* A substitute for glibc <shlib-compat.h>, good enough for Gnulib. */ 186*820c1a8dSHiroo HAYASHI #define SHLIB_COMPAT(lib, introduced, obsoleted) 0 187*820c1a8dSHiroo HAYASHI #define compat_symbol(lib, local, symbol, version) extern int dummy 188*820c1a8dSHiroo HAYASHI #define versioned_symbol(lib, local, symbol, version) extern int dummy 189