This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Populate metaconfig branch.
[metaconfig.git] / U / compline / Csym.U
1 ?RCS: $Id: Csym.U,v 3.0.1.4 1995/07/25 13:36:29 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: $Log: Csym.U,v $
12 ?RCS: Revision 3.0.1.4  1995/07/25  13:36:29  ram
13 ?RCS: patch56: re-arranged compile line to include ldflags before objects
14 ?RCS: patch56: added quotes for OS/2 support
15 ?RCS:
16 ?RCS: Revision 3.0.1.3  1995/05/12  12:00:33  ram
17 ?RCS: patch54: fixed C test program to bypasss gcc builtin type checks (ADO)
18 ?RCS:
19 ?RCS: Revision 3.0.1.2  1994/10/31  09:34:13  ram
20 ?RCS: patch44: added Options to the MAKE line since it's no longer in Init.U
21 ?RCS:
22 ?RCS: Revision 3.0.1.1  1993/08/25  14:00:05  ram
23 ?RCS: patch6: added ldflags as a conditional dependency and to compile line
24 ?RCS: patch6: a final double quote was missing in csym variable after eval
25 ?RCS:
26 ?RCS: Revision 3.0  1993/08/18  12:04:50  ram
27 ?RCS: Baseline for dist 3.0 netwide release.
28 ?RCS:
29 ?MAKE:Csym: Options contains libc libs runnm +cc +optimize +ccflags +ldflags rm
30 ?MAKE:  -pick add $@ %<
31 ?LINT:define csym
32 ?LINT:use libc
33 ?S:csym:
34 ?S:     This shell variable is used internally by Configure to check
35 ?S:     wether a given C symbol is defined or not. A typical use is:
36 ?S:             set symbol result [-fva] [previous]
37 ?S:             eval $csym
38 ?S:     That will set result to 'true' if the function [-f], variable [-v]
39 ?S:     or array [-a] is defined, 'false' otherwise. If a previous value is
40 ?S:     given and the -r flag was provided on the command line, that value
41 ?S:     is reused without questioning.
42 ?S:.
43 ?V:csym
44 ?T:tval tx tlook tf tdc tc
45 : is a C symbol defined?
46 csym='tlook=$1;
47 case "$3" in
48 -v) tf=libc.tmp; tc=""; tdc="";;
49 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
50 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
51 esac;
52 tx=yes;
53 case "$reuseval-$4" in
54 true-) ;;
55 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
56 esac;
57 case "$tx" in
58 yes)
59         case "$runnm" in
60         true)
61                 if $contains $tlook $tf >/dev/null 2>&1;
62                 then tval=true;
63                 else tval=false;
64                 fi;;
65         *)
66 ?X:
67 ?X: Put symbol inside a printf to fool optimizing compilers...
68 ?X:
69 ?X: We use 'short' instead of 'int' to try to circumvent overzealous
70 ?X: optimizing compilers using built-in prototypes for commonly used
71 ?X: routines to complain when seeing a different external declaration. For
72 ?X: instance, gcc 2.6.3 fails if we use 'int' and we attempt a test against
73 ?X: memcpy() on machines where sizeof(int) == sizeof(char *) (the usual return
74 ?X: type), the compiler assuming it's a built-in declaration given that the
75 ?X: returned size matches. At least with 'short' we are safe! -- RAM, for ADO
76 ?X:
77 ?X: Let's thank GNU cc for making our lifes so easy! :-)
78 ?X: (An alternative for the future would be to use our knowledge about gcc
79 ?X: to force a -fno-builtin option in the compile test, in case the 'short'
80 ?X: trick is obsoleted by future gcc releases). -- RAM
81 ?X:
82                 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
83                 if $cc $optimize $ccflags $ldflags -o t t.c $libs >/dev/null 2>&1;
84                 then tval=true;
85                 else tval=false;
86                 fi;
87                 $rm -f t t.c;;
88         esac;;
89 *)
90         case "$tval" in
91         $define) tval=true;;
92         *) tval=false;;
93         esac;;
94 esac;
95 eval "$2=$tval"'
96