summaryrefslogtreecommitdiff
path: root/src/conf_post.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/conf_post.h')
-rw-r--r--src/conf_post.h117
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 */