X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/4b72b4f91122704b805e2696b2e9342226359de0..50650cb6887d99b01eeb1e686fc1f695c2a0c64a:/src/conf_post.h diff --git a/src/conf_post.h b/src/conf_post.h index 90f4c6e838..209f60792c 100644 --- a/src/conf_post.h +++ b/src/conf_post.h @@ -1,14 +1,14 @@ /* conf_post.h --- configure.ac includes this via AH_BOTTOM -Copyright (C) 1988, 1993-1994, 1999-2002, 2004-2014 Free Software +Copyright (C) 1988, 1993-1994, 1999-2002, 2004-2016 Free Software Foundation, Inc. This file is part of GNU Emacs. GNU Emacs 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. +the Free Software Foundation, either version 3 of the License, or (at +your option) any later version. GNU Emacs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -51,10 +51,21 @@ typedef bool bool_bf; #endif #endif -/* When not using Clang, assume its attributes and features are absent. */ +/* 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) false -#endif +# 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_no_address_safety_analysis false +# define __has_attribute_no_sanitize_address \ + (4 < __GNUC__ + (8 <= __GNUC_MINOR__)) +#endif + +/* Simulate __has_feature on compilers that lack it. It is used only + to define ADDRESS_SANITIZER below. */ #ifndef __has_feature # define __has_feature(a) false #endif @@ -134,6 +145,9 @@ You lose; /* Emacs for DOS must be compiled with DJGPP */ # define HAVE_LSTAT 1 #else # define lstat stat +/* DJGPP 2.03 and older don't have the next two. */ +# define EOVERFLOW ERANGE +# define SIZE_MAX 4294967295U #endif /* We must intercept 'opendir' calls to stash away the directory name, @@ -206,6 +220,13 @@ extern void _DebPrint (const char *fmt, ...); #define RE_TRANSLATE_P(TBL) (!EQ (TBL, make_number (0))) #endif +/* Tell time_rz.c to use Emacs's getter and setter for TZ. + Only Emacs uses time_rz so this is OK. */ +#define getenv_TZ emacs_getenv_TZ +#define setenv_TZ emacs_setenv_TZ +extern char *emacs_getenv_TZ (void); +extern int emacs_setenv_TZ (char const *); + #include #include @@ -215,9 +236,7 @@ extern void _DebPrint (const char *fmt, ...); #define NO_INLINE #endif -#if (__clang__ \ - ? __has_attribute (externally_visible) \ - : (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 1))) +#if __has_attribute (externally_visible) #define EXTERNALLY_VISIBLE __attribute__((externally_visible)) #else #define EXTERNALLY_VISIBLE @@ -238,6 +257,7 @@ extern void _DebPrint (const char *fmt, ...); #endif #define ATTRIBUTE_CONST _GL_ATTRIBUTE_CONST +#define ATTRIBUTE_UNUSED _GL_UNUSED #if 3 <= __GNUC__ # define ATTRIBUTE_MALLOC __attribute__ ((__malloc__)) @@ -245,7 +265,7 @@ extern void _DebPrint (const char *fmt, ...); # define ATTRIBUTE_MALLOC #endif -#if 4 < __GNUC__ + (3 <= __GNUC_MINOR__) +#if __has_attribute (alloc_size) # define ATTRIBUTE_ALLOC_SIZE(args) __attribute__ ((__alloc_size__ args)) #else # define ATTRIBUTE_ALLOC_SIZE(args) @@ -268,8 +288,7 @@ extern void _DebPrint (const char *fmt, ...); /* Attribute of functions whose code should not have addresses sanitized. */ -#if (__has_attribute (no_sanitize_address) \ - || 4 < __GNUC__ + (8 <= __GNUC_MINOR__)) +#if __has_attribute (no_sanitize_address) # define ATTRIBUTE_NO_SANITIZE_ADDRESS \ __attribute__ ((no_sanitize_address)) ADDRESS_SANITIZER_WORKAROUND #elif __has_attribute (no_address_safety_analysis) @@ -307,6 +326,11 @@ extern void _DebPrint (const char *fmt, ...); before including config.h or any other .h file. Other .c files should not define INLINE. + For Emacs, this is done by having emacs.c first '#define INLINE + EXTERN_INLINE' and then include every .h file that uses INLINE. + + The INLINE_HEADER_BEGIN and INLINE_HEADER_END suppress bogus + warnings in some GCC versions; see ../m4/extern-inline.m4. C99 compilers compile functions like 'incr' as C99-style extern inline functions. Buggy GCC implementations do something similar with