Commit | Line | Data |
---|---|---|
959f3c4c JH |
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 |