1*b30d1939SAndy Fiddaman:
2*b30d1939SAndy Fiddaman# @(#)probe.win32 (AT&T Research) 2010-01-01
3*b30d1939SAndy Fiddaman#
4*b30d1939SAndy Fiddaman# win32 specific make C probe initialization
5*b30d1939SAndy Fiddaman# wrapped cc's are easy on uwin
6*b30d1939SAndy Fiddaman#
7*b30d1939SAndy Fiddaman# 2> easy.err to avoid mysterious hang with bcc
8*b30d1939SAndy Fiddaman
9*b30d1939SAndy Fiddaman# begin preamble shared with the pp probe.ini
10*b30d1939SAndy Fiddaman
11*b30d1939SAndy FiddamanIFS=$'\n'
12*b30d1939SAndy Fiddaman
13*b30d1939SAndy Fiddamanchmod 777 . # cl.exe setuid workaround
14*b30d1939SAndy Fiddaman
15*b30d1939SAndy Fiddamantypeset -A header version
16*b30d1939SAndy Fiddaman
17*b30d1939SAndy Fiddaman# we are probing on behalf of libpp and nmake
18*b30d1939SAndy Fiddaman# so the native preprocessor must be forced in
19*b30d1939SAndy Fiddaman# order to bootstrap libpp and nmake
20*b30d1939SAndy Fiddaman
21*b30d1939SAndy Fiddamannativepp=-1
22*b30d1939SAndy Fiddamanexport nativepp
23*b30d1939SAndy Fiddaman
24*b30d1939SAndy Fiddamanprobe_header="
25*b30d1939SAndy Fiddamanstddef.h
26*b30d1939SAndy Fiddaman"
27*b30d1939SAndy Fiddamanfor inc in syslimits.h winerror.h ostream bits/ctype_base.h stream.h
28*b30d1939SAndy Fiddamando	echo 	"#include <$inc>" > easy.c
29*b30d1939SAndy Fiddaman	if	$cc -E easy.c > /dev/null 2> easy.err
30*b30d1939SAndy Fiddaman	then	probe_header="$probe_header
31*b30d1939SAndy Fiddaman$inc
32*b30d1939SAndy Fiddaman"
33*b30d1939SAndy Fiddaman	fi
34*b30d1939SAndy Fiddamandone
35*b30d1939SAndy Fiddaman
36*b30d1939SAndy Fiddaman{
37*b30d1939SAndy Fiddamanfor i in $probe_header
38*b30d1939SAndy Fiddamando	echo "#include <$i>"
39*b30d1939SAndy Fiddamandone
40*b30d1939SAndy Fiddamanecho '#ifdef __cplusplus'
41*b30d1939SAndy Fiddamanecho "int _Pr0b3_cplus=__cplusplus;"
42*b30d1939SAndy Fiddamanecho '#endif'
43*b30d1939SAndy Fiddamanecho '#ifdef _UWIN'
44*b30d1939SAndy Fiddamanecho "int _Pr0b3_uwin=_UWIN;"
45*b30d1939SAndy Fiddamanecho '#endif'
46*b30d1939SAndy Fiddamanecho '#ifdef __BORLANDC__'
47*b30d1939SAndy Fiddamanecho "int _Pr0b3_version_BORLAND=__BORLANDC__;"
48*b30d1939SAndy Fiddamanecho '#endif'
49*b30d1939SAndy Fiddamanecho '#ifdef __DMC__'
50*b30d1939SAndy Fiddamanecho "int _Pr0b3_version_DM=__DMC__;"
51*b30d1939SAndy Fiddamanecho '#endif'
52*b30d1939SAndy Fiddamanecho '#ifdef _MSC_VER'
53*b30d1939SAndy Fiddamanecho "int _Pr0b3_version_MS=_MSC_VER;"
54*b30d1939SAndy Fiddamanecho '#endif'
55*b30d1939SAndy Fiddamanecho '#ifdef __ICL'
56*b30d1939SAndy Fiddamanecho "int _Pr0b3_version_ICL=__ICL;"
57*b30d1939SAndy Fiddamanecho '#endif'
58*b30d1939SAndy Fiddamanecho '#ifdef __LCC__'
59*b30d1939SAndy Fiddamanecho "int _Pr0b3_version_LCC=0+__LCC__;"
60*b30d1939SAndy Fiddamanecho '#endif'
61*b30d1939SAndy Fiddamanecho '#ifdef __MINGW32__'
62*b30d1939SAndy Fiddamanecho "int _Pr0b3_version_MINGW=__MINGW32__;"
63*b30d1939SAndy Fiddamanecho '#endif'
64*b30d1939SAndy Fiddamanecho '#ifdef __INTERIX'
65*b30d1939SAndy Fiddamanecho "int _Pr0b3_version_INTERIX=__INTERIX;"
66*b30d1939SAndy Fiddamanecho '#endif'
67*b30d1939SAndy Fiddamanecho '#ifdef __WATCOMC__'
68*b30d1939SAndy Fiddamanecho "int _Pr0b3_version_WATCOM=__WATCOMC__;"
69*b30d1939SAndy Fiddamanecho '#endif'
70*b30d1939SAndy Fiddaman} > easy.c
71*b30d1939SAndy Fiddaman
72*b30d1939SAndy Fiddamaninclude=
73*b30d1939SAndy Fiddamanuwin=
74*b30d1939SAndy Fiddamancplus=
75*b30d1939SAndy Fiddaman
76*b30d1939SAndy Fiddaman$cc -E easy.c 2>&1 |
77*b30d1939SAndy Fiddamanegrep -i '^(#(line)? 1 .*\.[hH]| *int +_Pr0b3_[a-zA-Z_]* *= *[0-9])' |
78*b30d1939SAndy Fiddamansed	-e 's,_Pr0b3_,,' \
79*b30d1939SAndy Fiddaman	-e 's/.*"\(.*\)".*/\1/' \
80*b30d1939SAndy Fiddaman	-e 's,^  *,,' \
81*b30d1939SAndy Fiddaman	-e 's,  *$,,' \
82*b30d1939SAndy Fiddaman	-e 's, *= *,=,' \
83*b30d1939SAndy Fiddaman	-e 's,^\(.\):[\\/]*,/\1/,' \
84*b30d1939SAndy Fiddaman	-e 's,[\\/][\\/]*,/,g' \
85*b30d1939SAndy Fiddaman	-e 's,^\(/.*\)/\(.*\)$,header[\2]="\1",' \
86*b30d1939SAndy Fiddaman	-e 's, *int *\(.*\);.*,\1,' \
87*b30d1939SAndy Fiddaman	-e 's,^version_\(.*\)=,version[\1]=,' \
88*b30d1939SAndy Fiddaman	> easy.sh
89*b30d1939SAndy Fiddaman. ./easy.sh
90*b30d1939SAndy Fiddaman
91*b30d1939SAndy Fiddamaninclude=
92*b30d1939SAndy Fiddamanfor i in $probe_header
93*b30d1939SAndy Fiddamando	d=${header[$i]}
94*b30d1939SAndy Fiddaman	if	[[ $d ]]
95*b30d1939SAndy Fiddaman	then	include="$include
96*b30d1939SAndy Fiddaman$d"
97*b30d1939SAndy Fiddaman	elif	[[ $i == */* ]]
98*b30d1939SAndy Fiddaman	then	d=${header[${i##*/}]}
99*b30d1939SAndy Fiddaman		if	[[ $d == */${i%/*} ]]
100*b30d1939SAndy Fiddaman		then	include="$include
101*b30d1939SAndy Fiddaman${d%/${i%/*}}"
102*b30d1939SAndy Fiddaman		fi
103*b30d1939SAndy Fiddaman	fi
104*b30d1939SAndy Fiddamandone
105*b30d1939SAndy Fiddaman
106*b30d1939SAndy Fiddamani=$($cc -V 2> easy.err)
107*b30d1939SAndy Fiddamanif	test "" != "$i" -a -d "$i/include"
108*b30d1939SAndy Fiddamanthen	include="$i/include
109*b30d1939SAndy Fiddaman$include"
110*b30d1939SAndy Fiddamanfi
111*b30d1939SAndy Fiddaman
112*b30d1939SAndy Fiddamanstdinclude=
113*b30d1939SAndy Fiddamanfor inc in $include
114*b30d1939SAndy Fiddamando	if	[[ ${inc%/*} -ef /msdev/platformsdk ]]
115*b30d1939SAndy Fiddaman	then	inc=/msdev/platformsdk/${inc##*/}
116*b30d1939SAndy Fiddaman	elif	[[ ${inc%/*} -ef /platformsdk ]]
117*b30d1939SAndy Fiddaman	then	inc=/platformsdk/${inc##*/}
118*b30d1939SAndy Fiddaman	fi
119*b30d1939SAndy Fiddaman	for dup in $stdinclude
120*b30d1939SAndy Fiddaman	do	[[ $inc -ef $dup ]] && continue 2
121*b30d1939SAndy Fiddaman	done
122*b30d1939SAndy Fiddaman	stdinclude="$stdinclude
123*b30d1939SAndy Fiddaman$inc"
124*b30d1939SAndy Fiddamandone
125*b30d1939SAndy Fiddaman
126*b30d1939SAndy Fiddaman# end preamble shared with the pp probe.ini
127*b30d1939SAndy Fiddaman
128*b30d1939SAndy Fiddamanif	[[ ${version[@]} == [0-9]* && $stdinclude ]]
129*b30d1939SAndy Fiddamanthen	: the payoff
130*b30d1939SAndy Fiddaman	set -- $cc
131*b30d1939SAndy Fiddaman	cmd=$1
132*b30d1939SAndy Fiddaman	shift
133*b30d1939SAndy Fiddaman	set -- $(whence $cmd) "$@"
134*b30d1939SAndy Fiddaman	typ=$(package)
135*b30d1939SAndy Fiddaman	dialect="ANSI CLOSURE DYNAMIC EXPORT=DLL LIBPP -I-"
136*b30d1939SAndy Fiddaman	case ${cc##*/} in
137*b30d1939SAndy Fiddaman	*CC*)	dialect="$dialect C++"
138*b30d1939SAndy Fiddaman		cplus=1
139*b30d1939SAndy Fiddaman		;;
140*b30d1939SAndy Fiddaman	esac
141*b30d1939SAndy Fiddaman	ld=${cc%cc}ld
142*b30d1939SAndy Fiddaman	if	[[ ! -x $ld ]]
143*b30d1939SAndy Fiddaman	then	ld=${cc%/*}/ld
144*b30d1939SAndy Fiddaman		if	[[ ! -x $ld ]]
145*b30d1939SAndy Fiddaman		then	case $cc in
146*b30d1939SAndy Fiddaman			*/ncc)	ld=/usr/bin/nld ;;
147*b30d1939SAndy Fiddaman			*)	ld=/usr/bin/ld ;;
148*b30d1939SAndy Fiddaman			esac
149*b30d1939SAndy Fiddaman		fi
150*b30d1939SAndy Fiddaman	fi
151*b30d1939SAndy Fiddaman	{
152*b30d1939SAndy Fiddaman		if	$cc -v >/dev/null 2>&1
153*b30d1939SAndy Fiddaman		then	v=$($cc -v 2>/dev/null)
154*b30d1939SAndy Fiddaman			if	[[ $v ]]
155*b30d1939SAndy Fiddaman			then	print "# ;VERSION;-v;$v;PATH;$cc"
156*b30d1939SAndy Fiddaman			fi
157*b30d1939SAndy Fiddaman		else	v=
158*b30d1939SAndy Fiddaman		fi
159*b30d1939SAndy Fiddaman		cat <<!
160*b30d1939SAndy FiddamanCC.CC = $*
161*b30d1939SAndy FiddamanCC.NATIVE = $*
162*b30d1939SAndy FiddamanCC.EXECTYPE = $typ
163*b30d1939SAndy FiddamanCC.HOSTTYPE = $typ
164*b30d1939SAndy FiddamanCC.ALTPP.FLAGS = -Yp,\$(CPP:D)
165*b30d1939SAndy FiddamanCC.ALTPP.ENV =
166*b30d1939SAndy FiddamanCC.AR = ar
167*b30d1939SAndy FiddamanCC.ARFLAGS =
168*b30d1939SAndy FiddamanCC.DEBUG = -g
169*b30d1939SAndy FiddamanCC.DIALECT = $dialect
170*b30d1939SAndy FiddamanCC.DLL = -D_BLD_DLL
171*b30d1939SAndy FiddamanCC.DLLBIG = -D_BLD_DLL
172*b30d1939SAndy FiddamanCC.DLL.DEF = -D_BLD_DLL
173*b30d1939SAndy FiddamanCC.DLL.DIR = \$(BINDIR)
174*b30d1939SAndy FiddamanCC.DLL.LIBRARIES =
175*b30d1939SAndy FiddamanCC.DLL.VARIANTS =
176*b30d1939SAndy FiddamanCC.DYNAMIC =
177*b30d1939SAndy FiddamanCC.EXPORT.DYNAMIC =
178*b30d1939SAndy FiddamanCC.LD = $ld
179*b30d1939SAndy FiddamanCC.LD.DYNAMIC = -Bdynamic
180*b30d1939SAndy FiddamanCC.LD.LAZY =
181*b30d1939SAndy FiddamanCC.LD.NOLAZY =
182*b30d1939SAndy FiddamanCC.LD.ORIGIN =
183*b30d1939SAndy FiddamanCC.LD.RECORD =
184*b30d1939SAndy FiddamanCC.LD.NORECORD =
185*b30d1939SAndy FiddamanCC.LD.RUNPATH =
186*b30d1939SAndy FiddamanCC.LD.STATIC = -Bstatic
187*b30d1939SAndy FiddamanCC.LD.STRIP =
188*b30d1939SAndy FiddamanCC.LIB.DLL = option
189*b30d1939SAndy FiddamanCC.LIB.ALL = -Bwhole-archive
190*b30d1939SAndy FiddamanCC.LIB.UNDEF = -Bno-whole-archive
191*b30d1939SAndy FiddamanCC.MAKE.OPTIONS = nativepp=0
192*b30d1939SAndy FiddamanCC.NM = nm
193*b30d1939SAndy FiddamanCC.NMEDIT =
194*b30d1939SAndy FiddamanCC.NMFLAGS =
195*b30d1939SAndy FiddamanCC.OPTIMIZE = -O
196*b30d1939SAndy FiddamanCC.PIC =
197*b30d1939SAndy FiddamanCC.PICBIG =
198*b30d1939SAndy FiddamanCC.READONLY =
199*b30d1939SAndy FiddamanCC.REPOSITORY =
200*b30d1939SAndy FiddamanCC.SHARED = -G
201*b30d1939SAndy FiddamanCC.SHARED.LD = $ld
202*b30d1939SAndy FiddamanCC.SHARED.REGISTRY =
203*b30d1939SAndy FiddamanCC.SHARED.REGISTRY.PATH =
204*b30d1939SAndy FiddamanCC.SHELLMAGIC =
205*b30d1939SAndy FiddamanCC.SIZE = size
206*b30d1939SAndy FiddamanCC.STATIC = -Bstatic
207*b30d1939SAndy Fiddaman!
208*b30d1939SAndy Fiddaman		inc=
209*b30d1939SAndy Fiddaman		lib=
210*b30d1939SAndy Fiddaman		if	[[ ${version[LCC]} ]]
211*b30d1939SAndy Fiddaman		then	lib=/lcc
212*b30d1939SAndy Fiddaman		fi
213*b30d1939SAndy Fiddaman		if	[[ $stdinclude == *' '* ]]
214*b30d1939SAndy Fiddaman		then	stdinclude=${stdinclude//' '/''}
215*b30d1939SAndy Fiddaman		fi
216*b30d1939SAndy Fiddaman		stdinc=
217*b30d1939SAndy Fiddaman		stdlib=
218*b30d1939SAndy Fiddaman		for inc in $stdinclude
219*b30d1939SAndy Fiddaman		do	stdinc="$stdinc $inc"
220*b30d1939SAndy Fiddaman			d=${inc%/*}/lib
221*b30d1939SAndy Fiddaman			if	[[ -d $d ]]
222*b30d1939SAndy Fiddaman			then	stdlib="$stdlib $d"
223*b30d1939SAndy Fiddaman			fi
224*b30d1939SAndy Fiddaman		done
225*b30d1939SAndy Fiddaman		case $uwin in
226*b30d1939SAndy Fiddaman		[0-9]*)	cat <<!
227*b30d1939SAndy FiddamanCC.STDINCLUDE = /usr/include $stdinc
228*b30d1939SAndy FiddamanCC.STDLIB = /usr/lib$lib $stdlib
229*b30d1939SAndy Fiddaman!
230*b30d1939SAndy Fiddaman			;;
231*b30d1939SAndy Fiddaman		*)	cat <<!
232*b30d1939SAndy FiddamanCC.STDINCLUDE = $stdinc
233*b30d1939SAndy FiddamanCC.STDLIB = $stdlib
234*b30d1939SAndy Fiddaman!
235*b30d1939SAndy Fiddaman			;;
236*b30d1939SAndy Fiddaman		esac
237*b30d1939SAndy Fiddaman		cat <<!
238*b30d1939SAndy FiddamanCC.STRICT =
239*b30d1939SAndy FiddamanCC.STRIP = strip
240*b30d1939SAndy FiddamanCC.STRIP.FLAGS =
241*b30d1939SAndy FiddamanCC.PREFIX.ARCHIVE = lib
242*b30d1939SAndy FiddamanCC.PREFIX.DYNAMIC =
243*b30d1939SAndy FiddamanCC.PREFIX.SHARED =
244*b30d1939SAndy FiddamanCC.PREFIX.SYMBOL = _
245*b30d1939SAndy FiddamanCC.SUFFIX.ARCHIVE = .a
246*b30d1939SAndy FiddamanCC.SUFFIX.COMMAND =
247*b30d1939SAndy FiddamanCC.SUFFIX.DEBUG = .pdb
248*b30d1939SAndy FiddamanCC.SUFFIX.DYNAMIC = .dll
249*b30d1939SAndy FiddamanCC.SUFFIX.LD = .def .exp .ign .res
250*b30d1939SAndy FiddamanCC.SUFFIX.OBJECT = .o
251*b30d1939SAndy FiddamanCC.SUFFIX.SHARED = .lib
252*b30d1939SAndy FiddamanCC.SUFFIX.SOURCE = .c
253*b30d1939SAndy FiddamanCC.SUFFIX.STATIC =
254*b30d1939SAndy Fiddaman!
255*b30d1939SAndy Fiddaman		if	[[ $v ]]
256*b30d1939SAndy Fiddaman		then	case $v in
257*b30d1939SAndy Fiddaman			*\"*)	v=$(print -r -- | sed -e 's,",\\",g' -e 's,^ ,,' -e 's,.*,"&",') ;;
258*b30d1939SAndy Fiddaman			*\'*)	v=\"$v\" ;;
259*b30d1939SAndy Fiddaman			esac
260*b30d1939SAndy Fiddaman			cat <<!
261*b30d1939SAndy FiddamanCC.VERSION = -v
262*b30d1939SAndy FiddamanCC.VERSION.STRING = $v
263*b30d1939SAndy Fiddaman!
264*b30d1939SAndy Fiddaman		else	cat <<!
265*b30d1939SAndy FiddamanCC.VERSION =
266*b30d1939SAndy FiddamanCC.VERSION.STRING =
267*b30d1939SAndy Fiddaman!
268*b30d1939SAndy Fiddaman		fi
269*b30d1939SAndy Fiddaman		if	[[ ${version[MINGW]} || ${version[MS]} ]]
270*b30d1939SAndy Fiddaman		then	cat <<!
271*b30d1939SAndy FiddamanCC.WARN = -Wall
272*b30d1939SAndy Fiddaman!
273*b30d1939SAndy Fiddaman		else	cat <<!
274*b30d1939SAndy FiddamanCC.WARN =
275*b30d1939SAndy Fiddaman!
276*b30d1939SAndy Fiddaman		fi
277*b30d1939SAndy Fiddaman		cat <<!
278*b30d1939SAndy FiddamanCC.PREROOT =
279*b30d1939SAndy FiddamanCC.UNIVERSE = att
280*b30d1939SAndy Fiddaman!
281*b30d1939SAndy Fiddaman	} >&3
282*b30d1939SAndy Fiddaman	exit 0
283*b30d1939SAndy Fiddamanfi
284