1#ifndef _FEATURES_H 2#define _FEATURES_H 3 4#ifdef _ALL_SOURCE 5#define _GNU_SOURCE 1 6#endif 7 8#if !defined(_POSIX_SOURCE) && !defined(_POSIX_C_SOURCE) \ 9 && !defined(_XOPEN_SOURCE) && !defined(_GNU_SOURCE) \ 10 && !defined(_BSD_SOURCE) && !defined(__STRICT_ANSI__) 11#define _BSD_SOURCE 1 12#define _XOPEN_SOURCE 700 13#endif 14 15#if __STDC_VERSION__ >= 199901L 16#define __restrict restrict 17#elif !defined(__GNUC__) 18#define __restrict 19#endif 20 21#if __STDC_VERSION__ >= 199901L || defined(__cplusplus) 22#define __inline inline 23#endif 24 25#if __STDC_VERSION__ >= 201112L 26#elif defined(__GNUC__) 27#define _Noreturn __attribute__((__noreturn__)) 28#else 29#define _Noreturn 30#endif 31 32/* Convenience macros to test the versions of glibc and gcc. 33 Use them like this: 34 #if __GNUC_PREREQ (2,8) 35 ... code requiring gcc 2.8 or later ... 36 #endif 37 Note - they won't work for gcc1 or glibc1, since the _MINOR macros 38 were not defined then. */ 39#if defined __GNUC__ && defined __GNUC_MINOR__ 40# define __GNUC_PREREQ(maj, min) \ 41 ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min)) 42#else 43# define __GNUC_PREREQ(maj, min) 0 44#endif 45 46#include <sys/glibc-types.h> 47 48#endif 49