diff options
Diffstat (limited to 'src/conf_post.h')
-rw-r--r-- | src/conf_post.h | 117 |
1 files changed, 49 insertions, 68 deletions
diff --git a/src/conf_post.h b/src/conf_post.h index d8070fad8e7..060b912fafb 100644 --- a/src/conf_post.h +++ b/src/conf_post.h @@ -18,31 +18,33 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ -/* Commentary: +/* Put the code here rather than in configure.ac using AH_BOTTOM. + This way, the code does not get processed by autoheader. For + example, undefs here are not commented out. - Rather than writing this code directly in AH_BOTTOM, we include it - via this file. This is so that it does not get processed by - autoheader. Eg, any undefs here would otherwise be commented out. -*/ + To help make dependencies clearer elsewhere, this file typically + does not #include other files. The exceptions are first stdbool.h + because it is unlikely to interfere with configuration and bool is + such a core part of the C language, and second ms-w32.h (DOS_NT + only) because it historically was included here and changing that + would take some work. */ -/* Code: */ +#include <stdbool.h> -/* Include any platform specific configuration file. */ -#ifdef config_opsysfile -# include config_opsysfile +#if defined DOS_NT && !defined DEFER_MS_W32_H +# include <ms-w32.h> #endif -#include <stdbool.h> - /* GNUC_PREREQ (V, W, X) is true if this is GNU C version V.W.X or later. It can be used in a preprocessor expression. */ #ifndef __GNUC_MINOR__ # define GNUC_PREREQ(v, w, x) false #elif ! defined __GNUC_PATCHLEVEL__ -# define GNUC_PREREQ(v, w, x) ((v) < __GNUC__ + ((w) <= __GNUC_MINOR__)) +# define GNUC_PREREQ(v, w, x) \ + ((v) < __GNUC__ + ((w) < __GNUC_MINOR__ + ((x) == 0)) #else # define GNUC_PREREQ(v, w, x) \ - ((v) < __GNUC__ + ((w) <= __GNUC_MINOR__ + ((x) <= __GNUC_PATCHLEVEL__))) + ((v) < __GNUC__ + ((w) < __GNUC_MINOR__ + ((x) <= __GNUC_PATCHLEVEL__))) #endif /* The type of bool bitfields. Needed to compile Objective-C with @@ -54,25 +56,23 @@ typedef unsigned int bool_bf; typedef bool bool_bf; #endif -#ifndef WINDOWSNT -/* On AIX 3 this must be included before any other include file. */ -#include <alloca.h> -#if ! HAVE_ALLOCA -# error "alloca not available on this machine" -#endif -#endif - /* Simulate __has_attribute on compilers that lack it. It is used only on arguments like alloc_size that are handled in this simulation. */ #ifndef __has_attribute # define __has_attribute(a) __has_attribute_##a -# define __has_attribute_alloc_size (4 < __GNUC__ + (3 <= __GNUC_MINOR__)) -# define __has_attribute_cleanup (3 < __GNUC__ + (4 <= __GNUC_MINOR__)) -# define __has_attribute_externally_visible \ - (4 < __GNUC__ + (1 <= __GNUC_MINOR__)) +# define __has_attribute_alloc_size GNUC_PREREQ (4, 3, 0) +# define __has_attribute_cleanup GNUC_PREREQ (3, 4, 0) +# define __has_attribute_externally_visible GNUC_PREREQ (4, 1, 0) # define __has_attribute_no_address_safety_analysis false -# define __has_attribute_no_sanitize_address \ - (4 < __GNUC__ + (8 <= __GNUC_MINOR__)) +# define __has_attribute_no_sanitize_address GNUC_PREREQ (4, 8, 0) +#endif + +/* Simulate __has_builtin on compilers that lack it. It is used only + on arguments like __builtin_assume_aligned that are handled in this + simulation. */ +#ifndef __has_builtin +# define __has_builtin(a) __has_builtin_##a +# define __has_builtin___builtin_assume_aligned GNUC_PREREQ (4, 7, 0) #endif /* Simulate __has_feature on compilers that lack it. It is used only @@ -88,6 +88,11 @@ typedef bool bool_bf; # define ADDRESS_SANITIZER false #endif +/* Yield PTR, which must be aligned to ALIGNMENT. */ +#if ! __has_builtin (__builtin_assume_aligned) +# define __builtin_assume_aligned(ptr, ...) ((void *) (ptr)) +#endif + #ifdef DARWIN_OS #ifdef emacs #define malloc unexec_malloc @@ -110,12 +115,9 @@ typedef bool bool_bf; #ifdef emacs #define malloc hybrid_malloc #define realloc hybrid_realloc +#define aligned_alloc hybrid_aligned_alloc #define calloc hybrid_calloc #define free hybrid_free -#if defined HAVE_GET_CURRENT_DIR_NAME && !defined BROKEN_GET_CURRENT_DIR_NAME -#define HYBRID_GET_CURRENT_DIR_NAME 1 -#define get_current_dir_name hybrid_get_current_dir_name -#endif #endif #endif /* HYBRID_MALLOC */ @@ -131,14 +133,6 @@ typedef bool bool_bf; #undef HAVE_RINT #endif /* HPUX */ -#ifdef IRIX6_5 -#ifdef emacs -char *_getpty(); -#endif -#define INET6 /* Needed for struct sockaddr_in6. */ -#undef HAVE_GETADDRINFO /* IRIX has getaddrinfo but not struct addrinfo. */ -#endif /* IRIX6_5 */ - #ifdef MSDOS #ifndef __DJGPP__ You lose; /* Emacs for DOS must be compiled with DJGPP */ @@ -203,7 +197,7 @@ You lose; /* Emacs for DOS must be compiled with DJGPP */ #endif #ifdef CYGWIN -#define SYSTEM_PURESIZE_EXTRA 10000 +#define SYSTEM_PURESIZE_EXTRA 50000 #endif #if defined HAVE_NTGUI && !defined DebPrint @@ -211,7 +205,7 @@ You lose; /* Emacs for DOS must be compiled with DJGPP */ extern void _DebPrint (const char *fmt, ...); # define DebPrint(stuff) _DebPrint stuff # else -# define DebPrint(stuff) +# define DebPrint(stuff) ((void) 0) # endif #endif @@ -238,9 +232,6 @@ extern void _DebPrint (const char *fmt, ...); extern char *emacs_getenv_TZ (void); extern int emacs_setenv_TZ (char const *); -#include <string.h> -#include <stdlib.h> - #if __GNUC__ >= 3 /* On GCC 3.0 we might get a warning. */ #define NO_INLINE __attribute__((noinline)) #else @@ -253,19 +244,21 @@ extern int emacs_setenv_TZ (char const *); #define EXTERNALLY_VISIBLE #endif -#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) +#if GNUC_PREREQ (2, 7, 0) # define ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) #else # define ATTRIBUTE_FORMAT(spec) /* empty */ #endif -#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) -# define ATTRIBUTE_FORMAT_PRINTF(formatstring_parameter, first_argument) \ - ATTRIBUTE_FORMAT ((__gnu_printf__, formatstring_parameter, first_argument)) +#if GNUC_PREREQ (4, 4, 0) && defined __GLIBC_MINOR__ +# define PRINTF_ARCHETYPE __gnu_printf__ +#elif GNUC_PREREQ (4, 4, 0) && defined __MINGW32__ +# define PRINTF_ARCHETYPE __ms_printf__ #else -# define ATTRIBUTE_FORMAT_PRINTF(formatstring_parameter, first_argument) \ - ATTRIBUTE_FORMAT ((__printf__, formatstring_parameter, first_argument)) +# define PRINTF_ARCHETYPE __printf__ #endif +#define ATTRIBUTE_FORMAT_PRINTF(string_index, first_to_check) \ + ATTRIBUTE_FORMAT ((PRINTF_ARCHETYPE, string_index, first_to_check)) #define ATTRIBUTE_CONST _GL_ATTRIBUTE_CONST #define ATTRIBUTE_UNUSED _GL_UNUSED @@ -289,7 +282,7 @@ extern int emacs_setenv_TZ (char const *); no_sanitize_address attribute. This bug is fixed in GCC 4.9.0 and clang 3.4. */ #if (! ADDRESS_SANITIZER \ - || ((4 < __GNUC__ + (9 <= __GNUC_MINOR__)) \ + || (GNUC_PREREQ (4, 9, 0) \ || 3 < __clang_major__ + (4 <= __clang_minor__))) # define ADDRESS_SANITIZER_WORKAROUND /* No workaround needed. */ #else @@ -355,22 +348,10 @@ extern int emacs_setenv_TZ (char const *); #define INLINE_HEADER_BEGIN _GL_INLINE_HEADER_BEGIN #define INLINE_HEADER_END _GL_INLINE_HEADER_END -/* To use the struct hack with N elements, declare the struct like this: - struct s { ...; t name[FLEXIBLE_ARRAY_MEMBER]; }; - and allocate (offsetof (struct s, name) + N * sizeof (t)) bytes. - IBM xlc 12.1 claims to do C99 but mishandles flexible array members. */ -#ifdef __IBMC__ -# define FLEXIBLE_ARRAY_MEMBER 1 +/* 'int x UNINIT;' is equivalent to 'int x;', except it cajoles GCC + into not warning incorrectly about use of an uninitialized variable. */ +#if defined GCC_LINT || defined lint +# define UNINIT = {0,} #else -# define FLEXIBLE_ARRAY_MEMBER +# define UNINIT /* empty */ #endif - -/* Use this to suppress gcc's `...may be used before initialized' warnings. */ -#ifdef lint -/* Use CODE only if lint checking is in effect. */ -# define IF_LINT(Code) Code -#else -# define IF_LINT(Code) /* empty */ -#endif - -/* conf_post.h ends here */ |