OSDN Git Service

2009-09-09 Paolo Bonzini <bonzini@gnu.org>
[pf3gnuchains/gcc-fork.git] / config / stdint.m4
1 AC_DEFUN([GCC_STDINT_TYPES],
2 [AC_REQUIRE([AC_TYPE_INT8_T])
3 AC_REQUIRE([AC_TYPE_INT16_T])
4 AC_REQUIRE([AC_TYPE_INT32_T])
5 AC_REQUIRE([AC_TYPE_INT64_T])
6 AC_REQUIRE([AC_TYPE_INTMAX_T])
7 AC_REQUIRE([AC_TYPE_INTPTR_T])
8 AC_REQUIRE([AC_TYPE_UINT8_T])
9 AC_REQUIRE([AC_TYPE_UINT16_T])
10 AC_REQUIRE([AC_TYPE_UINT32_T])
11 AC_REQUIRE([AC_TYPE_UINT64_T])
12 AC_REQUIRE([AC_TYPE_UINTMAX_T])
13 AC_REQUIRE([AC_TYPE_UINTPTR_T])])
14
15 AC_DEFUN([GCC_HEADER_STDINT],
16 [AC_REQUIRE([GCC_STDINT_TYPES])
17 AC_CHECK_TYPES([int_least32_t, int_fast32_t],,,[#include <sys/types.h>
18 #ifdef HAVE_STDINT_H
19 #include <stdint.h>
20 #endif
21 #ifdef HAVE_INTTYPES_H
22 #include <inttypes.h>
23 #endif])
24
25 m4_define([_GCC_STDINT_H], m4_ifval($1, $1, _stdint.h))
26 m4_if(m4_bmatch(m4_quote(/_GCC_STDINT_H),
27                 /stdint\.h$, bad,
28                 /inttypes\.h$, bad, ok), bad,
29       [m4_fatal([cannot overwrite ]m4_quote(_GCC_STDINT_H))])
30
31 AC_CONFIG_COMMANDS(_GCC_STDINT_H, [
32 cat > $tmp/_GCC_STDINT_H <<EOF
33 #ifndef GCC_GENERATED_STDINT_H
34 #define GCC_GENERATED_STDINT_H 1
35
36 #include "config.h"
37 #include <sys/types.h>
38 #ifdef HAVE_STDINT_H
39 #include <stdint.h>
40 #endif
41 #ifdef HAVE_INTTYPES_H
42 #include <inttypes.h>
43 #endif
44 EOF
45
46 if test "$ac_cv_type_int_least32_t" != yes; then
47   sed 's/^ *//' >> $tmp/_GCC_STDINT_H <<EOF
48
49     /* Define int_least types */
50     typedef int8_t     int_least8_t;
51     typedef int16_t    int_least16_t;
52     typedef int32_t    int_least32_t;
53     typedef int64_t    int_least64_t;
54
55     typedef uint8_t    uint_least8_t;
56     typedef uint16_t   uint_least16_t;
57     typedef uint32_t   uint_least32_t;
58     typedef uint64_t   uint_least64_t;
59 EOF
60 fi
61
62 if test "$ac_cv_type_int_fast32_t" != yes; then
63   dnl NOTE: The following code assumes that sizeof (int) > 1.
64   dnl Fix when strange machines are reported.
65   sed 's/^ *//' >> $tmp/_GCC_STDINT_H <<EOF
66
67     /* Define int_fast types.  short is often slow */
68     typedef int8_t       int_fast8_t;
69     typedef int          int_fast16_t;
70     typedef int32_t      int_fast32_t;
71     typedef int64_t      int_fast64_t;
72
73     typedef uint8_t      uint_fast8_t;
74     typedef unsigned int uint_fast16_t;
75     typedef uint32_t     uint_fast32_t;
76     typedef uint64_t     uint_fast64_t;
77 EOF
78 fi
79
80 echo '@%:@endif /* GCC_GENERATED_STDINT_H */' >> $tmp/_GCC_STDINT_H
81
82 if test -r _GCC_STDINT_H && cmp -s $tmp/_GCC_STDINT_H _GCC_STDINT_H; then
83   rm -f $tmp/_GCC_STDINT_H
84 else
85   mv -f $tmp/_GCC_STDINT_H _GCC_STDINT_H
86 fi
87
88 ], [
89 ac_cv_type_int_least32_t="$ac_cv_type_int_least32_t"
90 ac_cv_type_int_fast32_t="$ac_cv_type_int_fast32_t"
91 ])
92
93 ])