1:
2### this script contains archaic constructs that work with all sh variants ###
3# Glenn Fowler
4# AT&T Research
5#
6# @(#)C probe (AT&T Research) 2012-02-29
7#
8# probe [ -d ] c-compiler-path [ attributes ]
9#
10# common C probe preamble for the tool specific probes
11#
12# NOTE: some cc -E's do syntax analysis!
13
14#
15# probe_* are first eval'd and then attempted from left to right
16#
17
18probe_binding="-dy -dn -Bdynamic -Bstatic '-Wl,-ashared -Wl,+s' -Wl,-aarchive -call_shared -non_shared -dynamic -static -bshared -bstatic '' -static"
19probe_env="CC_OPTIONS CCOPTS LD_OPTIONS LDOPTS LIBPATH LPATH"
20probe_include="stdio.h iostream.h complex.h ctype.h plot.h stdarg.h varargs.h ranlib.h hash.h sys/types.h stab.h cmath cstdio iostream string"
21probe_longlong="long 'long long'"
22probe_longlong_t="__int64_t _int64_t __int64 _int64 int64"
23probe_l="l yyreject m sin mopt sin"
24probe_lxx="C exit ++ exit g++ exit"
25probe_ppprefix="a n"
26probe_size="size"
27probe_src="cxx C cc c"
28probe_sa=".sa"
29probe_sd=".dll .lib .dll .x"
30probe_sdb=".pdb"
31probe_so=".dylib .so .sl"
32probe_symprefix="_"
33probe_verbose="'-v -v' '-# -#' '-d -d' -dryrun '-V -V'"
34probe_version="--version -V -version -v"
35
36#
37# the following are set by the preamble for the tool specific probe
38#
39
40cc=cc
41debug=
42dir=.
43dll=.dll
44dynamic=
45exe=exe
46executable="test -x"
47hosted=
48ifs=${IFS-'
49	 '}
50obj=o
51ppenv=
52ppopt=
53predef=
54prepred=
55sa=
56sd=
57sdb=
58so=
59sov=
60static=
61stdlib=
62stdpp=
63suffix_command=
64if	test "" != "$TMPDIR" -a -d "$TMPDIR"
65then	tmpdir=$TMPDIR
66else	tmpdir=/tmp
67fi
68tmpdir=$tmpdir/probe$$
69undef="define defined elif else endif error if ifdef ifndef include line pragma undef __STDC__ __STDPP__ __ARGC__ __BASE__ __BASE_FILE__ __DATE__ __FILE__ __FUNCTION__ __INCLUDE_LEVEL__ __LINE__ __PATH__ __TIME__ __TIMESTAMP__ __VERSION__"
70version_flags=
71version_stamp=
72version_string=
73
74#
75# constrain the environment
76#
77
78DISPLAY=
79LC_ALL=C
80export DISPLAY LC_ALL
81
82#
83# now the common probes
84#
85
86while	:
87do	case $1 in
88	-d)	debug=1 ;;
89	-*)	set ''; break ;;
90	*)	break ;;
91	esac
92	shift
93done
94
95cc=$1
96case $cc in
97[\\/]*|[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz]:\\*)
98	;;
99*)	echo "Usage: $0 [ -d ] c-compiler-path [ attributes ]" >&2
100	exit 1
101	;;
102esac
103ATTRIBUTES=
104eval $2
105_probe_PATH=$PATH
106PATH=/usr/bin:/bin:$PATH
107
108case $0 in
109*[\\/]*)	dir=`echo $0 | sed -e 's,[\\/][\\/]*[^\\/]*\$,,'` ;;
110esac
111
112$executable . 2>/dev/null || executable='test -r'
113
114case $SHELL in
115[\\/]*|[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz]:\\*)
116	sh=$SHELL
117	;;
118*)	sh=/bin/sh
119	;;
120esac
121
122trap 'code=$?; cd ..; rm -rf $tmpdir; exit $code' 0 1 2 3
123mkdir $tmpdir
124cd $tmpdir
125
126exec 3>&1 4>&2 </dev/null
127case $debug in
128"")	exec >/dev/null 2>&1
129	(ulimit -c 0) >/dev/null 2>&1 && ulimit -c 0
130	;;
131*)	PS4='+$LINENO+ '
132	set -x
133	;;
134esac
135
136if	(xxx=xxx; unset xxx)
137then	UNSET=1
138else	UNSET=
139fi
140eval set x $probe_env
141while	:
142do	shift
143	case $# in
144	0)	break ;;
145	esac
146	eval x='$'$1
147	case $x in
148	'')	continue ;;
149	esac
150	case $1 in
151	*PATH)	_probe_export="$_probe_export $1='$x'" ;;
152	esac
153	case $UNSET in
154	'')	eval $1=
155		export $1
156		;;
157	*)	unset $1
158		;;
159	esac
160done
161
162if	test -f "$dir/probe.ini"
163then	. "$dir/probe.ini"
164	IFS=$ifs
165fi
166
167mkdir suffix
168cd suffix
169for src in $probe_src
170do	echo "int main(){return 0;}" > ../test.$src
171	rm -f test*
172	if	$cc -c ../test.$src
173	then	set test.*
174		if	test -f "$1"
175		then	o="$*"
176			mv $* ..
177			for i in $o
178			do	if	$cc -o test.exe ../$i
179				then	obj=`echo "$i" | sed -e 's,test.,,'`
180					$executable test.exe || executable="test -r"
181					set test*
182					rm *
183					if	$cc -o test ../$i
184					then	rm $*
185						set test.*
186						if	$executable "$1"
187						then	exe=`echo "$1" | sed -e 's,test.,,'`
188							suffix_command=.$exe
189						fi
190					fi
191					break 2
192				fi
193			done
194		fi
195	fi
196done
197cd ..
198
199case $src in
200c)	;;
201*)	echo '// (
202int
203main()
204{
205	class { public: int i; } j;
206	j.i = 0;
207	int k = j.i + 1;
208	return k;
209}' > dialect.$src
210	if	$cc -c dialect.$src && $cc -o dialect.$exe dialect.$obj && $executable dialect.$exe
211	then	mv dialect.$src dialect.c
212		rm -f dialect.$obj dialect.$exe
213		if	$cc -c dialect.c && $cc -o dialect.$exe dialect.$obj && $executable dialect.$exe
214		then	src=c
215		else	set x $cc
216			while	:
217			do	shift
218				case $# in
219				0)	break ;;
220				esac
221				case $1 in
222				*=*)	continue ;;
223				esac
224				case `echo $1 | sed -e 's,.*/,,'` in
225				*CC*|*++*|*[xX][xX]*|*[pP][lL][uU][sS]*) ;;
226				*)	src=c ;;
227				esac
228				break
229			done
230		fi
231	else	src=c
232	fi
233	;;
234esac
235
236set x x '(' 1 'int x;' 0
237while	:
238do	shift
239	shift
240	case $# in
241	[01])	break ;;
242	esac
243	rm -f test.$obj
244	echo "$1" > test.$src
245	$cc -c test.$src
246	r=$?
247	case $r in
248	0)	test -f test.$obj || r=1 ;;
249	*)	r=1 ;;
250	esac
251	case $2:$r in
252	0:0)	;;
253	0:1)	echo "$cc: not a C compiler: failed to compile \`\`$1''" >&4
254		exit 1
255		;;
256	1:0)	echo "$cc: not a C compiler: successfully compiled \`\`$1''" >&4
257		exit 1
258		;;
259	esac
260done
261
262hosttype=`package CC="$cc" || $SHELL -c "package CC='$cc'"`
263case $hosttype in
264*[Uu][Ss][Aa][Gg][Ee]:*)
265	hosttype=`PATH=$_probe_PATH; export PATH; package CC="$cc" || $SHELL -c "package CC='$cc'"`
266	;;
267esac
268
269echo '#include <stdio.h>
270int main(){printf("hello");return 0;}' > dynamic.$src
271echo 'extern int sfclose() { return 0; }' > fun.$src
272if	$cc -c dynamic.$src && $cc -c fun.$src
273then	eval set x $probe_so
274	while	:
275	do	shift
276		case $# in
277		0)	break ;;
278		esac
279		for i in foo junk
280		do	rm -f dynamic.$exe
281			if	$cc -L. -o dynamic.$exe dynamic.$obj -l$i
282			then	: "there's really a -l$i"?
283			else	rm -f dynamic.$exe
284				cat fun.$obj > lib$i$1
285				$cc -L. -o dynamic.$exe dynamic.$obj -l$i && $executable dynamic.$exe
286				x=$?
287				rm lib$i$1
288				case $x in
289				0)	so=$1
290					rm -f dynamic.$exe > lib$i$1.1
291					$cc -L. -o dynamic.$exe dynamic.$obj -l$i && $executable dynamic.$exe
292					x=$?
293					rm lib$i$1.1
294					case $x in
295					0)	sov=1 ;;
296					esac
297					break 2
298					;;
299				*)	break
300					;;
301				esac
302			fi
303		done
304		k=
305		for i in "" .1 .2 .3 .4 .5 .6 .7 .8 .9
306		do	rm -f dynamic.$exe > libc$1$i
307			$cc -L. -o dynamic.$exe dynamic.$obj && $executable dynamic.$exe
308			x=$?
309			(cd ..; rm $tmpdir/libc$1$i)
310			case $x in
311			0)	;;
312			*)	k=X$k
313				case $k in
314				XXX)	break ;;
315				esac
316				;;
317			esac
318		done
319		case $k in
320		XXX)	so=$1
321			sov=1
322			break
323			;;
324		?*)	so=$1
325			break
326			;;
327		esac
328	done
329	rm -f dynamic.$exe
330	if	$cc -o dynamic.$exe dynamic.$obj 2>e && $executable dynamic.$exe
331	then	e=`wc -l e`
332		maybe=
333		eval set x x $probe_binding
334		while	:
335		do	shift
336			shift
337			case $# in
338			0)	break ;;
339			esac
340			rm -f dynamic.$exe
341			$cc -o dynamic.$exe $1 dynamic.$obj 2>e && $executable dynamic.$exe || continue
342			case $1 in
343			?*)	case $maybe in
344				"")	maybe=$1 ;;
345				*)	maybe=-- ;;
346				esac
347				;;
348			esac
349			case `wc -l e` in
350			$e)	;;
351			*)	continue ;;
352			esac
353			d=`ls -s dynamic.$exe`
354			rm -f dynamic.$exe
355			$cc -o dynamic.$exe $2 dynamic.$obj 2>e && $executable dynamic.$exe || continue
356			case `wc -l e` in
357			$e)	;;
358			*)	continue ;;
359			esac
360			case `ls -s dynamic.$exe` in
361			$d)	;;
362			*)	dynamic=$1
363				static=$2
364				maybe=
365				break
366				;;
367			esac
368		done
369		case $maybe in
370		""|--)	;;
371		*)	rm -f dynamic.$exe
372			if	$cc -o dynamic.$exe $maybe dynamic.$obj 2>e && $executable dynamic.$exe
373			then	e=`wc -l e`
374				if	$cc -o dynamic.$exe $maybe-bogus-bogus-bogus dynamic.$obj 2>e && $executable dynamic.$exe
375				then	case `wc -l e` in
376					$e)	;;
377					*)	dynamic=$maybe ;;
378					esac
379				else	dynamic=$maybe
380				fi
381			fi
382			;;
383		esac
384	fi
385fi
386
387eval set x $probe_version
388shift
389for o in "$@"
390do	if	$cc $o > version.out 2>&1
391	then	version_string=`sed -e '/ is /d' -e 's/;/ /g' version.out | sed -e 1q`
392		case $version_string in
393		''|*[Ee][Rr][Rr][Oo][Rr]*|*[Ff][Aa][Tt][Aa][Ll]*|*[Ww][Aa][Rr][Nn][Ii][Nn][Gg]*|*[Oo][Pp][Tt][Ii][Oo][Nn]*)
394			;;
395		*)	version_flags=$o
396			version_stamp=";VERSION;$o;$version_string;PATH;$cc"
397			break
398			;;
399		esac
400	fi
401done
402case $version_stamp in
403'')	eval set x $probe_version
404	shift
405	echo 'int main() { return 0; }' > version.i
406	for o in "$@"
407	do	if	$cc -c $o version.i > version.out 2>&1
408		then	version_string=`sed -e '/ is /d' -e 's/;/ /g' version.out | sed -e 1q`
409			case $version_string in
410			''|*[Ee][Rr][Rr][Oo][Rr]*|*[Ff][Aa][Tt][Aa][Ll]*|*[Ww][Aa][Rr][Nn][Ii][Nn][Gg]*|*[Oo][Pp][Tt][Ii][Oo][Nn]*)
411				;;
412			*)	version_flags=$o
413				break
414				;;
415			esac
416		fi
417	done
418	;;
419esac
420
421echo 'int main(){return 0;}' > hosted.$src
422$cc -o hosted.$exe hosted.$src && ./hosted.$exe && hosted=1
423
424echo '#!'$sh'
425echo "" $@' > cpp
426chmod +x cpp
427case `./cpp -Dprobe` in
428*-Dprobe*)
429	;;
430*)	cp /bin/echo cpp
431	chmod u+w cpp
432	;;
433esac
434for prefix in $probe_ppprefix `echo $cc | sed -e '/cc\$/!d' -e 's,cc\$,,' -e 's,.*/,,'`
435do	cp cpp ${prefix}cpp
436done
437
438echo "" > flags.$src
439echo '#pragma pp:version' > libpp.$src
440
441if	test `realcppC=./cpp $cc -Dprobe -E flags.$src | tee cpp.out | grep -c '[-]Dprobe'` -eq 1
442then	ppenv='realcppC=${ppcmd}'
443elif	test `cppC=./cpp $cc -Dprobe -E flags.$src | tee cpp.out | grep -c '[-]Dprobe'` -eq 1
444then	ppenv='cppC=${ppcmd}'
445elif	test `_CPPNAME=./cpp $cc -Dprobe -E flags.$src | tee cpp.out | grep -c '[-]Dprobe'` -eq 1
446then	ppenv='_CPPNAME=${ppcmd}'
447elif	test `_CPP=./cpp $cc -Dprobe -E flags.$src | tee cpp.out | grep -c '[-]Dprobe'` -eq 1
448then	ppenv='_CPP=${ppcmd}'
449elif	test `$cc -Dprobe -E -%p+. flags.$src | tee cpp.out | grep -c '[-]Dprobe'` -eq 1 && test `$cc -Dprobe -E -%p+. flags.$src | wc -l` -eq 1
450then	ppopt='-%p+${ppdir}'
451elif	test `$cc -Dprobe -E -Yp,. flags.$src | tee cpp.out | grep -c '[-]Dprobe'` -eq 1
452then	ppopt='-Yp,${ppdir}'
453elif	test `$cc -Dprobe -E -Qpath $tmpdir flags.$src | tee cpp.out | grep -c '[-]Dprobe'` -eq 1
454then	ppopt='-Qpath ${ppdir}'
455elif	test `$cc -Dprobe -E -tp -B./ flags.$src 2>err.out | tee cpp.out | grep -c '[-]Dprobe'` -eq 1 -a ! -s err.out
456then	ppopt='-tp -B${ppdir}/'
457elif	test `$cc -Dprobe -E -B./ flags.$src | tee cpp.out | grep -c '[-]Dprobe'` -eq 1
458then	ppopt='-B${ppdir}/'
459elif	test `$cc -Dprobe -E -tp -h./ -B flags.$src | tee cpp.out | grep -c '[-]Dprobe'` -eq 1
460then	ppopt='-tp -h${ppdir}/ -B'
461elif	test `$cc -Dprobe -E -t p,./cpp flags.$src | tee cpp.out | grep -c '[-]Dprobe'` -eq 1
462then	ppopt='-t p,${ppcmd}'
463else	{
464		eval set x $probe_verbose
465		shift
466		for o in "$@"
467		do	$cc -E $o flags.$src
468		done
469	} 2>&1 | sed -e "s/['\"]//g" > cpp.out
470fi
471
472set x `sed -e 's,[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz]:\\\\,/,g' -e 's,\\\\,/,g' cpp.out`
473def=
474definclude="-I+C -I-H"
475stdinclude=$definclude
476case $hosted in
477"")	usrinclude= ;;
478esac
479cmdinclude=
480while	:
481do	case $# in
482	0|1)	break ;;
483	esac
484	shift
485	case $1 in
486	-A)	case $2 in
487		*\(*\))	shift
488			prepred="$prepred `echo $1 | sed 's/\(.*\)(\(.*\))/\1 \2/'`"
489			;;
490		esac
491		;;
492	-A\(*\))
493		prepred="$prepred `echo $1 | sed 's/-A\(.*\)(\(.*\))/\1 \2/'`"
494		;;
495	-[DI][-+][ABCDEFGHIJKLMNOPQRSTUVWXYZ]*)
496		stdpp=1
497		case $1 in
498		-I?[CH])	case $def in
499				?*)	definclude="$definclude $1" ;;
500				*)	stdinclude="$stdinclude $1" ;;
501				esac
502				;;
503		-I-S*|-YI,*)	usrinclude="`echo $1 | sed 's/....//'`" ;;
504		-Y?,*)		;;
505		-Y*)		usrinclude="`echo $1 | sed 's/..//'`" ;;
506		esac
507		;;
508	-D)	shift
509		case $1 in
510		[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_]*=*)
511			predef="$predef
512`echo $1 | sed -e 's/=.*//'`"
513			;;
514		[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_]*)
515			predef="$predef
516$1"
517			;;
518		esac
519		;;
520	-Dprobe);;
521	-D*)	case $1 in
522		-D[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_]*=*)
523			predef="$predef
524`echo $1 | sed -e 's/^-D//' -e 's/=.*//'`"
525			;;
526		-D[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_]*)
527			predef="$predef
528`echo $1 | sed -e 's/^-D//'`"
529			;;
530		esac
531		;;
532	-I)	shift
533		case $1 in
534		/*)	case $def in
535			?*)	definclude="$definclude $1" ;;
536			*)	stdinclude="$stdinclude $1" ;;
537			esac
538			cmdinclude="$cmdinclude $1"
539			;;
540		esac
541		;;
542	-I/*)	f=`echo X$1 | sed 's/X-I//'`
543		case $def in
544		?*)	definclude="$definclude $f" ;;
545		*)	stdinclude="$stdinclude $f" ;;
546		esac
547		cmdinclude="$cmdinclude $f"
548		;;
549	-U)	shift
550		undef="$undef $1"
551		;;
552	-U*)	undef="$undef `echo $1 | sed 's/^-U//'`"
553		;;
554	flags.$src)def=
555		;;
556	esac
557done
558stdinclude="$stdinclude $definclude"
559case " $stdinclude " in
560*\ $usrinclude\ *)
561	case $usrinclude in
562	/usr/include)
563		usrinclude=
564		;;
565	*)	case " $stdinclude " in
566		*\ /usr/include\ *)
567			usrinclude=
568			;;
569		*)	usrinclude=/usr/include
570			;;
571		esac
572		;;
573	esac
574	;;
575esac
576
577tstinclude=`$cc -v -E flags.$src 2>&1 | sed -e '1,/[iI][nN][cC][lL][uU][dD][eE][ 	]*<[.][.][.]>/d' -e '/^[eE][nN][dD] [oO][fF] [sS][eE][aA][rR][cC][hH]/,\$d'`
578j=$tstinclude
579case $j in
580*/*)	;;
581*)	j=$cmdinclude ;;
582esac
583tstinclude=
584good=
585nogood=
586c_hdr="stdio.h ctype.h"
587C_hdr="libc.h"
588for i in $j
589do	if	test -d "$i"
590	then	tstinclude="$tstinclude $i"
591		h=
592		for f in $c_hdr
593		do	if	test -f "$i/$f"
594			then	case $i in
595				*/CC)	nogood=1 ;;
596				*)	good=1 ;;
597				esac
598			else	h="$h $f"
599			fi
600		done
601		c_hdr=$h
602		h=
603		for f in $C_hdr
604		do	if	test -f "$i/$f"
605			then	case $i in
606				*/CC)	nogood=1 ;;
607				*)	good=1 ;;
608				esac
609			else	h="$h $f"
610			fi
611		done
612		C_hdr=$h
613	fi
614done
615case $nogood in
6161)	good=0 ;;
617esac
618case $good in
6191)	case $c_hdr in
620	?*)	bad=1
621		usrinclude=/usr/include
622		set '' $tstinclude /usr/include
623		;;
624	*)	set '' $tstinclude
625		;;
626	esac
627	shift
628	stdinclude=$*
629	echo "#include <sys/types.h>" > include.$src
630	$cc -E include.$src | sed -e '/# 1 "[\\/]/!d' -e 's,[^"]*",,' -e 's,[\\/][^\\/]*".*,,' -e 's,[\\/]sys,,' > include.out
631	for f in `cat include.out`
632	do	if	test -d "$f"
633		then	g=`echo $f | sed -e 's,[\\/][\\/]*[^\\/]*$,,'`
634			case " $stdinclude " in
635			*\ $f\ *|*\ $g\ *)
636				;;
637			*)	stdinclude="$stdinclude $f"
638				case $f in
639				/usr/include)	usrinclude=$f ;;
640				esac
641				bad=1
642				;;
643			esac
644		fi
645	done
646	;;
647*)	case $ppopt$ppenv in
648	?*)	echo '#!'$sh'
649		echo $VIRTUAL_ROOT | sed "s/:.*//"' > cpp
650		chmod +x cpp
651		ppcmd=cpp
652		ppdir=.
653		eval x='`'$ppenv '$'cc -E $ppopt flags.$src'`'
654		case $x in
655		?*)	tstinclude=$x/usr/include
656			;;
657		esac
658		cp /bin/echo cpp
659		chmod u+w cpp
660		;;
661	esac
662
663	eval set x $probe_include
664	while	:
665	do	shift
666		case $# in
667		0)	break ;;
668		esac
669		echo "#include <$1>" > include.$src
670		$cc -E include.$src
671	done > include.out
672
673	ccinclude=
674	x=$stdinclude
675	stdinclude=
676	subinclude=
677	for f in $x $tstinclude `sed -e 's,\\\\,/,g' -e 's,///*,/,g' -e 's,"[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz]:/,"/,g' -e '/^#[line 	]*[0123456789][0123456789]*[ 	][ 	]*"[\\/]/!d' -e 's/^#[line 	]*[0123456789][0123456789]*[ 	][ 	]*"\(.*\)[\\/].*".*/\1/' include.out | sort -u`
678	do	case $f in
679		-*)	;;
680		*/)	f=`echo $f | sed -e 's,//*\$,,'` ;;
681		*/.)	f=`echo $f | sed -e 's,//*.\$,,'` ;;
682		esac
683		case $f in
684		-I*)	;;
685		*/cc)	ccinclude=1
686			;;
687		*/sys)	continue
688			;;
689		*/include/*/*)
690			;;
691		*/include/*)
692			subinclude="$subinclude $f"
693			continue
694			;;
695		esac
696		if	test -d "$f"
697		then	case " $stdinclude " in
698			*\ $f\ *)	;;
699			*)	stdinclude="$stdinclude $f" ;;
700			esac
701		fi
702	done
703	rm include.out
704	case $ccinclude in
705	?*)	eval set x $probe_include
706		while	:
707		do	shift
708			case $# in
709			0)	break ;;
710			esac
711			echo "#include <cc/$1>" > include.$src
712			if	$cc -E include.$src > /dev/null
713			then	break
714			fi
715		done
716		case $# in
717		0)	;;
718		*)	x=$stdinclude
719			stdinclude=
720			for f in $x
721			do	case $f in
722				*/cc)	;;
723				*)	stdinclude="$stdinclude $f" ;;
724				esac
725			done
726			;;
727		esac
728		;;
729	esac
730	case $subinclude in
731	?*)	for i in $subinclude
732		do	for j in $stdinclude
733			do	case $i in
734				$j/*/*)	;;
735				$j/*)	both=
736					eval set x $probe_include
737					while	:
738					do	shift
739						case $# in
740						0)	for k in $both
741							do	echo "#include <$k>" > include.$src
742								$cc -E include.$src > include.out
743								I=`grep -c $i/$k < include.out`
744								J=`grep -c $j/$k < include.out`
745								case $I:$J in
746								0:*)	;;
747								*:0)	stdinclude="$i $stdinclude"
748									break
749									;;
750								esac
751							done
752							continue 3
753							;;
754						esac
755						if	test -f $i/$1
756						then	if	test ! -f $j/$1
757							then	break 2
758							fi
759							both="$both $1"
760						fi
761					done
762					;;
763				$j)	continue 2
764				;;
765				esac
766			done
767			stdinclude="$i $stdinclude"
768		done
769		;;
770	esac
771
772	{
773
774	for i in $stdinclude
775	do
776		case $i in
777		$usrinclude)	;;
778		*)		echo $i $i ;;
779		esac
780	done
781
782	eval set x $probe_include
783	while	:
784	do	shift
785		case $# in
786		0)	break ;;
787		esac
788		echo "#include <$1>" > t.c
789		p=
790		for j in `$cc -E t.c | grep "$1" | sed -e 's,\\\\,/,g' -e 's,"[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz]:/,"/,g' -e '/^#[line 	]*1[ 	][ 	]*"[\\/]/!d' -e 's/^#[line 	]*1[ 	][ 	]*"\(.*\)[\\/].*".*/\1/'`
791		do	j=`echo $j | sed -e 's,///*,/,g' -e 's,/$,,'`
792			case $p in
793			?*)	echo $p $j ;;
794			esac
795			p=$j
796		done
797	done
798
799	case $usrinclude in
800	?*)	echo $usrinclude $usrinclude ;;
801	esac
802
803	} | tsort > tmp.tmp
804	tstinclude=`cat tmp.tmp`
805	bad=
806	for i in $stdinclude
807	do	case "
808$tstinclude
809" in
810		*"
811$i
812"*)			;;
813		*)	bad=1
814			break
815			;;
816		esac
817	done
818	;;
819esac
820
821case $bad in
822"")	x=$stdinclude
823	stdinclude=
824	z=
825	for i in $tstinclude
826	do	case " $x " in
827		*" $i "*)
828			stdinclude="$stdinclude $i"
829			z=$i
830			;;
831		esac
832	done
833	case $usrinclude in
834	'')	usrinclude=$z ;;
835	esac
836	;;
837esac
838case $hosted in
839"")	case $usrinclude in
840	/usr/include)	usrinclude= ;;
841	esac
842	;;
843esac
844
845case $usrinclude in
846?*)	case " $stdinclude " in
847	*\ $usrinclude\ *)
848		x=$stdinclude
849		stdinclude=
850		for f in $x
851		do	case $f in
852			$usrinclude)	;;
853			*)		stdinclude="$stdinclude $f" ;;
854			esac
855		done
856		;;
857	esac
858	;;
859esac
860
861# drop dups -- they creep in somehow
862
863x=$stdinclude
864stdinclude=
865for f in $x
866do	case " $stdinclude $usrinclude " in
867	*" $f "*)	;;
868	*)		stdinclude="$stdinclude $f" ;;
869	esac
870done
871:
872### this script contains archaic constructs that work with all sh variants ###
873# Glenn Fowler
874# AT&T Research
875#
876# @(#)make.probe (AT&T Research) 2011-06-01
877#
878# C probe for make
879#
880# NOTE: C.probe must be included or .'d here
881#
882
883cc_dll_def=-D_BLD_DLL
884
885probe_ar_arflags="-Xany"
886probe_arflags="-xar"
887probe_ccs="strip size nm ld ar" # longest to shortest
888probe_debug="-g"
889probe_dll="'-G 0' -Wc,dll,exportall,longname,rent -Wc,exportall -dynamic $cc_dll_def"
890probe_export_dynamic="-rdynamic -export-dynamic -Wl,-export-dynamic -Wl,-E -bexpall -force_flat_namespace"
891probe_gcc_optimize="-O2"
892probe_gcc_version="*[Gg][Cc][Cc]*"
893probe_include_local="'-ignore-source-dir -iquote' -iquote -I-"
894probe_ldlazy='-zlazyload -znolazyload -Wl,-zlazyload -Wl,-znolazyload'
895probe_ldlib="LD_LIBRARY_PATH LIBPATH LPATH"
896probe_ldmap="'-Wl,-M' '-Qoption ld -M' '-Wl,-m' '-m'"
897probe_ldorigin="-Wl,-z,origin"
898probe_ldrecord='-zrecord -zignore -Wl,-zrecord -Wl,-zignore'
899probe_ldrunpath="-Wl,-R, -R -Wl,-rpath, -L"
900probe_ldstrip="'-s -mr' -Wl,-s"
901probe_lib="a lib"
902probe_lib_append="/usr/lib/pa1.1"
903probe_lib_all_undef="-all -notall -all -none -Bwhole-archive -Bno-whole-archive -whole-archive -no-whole-archive -Wl,-whole-archive -Wl,-no-whole-archive -all_load '' -Wl,-zallextract -Wl,-zdefaultextract +forceload +noforceload"
904probe_lib_multiple="-Wl,-zmuldefs"
905probe_libdir="shlib lib"
906probe_nmflags="'' -p -B"
907probe_optimize="-O"
908probe_pic="-Kpic -KPIC -fpic -fPIC -pic -PIC +z +Z"
909probe_no_protect="'-fno-stack-protector -fno-stack-protector-all' -GS-"
910probe_readonly="-R -Krodata -xMerge -Wa,-r"
911probe_shared="'' -G -b -c -shared -Wl,dll"
912probe_shared_name="-Wl,-soname= -h"
913probe_shared_nostart="-nostartfiles"
914probe_shared_registry='"-update_registry $probe_shared_registry_file"'
915probe_shared_registry_file='registry.ld'
916probe_shared_registry_path="\$(LIBDIR)/$probe_shared_registry_file"
917probe_strict="'-ansi -pedantic' '-ansi -strict' -strict -ansi"
918probe_stripflags="'-f -s' -f -s"
919probe_unresolved="'-expect_unresolved \"*\"'"
920probe_warn="-Wall -fullwarn -w3 '-A -A' +w1"
921
922echo '#pragma pp:version' > libpp.$src
923echo '#define dDflag on' > dDflag.$src
924echo 'int main(){return 0;}' > doti.$src
925echo 'int code(){return 0;} int main(){return code();}' > export.$src
926echo '#include <stdio.h>' > imstd.$src
927echo '#include "_i_.h"' > imusr.$src
928echo 'int x;' > _i_.h
929mkdir im
930echo '(' > im/stdio.h
931echo '#include "implc_x.h"
932int main(){f(1);return 0;}' > implc.$src
933echo 'template <class T> void f(T){}' > implc_x.$src
934echo 'template <class T> void f(T);' > implc_x.h
935echo 'extern int NotalL(){return(0);}' > notall.$src
936echo '#include <stdio.h>
937extern int i;
938int i = 1;
939extern int f(){return(!i);}
940int main(){FILE* fp=stdin;return(f());}' > pic.$src
941echo 'class x {int n;} m;' > plusplus.$src
942echo 'int prefix(){return 0;}' > prefix.$src
943echo 'template<class T> int gt(T a, T b);
944template<class T> int gt(T a, T b) { return a > b; }
945int main () { return gt(2,1); }' > ptr.$src
946echo 'int main(){return 0;}' > require.$src
947echo '#if mips && !sgi || __CYGWIN__
948( /* some systems choke on this probe */
949#else
950#if test_const
951#define CONST const
952#else
953#define CONST
954#endif
955CONST char x[]={1,2,3,4,5,6,7,8,9,0};
956int main(){*(char*)x=0; return x[0];}
957#endif' > readonly.$src
958# NOTE:	sfclose() defined on uwin, not defined on all other systems
959echo 'extern int sfclose(); extern int ShareD(){return(sfclose());}' > shared.$src
960echo '#define g(a,b) a ## b
961volatile int a;
962const int g(x,y)=1;
963extern int c(int);' > stdc.$src
964echo 'extern int f(); int main() { return f(); }' > sovmain.$src
965echo 'int f() { return 0; }' > sovlib.$src
966echo '#include <stdio.h>
967int i;
968int main(){int j;j = i * 10;return j;}' > strip.$src
969echo 'template <class T> void f(T){}
970int main(){f(1);return 0;}' > toucho.$src
971echo '#if defined(__STDC__) || defined(__cplusplus)
972extern type call(int);
973#endif
974int main() {call(0);return(0);}' > tstlib.$src
975echo 'int main(){return 0;}' > warn.$src
976echo 'int f(){return 0;}' > warn1.$src
977echo 'int f(){}' > warn2.$src
978echo 'int f(){int i; return 0;}' > warn3.$src
979echo 'int f(){int i; return i;}' > warn4.$src
980echo 'int f(){return g();}' > warn5.$src
981warn_enum="1 2 3 4 5"
982
983chmod -w *.$src
984
985ar_arflags=
986arflags=
987cc_dll=
988cc_pic=
989cc_PIC=
990dDflag=
991debug=
992dialect=
993dll_dir='$(LIBDIR)'
994dll_libraries=
995dll_variants=
996doti=
997exectype=
998export_dynamic=
999gnu=
1000implicitc=
1001include_local=
1002lddynamic=
1003ldlazy=
1004ldnolazy=
1005ldnorecord=
1006ldorigin=
1007ldrecord=
1008ldrunpath=
1009ldscript=
1010ldstatic=
1011ldstrip=
1012Lflag=
1013lib_dll=
1014lib_all=
1015lib_undef=
1016libpath=
1017libpp=
1018makeoptions=
1019nmedit=
1020nmflags=
1021no_protect=
1022optimize=
1023plusplus=
1024prefix_archive=lib
1025prefix_dynamic=
1026prefix_shared=lib
1027ptrcopy=
1028ptrimplicit=
1029ptrmkdir=
1030readonly=
1031repository=
1032require=
1033runpath=
1034shared=
1035shared_name=
1036shared_registry=
1037shellmagic=
1038soversion=
1039stdc=
1040strict=
1041stripflags=
1042symprefix=
1043toucho=
1044warn=
1045
1046set $probe_lib
1047lib=$1
1048
1049d=
1050for f in $stdinclude $usrinclude
1051do	case $f in
1052	-I*)	;;
1053	*)	d="$d $f" ;;
1054	esac
1055done
1056stdinclude=$d
1057
1058set x $cc
1059cc_dir=`echo $2 | sed -e 's,/*[^/]*$,,'`
1060for c in $probe_ccs
1061do	if	$executable $cc_dir/$c
1062	then	x=$cc_dir/$c
1063	else	x=$c
1064	fi
1065	eval $c='$x'
1066done
1067ld_dir=
1068rm -f doti.$obj
1069if	$cc -c doti.$src
1070then	eval set x $probe_verbose
1071	shift
1072	for o
1073	do	$cc $o doti.$obj
1074		$cc $o doti.$obj -lF0oB@r
1075	done 2>&1 | sed -e 's/^[+ 	]*//' -e 's/[ 	].*//' -e '/^\//!d' -e 's/:$//' -e '/ld[a-zA-Z0-9.]*$/!d' -e 's,///*,/,g' > t
1076	for i in `cat t`
1077	do	rm -f t.$obj
1078		if test -x $i && $i -r -o t.$obj doti.$obj && test -f t.$obj
1079		then	case $ld in
1080			ld)	ld=$i ;;
1081			esac
1082			ld_dir=`echo $i | sed 's,/[^/]*$,,'`
1083			break
1084		fi
1085	done
1086fi
1087IFS=:
1088set x $PATH
1089IFS=$ifs
1090path=$*
1091m=
1092for c in $probe_ccs
1093do	eval o='$'$c
1094	case $o in
1095	$c)	;;
1096	*)	continue ;;
1097	esac
1098	C='${c}'
1099	for x in $cc_dir $ld_dir
1100	do	cd $x
1101		for p in "${C}" "${C}[!a-zA-Z]*" "*[!a-zA-Z]${C}" "*[!a-zA-Z]${C}[!a-zA-Z]*"
1102		do	eval set x $p
1103			case $# in
1104			2)	if	$executable $2
1105				then	case $2 in
1106					*$c*$c*);;
1107					*)	m=$p
1108						break 3
1109						;;
1110					esac
1111				fi
1112				;;
1113			esac
1114		done
1115	done
1116done
1117cd $tmpdir
1118for c in $probe_ccs
1119do	eval o='$'$c
1120	case $o in
1121	$c)	;;
1122	*)	continue ;;
1123	esac
1124	for x in $cc_dir $ld_dir
1125	do	if	$executable $x/$c
1126		then	eval $c='$x/$c'
1127			continue 2
1128		fi
1129		case $m in
1130		?*)	eval set x $x/$m
1131			case $# in
1132			2)	if	$executable $2
1133				then	eval $c='$2'
1134					continue 2
1135				fi
1136				;;
1137			esac
1138			;;
1139		esac
1140	done
1141	for x in $path
1142	do	if	$executable $x/$c
1143		then	eval $c='$x/$c'
1144			break
1145		fi
1146	done
1147done
1148dld=$cc
1149
1150rm -f dynamic.$exe
1151if	$cc -o dynamic.$exe dynamic.$obj && $executable dynamic.$exe
1152then	mkdir mylib
1153	echo > mylib/libc.$lib
1154	eval set x $probe_ldlib
1155	while	:
1156	do	shift
1157		case $# in
1158		0)	break ;;
1159		esac
1160		rm -f dynamic.$exe
1161		if	eval $1=./mylib '$'cc -o dynamic.$exe dynamic.$obj
1162		then	:
1163		else	libpath=$1
1164			break
1165		fi
1166	done
1167fi
1168test `$cc -E libpp.$src | grep -c '^#pragma pp:version "libpp '` -eq 1 && libpp=1
1169$cc -E doti.$src > doti.i && $cc -c doti.i && test -s doti.$obj && doti=1
1170if	$cc -c imusr.$src
1171then	eval set x $probe_include_local
1172	while	:
1173	do	shift
1174		case $# in
1175		0)	break ;;
1176		esac
1177		if	$cc -c $1 imusr.$src
1178		then	: "$1 should skip \"_i_.h\" in ."
1179		elif	$cc -c imstd.$src
1180		then	if	$cc -c -Iim imstd.$src
1181			then	: '-Idir should find <stdio.h> in dir'
1182			elif	$cc -c $1 -Iim imstd.$src
1183			then	: "$1 -Idir should find <stdio.h> in dir"
1184			elif	$cc -c -Iim $1 imstd.$src
1185			then	include_local=$1
1186				break
1187			else	: "-Idir $1 should skip <stdio.h> in dir"
1188			fi
1189		else	: should find stdio.h
1190		fi
1191	done
1192else	: 'should find "_i_.h" in .'
1193fi
1194
1195if	$cc -c pic.$src 2>e
1196then	e=`wc -l e`
1197	s=`$size pic.$obj; wc pic.$obj`
1198	eval set x $probe_pic
1199	shift
1200	while	:
1201	do	case $# in
1202		0|1)	break ;;
1203		esac
1204		pic=$1
1205		shift
1206		PIC=$1
1207		shift
1208		rm -f pic.$obj
1209		$cc $pic -c pic.$src 2>e && test -f pic.$obj || continue
1210		$cc $pic -o pic.$exe pic.$obj && test -f pic.$exe || {
1211			rm -f pic.$exe
1212			$cc -o pic.$exe pic.$obj && test -f pic.$exe && continue
1213		}
1214		case `wc -l e` in
1215		$e)	;;
1216		*)	continue ;;
1217		esac
1218		case $pic in
1219		???*)	m=`echo " $pic" | sed -e 's/^ [-+]//g' -e 's/./-& /g' -e 's/[-+] //g'`
1220			rm -f pic.$obj pic1.$exe
1221			if	$cc $m -c pic.$src 2>e && test -f pic.$obj &&
1222				$cc -o pic1.$exe pic.$obj && test -f pic1.$exe
1223			then	case `wc -l e` in
1224				$e)	cc_pic=$m
1225					break
1226					;;
1227				esac
1228			fi
1229			cc_pic=$pic
1230			break
1231			;;
1232		*)	case `$size pic.$obj; wc pic.$obj` in
1233			$s)	;;
1234			*)	cc_pic=$pic
1235				break
1236				;;
1237			esac
1238			;;
1239		esac
1240	done
1241	# this works around gcc 2.95 sun4 -fpic a.out core dump after exit
1242	case $hosted:$cc_pic in
1243	1:?*)   if	./pic.$exe
1244		then	# this catches lynxos.ppc gcc that dumps -fpic and not -mshared
1245			echo 'static int* f() { static int v; return &v; }
1246int main() { f(); return 0; }' > picok.$src
1247			$cc $cc_pic -o picok.$exe picok.$src && ./picok.$exe || cc_pic=
1248		else	cc_pic=
1249		fi
1250		;;
1251	esac
1252	case $cc_pic in
1253	?*)	rm -f pic.$obj
1254		if	$cc $PIC -c pic.$src 2>e && test -f pic.$obj
1255		then	cc_PIC=$PIC
1256		else	cc_PIC=$cc_pic
1257		fi
1258		;;
1259	*)	eval set x $probe_dll
1260		while	:
1261		do	shift
1262			case $# in
1263			0)	break ;;
1264			esac
1265			rm -f pic.$obj pic.$exe
1266			$cc $1 -c pic.$src 2>e && test -f pic.$obj || continue
1267			$cc $1 -o pic.$exe pic.$obj && test -f pic.$exe || {
1268				rm -f pic.$exe
1269				$cc -o pic.$exe pic.$obj && test -f pic.$exe && continue
1270			}
1271			case $1 in
1272			-Wc,*exportall*)
1273				# get specific since sgi gets this far too
1274				rm -f pic.$exe pic.x
1275				$cc -Wl,dll -o pic.$exe pic.$obj || continue
1276				test -f pic.$exe || continue
1277				test -f pic.x || continue
1278				cc_dll="-D_SHARE_EXT_VARS $1"
1279				so=.x
1280				sd=.dll
1281				dld=$cc
1282				shared=-Wl,dll
1283				prefix_shared=
1284				probe_sd=
1285				probe_shared=
1286				#unused# lddynamic=-Bdynamic
1287				#unused# ldstatic=-Bstatic
1288				lib_dll=SYMBOL
1289				break
1290				;;
1291			esac
1292			case `wc -l e` in
1293			$e)	cc_dll=$1
1294				break
1295				;;
1296			esac
1297		done
1298		;;
1299	esac
1300fi
1301
1302$cc -c plusplus.$src && plusplus=1
1303$cc -E -dD dDflag.$src > t
1304case `grep '#define[ 	][ 	]*dDflag[ 	][ 	]*on' t` in
1305?*)	dDflag=1 ;;
1306esac
1307case `grep '#define.*_GNUC_' t` in
1308?*)	gnu=1 ;;
1309esac
1310case $plusplus in
1311"")	$cc -c stdc.$src && stdc=1 ;;
1312*)	mkdir ptr
1313	cd ptr
1314	$cc -c ../ptr.$src &
1315	NFS_locks_are_botched=$!
1316	cd ..
1317	if	$cc -c require.$src && $cc require.$obj
1318	then	set x `$cc require.$obj 2>&1`
1319		d=
1320		while	:
1321		do	shift
1322			case $# in
1323			0)	break ;;
1324			esac
1325			case $1 in
1326			-l*)	d="$d $1" ;;
1327			esac
1328		done
1329		for f in ++
1330		do	if $cc require.$obj -l$f
1331			then	set x `$cc require.$obj -l$f 2>&1`
1332				r=
1333				while	:
1334				do	shift
1335					case $# in
1336					0)	break ;;
1337					esac
1338					case $1 in
1339					-l*)	case " $d $r " in
1340						*" "$1" "*)	;;
1341						*)		r="$r $1" ;;
1342						esac
1343					esac
1344				done
1345				case $r in
1346				?*)	require="$require $f"
1347					echo '' $r > req.$f
1348					;;
1349				esac
1350			fi
1351		done
1352	fi
1353	cd ptr
1354	for i in *
1355	do	if	test -d $i
1356		then	repository=$i
1357			break
1358		fi
1359	done
1360	cd ..
1361	kill -9 $NFS_locks_are_botched
1362	rm -rf ptr
1363	case $repository in
1364	*?)	mkdir ptr
1365		cd ptr
1366		i=PTR
1367		case $repository in
1368		$i)	i=$i$i ;;
1369		esac
1370		$cc -ptr$i -c ../ptr.$src &
1371		NFS_locks_are_botched=$!
1372		cd ..
1373		sleep 5
1374		if	test -d ptr/$i/$repository
1375		then	ptrimplicit=1
1376		fi
1377		kill -9 $NFS_locks_are_botched
1378		rm -rf ptr
1379		;;
1380	esac
1381	$cc -o implc implc.$src && $executable implc && implicitc=1
1382	if	$cc -c toucho.$src && test -f toucho.$obj
1383	then	o=`ls -l toucho.$obj`
1384		if	$cc -o toucho toucho.$obj && $executable toucho
1385		then	n=`ls -l touch.$obj`
1386			case $n in
1387			"$o")	;;
1388			*)	toucho=1 ;;
1389			esac
1390		fi
1391	fi
1392	;;
1393esac
1394
1395if	$cc -c pic.$src
1396then	eval set x $probe_nmflags
1397	while	:
1398	do	shift
1399		case $# in
1400		0)	break ;;
1401		esac
1402		case `$nm $1 pic.$obj | grep -c '[0123456789][ 	][ 	]*T[ 	][ 	]*[_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz]'` in
1403		0)	;;
1404		*)	nmflags=$1
1405			break
1406			;;
1407		esac
1408	done
1409	case $# in
1410	0)	case `$nm -gh pic.$obj | grep -c '|\.*[TtDdBbC][EeAaSsOo][XxTtSsMm]'` in
1411		0)	;;
1412		*)	nmflags=-gh
1413			nmedit="-e '/\.*[TtDdBbC][EeAaSsOo][XxTtSsMm]/!d' -e 's/[| 	].*//'"
1414			;;
1415		esac
1416		;;
1417	*)	nmedit="-e '/[ 	]T[ 	][ 	]*[_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz]/!d' -e 's/.*[ 	]T[ 	][ 	]*//'"
1418		;;
1419	esac
1420fi
1421
1422if	$cc -c doti.$src
1423then	eval set x $probe_stripflags
1424	while	:
1425	do	shift
1426		case $# in
1427		0)	break ;;
1428		esac
1429		if	$strip $1 doti.$obj
1430		then	stripflags=$1
1431			break
1432		fi
1433	done
1434fi
1435
1436rm -f export.$obj export.exe
1437if	$cc -c export.$src
1438then	lm=
1439	if	$cc -o export.exe export.$obj -lm 2>e && lm=-lm ||
1440		$cc -o export.exe export.$obj 2>e
1441	then	z=`wc -c < export.exe; $size export.exe 2>/dev/null`
1442		eval set x $probe_export_dynamic
1443		while	:
1444		do	shift
1445			case $# in
1446			0)	break ;;
1447			esac
1448			rm -f export.exe
1449			if	$cc -o export.exe $1 export.$obj $lm 2>f && $executable export.exe
1450			then	y=`wc -c < export.exe; $size export.exe 2>/dev/null`
1451				case $y in
1452				$z)	;;
1453				*)	if	cmp -s e f
1454					then	export_dynamic=$1
1455						break
1456					fi
1457					;;
1458				esac
1459			fi
1460		done
1461	fi
1462fi
1463rm -f export.$obj export.exe
1464
1465rm -f strip.exe
1466if	$cc -o strip.exe strip.$src
1467then	z=`wc -c < strip.exe`
1468	eval set x $probe_ldstrip
1469	while	:
1470	do	shift
1471		case $# in
1472		0)	break ;;
1473		esac
1474		rm -f strip.exe
1475		if	$cc -o strip.exe $1 strip.$src
1476		then	case `wc -c < strip.exe` in
1477			$z)	;;
1478			*)	ldstrip=$1
1479				break
1480				;;
1481			esac
1482		fi
1483	done
1484fi
1485
1486rm -f strip.exe strip.$obj
1487if	$cc -c strip.$src && $cc -o strip.exe strip.$obj 2>e
1488then	eval set x x $probe_ldlazy
1489	while	:
1490	do	shift
1491		shift
1492		case $# in
1493		0)	break ;;
1494		esac
1495		rm -f strip.$exe
1496		$cc -o strip.$exe $1 strip.$obj $2 2>f && test -f strip.$exe || continue
1497		cmp -s e f || continue
1498		ldlazy=$1
1499		ldnolazy=$2
1500		break
1501	done
1502	eval set x x $probe_ldrecord
1503	while	:
1504	do	shift
1505		shift
1506		case $# in
1507		0)	break ;;
1508		esac
1509		rm -f strip.$exe
1510		$cc -o strip.$exe $1 strip.$obj $2 2>f && test -f strip.$exe || continue
1511		cmp -s e f || continue
1512		ldrecord=$1
1513		ldnorecord=$2
1514		break
1515	done
1516fi
1517
1518case $cc_dll:$cc_pic:$so:$dynamic:$static in
1519::::|$cc_dll_def::::)
1520	: last chance dynamic checks
1521	while	:
1522	do
1523		echo '__declspec(dllexport) int fun() { return 0; }' > exp.$src
1524		if	$cc -c $cc_dll_def exp.$src
1525		then	rm -f xxx.dll xxx.lib
1526			if	$cc -shared -Wl,--enable-auto-image-base -Wl,--out-implib=xxx.lib -o xxx.dll exp.$obj &&
1527				test -f xxx.lib -a -f xxx.dll
1528			then
1529				: cygwin
1530				cc_dll=$cc_dll_def
1531				dll_dir='$(BINDIR)'
1532				sd=.dll
1533				so=.dll.a
1534				ldscript=".def .exp .ign .res"
1535				lib_dll=option
1536				lib_all=-Wl,-whole-archive
1537				lib_undef=-Wl,-no-whole-archive
1538				dld=$cc
1539				shared='-shared -Wl,--enable-auto-image-base -Wl,--out-implib=$(<:N=*'$so')'
1540				prefix_dynamic=cyg
1541				prefix_shared=lib
1542				break
1543			fi
1544		fi
1545		break
1546	done
1547	;;
1548*)	if	$cc -c $cc_dll $cc_pic shared.$src && $cc -c $cc_dll $cc_pic notall.$src
1549	then	for xx in "$cc" "$ld"
1550		do	eval set x $probe_shared
1551			while	:
1552			do	shift
1553				case $# in
1554				0)	break ;;
1555				esac
1556				rm -f xxx$dll
1557				# UNDENT ...
1558
1559	if	$xx $1 -o xxx$dll shared.$obj 2>e && test -r xxx$dll
1560	then	if	test -s e && egrep -i 'unknown|invalid|option' e > /dev/null
1561		then	continue
1562		fi
1563		case `PATH=/bin:/usr/bin:$PATH file xxx$dll` in
1564		*lib*|*obj*|*shared*)
1565			;;
1566		"")	$executable xxx$dll || continue
1567			;;
1568		*ELF*|*elf*)
1569			$executable xxx$dll || continue
1570			case `strings xxx$dll | sed -e 's,.*[ |],,' | sort -u | egrep -i '^([._](dynamic|dynstr|dynsym))$'` in
1571			[012])	continue ;;
1572			esac
1573			;;
1574		*archive*not*stripped*|*data*dynamic*not*stripped*)
1575			$executable xxx$dll || continue
1576			;;
1577		*)	continue
1578			;;
1579		esac
1580		dld=$xx
1581		shared=$1
1582		# does -nostartfiles make sense for C?
1583		case $plusplus in
1584		'')	z=`wc -c < xxx$dll`
1585			eval set x $probe_shared_nostart
1586			while	:
1587			do	shift
1588				case $# in
1589				0)	break ;;
1590				esac
1591				rm -f xxx$dll
1592				if	$dld $shared $1 -o xxx$dll shared.$obj 2>e && test -r xxx$dll
1593				then	case `wc -c < xxx$dll` in
1594					$z)	;;
1595					*)	if	test -s e
1596						then	case `cat e` in
1597							*[Ee][Rr][Rr][Oo][Rr]*|*[Ww][Aa][Rr][Nn][Ii][Nn][Gg]*|*[Oo][Pp][Tt][Ii][Oo][Nn]*)
1598								continue
1599								;;
1600							esac
1601						fi
1602						case $shared in
1603						'')	shared=$1 ;;
1604						*)	shared="$shared $1" ;;
1605						esac
1606						break
1607						;;
1608					esac
1609				fi
1610			done
1611			;;
1612		esac
1613		case $cc_dll in
1614		"")	cc_dll=$cc_dll_def ;;
1615		esac
1616		eval set x x $probe_sd
1617		while	:
1618		do	shift
1619			shift
1620			case $# in
1621			[01])	break ;;
1622			esac
1623			rm -f xxx xxx$1 xxx$2
1624			if	$dld $shared -o xxx shared.$obj 2>e
1625			then	if	test -f xxx$1 -a \( -f xxx$2 -o "$cc_dll" = "$cc_dll_def" \)
1626				then	sd=$1
1627					so=$2
1628					lddynamic=-Bdynamic
1629					ldstatic=-Bstatic
1630					break 2
1631				elif	test -f xxx -a -f xxx$2
1632				then	sd=$1
1633					so=$2
1634					break 2
1635				else	case $so in
1636					'')	so=$1 ;;
1637					esac
1638					break
1639				fi
1640			fi
1641		done
1642		rm -f libxxx.$lib
1643		$ar cr libxxx.$lib shared.$obj
1644		ranlib libxxx.$lib
1645		eval set x x $probe_lib_all_undef
1646		rm -f xxx$dll
1647		if	$dld $shared -o xxx$dll libxxx.$lib && test -r xxx$dll
1648		then	if	$nm $nmflags xxx$dll | grep ShareD
1649			then	lib_dll=OPTION
1650				set x x
1651			fi
1652		fi
1653		while	:
1654		do	shift
1655			shift
1656			case $# in
1657			0|1)	break ;;
1658			esac
1659			rm -f xxx$dll
1660			if	$dld $shared -o xxx$dll $1 libxxx.$lib $2 && test -r xxx$dll
1661			then	if	$nm $nmflags xxx$dll | grep ShareD
1662				then	lib_dll=option
1663					lib_all=$1
1664					lib_undef=$2
1665					break
1666				fi
1667			fi
1668			case $2 in
1669			?*)	if	$dld $shared -o xxx$dll $1 libxxx.$lib && test -r xxx$dll
1670				then	if	$nm $nmflags xxx$dll | grep ShareD
1671					then	lib_dll=option
1672						lib_all=$1
1673						break
1674					fi
1675				fi
1676				;;
1677			esac
1678		done
1679		case $lib_dll in
1680		OPTION)	lib_dll=option
1681			;;
1682		option)	case $lib_undef in
1683			"")	rm -f libyyy.$lib
1684				$ar cr libyyy.$lib notall.$obj
1685				ranlib libyyy.$lib
1686				$cc -c prefix.$src
1687				eval set x x $probe_lib_all_undef
1688				while	:
1689				do	shift
1690					shift
1691					case $# in
1692					0|1)	break ;;
1693					esac
1694					rm -f xxx$dll
1695					if	$dld $shared -o xxx$dll prefix.$obj $lib_all libxxx.$lib $2 libyyy.$lib && test -r xxx$dll
1696					then	rm -f t
1697						$nm $nmflags xxx$dll > t
1698						case `grep -c ShareD t`:`grep -c NotalL t` in
1699						0:*)	;;
1700						*:0)	lib_undef=$2
1701							break
1702							;;
1703						esac
1704					fi
1705				done
1706				;;
1707			esac
1708			case $lib_undef in
1709			"")	eval set x $probe_lib_multiple
1710				rm -f libyyy.$lib
1711				cp libxxx.$lib libyyy.$lib
1712				rm -f xxx$dll
1713				if	$dld $shared -o xxx$dll prefix.$obj $lib_all libxxx.$lib libyyy.$lib && test -r xxx$dll
1714				then	:
1715				else	while	:
1716					do	shift
1717						case $# in
1718						0)	break ;;
1719						esac
1720						rm -f xxx$dll
1721						if	$dld $shared -o xxx$dll prefix.$obj $lib_all $1 libxxx.$lib libyyy.$lib && test -r xxx$dll
1722						then	rm -f t
1723							$nm $nmflags xxx$dll > t
1724							case `grep -c ShareD t` in
1725							0)	;;
1726							*)	lib_all="$lib_all $1"
1727								break
1728								;;
1729							esac
1730						fi
1731					done
1732				fi
1733				lib_dll=symbol
1734				;;
1735			esac
1736			;;
1737		*)	lib_dll=symbol
1738			;;
1739		esac
1740		case `cat e` in
1741		?*)	eval set x $probe_unresolved
1742			while	:
1743			do	shift
1744				case $# in
1745				0)	break ;;
1746				esac
1747				rm -f xxx$dll
1748				if	eval '$dld $shared' $1 '-o xxx$dll shared.$obj 2>e && test -r xxx$dll'
1749				then	case `cat e` in
1750					"")	shared="$shared $1"; break ;;
1751					esac
1752				fi
1753			done
1754			;;
1755		esac
1756		r=
1757		eval set x $probe_shared_registry
1758		while	:
1759		do	shift
1760			r=x$r
1761			case $# in
1762			0)	break ;;
1763			esac
1764			rm -f xxx$dll
1765			if	eval \$dld \$shared -o xxx\$dll $1 shared.\$obj &&
1766				test -r xxx$dll -a -r $probe_shared_registry_file
1767			then	probe_shared_registry_file='$(CC.SHARED.REGISTRY.PATH)'
1768				eval set x $probe_shared_registry
1769				i=
1770				while	:
1771				do	shift
1772					i=x$i
1773					case $i in
1774					$r)	break ;;
1775					esac
1776				done
1777				shared_registry=$1
1778			fi
1779		done
1780		break 2
1781	fi
1782
1783				# ... INDENT
1784			done
1785		done
1786	fi
1787	case $so in
1788	?*)	rm -f xxx*
1789		if	$dld $shared -g -o xxx shared.$obj 2>e
1790		then	set x $probe_sdb
1791			while	:
1792			do	shift
1793				case $1 in
1794				0)	break ;;
1795				esac
1796				if	test -f xxx$1
1797				then	sdb=$1
1798					break
1799				fi
1800			done
1801		fi
1802		if	$cc -c require.$src
1803		then	p='
1804/usr/proberun/lib:/local/runprobe/lib
1805'
1806			eval set x $probe_ldrunpath
1807			while	:
1808			do	shift
1809				case $# in
1810				0)	break ;;
1811				esac
1812				rm -f require.exe
1813				if	$cc -o require.exe $1"$p" require.$obj &&
1814					grep -c /proberun/ require.exe >/dev/null &&
1815					grep -c /runprobe/ require.exe > /dev/null
1816				then	ldrunpath=$1
1817					eval set x $probe_ldorigin
1818					while	:
1819					do	shift
1820						case $# in
1821						0)	break ;;
1822						esac
1823						rm -f origin.exe
1824						if	$cc -o origin.exe $1 $ldrunpath'$ORIGIN' require.$obj
1825						then	if	./origin.exe > /dev/null 2>&1
1826							then	ldorigin="$1 $ldrunpath"'\$ORIGIN/$(BINDIR:P=R=$(DLLDIR))'
1827							fi
1828							break
1829						fi
1830					done
1831					break
1832				fi
1833			done
1834		fi
1835		rm -f libxxx$so
1836		if	$cc -c sovmain.$src &&
1837			$cc -c $cc_dll $cc_pic sovlib.c &&
1838			$dld $shared -o libxxx$so sovlib.$obj &&
1839			$cc -o sovmain.$exe -L. sovmain.$obj -lxxx
1840		then	rm -f sovmain.$exe
1841			mv libxxx$so libxxx$so.5.6
1842			if	$cc -o sovmain.$exe -L. sovmain.$obj -lxxx
1843			then	soversion=1
1844			fi
1845		fi
1846		rm -f doti.$obj
1847		std64=/lib64
1848		lcl64=/usr/local/lib64
1849		if	test -d $std64 -a -d $lcl64 && $cc -c doti.$src
1850		then	for i in `cd $lcl64; ls *$so 2>/dev/null | sed 's/lib\([^.]*\).*/\1/'`
1851			do	if	$cc -o runpath.$exe doti.$obj -l$i >/dev/null 2>&1
1852				then	LD_LIBRARY_PATH= ./runpath.$exe >/dev/null 2>&1 && continue
1853					if	LD_LIBRARY_PATH=$lcl64 ./runpath.$exe >/dev/null 2>&1
1854					then	runpath=$lcl64
1855						break
1856					elif	LD_LIBRARY_PATH=$std64 ./runpath.$exe >/dev/null 2>&1
1857					then	runpath=$std64
1858						break
1859					elif	LD_LIBRARY_PATH=$lcl64:$std64 ./runpath.$exe >/dev/null 2>&1
1860					then	runpath=$lcl64:$std64
1861						break
1862					fi
1863				fi
1864			done
1865		fi
1866		;;
1867	esac
1868	;;
1869esac
1870
1871rm -f shared.$obj
1872if	$cc -c shared.$src
1873then	eval set x $probe_ar_arflags
1874	while	:
1875	do	shift
1876		case $# in
1877		0)	break ;;
1878		esac
1879		rm -f libxxx.$lib
1880		if	$ar $1 r libxxx.$lib shared.$obj && $ar $1 t libxxx.$lib 2>&1 | grep shared.$obj >/dev/null
1881		then	ar_arflags=$1
1882			break
1883		fi
1884	done
1885	eval set x $probe_arflags
1886	while	:
1887	do	shift
1888		case $# in
1889		0)	break ;;
1890		esac
1891		rm -f libxxx.$lib
1892		if	$cc $1 -o libxxx.$lib shared.$obj && $ar t libxxx.$lib 2>&1 | grep shared.$obj >/dev/null
1893		then	arflags=$1
1894			break
1895		fi
1896	done
1897fi
1898
1899case $shared in
1900-G)	case $cc_dll in
1901	"")	cc_dll=$cc_dll_def ;;
1902	esac
1903	;;
1904*)	case $lib_dll in
1905	symbol)	echo 'extern int f();
1906	int main() { f(); return 0; }' > main.$src
1907		echo '#include <stdio.h>
1908	int f() { printf("hello world"); return 0; }' > member.$src
1909		if	$cc -c main.$src && $cc -c member.$src
1910		then	echo f > lib.exp
1911			rm -f lib.$obj main.exe
1912			if	$ld -o lib.$obj -L: -bexport:lib.exp -berok -bmodtype:SRE -T512 -H512 -lm -lc member.$obj && $cc -o main.exe main.$obj lib.$obj
1913			then	dld=$ld
1914				shared='-T512 -H512 -L$(LIBDIR): -berok -bmodtype:SRE'
1915				lib_dll=export
1916				dll_libraries='-lm -lc'
1917				ldscript=.exp
1918				case $cc_dll in
1919				"")	cc_dll=$cc_dll_def ;;
1920				esac
1921				case $so in
1922				"")	so=.$obj ;;
1923				esac
1924			fi
1925		fi
1926		;;
1927	esac
1928	;;
1929esac
1930case $shared in
1931?*)	if	$cc -c $cc_dll $cc_pic shared.$src
1932	then	eval set x $probe_shared_name
1933		while	:
1934		do	shift
1935			case $# in
1936			0)	break ;;
1937			esac
1938			rm -f xxx$dll
1939			if	$dld $shared ${1}libfoo.1.2 -o xxx$dll shared.$obj 2>e && test -r xxx$dll
1940			then	shared_name=$1
1941				break
1942			fi
1943		done
1944	fi
1945	;;
1946esac
1947case " $cc_dll " in
1948*" $cc_dll_def "*)
1949	;;
1950"  ")	;;
1951*)	cc_dll="$cc_dll_def $cc_dll"
1952	;;
1953esac
1954
1955case $hosttype in
1956win32.*|cygwin.*|os2.*)
1957	Lflag=1
1958	;;
1959*)	if	$cc -c doti.$src
1960	then	if	$cc -L. doti.$obj -lc >/dev/null
1961		then	case $cc_dll in
1962			'')	;;
1963			*)	Lflag=1 ;;
1964			esac
1965		fi
1966	fi
1967	;;
1968esac
1969
1970case $lib_dll in
1971option)	case $hosttype in
1972	linux.*)	dll_libraries=-lc ;;
1973	esac
1974	;;
1975SYMBOL)	lib_dll=symbol
1976	;;
1977symbol)	echo "#include <stdio.h>
1978extern int fun()
1979{
1980	puts(\"fun\");
1981	return 0;
1982}" > dllib.$src
1983	echo "extern int fun();
1984int
1985main()
1986{
1987	return fun();
1988}" > dlmain.$src
1989	pwd=`pwd`
1990	while	:
1991	do
1992		if	$cc -c $cc_dll $cc_pic dlmain.$src &&
1993			$cc -c $cc_dll $cc_pic dllib.$src
1994		then	rm -f libxxx$so
1995			if	$dld $shared -o libxxx$so dllib.$obj &&
1996				chmod 555 libxxx$so
1997			then	rm -f dlmain.$exe
1998				if	$cc -o dlmain.$exe dlmain.$obj $pwd/libxxx$so &&
1999					(./dlmain.$exe) >/dev/null 2>&1
2000				then	break
2001				fi
2002			fi
2003			rm -f libxxx$so dlmain.$exe
2004			if	$dld $shared -o libxxx$so dllib.$obj -lm -lc &&
2005				chmod 555 libxxx$so &&
2006				$cc -o dlmain.$exe dlmain.$obj $pwd/libxxx$so &&
2007				(./dlmain.$exe) >/dev/null 2>&1
2008			then	dll_libraries='-lm -lc'
2009			fi
2010		fi
2011		break
2012	done
2013	# the dll_libraries probe is still lame
2014	case $dll_libraries in
2015	'')	case $hosttype in
2016		sco.*|sol*.*|sun*)	;;
2017		*)			dll_libraries='-lm -lc' ;;
2018		esac
2019		;;
2020	esac
2021	;;
2022esac
2023
2024stdlib=
2025a=`$cc -print-multi-directory 2>/dev/null`
2026case $a in
2027.)	;;
2028*)	for d in `$cc -print-search-dirs 2>/dev/null | sed -e '/^libraries:/!d' -e 's/.*=//' | tr : '\n' | grep /lib/`
2029	do	if	[ -d ${d}${a} ]
2030		then	stdlib="$stdlib ${d}${a}"
2031		else	case $d in
2032			*/lib/)	d=`echo '' $d | sed -e 's,/$,,'`
2033				if	[ -d ${d}${a} ]
2034				then	stdlib="$stdlib ${d}${a}"
2035				fi
2036				;;
2037			esac
2038		fi
2039	done
2040	;;
2041esac
2042case $stdlib in
2043'')	stdlib=`$cc -v doti.$src 2>&1 |
2044		sed 's/  */\n/g' |
2045		sed -e '/^-L/!d' -e 's/^-L//' |
2046		while read dir
2047		do	if	test -d "$dir"
2048			then	(cd "$dir"; pwd)
2049			fi
2050		done`
2051	;;
2052*)	eval set x $probe_verbose
2053	shift
2054	for o in "$@"
2055	do	stdlib="$stdlib "`$cc $o doti.$src 2>&1 |
2056		sed 's/  */\n/g' |
2057		sed -e '/^-L/!d' -e '/\/lib64$/!d' -e 's/^-L//'`
2058	done
2059	;;
2060esac
2061case $stdlib in
2062?*)	keepstdlib=1
2063	o=$stdlib
2064	stdlib=
2065	for dir in $o
2066	do	case " $stdlib " in
2067		*" $o "*) continue ;;
2068		esac
2069		case $dir in
2070		/usr/lib64)
2071			i=/usr/local/lib64
2072			a=/lib64
2073			;;
2074		/lib64) i=/usr/local/lib64
2075			a=/usr/lib64
2076			;;
2077		/usr/lib)
2078			i=/usr/local/lib
2079			a=/lib
2080			;;
2081		lib)	i=/usr/local/lib
2082			a=/usr/lib
2083			;;
2084		*)	i=
2085			a=
2086			;;
2087		esac
2088		if	test "" != "$i" -a -d "$i"
2089		then	case " $o " in
2090			*" $i "*)
2091				;;
2092			*)	stdlib="$stdlib $i"
2093				;;
2094			esac
2095		fi
2096		stdlib="$stdlib $dir"
2097		if	test "" != "$a" -a -d "$a"
2098		then	case " $o " in
2099			*" $a "*)
2100				;;
2101			*)	stdlib="$stdlib $a"
2102				;;
2103			esac
2104		fi
2105	done
2106	case $hosted in
2107	1)	case " $stdlib " in
2108		*" /usr/lib "*)
2109			;;
2110		*)	case " $stdlib " in
2111			*" /usr/local/lib "*)
2112				;;
2113			*)	stdlib="$stdlib /usr/local/lib"
2114				;;
2115			esac
2116			stdlib="$stdlib /usr/lib"
2117			;;
2118		esac
2119		case " $stdlib " in
2120		*" /lib "*)
2121			;;
2122		*)	stdlib="$stdlib /lib"
2123			;;
2124		esac
2125	esac
2126	;;
2127*)	keepstdlib=0
2128	case $dir in
2129	*/arch/$hosttype/lib/*)
2130		notlib=`echo $dir | sed "s,/arch/$hosttype/lib/.*,/arch/$hosttype/lib,"`
2131		;;
2132	*)	notlib=////
2133		;;
2134	esac
2135	tstlib=
2136	implib=
2137	if	$cc -c hosted.$src
2138	then	for f in `(
2139			eval set x $probe_verbose
2140			while	:
2141			do	shift
2142				case $# in
2143				0)	break ;;
2144				esac
2145				$cc $1 hosted.$obj
2146			done
2147			) 2>&1 | sed -e 's/[ 	:]/\\
2148	/g' -e 's/-L//g' -e 's/^P,//' -e "s/[\"']//g" -e 's,^[\\\\/]*[\\\\/],/,' | sed -e '/^\$/d' -e '/^[-+]/d' -e '/^[^\\\\\\/]/d' -e '/[\\\\\\/]tmp[\\\\\\/]/d' -e 's/:\$//' -e 's,//*$,,'`
2149		do	case " $tstlib $implib " in
2150			*" $f "*)	continue ;;
2151			esac
2152			case $f in
2153			$notlib)	continue ;;
2154			esac
2155			if	test -d $f
2156			then	tstlib="$tstlib $f"
2157			elif	test -f $f
2158			then	d=`echo $f | sed -e 's,[\\\\/]*[^\\\\/]*\$,,'`
2159				case " $tstlib $implib " in
2160				*" $d "*)	continue ;;
2161				esac
2162				case $d in
2163				*[\\/]usr[\\/]lib)
2164					x=$d
2165					d="`echo $d | sed -e 's,[\\\\/][\\\\/]*usr[\\\\/]lib\$,/lib,'`"
2166					case " $tstlib $implib " in
2167					*" $d "*)	;;
2168					*)		implib="$implib $d" ;;
2169					esac
2170					implib="$implib $x"
2171					;;
2172				*[\\/]lib)
2173					implib="$implib $d"
2174					d="`echo $d | sed -e 's,[\\\\/][\\\\/]*lib\$,/usr/lib,'`"
2175					case " $tstlib $implib " in
2176					*" $d "*)	;;
2177					*)		implib="$implib $d" ;;
2178					esac
2179					;;
2180				*)	implib="$implib $d"
2181					;;
2182				esac
2183			fi
2184		done
2185	fi
2186	tstlib="$tstlib $implib"
2187	if	$cc -Dtype=void -Dcall=exit -c tstlib.$src && mv tstlib.$obj tst.$obj
2188	then	case $plusplus in
2189		'')	probe_lxx= ;;
2190		esac
2191		l=
2192		for sym in $probe_l $probe_lxx
2193		do	case $l in
2194			"")	l=$sym; continue ;;
2195			esac
2196			rm -f tstlib.$exe
2197			if	$cc -o tstlib.$exe tst.$obj -l$l
2198			then	eval set x $probe_ldmap
2199				while	:
2200				do	shift
2201					case $# in
2202					0)	break ;;
2203					esac
2204					d=`$cc -Dtype=int -Dcall=$sym $static $1 tstlib.$src -l$l 2>&1 | sed -e '/[\\\\\\/].*[\\\\\\/]lib[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ+][abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ+]*\.[^\\\\\\/]*\$/!d' -e 's,^[^\\\\\/]*,,' -e 's,[\\\\\\/]lib[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ+][abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ+]*\.[^\\\\\\/]*\$,,' -e '/^[\\\\\\/]/!d' | sort -u`
2205					case $d in
2206					?*)	tstlib="$tstlib $d" ;;
2207					esac
2208				done
2209			fi
2210			l=
2211		done
2212	fi
2213	libstd=
2214	libset=
2215	stdlibroot="/ /usr/"
2216	for d in $tstlib
2217	do	case $d in
2218		[\\/]lib|[\\/]usr[\\/]lib)
2219			;;
2220		*)	case " $stdlib " in
2221			*\ $d\ *)
2222				;;
2223			*)	if	ls $d ${PREROOT+$PREROOT/../$d} > tmp.tmp && test -s tmp.tmp
2224				then	for i in $probe_lib $obj
2225					do	if	grep -i "\\.$i\$" tmp.tmp >/dev/null
2226						then	case " $probe_lib_append " in
2227							*\ $d\ *)
2228								libstd="$libstd $d"
2229								;;
2230							*)	stdlib="$stdlib $d"
2231								case $d in
2232								/usr/lib|/usr/lib/*)
2233									;;
2234								/usr/lib?*)
2235									e=`echo $d | sed -e 's,/usr,,'`
2236									g=`echo $d/libc.* $e/libc.*`
2237									case "$e $g " in
2238									*".* "*);;
2239									*)	stdlib="$stdlib $e"
2240										stdlibroot=
2241										;;
2242									esac
2243									;;
2244								esac
2245								;;
2246							esac
2247							case $libset in
2248							"")	case $i in
2249								$obj)	;;
2250								*)	libset=1
2251									lib=$i
2252									;;
2253								esac
2254								;;
2255							esac
2256							break
2257						fi
2258					done
2259				fi
2260				;;
2261			esac
2262			;;
2263		esac
2264	done
2265	for d in `$ld --verbose 2>&1 | sed -e '/SEARCH_DIR/!d' -e 's/[ 	][ 	][ 	]*/ /g' -e 's/SEARCH_DIR(\([^ ]*\));/\1/g' -e 's, //[^ ]*,,' -e 's,",,g'`
2266	do	if	test -d $d
2267		then	case " $stdlib $libstd " in
2268			*\ ${d}\ *)
2269				;;
2270			*)	libstd="$libstd $d"
2271				;;
2272			esac
2273		fi
2274	done
2275	case $hosted in
2276	"")	tstlib= ;;
2277	*)	tstlib="$stdlibroot /usr/ccs/ /usr/local/" ;;
2278	esac
2279	case $stdlibroot in
2280	?*)	d=
2281		for f in $stdinclude
2282		do	f=`echo $f | sed -e 's,[^\\\\/]*\$,,'`
2283			d="$d $f"
2284		done
2285		tstlib="$d $tstlib"
2286		;;
2287	esac
2288	$cc -c doti.$src > all.tmp
2289	for f in $probe_libdir
2290	do	for d in $stdlib $libstd $tstlib
2291		do	if	test -d ${d}${f}
2292			then	ls ${d}${f} ${PREROOT:+$PREROOT/../${d}${f}} |
2293				while read i
2294				do	for j in ${d}${f}/${i} ${PREROOT:+$PREROOT/../${d}${f}/${i}}
2295					do	if	test -f $j -a -r $j -a -s $j
2296						then	echo $i
2297							break
2298						fi
2299					done
2300				done > tmp.tmp
2301				if	test -s tmp.tmp
2302				then	if	egrep -i "^${prefix_archive}[abcdefghijklmnopqrstuvwxyz0123456789_][abcdefghijklmnopqrstuvwxyz0123456789_]*\\.$lib\$" tmp.tmp >lib.tmp ||
2303						egrep -i "\\.$obj\$" tmp.tmp >/dev/null ||
2304						egrep -i "^${prefix_shared}[abcdefghijklmnopqrstuvwxyz0123456789_][abcdefghijklmnopqrstuvwxyz0123456789_]*\\$so(.[0-9]+)*\$" tmp.tmp >>lib.tmp
2305					then	if	test -s lib.tmp
2306						then	sed -e "s,.*/,," -e 's,^'${prefix_archive}'\(.*\)\.'$lib'$,\1,g' -e 's,^'${prefix_shared}'\(.*\)\'$so'[.0-9]*,\1,g' lib.tmp | sort -u > tmp.tmp
2307							xs=`sort all.tmp all.tmp tmp.tmp | uniq -u`
2308							case $xs in
2309							'')	continue ;;
2310							esac
2311							ok=0
2312							for x in $xs
2313							do	case $x in
2314								*_p)	continue ;; # linux gcc known to hang for -lc_p
2315								esac
2316								if	$cc -o doti.$exe doti.$obj -l$x 2>e
2317								then	ok=1
2318								else	if	test -s e && egrep -i ":.*[ 	](find|found|locate|search|-l$x)[ 	]" e > /dev/null
2319									then	if	egrep -i ":.*[ 	](access|permission)[ 	]" e
2320										then	: maybe
2321										else	ok=0
2322											break
2323										fi
2324									fi
2325									case $Lflag in
2326									1)	if	$cc -L${d}${f} -o doti.$exe doti.$obj -l$x
2327										then	ok=0
2328											break
2329										fi
2330										;;
2331									esac
2332								fi
2333							done
2334							case $ok in
2335							0)	continue ;;
2336							esac
2337							sort -u all.tmp tmp.tmp > lib.tmp
2338							mv lib.tmp all.tmp
2339						fi
2340						case " $stdlib $libstd " in
2341						*" ${d}${f} "*)
2342							;;
2343						*)	if	test -d ${d}${f}/fsoft
2344							then	stdlib="$stdlib ${d}${f}/"'$(FLOAT_OPTION)'
2345							fi
2346							stdlib="$stdlib ${d}${f}"
2347							;;
2348						esac
2349					fi
2350				fi
2351			fi
2352		done
2353	done
2354	stdlib="$stdlib $libstd"
2355	case $stdlib in
2356	*/shlib*)
2357		dy=
2358		st=
2359		for i in $stdlib $libstd
2360		do	case $i in
2361			*/shlib)	dy="$dy $i" ;;
2362			*)		st="$st $i" ;;
2363			esac
2364		done
2365		for i in /var
2366		do	if	test -d $i/shlib
2367			then	dy="$dy $i/shlib"
2368			fi
2369		done
2370		stdlib="$dy $st"
2371		;;
2372	esac
2373	;;
2374esac
2375
2376if	$cc -c prefix.$src
2377then	eval set x $probe_symprefix
2378	while	:
2379	do	shift
2380		case $# in
2381		0)	break ;;
2382		esac
2383		if	$nm $nmflags prefix.$obj | grep -c ${1}prefix >/dev/null
2384		then	symprefix=$1
2385			break
2386		fi
2387	done
2388fi
2389
2390if	$cc -c warn.$src 2>e && test -f warn.$obj
2391then	e=`wc -c < e`
2392
2393	eval set x $probe_debug
2394	while	:
2395	do	shift
2396		case $# in
2397		0)	break ;;
2398		esac
2399		rm -f warn.$obj
2400		$cc $1 -c warn.$src 2>e && test -f warn.$obj || continue
2401		case `wc -c < e` in
2402		$e)	debug=$1; break ;;
2403		esac
2404	done
2405
2406	eval set x $probe_no_protect
2407	while	:
2408	do	shift
2409		case $# in
2410		0)	break ;;
2411		esac
2412		rm -f warn.$obj
2413		$cc $1 -c warn.$src 2>e && test -f warn.$obj || continue
2414		case `wc -c < e` in
2415		$e)	no_protect=$1; break ;;
2416		esac
2417	done
2418
2419	case $version_string in
2420	$probe_gcc_version)	probe_optimize="$probe_gcc_optimize $probe_optimize" ;;
2421	esac
2422	eval set x $probe_optimize
2423	while	:
2424	do	shift
2425		case $# in
2426		0)	break ;;
2427		esac
2428		rm -f warn.$obj
2429		$cc $1 -c warn.$src 2>e && test -f warn.$obj || continue
2430		case `wc -c < e` in
2431		$e)	optimize=$1; break ;;
2432		esac
2433	done
2434
2435	eval set x $probe_strict
2436	while	:
2437	do	shift
2438		case $# in
2439		0)	break ;;
2440		esac
2441		rm -f warn.$obj
2442		$cc $1 -c warn.$src 2>e && test -f warn.$obj || continue
2443		n=`wc -c < e`
2444		if	test $n -ge $e
2445		then	strict=$1
2446			break
2447		fi
2448	done
2449
2450	$cc -c warn1.$src 2>e
2451	o=`wc -c < e`
2452	eval set x $probe_warn
2453	while	:
2454	do	shift
2455		case $# in
2456		0)	break ;;
2457		esac
2458		rm -f warn.$obj warn.$exe
2459		$cc -o warn.$exe $1 warn.$src 2>e && test -f warn.$exe || continue
2460		n=`wc -c < e`
2461		for i in $warn_enum
2462		do	rm -f warn$i.$obj
2463			$cc -c $1 warn$i.$src 2>e && test -f warn$i.$obj || continue
2464			n=`wc -c < e`
2465			if	test $n -gt $o
2466			then	warn=$1
2467				break 2
2468			fi
2469		done
2470	done
2471
2472fi
2473
2474while	:
2475do	case $hosted in
2476	1)	rm -f readonly.$exe
2477		eval set x '""' $probe_readonly
2478		while	:
2479		do	shift
2480			case $# in
2481			0)	break ;;
2482			esac
2483			for co in '' -Dtest_const
2484			do	rm -f readonly.$exe
2485				if	$cc -o readonly.$exe $co $1 readonly.$src && $executable readonly.$exe
2486				then	if	./readonly.$exe >/dev/null 2>&1
2487					then	:
2488					else	readonly=$1
2489						break 3
2490					fi
2491				fi
2492			done
2493		done
2494		rm -f readonly.$exe readonly.s
2495		if	$cc -S readonly.$src && test -f readonly.s
2496		then	if	sed	-e 's/^\([ 	]*[.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_$:]*[ 	]*\.*\)data/\1text/' \
2497					-e 's/^\([ 	]*[.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_$:]*[ 	]*\.*\)zero[ 	][ 	]*/\1set	.,.+/' \
2498					-e 's/^\([ 	]*[.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_$:]*[ 	]*\.*\)space[ 	][ 	]*1/\1byte 0/' \
2499					-e 's/^\([ 	]*[.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_$:]*[ 	]*\.*\)space[ 	][ 	]*2/\1byte 0,0/' \
2500					-e 's/^\([ 	]*[.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_$:]*[ 	]*\.*\)space[ 	][ 	]*3/\1byte 0,0,0/' \
2501					-e 's/^\([ 	]*[.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_$:]*[ 	]*\.*\)space[ 	][ 	]*4/\1byte 0,0,0,0/' \
2502					readonly.s > ro.s && $cc -o readonly.$exe ro.s && $executable readonly.$exe
2503			then	if	./readonly.$exe >/dev/null 2>&1
2504				then	:
2505				else	readonly='-S.data'
2506					break
2507				fi
2508			fi
2509			rm -f readonly.$exe
2510			if	sed	-e 's/^\([ 	]*[.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_$:]*[ 	]*\.*\)idat/\1code/' \
2511					-e 's/^\([ 	]*[.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_$:]*[ 	]*\.*\)zero[ 	][ 	]*/\1set	.,.+/' \
2512					-e 's/^\([ 	]*[.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_$:]*[ 	]*\.*\)space[ 	][ 	]*1/\1byte 0/' \
2513					-e 's/^\([ 	]*[.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_$:]*[ 	]*\.*\)space[ 	][ 	]*2/\1byte 0,0/' \
2514					-e 's/^\([ 	]*[.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_$:]*[ 	]*\.*\)space[ 	][ 	]*3/\1byte 0,0,0/' \
2515					-e 's/^\([ 	]*[.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_$:]*[ 	]*\.*\)space[ 	][ 	]*4/\1byte 0,0,0,0/' \
2516					readonly.s > ro.s && $cc -o readonly.$exe ro.s && $executable readonly.$exe
2517			then	if	./readonly.$exe >/dev/null 2>&1
2518				then	:
2519				else	readonly='-S.idat'
2520					break
2521				fi
2522			fi
2523			if	sed	-e 's/^\([ 	]*[.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_$:]*[ 	]*\.*\)data/\1rdata/' \
2524					readonly.s > ro.s && $cc -o readonly.$exe ro.s && $executable readonly.$exe
2525			then	if	./readonly.$exe >/dev/null 2>&1
2526				then	:
2527				else	readonly='-S.rdata'
2528					break
2529				fi
2530			fi
2531		fi
2532		;;
2533	esac
2534	break
2535done
2536
2537case $stdc in
2538?*)	dialect="$dialect ANSI" ;;
2539esac
2540case $plusplus in
2541?*)	dialect="$dialect C++" ;;
2542esac
2543case $hosted in
2544"")	dialect="$dialect CROSS" ;;
2545esac
2546case $doti in
2547?*)	dialect="$dialect DOTI" ;;
2548esac
2549case $gnu in
2550?*)	dialect="$dialect GNU" ;;
2551esac
2552case $so:$dynamic:$static in
2553::)	;;
2554*)	dialect="$dialect DYNAMIC"
2555	case $soversion in
2556	?*)	dialect="$dialect VERSION" ;;
2557	esac
2558	;;
2559esac
2560case $implicitc in
2561?*)	dialect="$dialect IMPLICITC" ;;
2562esac
2563case $ptrcopy in
2564?*)	dialect="$dialect PTRCOPY" ;;
2565esac
2566case $ptrimplicit in
2567?*)	dialect="$dialect PTRIMPLICIT" ;;
2568esac
2569case $ptrmkdir in
2570?*)	dialect="$dialect PTRMKDIR" ;;
2571esac
2572case $libpp in
2573?*)	dialect="$dialect LIBPP" ;;
2574esac
2575case $toucho in
2576?*)	dialect="$dialect TOUCHO" ;;
2577esac
2578case $dDflag in
2579?*)	dialect="$dialect -dD" ;;
2580esac
2581# 2005-05-25 use $(CC.INCLUDE.LOCAL) instead
2582case $include_local in
2583?*)	dialect="$dialect -I-" ;;
2584esac
2585case $Lflag in
2586?*)	dialect="$dialect -L" ;;
2587esac
2588
2589ppcmd='$(CPP)'
2590ppdir='$(CPP:D)'
2591eval ppopt='"'$ppopt'"'
2592eval ppenv='"'$ppenv'"'
2593
2594set x "" .$exe
2595shift
2596exe=
2597for i
2598do	rm -f require$i
2599done
2600if	$cc -o require require.$src
2601then	for i
2602	do	if	$executable require$i
2603		then	exe=$i
2604			break
2605		fi
2606	done
2607fi
2608case $sa:$sd:$so in
2609::?*)	eval set x $probe_sa
2610	while	:
2611	do	shift
2612		case $# in
2613		0)	break ;;
2614		esac
2615		for i in $stdlib
2616		do	eval j="'" $i/lib*$1 "'"
2617			case $j in
2618			" $i/lib*$1 ")
2619				eval j="'" $i/lib*$1.[0123456789]* "'"
2620				case $j in
2621				" $i/lib*$1.[0123456789]* ")
2622					continue
2623					;;
2624				esac
2625				;;
2626			esac
2627			sa=$1
2628			lddynamic=-Bdynamic
2629			ldstatic=-Bstatic
2630			break 2
2631		done
2632	done
2633	;;
2634esac
2635case $ldscript in
2636"")	case $so in
2637	.lib)	ldscript=".def .exp" ;;
2638	*)	ldscript=".ld" ;;
2639	esac
2640	;;
2641esac
2642case $hosttype in
2643'')		hosttype=unknown ;;
2644sgi.mips3)	dll_variants='sgi.mips2:o32:-mips2 sgi.mips4:64:-mips4' ;;
2645sgi.mips4)	dll_variants='sgi.mips2:o32:-mips2 sgi.mips3:n32:-mips3' ;;
2646esac
2647
2648case $hosted in
2649"")	ccnative=`echo $cc | sed -e 's,.*/,,'`
2650	ccs=$ccnative
2651	for c in cc gcc
2652	do	case " $ccs " in
2653		*" $c "*)	;;
2654		*)		ccs="$ccs $c" ;;
2655		esac
2656	done
2657	for p in $path
2658	do	for c in $ccs
2659		do	if	$executable $p/$c
2660			then	rm -f native.$exe
2661				if	$p/$c -o native.$exe doti.$src && ./native.$exe
2662				then	ccnative=$p/$c
2663					exectype=`package CC="$ccnative" || $SHELL -c "package CC='$ccnative'"`
2664					case $exectype in
2665					*[Uu][Ss][Aa][Gg][Ee]:*)
2666						exectype=`PATH=$_probe_PATH; export PATH; package CC="$ccnative" || $SHELL -c "package CC='$ccnative'"`
2667						;;
2668					esac
2669					break 2
2670				fi
2671			fi
2672		done
2673	done
2674	;;
2675*)	ccnative=$cc
2676	exectype=$hosttype
2677	;;
2678esac
2679
2680# runtime shared lib exported symbol resolution
2681
2682case $cc_dll:$shared in
2683:|:*|*:);;
2684*)	cat > cmd.c <<'!'
2685#include <stdio.h>
2686#include <dlfcn.h>
2687typedef int (*Lib_f)(int**, int**, int**);
2688int	gbl_def = 1;
2689int	gbl_ref = 1;
2690int	gbl_ext;
2691int main(int argc, char** argv)
2692{
2693	void*	dll;
2694	Lib_f	lib;
2695	int*	def;
2696	int*	ref;
2697	int*	ext;
2698
2699	if (!(dll = dlopen(*++argv, RTLD_LAZY)))
2700		fprintf(stderr, "library not found\n");
2701	else if (!((lib = (Lib_f)dlsym(dll, "lib"))) && !(lib = (Lib_f)dlsym(dll, "_lib")))
2702		fprintf(stderr, "symbol not found\n");
2703	else if ((*lib)(&def, &ref, &ext))
2704		fprintf(stderr, "function failed\n");
2705	else if (def == &gbl_def && ref == &gbl_ref && ext == &gbl_ext)
2706		printf("ALL\n");
2707	else if (ref == &gbl_ref && ext == &gbl_ext)
2708		printf("REF\n");
2709	else if (ext == &gbl_ext)
2710		printf("EXT\n");
2711	return 0;
2712}
2713!
2714	cat > lib.c <<'!'
2715int	gbl_def = 1;
2716int	gbl_ref;
2717int	gbl_ext;
2718int lib(int** def, int** ref, int** ext)
2719{
2720	*def = &gbl_def;
2721	*ref = &gbl_ref;
2722	*ext = &gbl_ext;
2723	return 0;
2724}
2725!
2726	if	$cc -c $cc_dll $cc_pic cmd.c &&
2727		$cc -c $cc_dll $cc_pic lib.c && {
2728			$cc $cc_dll $export_dynamic -o cmd.exe cmd.o ||
2729			$cc $cc_dll $export_dynamic -o cmd.exe cmd.o -ldl
2730		} &&
2731		$dld $shared -o libgbl.dll lib.o
2732	then	x=`./cmd.exe ./libgbl.dll`
2733		case $x in
2734		?*)	dialect="$dialect EXPORT=$x" ;;
2735		esac
2736	else	case $sd:$hosttype in
2737		.dll:*win*)	dialect="$dialect EXPORT=DLL" ;;
2738		esac
2739	fi
2740	;;
2741esac
2742
2743# shellmagic defined if installed shell scripts need magic
2744
2745echo ': got magic :
2746echo ok' > ok
2747chmod +x ok
2748case `(eval ./ok | /bin/sh) 2>/dev/null` in
2749ok)	;;
2750*)	echo '#!/bin/env sh
2751: got magic :
2752echo ok' > ok
2753	chmod +x ok
2754	case `(eval ./ok | /bin/sh) 2>/dev/null` in
2755	ok)	shellmagic='$("#")!/bin/env sh'
2756		;;
2757	*)	for i in /emx/bin/bash.exe /emx/bin/sh.exe
2758		do	if	test -x $i
2759			then	shellmagic='$("#")!'$i
2760				break
2761			fi
2762		done
2763		;;
2764	esac
2765	;;
2766esac
2767
2768#
2769# path cleanup
2770#
2771
2772for i in ar ccnative dld ld nm size stdinclude stdlib strip
2773do	eval o='$'$i
2774	v=$o
2775	case $v in
2776	*//*)	v=`echo $v | sed 's,///*,/,g'` ;;
2777	esac
2778	if	(test . -ef "`pwd`")
2779	then	k=
2780		for x in $v
2781		do	case $x in
2782			*/../*|*/..)
2783				case $x in
2784				/*)	a=/ ;;
2785				*)	a= ;;
2786				esac
2787				IFS=/
2788				set '' $x
2789				IFS=$ifs
2790				r=
2791				for d
2792				do	r="$d $r"
2793				done
2794				p=
2795				g=
2796				for d in $r
2797				do	case $d in
2798					..)	g="$g $d" ;;
2799					*)	case $g in
2800						'')	case $p in
2801							'')	p=$d ;;
2802							*)	p=$d/$p ;;
2803							esac
2804							;;
2805						*)	set $g
2806							shift
2807							g=$*
2808							;;
2809						esac
2810						;;
2811					esac
2812				done
2813				case $a in
2814				'')	for d in $g
2815					do	p=$d/$p
2816					done
2817					;;
2818				*)	p=$a$p
2819					;;
2820				esac
2821				case $p in
2822				/)	continue ;;
2823				esac
2824				test $x -ef $p && x=$p
2825				;;
2826			esac
2827			k="$k $x"
2828		done
2829		set '' $k
2830		shift
2831		v=$1
2832		case $# in
2833		0)	;;
2834		*)	shift
2835			while	:
2836			do	case $# in
2837				0)	break ;;
2838				esac
2839				k=
2840				for d
2841				do	for j in $v
2842					do	test $d -ef $j && continue 2
2843					done
2844					k="$k $d"
2845				done
2846				set '' $k
2847				case $# in
2848				1)	break ;;
2849				esac
2850				shift
2851				v="$v $1"
2852				shift
2853			done
2854			;;
2855		esac
2856	fi
2857	case $v in
2858	$o)	;;
2859	*)	eval $i='$'v ;;
2860	esac
2861done
2862
2863case $keepstdlib in
28641)	;;
2865*)	#
2866	# favor lib64 over lib
2867	#
2868	case $hosttype in
2869	*64|*[!0-9]64[!a-zA-Z0-9]*)
2870		o=$stdlib
2871		stdlib=
2872		for i in $o
2873		do	case " $stdlib " in
2874			*" $i "*)
2875				continue
2876				;;
2877			esac
2878			case $i in
2879			*64)	stdlib="$stdlib $i"
2880				continue
2881				;;
2882			esac
2883			case " $o " in
2884			*" ${i}64 "*)
2885				case " $stdlib " in
2886				*" ${i}64 "*)
2887					;;
2888				*)	stdlib="$stdlib ${i}64"
2889					;;
2890				esac
2891				;;
2892			esac
2893			stdlib="$stdlib $i"
2894		done
2895		;;
2896	esac
2897	;;
2898esac
2899
2900#
2901# set up for local override
2902#
2903
2904CC_VERSION_STAMP=$version_stamp
2905CC_VERSION_STRING=$version_string
2906CC_CC=$cc
2907CC_NATIVE=$ccnative
2908CC_EXECTYPE=$exectype
2909CC_HOSTTYPE=$hosttype
2910CC_ALTPP_FLAGS=$ppopt
2911CC_ALTPP_ENV=$ppenv
2912CC_AR=$ar
2913CC_AR_ARFLAGS=$ar_arflags
2914CC_ARFLAGS=$arflags
2915CC_DEBUG=$debug
2916CC_DIALECT=$dialect
2917CC_PICBIG=$cc_PIC
2918CC_PICSMALL=$cc_pic
2919CC_PIC=$CC_PICBIG
2920CC_DLL_ONLY=$cc_dll
2921case $CC_DLL_ONLY in
2922'')	CC_DLLBIG=
2923	CC_DLLSMALL=
2924	CC_DLL=
2925	;;
2926*)	CC_DLLBIG="$CC_DLL_ONLY $CC_PICBIG"
2927	CC_DLLSMALL="$CC_DLL_ONLY $CC_PICSMALL"
2928	CC_DLL="$CC_DLL_ONLY $CC_PICBIG"
2929	;;
2930esac
2931CC_DLL_DIR=$dll_dir
2932CC_DLL_LIBRARIES=$dll_libraries
2933CC_DLL_VARIANTS=$dll_variants
2934CC_DYNAMIC=$dynamic
2935CC_EXPORT_DYNAMIC=$export_dynamic
2936CC_INCLUDE_LOCAL=$include_local
2937CC_LD=$ld
2938CC_LD_DYNAMIC=$lddynamic
2939CC_LD_LAZY=$ldlazy
2940CC_LD_NOLAZY=$ldnolazy
2941CC_LD_ORIGIN=$ldorigin
2942CC_LD_RECORD=$ldrecord
2943CC_LD_NORECORD=$ldnorecord
2944CC_LD_RUNPATH=$ldrunpath
2945CC_LD_STATIC=$ldstatic
2946CC_LD_STRIP=$ldstrip
2947CC_LIB_DLL=$lib_dll
2948CC_LIB_ALL=$lib_all
2949CC_LIB_UNDEF=$lib_undef
2950CC_MAKE_OPTIONS=$makeoptions
2951CC_NM=$nm
2952CC_NMEDIT=$nmedit
2953CC_NMFLAGS=$nmflags
2954CC_NOPROTECT=$no_protect
2955CC_OPTIMIZE=$optimize
2956CC_READONLY=$readonly
2957CC_REPOSITORY=$repository
2958CC_REQUIRE=$require
2959CC_RUNPATH=$runpath
2960CC_SHARED=$shared
2961CC_SHARED_LD=$dld
2962CC_SHARED_NAME=$shared_name
2963CC_SHARED_REGISTRY=$shared_registry
2964CC_SHARED_REGISTRY_PATH=$probe_shared_registry_path
2965CC_SHELLMAGIC=$shellmagic
2966CC_SIZE=$size
2967CC_STATIC=$static
2968CC_STDINCLUDE=$stdinclude
2969CC_STDLIB=$stdlib
2970CC_STRICT=$strict
2971CC_STRIP=$strip
2972CC_STRIP_FLAGS=$stripflags
2973CC_PREFIX_ARCHIVE=$prefix_archive
2974CC_PREFIX_DYNAMIC=$prefix_dynamic
2975CC_PREFIX_SHARED=$prefix_shared
2976CC_PREFIX_SYMBOL=$symprefix
2977CC_SUFFIX_ARCHIVE=.$lib
2978CC_SUFFIX_COMMAND=$suffix_command
2979CC_SUFFIX_DEBUG=$sdb
2980CC_SUFFIX_DYNAMIC=$sd
2981CC_SUFFIX_LD=$ldscript
2982CC_SUFFIX_OBJECT=.$obj
2983CC_SUFFIX_SHARED=$so
2984CC_SUFFIX_SOURCE=.$src
2985CC_SUFFIX_STATIC=$sa
2986CC_VERSION=$version_flags
2987CC_WARN=$warn
2988CC_ATTRIBUTES=$ATTRIBUTES
2989
2990exec >&3
2991
2992#
2993# check for local override
2994# all CC_* but { CC_CC CC_VERSION_STAMP CC_VERSION_STRING } may be modified
2995# additional CC.* may be printed on stdout
2996#
2997
2998if	test -f "$dir/probe.lcl"
2999then	. "$dir/probe.lcl"
3000fi
3001
3002#
3003# the payoff
3004#
3005
3006case $version_stamp in
3007?*)	echo "# $version_stamp" ;;
3008esac
3009echo CC.CC = $cc
3010echo CC.NATIVE = $CC_NATIVE
3011echo CC.EXECTYPE = $CC_EXECTYPE
3012echo CC.HOSTTYPE = $CC_HOSTTYPE
3013echo CC.ALTPP.FLAGS = $CC_ALTPP_FLAGS
3014echo CC.ALTPP.ENV = $CC_ALTPP_ENV
3015echo CC.AR = $CC_AR
3016echo CC.AR.ARFLAGS = $CC_AR_ARFLAGS
3017echo CC.ARFLAGS = $CC_ARFLAGS
3018echo CC.DEBUG = $CC_DEBUG
3019echo CC.DIALECT = $CC_DIALECT
3020echo CC.DLLBIG = $CC_DLLBIG
3021echo CC.DLLSMALL = $CC_DLLSMALL
3022echo CC.DLL = $CC_DLL
3023echo CC.DLL.DEF = $cc_dll_def
3024echo CC.DLL.DIR = $CC_DLL_DIR
3025echo CC.DLL.LIBRARIES = $CC_DLL_LIBRARIES
3026echo CC.DLL.VARIANTS = $CC_DLL_VARIANTS
3027echo CC.DYNAMIC = $CC_DYNAMIC
3028echo CC.EXPORT.DYNAMIC = $CC_EXPORT_DYNAMIC
3029echo CC.INCLUDE.LOCAL = $CC_INCLUDE_LOCAL
3030#
3031# 2004-02-14 release workaround
3032#
3033case $CC_SHARED_LD in
3034$CC_CC)	echo if LDSHARED
3035	echo CC.LD = $CC_LD
3036	echo else
3037	echo CC.LD = $CC_CC
3038	echo end
3039	;;
3040*)	echo CC.LD = $CC_LD
3041	;;
3042esac
3043echo CC.LD.DYNAMIC = $CC_LD_DYNAMIC
3044echo CC.LD.LAZY = $CC_LD_LAZY
3045echo CC.LD.NOLAZY = $CC_LD_NOLAZY
3046echo CC.LD.ORIGIN = $CC_LD_ORIGIN
3047echo CC.LD.RECORD = $CC_LD_RECORD
3048echo CC.LD.NORECORD = $CC_LD_NORECORD
3049echo CC.LD.RUNPATH = $CC_LD_RUNPATH
3050echo CC.LD.STATIC = $CC_LD_STATIC
3051echo CC.LD.STRIP = $CC_LD_STRIP
3052echo CC.LIB.DLL = $CC_LIB_DLL
3053echo CC.LIB.ALL = $CC_LIB_ALL
3054echo CC.LIB.UNDEF = $CC_LIB_UNDEF
3055echo CC.MAKE.OPTIONS = $CC_MAKE_OPTIONS
3056echo CC.NM = $CC_NM
3057case $CC_NMEDIT in
3058?*)	CC_NMEDIT=" $CC_NMEDIT" ;;
3059esac
3060echo CC.NMEDIT ="$CC_NMEDIT"
3061echo CC.NMFLAGS = $CC_NMFLAGS
3062echo CC.NOPROTECT = $CC_NOPROTECT
3063echo CC.OPTIMIZE = $CC_OPTIMIZE
3064echo CC.PICBIG = $CC_PICBIG
3065echo CC.PICSMALL = $CC_PICSMALL
3066echo CC.PIC = $CC_PIC
3067echo CC.READONLY = $CC_READONLY
3068echo CC.REPOSITORY = $CC_REPOSITORY
3069for f in $CC_REQUIRE
3070do	echo CC.REQUIRE.$f =`cat req.$f`
3071done
3072echo CC.RUNPATH = $CC_RUNPATH
3073echo CC.SHARED = $CC_SHARED
3074echo CC.SHARED.LD = $CC_SHARED_LD
3075echo CC.SHARED.NAME = $CC_SHARED_NAME
3076echo CC.SHARED.REGISTRY = $CC_SHARED_REGISTRY
3077echo CC.SHARED.REGISTRY.PATH = $CC_SHARED_REGISTRY_PATH
3078echo CC.SHELLMAGIC = $CC_SHELLMAGIC
3079echo CC.SIZE = $CC_SIZE
3080echo CC.STATIC = $CC_STATIC
3081echo CC.STDINCLUDE = $CC_STDINCLUDE
3082echo CC.STDLIB = $CC_STDLIB
3083echo CC.STRICT = $CC_STRICT
3084echo CC.STRIP = $CC_STRIP
3085echo CC.STRIP.FLAGS = $CC_STRIP_FLAGS
3086echo CC.PREFIX.ARCHIVE = $CC_PREFIX_ARCHIVE
3087echo CC.PREFIX.DYNAMIC = $CC_PREFIX_DYNAMIC
3088echo CC.PREFIX.SHARED = $CC_PREFIX_SHARED
3089echo CC.PREFIX.SYMBOL = $CC_PREFIX_SYMBOL
3090echo CC.SUFFIX.ARCHIVE = $CC_SUFFIX_ARCHIVE
3091echo CC.SUFFIX.COMMAND = $CC_SUFFIX_COMMAND
3092echo CC.SUFFIX.DEBUG = $CC_SUFFIX_DEBUG
3093echo CC.SUFFIX.DYNAMIC = $CC_SUFFIX_DYNAMIC
3094echo CC.SUFFIX.LD = $CC_SUFFIX_LD
3095echo CC.SUFFIX.OBJECT = $CC_SUFFIX_OBJECT
3096echo CC.SUFFIX.SHARED = $CC_SUFFIX_SHARED
3097echo CC.SUFFIX.SOURCE = $CC_SUFFIX_SOURCE
3098echo CC.SUFFIX.STATIC = $CC_SUFFIX_STATIC
3099echo CC.VERSION = $CC_VERSION
3100case $CC_VERSION_STRING in
3101*\"*)	i=`echo " $CC_VERSION_STRING" | sed -e 's,",\\\\",g' -e 's,^ ,,' -e 's,.*,"&",'` ;;
3102*\'*)	i=\"$CC_VERSION_STRING\" ;;
3103*)	i=$CC_VERSION_STRING ;;
3104esac
3105cat <<!
3106CC.VERSION.STRING = $i
3107!
3108echo CC.WARN = $CC_WARN
3109
3110for i in $CC_ATTRIBUTES
3111do	eval echo CC.$i = \$$i
3112done
3113