[PATCH 08/20] Squish include requirements
Richard Henderson
rth at twiddle.net
Mon Mar 4 19:41:38 CET 2013
It is vital that config.h be included before gmp.h in order to get
the right expansions for __GMP_PUBLIC_FULL and __GMP_PUBLIC_DEFINE,
once we start declaring hidden symbols.
Ease the burden of include orderings by always using only "gmp-impl.h",
and getting everything else -- including system includes -- from there.
---
gmp-impl.h | 62 +++++++++++++++++++++++++++++++++++++++++++++-----------------
1 file changed, 45 insertions(+), 17 deletions(-)
diff --git a/gmp-impl.h b/gmp-impl.h
index 7ebfe4d..2f5d75e 100644
--- a/gmp-impl.h
+++ b/gmp-impl.h
@@ -34,8 +34,14 @@ along with the GNU MP Library. If not, see http://www.gnu.org/licenses/. */
#ifndef __GMP_IMPL_H__
#define __GMP_IMPL_H__
+/* We never include gmp-impl.h from configure. We do re-use the define
+ __GMP_WITHIN_CONFIGURE during BUILT_SOURCES to avoid including several
+ files below that may not yet be built. */
+#include "config.h"
+#define _GNU_SOURCE 1
+
#if defined _CRAY
-#include <intrinsics.h> /* for _popcnt */
+# include <intrinsics.h> /* for _popcnt */
#endif
/* limits.h is not used in general, since it's an ANSI-ism, and since on
@@ -49,9 +55,44 @@ along with the GNU MP Library. If not, see http://www.gnu.org/licenses/. */
short can be 24, 32, 46 or 64 bits, and different for ushort. */
#if defined _CRAY
-#include <limits.h>
+# include <limits.h>
+#endif
+
+#if HAVE_INTTYPES_H /* for uint_least32_t */
+# include <inttypes.h>
+#else
+# if HAVE_STDINT_H
+# include <stdint.h>
+# endif
+#endif
+#if HAVE_FLOAT_H
+# include <float.h> /* for DBL_MAX_10_EXP etc */
+#endif
+#if HAVE_SYS_TYPES_H
+# include <sys/types.h> /* for quad_t */
+#endif
+#if HAVE_STDARG
+# include <stdarg.h> /* for va_list and hence doprnt_funs_t */
+#else
+# include <varargs.h>
#endif
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <stddef.h>
+#include <ctype.h>
+
+#if HAVE_OBSTACK_VPRINTF
+# include <obstack.h>
+#endif
+
+#ifdef __cplusplus
+# include <string> /* for std::string */
+#endif
+
+#include "gmp.h"
+
#ifndef __MPN
#define __MPN(x) __gmpn_##x
#endif
@@ -178,7 +219,6 @@ along with the GNU MP Library. If not, see http://www.gnu.org/licenses/. */
DECL_addmul_1 (name)
#if ! defined (__GMP_WITHIN_CONFIGURE)
-#include "config.h"
#include "gmp-mparam.h"
#include "fib_table.h"
#include "fac_table.h"
@@ -188,20 +228,6 @@ along with the GNU MP Library. If not, see http://www.gnu.org/licenses/. */
#endif
#endif
-#if HAVE_INTTYPES_H /* for uint_least32_t */
-# include <inttypes.h>
-#else
-# if HAVE_STDINT_H
-# include <stdint.h>
-# endif
-#endif
-
-#ifdef __cplusplus
-#include <cstring> /* for strlen */
-#include <string> /* for std::string */
-#endif
-
-
#ifndef WANT_TMP_DEBUG /* for TMP_ALLOC_LIMBS_2 and others */
#define WANT_TMP_DEBUG 0
#endif
@@ -3734,6 +3760,8 @@ typedef mp_limb_t UWtype;
typedef unsigned int UHWtype;
#define W_TYPE_SIZE GMP_LIMB_BITS
+#include "longlong.h"
+
/* Define ieee_double_extract and _GMP_IEEE_FLOATS.
Bit field packing is "implementation defined" according to C99, which
--
1.8.1.2
More information about the gmp-devel
mailing list