This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
8322601192fdaa61b4ce22385cca105a82bdca35
[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 use64bits
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 counterpar, 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 ?T:verb
46 ?LINT:set quadtype
47 ?LINT:set uquadtype
48
49 echo " "
50 echo "Checking which 64-bit integer type we could use..." >&4
51 ?X: We prefer quad types in order of int, long, long long, int64_t.
52
53 case "$intsize" in
54 8) val=int
55    set quadtype
56    eval $setvar
57    val='"unsigned int"'
58    set uquadtype
59    eval $setvar
60    quadkind=1
61    ;;
62 *) case "$longsize" in
63    8) val=long
64       set quadtype
65       eval $setvar
66       val='"unsigned long"'
67       set uquadtype
68       eval $setvar
69       quadkind=2
70       ;;
71    *) case "$d_longlong:$longlongsize" in
72       define:8)
73         val='"long long"'
74         set quadtype
75         eval $setvar
76         val='"unsigned long long"'
77         set uquadtype
78         eval $setvar
79         quadkind=3
80         ;;
81       *) case "$d_int64_t" in
82          define)
83            val=int64_t
84            set quadtype
85            eval $setvar
86            val=uint64_t
87            set uquadtype
88            eval $setvar
89            quadkind=4
90            ;;
91          esac
92          ;;
93       esac
94       ;;
95    esac
96    ;;
97 esac
98
99 case "$quadtype" in
100 '')     echo "Alas, no 64-bit integer types in sight." >&4
101         d_quad="$undef"
102         ;;
103 *)      if test X"$use64bits" = Xdefine -o X"$longsize" = X8; then
104             verb="will"
105         else
106             verb="could"
107         fi
108         echo "We $verb use '$quadtype' for 64-bit integers." >&4
109         d_quad="$define"
110         ;;
111 esac
112