This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
e09df72ffadb81722db04b566152b5bd37fa7c0c
[metaconfig.git] / U / perl / perlxv.U
1 ?RCS: $Id$
2 ?RCS:
3 ?RCS: Copyright (c) 1999 Jarkko Hietaniemi
4 ?RCS:
5 ?RCS: You may distribute under the terms of either the GNU General Public
6 ?RCS: License or the Artistic License, as specified in the README file.
7 ?RCS:
8 ?MAKE:ivtype uvtype nvtype ivsize uvsize nvsize \
9         i8type u8type i16type u16type i32type u32type i64type u64type \
10         i8size u8size i16size u16size i32size u32size i64size u64size: \
11         echo rm use64bits quadtype uquadtype \
12         d_longdbl uselongdouble longdblsize doublesize \
13         charsize shortsize intsize longsize \
14         cat Compile i_inttypes exe_ext test
15 ?MAKE:  -pick add $@ %<
16 ?S:ivtype:
17 ?S:     This variable contains the C type used for Perl's IV.
18 ?S:.
19 ?S:uvtype:
20 ?S:     This variable contains the C type used for Perl's UV.
21 ?S:.
22 ?S:nvtype:
23 ?S:     This variable contains the C type used for Perl's NV.
24 ?S:.
25 ?S:i8type:
26 ?S:     This variable contains the C type used for Perl's I8.
27 ?S:.
28 ?S:u8type:
29 ?S:     This variable contains the C type used for Perl's U8.
30 ?S:.
31 ?S:i16type:
32 ?S:     This variable contains the C type used for Perl's I16.
33 ?S:.
34 ?S:u16type:
35 ?S:     This variable contains the C type used for Perl's U16.
36 ?S:.
37 ?S:i32type:
38 ?S:     This variable contains the C type used for Perl's I32.
39 ?S:.
40 ?S:u32type:
41 ?S:     This variable contains the C type used for Perl's U32.
42 ?S:.
43 ?S:i64type:
44 ?S:     This variable contains the C type used for Perl's I64.
45 ?S:.
46 ?S:u64type:
47 ?S:     This variable contains the C type used for Perl's U64.
48 ?S:.
49 ?S:ivsize:
50 ?S:     This variable is the size of an IV in bytes.
51 ?S:.
52 ?S:uvsize:
53 ?S:     This variable is the size of a UV in bytes.
54 ?S:.
55 ?S:i8size:
56 ?S:     This variable is the size of an I8 in bytes.
57 ?S:.
58 ?S:u8size:
59 ?S:     This variable is the size of an U8 in bytes.
60 ?S:.
61 ?S:i16size:
62 ?S:     This variable is the size of an I16 in bytes.
63 ?S:.
64 ?S:u16size:
65 ?S:     This variable is the size of an U16 in bytes.
66 ?S:.
67 ?S:i32size:
68 ?S:     This variable is the size of an I32 in bytes.
69 ?S:.
70 ?S:u32size:
71 ?S:     This variable is the size of an U32 in bytes.
72 ?S:.
73 ?S:i64size:
74 ?S:     This variable is the size of an I64 in bytes.
75 ?S:.
76 ?S:u64size:
77 ?S:     This variable is the size of an U64 in bytes.
78 ?S:.
79 ?S:nvsize:
80 ?S:     This variable is the size of an NV in bytes.
81 ?S:.
82 ?C:IVTYPE:
83 ?C:     This symbol defines the C type used for Perl's IV.
84 ?C:.
85 ?C:UVTYPE:
86 ?C:     This symbol defines the C type used for Perl's UV.
87 ?C:.
88 ?C:I8TYPE:
89 ?C:     This symbol defines the C type used for Perl's I8.
90 ?C:.
91 ?C:U8TYPE:
92 ?C:     This symbol defines the C type used for Perl's U8.
93 ?C:.
94 ?C:I16TYPE:
95 ?C:     This symbol defines the C type used for Perl's I16.
96 ?C:.
97 ?C:U16TYPE:
98 ?C:     This symbol defines the C type used for Perl's U16.
99 ?C:.
100 ?C:I32TYPE:
101 ?C:     This symbol defines the C type used for Perl's I32.
102 ?C:.
103 ?C:U32TYPE:
104 ?C:     This symbol defines the C type used for Perl's U32.
105 ?C:.
106 ?C:I64TYPE:
107 ?C:     This symbol defines the C type used for Perl's I64.
108 ?C:.
109 ?C:U64TYPE:
110 ?C:     This symbol defines the C type used for Perl's U64.
111 ?C:.
112 ?C:NVTYPE:
113 ?C:     This symbol defines the C type used for Perl's NV.
114 ?C:.
115 ?C:IVSIZE:
116 ?C:     This symbol contains the sizeof(IV).
117 ?C:.
118 ?C:UVSIZE:
119 ?C:     This symbol contains the sizeof(UV).
120 ?C:.
121 ?C:I8SIZE:
122 ?C:     This symbol contains the sizeof(I8).
123 ?C:.
124 ?C:U8SIZE:
125 ?C:     This symbol contains the sizeof(U8).
126 ?C:.
127 ?C:I16SIZE:
128 ?C:     This symbol contains the sizeof(I16).
129 ?C:.
130 ?C:U16SIZE:
131 ?C:     This symbol contains the sizeof(U16).
132 ?C:.
133 ?C:I32SIZE:
134 ?C:     This symbol contains the sizeof(I32).
135 ?C:.
136 ?C:U32SIZE:
137 ?C:     This symbol contains the sizeof(U32).
138 ?C:.
139 ?C:I64SIZE:
140 ?C:     This symbol contains the sizeof(I64).
141 ?C:.
142 ?C:U64SIZE:
143 ?C:     This symbol contains the sizeof(U64).
144 ?C:.
145 ?C:NVSIZE:
146 ?C:     This symbol contains the sizeof(NV).
147 ?C:.
148 ?H:#define      IVTYPE          $ivtype         /**/
149 ?H:#define      UVTYPE          $uvtype         /**/
150 ?H:#define      I8TYPE          $i8type         /**/
151 ?H:#define      U8TYPE          $u8type         /**/
152 ?H:#define      I16TYPE         $i16type        /**/
153 ?H:#define      U16TYPE         $u16type        /**/
154 ?H:#define      I32TYPE         $i32type        /**/
155 ?H:#define      U32TYPE         $u32type        /**/
156 ?H:?%<:#ifdef Quad_t
157 ?H:?%<:#define  I64TYPE         $i64type        /**/
158 ?H:?%<:#define  U64TYPE         $u64type        /**/
159 ?H:?%<:#endif
160 ?H:#define      NVTYPE          $nvtype         /**/
161 ?H:#define      IVSIZE          $ivsize         /**/
162 ?H:#define      UVSIZE          $uvsize         /**/
163 ?H:#define      I8SIZE          $i8size         /**/
164 ?H:#define      U8SIZE          $u8size         /**/
165 ?H:#define      I16SIZE         $i16size        /**/
166 ?H:#define      U16SIZE         $u16size        /**/
167 ?H:#define      I32SIZE         $i32size        /**/
168 ?H:#define      U32SIZE         $u32size        /**/
169 ?H:?%<:#ifdef Quad_t
170 ?H:?%<:#define  I64SIZE         $i64size        /**/
171 ?H:?%<:#define  U64SIZE         $u64size        /**/
172 ?H:?%<:#endif
173 ?H:#define      NVSIZE          $nvsize         /**/
174 ?H:.
175 ?F:!try
176
177 echo " "
178 $echo "Choosing the C types to be used for Perl's internal types..." >&4
179
180 case "$use64bits:$quadtype" in
181 define:?*)
182         ivtype="$quadtype"
183         uvtype="$uquadtype"
184         ivsize=8
185         uvsize=8
186         ;;
187 *)      ivtype="long"
188         uvtype="unsigned long"
189         ivsize=$longsize
190         uvsize=$longsize
191         ;;
192 esac
193
194 case "$uselongdouble:$d_longdbl" in
195 define:define)
196         nvtype="long double"
197         nvsize=$longdblsize
198         ;;
199 *)      nvtype=double
200         nvsize=$doublesize
201         ;;
202 esac
203
204 echo "(IV will be "$ivtype", $ivsize bytes)"
205 echo "(UV will be "$uvtype", $uvsize bytes)"
206 echo "(NV will be "$nvtype", $nvsize bytes)"
207
208 $cat >try.c <<EOCP
209 #$i_inttypes I_INTTYPES
210 #ifdef I_INTTYPES
211 #include <inttypes.h>
212 #endif
213 #include <stdio.h>
214 int main() {
215 #ifdef INT8
216    int8_t i =  INT8_MAX;
217   uint8_t u = UINT8_MAX;
218   printf("int8_t\n");
219 #endif
220 #ifdef INT16
221    int16_t i =  INT16_MAX;
222   uint16_t i = UINT16_MAX;
223   printf("int16_t\n");
224 #endif
225 #ifdef INT32
226    int32_t i =  INT32_MAX;
227   uint32_t u = UINT32_MAX;
228   printf("int32_t\n");
229 #endif
230 }
231 EOCP
232
233 case "$i8type" in
234 '')     case "$charsize" in
235         1)      i8type=char
236                 u8type="unsigned char"
237                 i8size=$charsize
238                 u8size=$charsize
239                 ;;
240         esac
241         ;;
242 esac
243 case "$i8type" in
244 '')     set try -DINT8
245         if eval $compile; then
246                 case "`./try$exe_ext`" in
247                 int8_t) i8type=int8_t
248                         u8type=uint8_t
249                         i8size=1
250                         u8size=1
251                         ;;
252                 esac
253         fi
254         ;;
255 esac
256 case "$i8type" in
257 '')     if $test $charsize -ge 1; then
258                 i8type=char
259                 u8type="unsigned char"
260                 i8size=$charsize
261                 u8size=$charsize
262         fi
263         ;;
264 esac
265
266 case "$i16type" in
267 '')     case "$shortsize" in
268         2)      i16type=short
269                 u16type="unsigned short"
270                 i16size=$shortsize
271                 u16size=$shortsize
272                 ;;
273         esac
274         ;;
275 esac
276 case "$i16type" in
277 '')     set try -DINT16
278         if eval $compile; then
279                 case "`./try$exe_ext`" in
280                 int16_t)
281                         i16type=int16_t
282                         u16type=uint16_t
283                         i16size=2
284                         u16size=2
285                         ;;
286                 esac
287         fi
288         ;;
289 esac
290 case "$i16type" in
291 '')     if $test $shortsize -ge 2; then
292                 i16type=short
293                 u16type="unsigned short"
294                 i16size=$shortsize
295                 u16size=$shortsize
296         fi
297         ;;
298 esac
299
300 case "$i32type" in
301 '')     case "$longsize" in
302         4)      i32type=long
303                 u32type="unsigned long"
304                 i32size=$longsize
305                 u32size=$longsize
306                 ;;
307         *)      case "$intsize" in
308                 4)      i32type=int
309                         u32type="unsigned int"
310                         i32size=$intsize
311                         u32size=$intsize
312                         ;;
313                 esac
314                 ;;
315         esac
316         ;;
317 esac
318 case "$i32type" in
319 '')     set try -DINT32
320         if eval $compile; then
321                 case "`./try$exe_ext`" in
322                 int32_t)
323                         i32type=int32_t
324                         u32type=uint32_t
325                         i32size=4
326                         u32size=4
327                         ;;
328                 esac
329         fi
330         ;;
331 esac
332 case "$i32type" in
333 '')     if $test $intsize -ge 4; then
334                 i32type=int
335                 u32type="unsigned int"
336                 i32size=$intsize
337                 u32size=$intsize
338         fi
339         ;;
340 esac
341
342 case "$i64type" in
343 '')     case "$quadtype" in
344         '')     ;;
345         *)      i64type="$quadtype"
346                 u64type="$uquadtype"
347                 i64size=8
348                 u64size=8
349                 ;;
350         esac
351         ;;
352 esac
353
354 $rm -f try.* try
355