File: ac_need_stdint_h.html

package info (click to toggle)
autoconf-archive 20070512-1
  • links: PTS
  • area: main
  • in suites: lenny
  • size: 6,712 kB
  • ctags: 20
  • sloc: sh: 615; makefile: 43
file content (288 lines) | stat: -rw-r--r-- 9,700 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
 <head>
  <title>
   Autoconf Macro: ac_need_stdint_h
  </title>
  <link rel="stylesheet" type="text/css" href="autoconf-archive.css">
 </head>
 <body>
  <table summary="web navigation" style="width:100%;">
   <tbody>
    <tr>
     <td style="width:25%;" align="center" valign="top">
      <a href="http://autoconf-archive.cryp.to/ac_need_stdint_h.m4">Download M4
      Source</a>
     </td>
     <td style="width:25%;" align="center" valign="top">
      <a href=
      "http://git.cryp.to/?p=autoconf-archive;a=history;f=ac_need_stdint_h.m4">Macro
      History</a>
     </td>
     <td style="width:25%;" align="center" valign="top">
      <a href="macros-by-category.html">Category Index</a>
     </td>
     <td style="width:25%;" align="center" valign="top">
      <form method="get" action="http://www.google.com/search">
       <div>
        <input name="sitesearch" value="autoconf-archive.cryp.to" type=
        "hidden"><a href="http://www.google.com/">Search</a>: <input name="q"
        size="10" maxlength="255" type="text">
       </div>
      </form>
     </td>
    </tr>
   </tbody>
  </table>
  <hr>
  <h1>
   ac_need_stdint_h
  </h1>
  <h2>
   Obsolete Macro
  </h2>
  <p class="indent">
   Superseded by <a href="ac_create_stdint_h.html">AC_CREATE_STDINT_H</a>.
  </p>
  <h2>
   Synopsis
  </h2>
  <p class="indent" style="white-space:nowrap;">
   <code>AC_NEED_STDINT_H [( HEADER-TO-GENERATE [, HEDERS-TO-CHECK])]</code>
  </p>
  <h2>
   Description
  </h2>
  <div class="indent">
   <p>
    The "ISO C9X: 7.18 Integer types &lt;stdint.h&gt;" section requires the
    existence of an include file &lt;stdint.h&gt; that defines a set of
    typedefs, especially uint8_t,int32_t,uintptr_t. Many older installations
    will not provide this file, but some will have the very same definitions in
    &lt;inttypes.h&gt;. In other enviroments we can use the inet-types in
    &lt;sys/types.h&gt; which would define the typedefs int8_t and u_int8_t
    respectivly.
   </p>
   <p>
    This macros will create a local "stdint.h" if it cannot find the global
    &lt;stdint.h&gt; (or it will create the headerfile given as an argument).
    In many cases that file will just have a singular "#include
    &lt;inttypes.h&gt;" statement, while in other environments it will provide
    the set of basic stdint's defined:
    int8_t,uint8_t,int16_t,uint16_t,int32_t,uint32_t,intptr_t,uintptr_t
    int_least32_t.. int_fast32_t.. intmax_t which may or may not rely on the
    definitions of other files, or using the <a href=
    "ac_compile_check_sizeof.html">AC_COMPILE_CHECK_SIZEOF</a> macro to
    determine the actual sizeof each type.
   </p>
   <p>
    If your header files require the stdint-types you will want to create an
    installable file package-stdint.h that all your other installable header
    may include. So if you have a library package named "mylib", just use
   </p>
   <pre>
     AC_NEED_STDINT(zziplib-stdint.h)
