This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
4fda76005a279983f9d45a5505cde1ca9f2e4423
[metaconfig.git] / U / a_dvisory / quadtype.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:d_quad quadtype uquadtype quadkind: \
9         longsize intsize d_longlong longlongsize d_int64_t \
10         Inhdr Setvar
11 ?MAKE:  -pick add $@ %<
12 ?S:d_quad:
13 ?S:     This variable, if defined, tells that there's a 64-bit integer type,
14 ?S:     quadtype.
15 ?S:.
16 ?S:quadtype:
17 ?S:     This variable defines Quad_t to be something like long, int, 
18 ?S:     long long, int64_t, or whatever type is used for 64-bit integers.
19 ?S:.
20 ?S:quadkind:
21 ?S:     This variable, if defined, encodes the type of a quad:
22 ?S:     1 = int, 2 = long, 3 = long long, 4 = int64_t.
23 ?S:.
24 ?S:uquadtype:
25 ?S:     This variable defines Uquad_t to be something like unsigned long,
26 ?S:     unsigned int, unsigned long long, uint64_t, or whatever type is
27 ?S:     used for 64-bit integers.
28 ?S:.
29 ?C:HAS_QUAD:
30 ?C:     This symbol, if defined, tells that there's a 64-bit integer type,
31 ?C:     Quad_t, and its unsigned counterpart, Uquad_t. QUADKIND will be one
32 ?C:     of QUAD_IS_INT, QUAD_IS_LONG, QUAD_IS_LONG_LONG, or QUAD_IS_INT64_T.
33 ?C:.
34 ?H:#$d_quad HAS_QUAD    /**/
35 ?H:?%<:#ifdef HAS_QUAD
36 ?H:?%<:#   define Quad_t $quadtype      /**/
37 ?H:?%<:#   define Uquad_t $uquadtype    /**/
38 ?H:?%<:#   define QUADKIND $quadkind    /**/
39 ?H:?%<:#   define QUAD_IS_INT   1
40 ?H:?%<:#   define QUAD_IS_LONG  2
41 ?H:?%<:#   define QUAD_IS_LONG_LONG     3
42 ?H:?%<:#   define QUAD_IS_INT64_T       4
43 ?H:?%<:#endif
44 ?H:.
45 ?LINT:set quadtype
46 ?LINT:set uquadtype
47 : Check if 64bit ints have a quad type
48 echo " "
49 echo "Checking which 64-bit integer type we could use..." >&4
50 ?X: We prefer quad types in order of int, long, long long, int64_t.
51
52 case "$intsize" in
53 8) val=int
54    set quadtype
55    eval $setvar
56    val='"unsigned int"'
57    set uquadtype
58    eval $setvar
59    quadkind=1
60    ;;
61 *) case "$longsize" in
62    8) val=long
63       set quadtype
64       eval $setvar
65       val='"unsigned long"'
66       set uquadtype
67       eval $setvar
68       quadkind=2
69       ;;
70    *) case "$d_longlong:$longlongsize" in
71       define:8)
72         val='"long long"'
73         set quadtype
74         eval $setvar
75         val='"unsigned long long"'
76         set uquadtype
77         eval $setvar
78         quadkind=3
79         ;;
80       *) case "$d_int64_t" in
81          define)
82            val=int64_t
83            set quadtype
84            eval $setvar
85            val=uint64_t
86            set uquadtype
87            eval $setvar
88            quadkind=4
89            ;;
90          esac
91          ;;
92       esac
93       ;;
94    esac
95    ;;
96 esac
97
98 case "$quadtype" in
99 '')     echo "Alas, no 64-bit integer types in sight." >&4
100         d_quad="$undef"
101         ;;
102 *)      echo "We could use '$quadtype' for 64-bit integers." >&4
103         d_quad="$define"
104         ;;
105 esac
106