This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
9bffda7ff784070167b0b3267ee289d790c6a114
[metaconfig.git] / U / perl / Checkcc.U
1 ?RCS:
2 ?RCS: $Id$
3 ?RCS:
4 ?RCS: Copyright (c) 2000, Jarkko Hietaniemi
5 ?RCS: 
6 ?X: 
7 ?X: This unit produces a bit of shell code that must be dotted in order
8 ?X: to make quick check on whether the current C compiler is working.
9 ?X:     
10 ?MAKE:Checkcc ccname ccversion: rm cat test Myread startsh
11 ?MAKE:  -pick add $@ %<
12 ?S:ccname:
13 ?S:     This can set either by hints files or by Configure.  If using
14 ?S:     gcc, this is gcc, and if not, usually equal to cc, unimpressive, no?
15 ?S:     Some platforms, however, make good use of this by storing the
16 ?S:     flavor of the C compiler being used here.  For example if using
17 ?S:     the Sun WorkShop suite, ccname will be 'workshop'.
18 ?S:.
19 ?S:ccversion:
20 ?S:     This can set either by hints files or by Configure.  If using
21 ?S:     a (non-gcc) vendor cc, this variable may contain a version for
22 ?S:     the compiler.
23 ?S:.
24 ?T: trygcc despair
25 ?F:./checkcc
26 ?F:./trygcc
27 ?INIT:ccname=''
28 ?INIT:ccversion=''
29 ?LINT:extern cc
30 ?LINT:change cc
31 ?LINT:extern ccflags
32 ?LINT:change ccflags
33 ?LINT:extern ccflags
34 ?LINT:extern ldflags
35 : Check what type of C compiler we use
36 cat <<EOS >trygcc
37 $startsh
38 EOS
39 cat <<'EOSC' >>trygcc
40 case "$cc" in
41 '') ;;
42 *)  $rm -f try try.*
43     $cat >try.c <<EOM
44 int main(int argc, char *argv[]) {
45   return 0;
46 }
47 EOM
48     if $cc -o try $ccflags $ldflags try.c; then
49        :
50     else
51         echo "Uh-oh, the C compiler '$cc' doesn't seem to be working." >&4
52         despair=yes
53         trygcc=yes
54         case "$cc" in
55         *gcc*) trygcc=no ;;
56         esac
57         # Skip this test because it gives a false match on output like:
58         #    ./trygcc: line 23: cc: command not found
59         # case "`$cc -v -c try.c 2>&1`" in
60         # *gcc*) trygcc=no ;;
61         # esac
62         if $test X"$trygcc" = Xyes; then
63             if gcc -o try -c try.c; then
64                 echo " "
65                 echo "You seem to have a working gcc, though." >&4
66                 # Switching compilers may undo the work of hints files.
67                 # The most common problem is -D_REENTRANT for threads.
68                 # This heuristic catches that case, but gets false positives
69                 # if -Dusethreads was not actually specified.  Better to
70                 # bail out here with a useful message than fail 
71                 # mysteriously later. Should we perhaps just try to
72                 # re-invoke Configure -Dcc=gcc config_args ?
73                 if $test -f usethreads.cbu; then
74                         $cat >&4 <<EOM 
75
76 *** However, any setting of the C compiler flags (e.g. for thread support)
77 *** will be lost.  It may be necessary for you to restart Configure and
78 *** add -Dcc=gcc to your Configure command line.
79
80 EOM
81                         rp="Would you like to go ahead and try gcc anyway?"
82                         dflt=n
83                 else
84                         rp="Would you like to use it?"
85                         dflt=y
86                 fi
87                 if $test -f myread; then
88                     . ./myread
89                 else
90                     if $test -f UU/myread; then
91                         . ./UU/myread
92                     else
93                         echo "Cannot find myread, sorry.  Aborting." >&2
94                         exit 1
95                     fi
96                 fi  
97                 case "$ans" in
98                 [yY]*) cc=gcc; ccname=gcc; ccflags=''; despair=no;
99                 esac
100             fi
101         fi
102     fi
103     $rm -f try try.*
104     ;;
105 esac
106 EOSC
107
108 cat <<EOS >checkcc
109 $startsh
110 EOS
111 cat <<'EOSC' >>checkcc
112 case "$cc" in        
113 '') ;;
114 *)  $rm -f try try.*              
115     $cat >try.c <<EOM
116 int main(int argc, char *argv[]) {
117   return 0;
118 }
119 EOM
120     if $cc -o try $ccflags $ldflags try.c; then
121        :
122     else
123         if $test X"$despair" = Xyes; then
124            echo "Uh-oh, the C compiler '$cc' doesn't seem to be working." >&4
125         fi
126         $cat >&4 <<EOM         
127 You need to find a working C compiler.
128 Either (purchase and) install the C compiler supplied by your OS vendor,
129 or for a free C compiler try http://gcc.gnu.org/
130 I cannot continue any further, aborting.
131 EOM
132         exit 1
133     fi
134     $rm -f try try.*
135     ;;
136 esac
137 EOSC
138