</pre>
   <p>
    in configure.in and go to install that very header file in Makefile.am
    along with the other headers (mylib.h) - and the mylib-specific headers can
    simply use "#include &lt;mylib-stdint.h&gt;" to obtain the stdint-types.
   </p>
   <p>
    Remember, if the system already had a valid &lt;stdint.h&gt;, the generated
    file will include it directly. No need for fuzzy HAVE_STDINT_H things...
   </p>
  </div>
  <h2>
   Author
  </h2>
  <p class="indent">
   Guido U. Draheim &lt;guidod@gmx.de&gt;
  </p>
  <h2>
   Last Modified
  </h2>
  <p class="indent">
   2006-10-13
  </p>
  <h2>
   M4 Source Code
  </h2>
  <div class="indent">
   <pre class="m4source">
AC_DEFUN([AC_NEED_STDINT_H],
[AC_MSG_CHECKING([for stdint-types])
 ac_cv_header_stdint="no-file"
 ac_cv_header_stdint_u="no-file"
 for i in $1 inttypes.h sys/inttypes.h sys/int_types.h stdint.h ; do
   AC_CHECK_TYPEDEF_(uint32_t, $i, [ac_cv_header_stdint=$i])
 done
 for i in $1 sys/types.h inttypes.h sys/inttypes.h sys/int_types.h ; do
   AC_CHECK_TYPEDEF_(u_int32_t, $i, [ac_cv_header_stdint_u=$i])
 done
 dnl debugging: __AC_MSG( !$ac_cv_header_stdint!$ac_cv_header_stdint_u! ...)

 ac_stdint_h=`echo ifelse($1, , stdint.h, $1)`
 if test "$ac_cv_header_stdint" != "no-file" ; then
   if test "$ac_cv_header_stdint" != "$ac_stdint_h" ; then
     AC_MSG_RESULT(found in $ac_cv_header_stdint)
     echo "#include &lt;$ac_cv_header_stdint&gt;" &gt;$ac_stdint_h
     AC_MSG_RESULT(creating $ac_stdint_h - (just to include  $ac_cv_header_stdint) )
   else
     AC_MSG_RESULT(found in $ac_stdint_h)
   fi
   ac_cv_header_stdint_generated=false
 elif test "$ac_cv_header_stdint_u" != "no-file" ; then
   AC_MSG_RESULT(found u_types in $ac_cv_header_stdint_u)
   if test $ac_cv_header_stdint = "$ac_stdint_h" ; then
     AC_MSG_RESULT(creating $ac_stdint_h - includes $ac_cv_header_stdint, expect problems!)
   else
     AC_MSG_RESULT(creating $ac_stdint_h - (include inet-types in $ac_cv_header_stdint_u and re-typedef))
   fi
echo "#ifndef __AC_STDINT_H" &gt;$ac_stdint_h
echo "#define __AC_STDINT_H" '"'$ac_stdint_h'"' &gt;&gt;$ac_stdint_h
echo "#ifndef _GENERATED_STDINT_H" &gt;&gt;$ac_stdint_h
echo "#define _GENERATED_STDINT_H" '"'$PACKAGE $VERSION'"' &gt;&gt;$ac_stdint_h
   cat &gt;&gt;$ac_stdint_h &lt;&lt;EOF

#include &lt;stddef.h&gt;
#include &lt;$ac_cv_header_stdint_u&gt;

/* int8_t int16_t int32_t defined by inet code */
typedef u_int8_t uint8_t;
typedef u_int16_t uint16_t;
typedef u_int32_t uint32_t;

/* it's a networkable system, but without any stdint.h */
/* hence it's an older 32-bit system... (a wild guess that seems to work) */
typedef u_int32_t uintptr_t;
typedef   int32_t  intptr_t;
EOF
   ac_cv_header_stdint_generated=true
 else
   AC_MSG_RESULT(not found, need to guess the types now... )
   AC_COMPILE_CHECK_SIZEOF(long, 32)
   AC_COMPILE_CHECK_SIZEOF(void*, 32)
   AC_MSG_RESULT( creating $ac_stdint_h - using detected values for sizeof long and sizeof void* )
echo "#ifndef __AC_STDINT_H" &gt;$ac_stdint_h
echo "#define __AC_STDINT_H" '"'$ac_stdint_h'"' &gt;&gt;$ac_stdint_h
echo "#ifndef _GENERATED_STDINT_H" &gt;&gt;$ac_stdint_h
echo "#define _GENERATED_STDINT_H" '"'$PACKAGE $VERSION'"' &gt;&gt;$ac_stdint_h
   cat &gt;&gt;$ac_stdint_h &lt;&lt;EOF

/* ISO C 9X: 7.18 Integer types &lt;stdint.h&gt; */

#define __int8_t_defined
typedef   signed char    int8_t;
typedef unsigned char   uint8_t;
typedef   signed short  int16_t;
typedef unsigned short uint16_t;
EOF

   if test "$ac_cv_sizeof_long" = "64" ; then
     cat &gt;&gt;$ac_stdint_h &lt;&lt;EOF

typedef   signed int    int32_t;
typedef unsigned int   uint32_t;
typedef   signed long   int64_t;
typedef unsigned long  uint64_t;
#define  int64_t  int64_t
#define uint64_t uint64_t
EOF

   else
    cat &gt;&gt;$ac_stdint_h &lt;&lt;EOF

typedef   signed long   int32_t;
typedef unsigned long  uint32_t;
EOF

   fi
   if test "$ac_cv_sizeof_long" != "$ac_cv_sizeof_voidp" ; then
     cat &gt;&gt;$ac_stdint_h &lt;&lt;EOF

typedef   signed int   intptr_t;
typedef unsigned int  uintptr_t;
EOF
   else
     cat &gt;&gt;$ac_stdint_h &lt;&lt;EOF

typedef   signed long   intptr_t;
typedef unsigned long  uintptr_t;
EOF
     ac_cv_header_stdint_generated=true
   fi
 fi

 if "$ac_cv_header_stdint_generated" ; then
     cat &gt;&gt;$ac_stdint_h &lt;&lt;EOF

typedef  int8_t    int_least8_t;
typedef  int16_t   int_least16_t;
typedef  int32_t   int_least32_t;

typedef uint8_t   uint_least8_t;
typedef uint16_t  uint_least16_t;
typedef uint32_t  uint_least32_t;

typedef  int8_t    int_fast8_t;
typedef  int32_t   int_fast16_t;
typedef  int32_t   int_fast32_t;

typedef uint8_t   uint_fast8_t;
typedef uint32_t  uint_fast16_t;
typedef uint32_t  uint_fast32_t;

typedef long int       intmax_t;
typedef unsigned long uintmax_t;

 /* once */
#endif
#endif
EOF
  fi dnl
])
</pre>
  </div>
  <h2>
   License
  </h2>
  <div class="indent">
   <span style="white-space:nowrap;">Copyright &copy; 2006 Guido U. Draheim
   &lt;guidod@gmx.de&gt;</span>
   <p>
    This program 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 2 of the License, or (at your option)
    any later version.
   </p>
   <p>
    This program is distributed in the hope that it will be useful, but WITHOUT
    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
    more details.
   </p>
   <p>
    You should have received a copy of the GNU General Public License along
    with this program; if not, write to the Free Software Foundation, Inc., 59
    Temple Place - Suite 330, Boston, MA 02111-1307, USA.
   </p>
   <p>
    As a special exception, the respective Autoconf Macro's copyright owner
    gives unlimited permission to copy, distribute and modify the configure
    scripts that are the output of Autoconf when processing the Macro. You need
    not follow the terms of the GNU General Public License when using or
    distributing such scripts, even though portions of the text of the Macro
    appear in them. The GNU General Public License (GPL) does govern all other
    use of the material that constitutes the Autoconf Macro.
   </p>
   <p>
    This special exception to the GPL applies to versions of the Autoconf Macro
    released by the Autoconf Macro Archive. When you make and distribute a
    modified version of the Autoconf Macro, you may extend this special
    exception to the GPL to apply to your modified version as well.
   </p>
  </div>
 </body>
</html>