1 ?RCS: $Id: cppstdin.U,v 3.0.1.4 1994/10/29 16:08:34 ram Exp $
3 ?RCS: Copyright (c) 1991-1993, Raphael Manfredi
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.
11 ?RCS: $Log: cppstdin.U,v $
12 ?RCS: Revision 3.0.1.4 1994/10/29 16:08:34 ram
13 ?RCS: patch36: added ?F: line for metalint file checking
15 ?RCS: Revision 3.0.1.3 1994/01/24 14:05:38 ram
16 ?RCS: patch16: comment for CPPLAST was missing
18 ?RCS: Revision 3.0.1.2 1993/12/15 08:18:58 ram
19 ?RCS: patch15: new variables cpprun and cpplast, guaranteed wrapper-free
20 ?RCS: patch15: cppstdin now tries to use cc, even at the cost of a wrapper
22 ?RCS: Revision 3.0.1.1 1993/08/25 14:00:53 ram
23 ?RCS: patch6: remove wrapper when not actually used
25 ?RCS: Revision 3.0 1993/08/18 12:05:38 ram
26 ?RCS: Baseline for dist 3.0 netwide release.
28 ?MAKE:cppstdin cppminus cpprun cpplast: contains test \
29 Myread Oldconfig Loc cpp +cc rm hint osname gccversion
30 ?MAKE: -pick add $@ %<
32 ?S: This variable contains the command which will invoke the C
33 ?S: preprocessor on standard input and put the output to stdout.
34 ?S: It is primarily used by other Configure units that ask about
35 ?S: preprocessor symbols.
38 ?S: This variable contains the second part of the string which will invoke
39 ?S: the C preprocessor on the standard input and produce to standard
40 ?S: output. This variable will have the value "-" if cppstdin needs
41 ?S: a minus to specify standard input, otherwise the value is "".
44 ?S: This variable contains the command which will invoke a C preprocessor
45 ?S: on standard input and put the output to stdout. It is guaranteed not
46 ?S: to be a wrapper and may be a null string if no preprocessor can be
47 ?S: made directly available. This preprocessor might be different from the
48 ?S: one used by the C compiler. Don't forget to append cpplast after the
49 ?S: preprocessor options.
52 ?S: This variable has the same functionality as cppminus, only it applies
53 ?S: to cpprun and not cppstdin.
56 ?C: This symbol contains the first part of the string which will invoke
57 ?C: the C preprocessor on the standard input and produce to standard
58 ?C: output. Typical value of "cc -E" or "/lib/cpp", but it can also
59 ?C: call a wrapper. See CPPRUN.
62 ?C: This symbol contains the second part of the string which will invoke
63 ?C: the C preprocessor on the standard input and produce to standard
64 ?C: output. This symbol will have the value "-" if CPPSTDIN needs a minus
65 ?C: to specify standard input, otherwise the value is "".
68 ?C: This symbol contains the string which will invoke a C preprocessor on
69 ?C: the standard input and produce to standard output. It needs to end
70 ?C: with CPPLAST, after all other preprocessor flags have been specified.
71 ?C: The main difference with CPPSTDIN is that this program will never be a
72 ?C: pointer to a shell wrapper, i.e. it will be empty if no preprocessor is
73 ?C: available directly to the user. Note that it may well be different from
74 ?C: the preprocessor used to compile the C program.
77 ?C: This symbol is intended to be used along with CPPRUN in the same manner
78 ?C: symbol CPPMINUS is used with CPPSTDIN. It contains either "-" or "".
80 ?H:#define CPPSTDIN "$cppstdin"
81 ?H:#define CPPMINUS "$cppminus"
82 ?H:#define CPPRUN "$cpprun"
83 ?H:#define CPPLAST "$cpplast"
86 ?T:wrapper x_cpp x_minus ok
87 : see how we invoke the C preprocessor
89 echo "Now, how can we feed standard input to your C preprocessor..." >&4
90 cat <<'EOT' >testcpp.c
96 if test ! -f cppstdin; then
97 if test "X$osname" = "Xaix" -a "X$gccversion" = X; then
98 # AIX cc -E doesn't show the absolute headerfile
99 # locations but we'll cheat by using the -M flag.
100 echo 'cat >.$$.c; rm -f .$$.u; '"$cc"' ${1+"$@"} -M -c .$$.c 2>/dev/null; test -s .$$.u && awk '"'"'$2 ~ /\.h$/ { print "# 0 \""$2"\"" }'"'"' .$$.u; rm -f .$$.o .$$.u; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' > cppstdin
102 echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
105 echo "Keeping your $hint cppstdin wrapper."
108 wrapper=`pwd`/cppstdin
113 ?X: We'll run the cpp tests again if we don't have any valid C preprocessor
114 ?X: yet or don't know how to proceed without a wrapper (in which case cpprun
115 ?X: is empty and that's really annoying...)
117 if $test "X$cppstdin" != "X" && \
118 $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
119 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
121 echo "You used to use $cppstdin $cppminus so we'll use that again."
123 '') echo "But let's see if we can live without a wrapper..." ;;
125 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
126 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
128 echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
131 echo "(However, $cpprun $cpplast does not work, let's see...)"
139 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
146 elif echo 'Maybe "'"$cc"' -E" will work...'; \
147 $cc -E <testcpp.c >testcpp.out 2>&1; \
148 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
152 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
153 $cc -E - <testcpp.c >testcpp.out 2>&1; \
154 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
158 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
159 $cc -P <testcpp.c >testcpp.out 2>&1; \
160 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
161 echo "Yipee, that works!"
164 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
165 $cc -P - <testcpp.c >testcpp.out 2>&1; \
166 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
170 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
171 $cpp <testcpp.c >testcpp.out 2>&1; \
172 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
176 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
177 $cpp - <testcpp.c >testcpp.out 2>&1; \
178 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
179 echo "Hooray, it works! I was beginning to wonder."
182 elif echo 'Uh-uh. Time to get fancy. Trying a wrapper...'; \
183 $wrapper <testcpp.c >testcpp.out 2>&1; \
184 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
190 rp="No dice. I can't find a C preprocessor. Name one:"
194 $x_cpp <testcpp.c >testcpp.out 2>&1
195 if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
196 echo "OK, that will do." >&4
198 echo "Sorry, I can't get that to work. Go find one and rerun Configure." >&4
210 ?X: If /lib/cpp is used, try using a wrapper to increase our chances to have
211 ?X: the C compiler and our $cppstdin agree on the same symbols... However,
212 ?X: since cpprun is guaranteed not to be a wrapper, we must clear it if the
213 ?X: only preprocessor we found was a wrapper, with all our luck...
219 echo "Perhaps can we force $cc -E using a wrapper..."
220 if $wrapper <testcpp.c >testcpp.out 2>&1; \
221 $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
227 echo "Nope, we'll have to live without it..."
241 "$wrapper"|'cppstdin') ;;
244 $rm -f testcpp.c testcpp.out