This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
13847fa20724aa171f929e79826d48bf1bf847d2
[metaconfig.git] / U / compline / d_casti32.U
1 ?RCS: $Id: d_casti32.U,v 3.0.1.3 1995/05/12 12:10:45 ram Exp $
2 ?RCS:
3 ?RCS: Copyright (c) 1991-1993, Raphael Manfredi
4 ?RCS:
5 ?RCS: You may redistribute only under the terms of the Artistic Licence,
6 ?RCS: as specified in the README file that comes with the distribution.
7 ?RCS: You may reuse parts of this distribution only within the terms of
8 ?RCS: that same Artistic Licence; a copy of which may be found at the root
9 ?RCS: of the source tree for dist 3.0.
10 ?RCS:
11 ?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
12 ?RCS:
13 ?RCS: $Log: d_casti32.U,v $
14 ?RCS: Revision 3.0.1.3  1995/05/12  12:10:45  ram
15 ?RCS: patch54: made sure cc and ccflags are conditional dependencies
16 ?RCS:
17 ?RCS: Revision 3.0.1.2  1994/10/29  16:09:37  ram
18 ?RCS: patch36: declare signal handler correctly (ADO)
19 ?RCS:
20 ?RCS: Revision 3.0.1.1  1994/08/29  16:07:06  ram
21 ?RCS: patch32: created by ADO
22 ?RCS:
23 ?X:
24 ?X:     Can the compiler cast large floats to 32-bit integers?
25 ?X:
26 ?MAKE:d_casti32: cat Compile rm_try intsize Setvar test signal_t run i_stdlib
27 ?MAKE:  -pick add $@ %<
28 ?S:d_casti32:
29 ?S:     This variable conditionally defines CASTI32, which indicates
30 ?S:     whether the C compiler can cast large floats to 32-bit ints.
31 ?S:.
32 ?C:CASTI32:
33 ?C:     This symbol is defined if the C compiler can cast negative
34 ?C:     or large floating point numbers to 32-bit ints.
35 ?C:.
36 ?H:#$d_casti32  CASTI32         /**/
37 ?H:.
38 ?T:xxx yyy
39 ?F:!try
40 ?LINT:set d_casti32
41 : check for ability to cast large floats to 32-bit ints.
42 echo " "
43 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
44 if $test "$intsize" -ge 4; then
45         xxx=int
46 else
47         xxx=long
48 fi
49 $cat >try.c <<EOCP
50 #include <stdio.h>
51 #$i_stdlib I_STDLIB
52 #ifdef I_STDLIB
53 #include <stdlib.h>
54 #endif
55 #include <sys/types.h>
56 #include <signal.h>
57 $signal_t blech(int s) { exit(3); }
58 int main()
59 {
60         $xxx i32;
61         double f, g;
62         int result = 0;
63         char str[16];
64         signal(SIGFPE, blech);
65
66         /* Don't let compiler optimize the test away.  Store the number
67            in a writable string for gcc to pass to sscanf under HP-UX.
68         */
69         sprintf(str, "2147483647");
70         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
71         g = 10 * f;
72         i32  = ($xxx) g;
73
74         /* x86 processors will probably give 0x8000 0000, which is a
75            sign change.  We don't want that.  We want to mimic SPARC
76            behavior here, which is to preserve the sign and give
77            back 0x7fff ffff.
78         */
79         if (i32 != ($xxx) f)
80                 result |= 1;
81         exit(result);
82 }
83 EOCP
84 set try
85 if eval $compile_ok; then
86         $run ./try
87         yyy=$?
88 else
89         echo "(I can't seem to compile the test program--assuming it can't)"
90         yyy=1
91 fi
92 case "$yyy" in
93 0)      val="$define"
94         echo "Yup, it can."
95         ;;
96 *)      val="$undef"
97         echo "Nope, it can't."
98         ;;
99 esac
100 set d_casti32
101 eval $setvar
102 $rm_try
103