libc-config.h 5.42 KB
Newer Older
1 2
/* System definitions for code taken from the GNU C Library

Paul Eggert's avatar
Paul Eggert committed
3
   Copyright 2017-2020 Free Software Foundation, Inc.
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57

   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public
   License as published by the Free Software Foundation; either
   version 3 of the License, or (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   General Public License for more details.

   You should have received a copy of the GNU General Public
   License along with this program; if not, see
   <https://www.gnu.org/licenses/>.  */

/* Written by Paul Eggert.  */

/* This is intended to be a good-enough substitute for glibc system
   macros like those defined in <sys/cdefs.h>, so that Gnulib code
   shared with glibc can do this as the first #include:

     #ifndef _LIBC
     # include <libc-config.h>
     #endif

   When compiled as part of glibc this is a no-op; when compiled as
   part of Gnulib this includes Gnulib's <config.h> and defines macros
   that glibc library code would normally assume.  */

#include <config.h>

/* On glibc this includes <features.h> and <sys/cdefs.h> and #defines
   _FEATURES_H, __WORDSIZE, and __set_errno.  On FreeBSD 11 it
   includes <sys/cdefs.h> which defines __nonnull.  Elsewhere it
   is harmless.  */
#include <errno.h>

/* From glibc <errno.h>.  */
#ifndef __set_errno
# define __set_errno(val) (errno = (val))
#endif

/* From glibc <features.h>.  */

#ifndef __GNUC_PREREQ
# if defined __GNUC__ && defined __GNUC_MINOR__
#  define __GNUC_PREREQ(maj, min) ((maj) < __GNUC__ + ((min) <= __GNUC_MINOR__))
# else
#  define __GNUC_PREREQ(maj, min) 0
# endif
#endif

#ifndef __glibc_clang_prereq
# if defined __clang_major__ && defined __clang_minor__
Paul Eggert's avatar
Paul Eggert committed
58 59 60 61 62 63 64 65 66 67 68
#  ifdef __apple_build_version__
/* Apple for some reason renumbers __clang_major__ and __clang_minor__.
   Gnulib code uses only __glibc_clang_prereq (3, 5); map it to
   6000000 <= __apple_build_version__.  Support for other calls to
   __glibc_clang_prereq can be added here as needed.  */
#   define __glibc_clang_prereq(maj, min) \
      ((maj) == 3 && (min) == 5 ? 6000000 <= __apple_build_version__ : 0)
#  else
#   define __glibc_clang_prereq(maj, min) \
      ((maj) < __clang_major__ + ((min) <= __clang_minor__))
#  endif
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182
# else
#  define __glibc_clang_prereq(maj, min) 0
# endif
#endif


/* Prepare to include <cdefs.h>, which is our copy of glibc
   <sys/cdefs.h>.  */

/* Define _FEATURES_H so that <cdefs.h> does not include <features.h>.  */
#ifndef _FEATURES_H
# define _FEATURES_H 1
#endif
/* Define __WORDSIZE so that <cdefs.h> does not attempt to include
   nonexistent files.  Make it a syntax error, since Gnulib does not
   use __WORDSIZE now, and if Gnulib uses it later the syntax error
   will let us know that __WORDSIZE needs configuring.  */
#ifndef __WORDSIZE
# define __WORDSIZE %%%
#endif
/* Undef the macros unconditionally defined by our copy of glibc
   <sys/cdefs.h>, so that they do not clash with any system-defined
   versions.  */
#undef _SYS_CDEFS_H
#undef __ASMNAME
#undef __ASMNAME2
#undef __BEGIN_DECLS
#undef __CONCAT
#undef __END_DECLS
#undef __HAVE_GENERIC_SELECTION
#undef __LDBL_COMPAT
#undef __LDBL_REDIR
#undef __LDBL_REDIR1
#undef __LDBL_REDIR1_DECL
#undef __LDBL_REDIR1_NTH
#undef __LDBL_REDIR_DECL
#undef __LDBL_REDIR_NTH
#undef __LEAF
#undef __LEAF_ATTR
#undef __NTH
#undef __NTHNL
#undef __P
#undef __PMT
#undef __REDIRECT
#undef __REDIRECT_LDBL
#undef __REDIRECT_NTH
#undef __REDIRECT_NTHNL
#undef __REDIRECT_NTH_LDBL
#undef __STRING
#undef __THROW
#undef __THROWNL
#undef __always_inline
#undef __attribute__
#undef __attribute_alloc_size__
#undef __attribute_artificial__
#undef __attribute_const__
#undef __attribute_deprecated__
#undef __attribute_deprecated_msg__
#undef __attribute_format_arg__
#undef __attribute_format_strfmon__
#undef __attribute_malloc__
#undef __attribute_noinline__
#undef __attribute_nonstring__
#undef __attribute_pure__
#undef __attribute_used__
#undef __attribute_warn_unused_result__
#undef __bos
#undef __bos0
#undef __errordecl
#undef __extension__
#undef __extern_always_inline
#undef __extern_inline
#undef __flexarr
#undef __fortify_function
#undef __glibc_c99_flexarr_available
#undef __glibc_clang_has_extension
#undef __glibc_likely
#undef __glibc_macro_warning
#undef __glibc_macro_warning1
#undef __glibc_unlikely
#undef __inline
#undef __ptr_t
#undef __restrict
#undef __restrict_arr
#undef __va_arg_pack
#undef __va_arg_pack_len
#undef __warnattr
#undef __warndecl

/* Include our copy of glibc <sys/cdefs.h>.  */
#include <cdefs.h>

/* <cdefs.h> __inline is too pessimistic for non-GCC.  */
#undef __inline
#ifndef HAVE___INLINE
# if 199901 <= __STDC_VERSION__ || defined inline
#  define __inline inline
# else
#  define __inline
# endif
#endif


/* A substitute for glibc <libc-symbols.h>, good enough for Gnulib.  */
#define attribute_hidden
#define libc_hidden_proto(name, ...)
#define libc_hidden_def(name)
#define libc_hidden_weak(name)
#define libc_hidden_ver(local, name)
#define strong_alias(name, aliasname)
#define weak_alias(name, aliasname)

/* A substitute for glibc <shlib-compat.h>, good enough for Gnulib.  */
#define SHLIB_COMPAT(lib, introduced, obsoleted) 0
Paul Eggert's avatar
Paul Eggert committed
183 184
#define compat_symbol(lib, local, symbol, version) extern int dummy
#define versioned_symbol(lib, local, symbol, version) extern int dummy