1*b30d1939SAndy Fiddaman:
2*b30d1939SAndy Fiddaman# @(#)probe.win32 (AT&T Research) 2009-03-19
3*b30d1939SAndy Fiddaman#
4*b30d1939SAndy Fiddaman# win32 specific pp 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 make probe.ini
10*b30d1939SAndy Fiddaman
11*b30d1939SAndy FiddamanIFS=$'\n'
12*b30d1939SAndy Fiddaman
13*b30d1939SAndy Fiddamanchmod 777 .
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 make probe.ini
127*b30d1939SAndy Fiddaman
128*b30d1939SAndy Fiddamanpragexpand='#pragma pp:pragmaexpand'
129*b30d1939SAndy Fiddaman
130*b30d1939SAndy Fiddamanif	[[ ${version[BORLAND]} ]]
131*b30d1939SAndy Fiddamanthen	version=${version[BORLAND]} VERSION=__BORLANDC__
132*b30d1939SAndy Fiddaman	reserved="#pragma pp:reserved __asm=GROUP __based=GROUP __cdecl __declspec=GROUP __except __export __far __fastcall __finally __huge __inline __int16 __int32 __int64 __int8 __leave __near __novtordisp __pascal __restrict __stdcall __syscall __try __unaligned __wchar_t
133*b30d1939SAndy Fiddaman#pragma pp:reserved _asm=GROUP _based=GROUP _cdecl _declspec=GROUP _except _export _far _fastcall _finally _fortran _huge _int16 _int32 _int64 _int8 _leave _near _pascal _stdcall _syscall _try
134*b30d1939SAndy Fiddaman#pragma pp:reserved cdecl const enum far fortran huge near pascal signed void volatile"
135*b30d1939SAndy Fiddaman	specific="#define <long long> __int64
136*b30d1939SAndy Fiddaman#define <__int64 int> __int64
137*b30d1939SAndy Fiddaman#define <__int64 unsigned> unsigned __int64"
138*b30d1939SAndy Fiddaman	pragexpand='#pragma pp:nopragmaexpand'
139*b30d1939SAndy Fiddaman	pragmas="#pragma pp:nocatliteral
140*b30d1939SAndy Fiddaman#pragma pp:stringsplit
141*b30d1939SAndy Fiddaman#pragma pp:lineid line"
142*b30d1939SAndy Fiddamanelif	[[ ${version[DM]} ]]
143*b30d1939SAndy Fiddamanthen	version=${version[DM]} VERSION=__DMC__
144*b30d1939SAndy Fiddaman	reserved="#pragma pp:reserved _Bool _Complex _Imaginary asm=GROUP _asm=GROUP __asm=GROUP const enum _fortran __inline _int64 __int64 __restrict signed void volatile _based=GROUP __based=GROUP cdecl _cdecl __cdecl _declspec=GROUP __declspec=GROUP _except __except _export __export far _far __far _fastcall __fastcall _finally __finally huge _huge __huge _interrupt __interrupt _leave __leave _loadds __loadds near _near __near pascal _pascal __pascal _saveregs __saveregs _segname __segname _stdcall __stdcall _syscall __syscall _try __try _cs __cs _ss __ss _unaligned __unaligned"
145*b30d1939SAndy Fiddaman	specific="#define __TIMESTAMP__   __DATE__ \" \" __TIME__"
146*b30d1939SAndy Fiddaman	pragmas="#pragma pp:transition
147*b30d1939SAndy Fiddaman#pragma pp:elseif
148*b30d1939SAndy Fiddaman#pragma pp:lineid line"
149*b30d1939SAndy Fiddamanelif	[[ ${version[MS]} ]]
150*b30d1939SAndy Fiddamanthen	version=${version[MS]} VERSION=_MSC_VER
151*b30d1939SAndy Fiddaman	reserved="#pragma pp:reserved __asm=GROUP __based=GROUP __cdecl __declspec=GROUP __except __export __far __fastcall __finally __huge __inline __int16 __int32 __int64 __int8 __leave __near __novtordisp __pascal __restrict __stdcall __syscall __try __unaligned __wchar_t
152*b30d1939SAndy Fiddaman#pragma pp:reserved _asm=GROUP _based=GROUP _cdecl _declspec=GROUP _except _export _far _fastcall _finally _fortran _huge _int16 _int32 _int64 _int8 _leave _near _pascal _stdcall _syscall _try
153*b30d1939SAndy Fiddaman#pragma pp:reserved cdecl const enum far fortran huge near pascal signed void volatile"
154*b30d1939SAndy Fiddaman	specific="#define <long long> __int64
155*b30d1939SAndy Fiddaman#define <__int64 int> __int64
156*b30d1939SAndy Fiddaman#define <__int64 unsigned> unsigned __int64"
157*b30d1939SAndy Fiddaman	pragmas="#pragma pp:lineid line"
158*b30d1939SAndy Fiddamanelif	[[ ${version[LCC]} ]]
159*b30d1939SAndy Fiddamanthen	version=${version[LCC]} VERSION=__LCC__
160*b30d1939SAndy Fiddaman	reserved="#pragma pp:reserved _Bool _Complex _asm=GROUP const enum inline __inline __int64 restrict signed void volatile _cdecl __cdecl __declspec=GROUP __except _huge _stdcall __stdcall __try"
161*b30d1939SAndy Fiddaman	specific="#pragma pp:map \"/#(pragma )?import>/\" \"/#(pragma )?import(.*)/__STDPP__IMPORT__(\2)/\"
162*b30d1939SAndy Fiddaman#macdef __STDPP__IMPORT__(x)
163*b30d1939SAndy Fiddaman#pragma pp:noallmultiple
164*b30d1939SAndy Fiddaman#include x
165*b30d1939SAndy Fiddaman#pragma pp:allmultiple
166*b30d1939SAndy Fiddaman#endmac
167*b30d1939SAndy Fiddaman"
168*b30d1939SAndy Fiddaman	pragmas="#pragma pp:hostedtransition
169*b30d1939SAndy Fiddaman#pragma pp:strict
170*b30d1939SAndy Fiddaman#pragma pp:spaceout
171*b30d1939SAndy Fiddaman#pragma pp:elseif
172*b30d1939SAndy Fiddaman"
173*b30d1939SAndy Fiddamanelif	[[ ${version[MINGW]} ]]
174*b30d1939SAndy Fiddamanthen	version=${version[MINGW]} VERSION=__MINGW32__
175*b30d1939SAndy Fiddaman	reserved="#pragma pp:reserved __declspec=GROUP __alignof=GROUP __alignof__=GROUP __attribute=GROUP __attribute__=GROUP __extension__=GROUP asm=GROUP __asm=GROUP __asm__=GROUP const __const __const__ enum inline __inline __inline__ __restrict __restrict__ signed __signed __signed__ typeof=GROUP __typeof=GROUP __typeof__=GROUP void volatile __volatile __volatile__ __cdecl _stdcall __stdcall"
176*b30d1939SAndy Fiddaman	specific="#define __declspec(x)   __attribute__((x))"
177*b30d1939SAndy Fiddaman	pragexpand='#pragma pp:nopragmaexpand'
178*b30d1939SAndy Fiddaman	pragmas='#pragma pp:map "/#include_next>/" ",[^\<]*\<,#include <.../,"
179*b30d1939SAndy Fiddaman#pragma pp:lineid
180*b30d1939SAndy Fiddaman#pragma pp:linetype 2'
181*b30d1939SAndy Fiddamanfi
182*b30d1939SAndy Fiddaman
183*b30d1939SAndy Fiddamanundef_predef=
184*b30d1939SAndy Fiddamanecho "char* fun() { return (char*)__FUNCTION__; }
185*b30d1939SAndy Fiddamanint main() { return !fun(); }" > easy.c
186*b30d1939SAndy Fiddamanrm -f easy.exe
187*b30d1939SAndy Fiddamanif	$cc -o easy.exe easy.c && test -x easy.exe
188*b30d1939SAndy Fiddamanthen	undef_predef="$undef_predef
189*b30d1939SAndy Fiddaman#undef	__FUNCTION__"
190*b30d1939SAndy Fiddamanfi
191*b30d1939SAndy Fiddaman
192*b30d1939SAndy Fiddamandialect=ansi
193*b30d1939SAndy Fiddamanif	[[ $cplus ]]
194*b30d1939SAndy Fiddamanthen	dialect=C++
195*b30d1939SAndy Fiddamanfi
196*b30d1939SAndy Fiddaman
197*b30d1939SAndy Fiddamanif	[[ $version == [0-9]* && $stdinclude ]]
198*b30d1939SAndy Fiddamanthen	hosttype=$(package)
199*b30d1939SAndy Fiddaman	machine=${hosttype#*.}
200*b30d1939SAndy Fiddaman	case $uwin in
201*b30d1939SAndy Fiddaman	[0-9]*) standard="
202*b30d1939SAndy Fiddaman#pragma pp:include \"/usr/include\""
203*b30d1939SAndy Fiddaman		assert="
204*b30d1939SAndy Fiddaman#define #system(unix)
205*b30d1939SAndy Fiddaman#define #release(V)
206*b30d1939SAndy Fiddaman#define #release(system5)
207*b30d1939SAndy Fiddaman#define #version(${version})"
208*b30d1939SAndy Fiddaman		;;
209*b30d1939SAndy Fiddaman	*)	predefined=""
210*b30d1939SAndy Fiddaman		standard=""
211*b30d1939SAndy Fiddaman		assert=""
212*b30d1939SAndy Fiddaman		;;
213*b30d1939SAndy Fiddaman	esac
214*b30d1939SAndy Fiddaman	for inc in $stdinclude
215*b30d1939SAndy Fiddaman	do	standard="$standard
216*b30d1939SAndy Fiddaman#pragma pp:include \"$inc\""
217*b30d1939SAndy Fiddaman	done
218*b30d1939SAndy Fiddaman	: the payoff
219*b30d1939SAndy Fiddaman	set -- $cc
220*b30d1939SAndy Fiddaman	cmd=$1
221*b30d1939SAndy Fiddaman	shift
222*b30d1939SAndy Fiddaman	set -- $(whence $cmd) "$@"
223*b30d1939SAndy Fiddaman	if	"$@" -v >/dev/null 2>&1
224*b30d1939SAndy Fiddaman	then	v=$("$@" -v 2>/dev/null)
225*b30d1939SAndy Fiddaman		if	[[ $v ]]
226*b30d1939SAndy Fiddaman		then	v=";VERSION;-v;$v;PATH;$*"
227*b30d1939SAndy Fiddaman		fi
228*b30d1939SAndy Fiddaman	else	v=
229*b30d1939SAndy Fiddaman	fi
230*b30d1939SAndy Fiddaman	if	[[ ! $v ]]
231*b30d1939SAndy Fiddaman	then	v="$*"
232*b30d1939SAndy Fiddaman	fi
233*b30d1939SAndy Fiddaman	cat >&3 <<!
234*b30d1939SAndy Fiddaman/* $v
235*b30d1939SAndy Fiddaman*/
236*b30d1939SAndy Fiddaman
237*b30d1939SAndy Fiddaman#pragma pp:predefined
238*b30d1939SAndy Fiddaman#define _STD_INCLUDE_DIR ...
239*b30d1939SAndy Fiddaman#define _${machine}_ 1
240*b30d1939SAndy Fiddaman!
241*b30d1939SAndy Fiddaman	{
242*b30d1939SAndy Fiddaman	cat <<'!'
243*b30d1939SAndy Fiddaman#ifdef unix
244*b30d1939SAndy Fiddamanchar* str_unix = "#define unix" unix ;
245*b30d1939SAndy Fiddamanchar* str___unix__ = "#define __unix__" 1 ;
246*b30d1939SAndy Fiddaman#else
247*b30d1939SAndy Fiddaman#ifdef __unix__
248*b30d1939SAndy Fiddamanchar* str___unix__ = "#define __unix__" __unix__ ;
249*b30d1939SAndy Fiddaman#endif
250*b30d1939SAndy Fiddaman#endif
251*b30d1939SAndy Fiddaman!
252*b30d1939SAndy Fiddaman	premac="
253*b30d1939SAndy FiddamanM_I86
254*b30d1939SAndy FiddamanM_I386
255*b30d1939SAndy FiddamanM_I386CM
256*b30d1939SAndy FiddamanM_I386LM
257*b30d1939SAndy FiddamanM_I386MM
258*b30d1939SAndy FiddamanM_I386SM
259*b30d1939SAndy FiddamanMSDOS
260*b30d1939SAndy FiddamanNO_EXT_KEYS
261*b30d1939SAndy Fiddaman_ALPHA_
262*b30d1939SAndy Fiddaman_AXP64_
263*b30d1939SAndy Fiddaman_CPPUNWIND
264*b30d1939SAndy Fiddaman_GENIA64_
265*b30d1939SAndy Fiddaman_INTEGRAL_MAX_BITS
266*b30d1939SAndy Fiddaman_MSC_EXTENSIONS
267*b30d1939SAndy Fiddaman_MSC_VER
268*b30d1939SAndy Fiddaman_M_ALPHA
269*b30d1939SAndy Fiddaman_M_ALPHA_
270*b30d1939SAndy Fiddaman_M_AMD64
271*b30d1939SAndy Fiddaman_M_IA64
272*b30d1939SAndy Fiddaman_M_IX86
273*b30d1939SAndy Fiddaman_M_MRX000
274*b30d1939SAndy Fiddaman_M_PPC
275*b30d1939SAndy Fiddaman_NTSYSTEM_
276*b30d1939SAndy Fiddaman_POSIX_
277*b30d1939SAndy Fiddaman_PUSHPOP_SUPPORTED
278*b30d1939SAndy Fiddaman_STDCALL_SUPPORTED
279*b30d1939SAndy Fiddaman_UWIN
280*b30d1939SAndy Fiddaman_WIN32
281*b30d1939SAndy Fiddaman_WIN64
282*b30d1939SAndy Fiddaman_X64_
283*b30d1939SAndy Fiddaman_X86_
284*b30d1939SAndy Fiddaman_stdcall
285*b30d1939SAndy Fiddaman__BORLANDC__
286*b30d1939SAndy Fiddaman__CHAR_SIGNED__
287*b30d1939SAndy Fiddaman__CHAR_UNSIGNED__
288*b30d1939SAndy Fiddaman__COMPACT__
289*b30d1939SAndy Fiddaman__DEFALIGN
290*b30d1939SAndy Fiddaman__DMC__
291*b30d1939SAndy Fiddaman__DOS__
292*b30d1939SAndy Fiddaman__ECL__
293*b30d1939SAndy Fiddaman__EDG__
294*b30d1939SAndy Fiddaman__FLAT__
295*b30d1939SAndy Fiddaman__FPCE__
296*b30d1939SAndy Fiddaman__FPI__
297*b30d1939SAndy Fiddaman__GNUC__
298*b30d1939SAndy Fiddaman__GNUC_MINOR__
299*b30d1939SAndy Fiddaman__GNUG__
300*b30d1939SAndy Fiddaman__HUGE__
301*b30d1939SAndy Fiddaman__I86__
302*b30d1939SAndy Fiddaman__ICL
303*b30d1939SAndy Fiddaman__INITIAL_POINTER_SIZE
304*b30d1939SAndy Fiddaman__INLINE_8087
305*b30d1939SAndy Fiddaman__INLINE__FUNCTIONS__
306*b30d1939SAndy Fiddaman__INTEL_COMPILER
307*b30d1939SAndy Fiddaman__INTERIX
308*b30d1939SAndy Fiddaman__INTSIZE
309*b30d1939SAndy Fiddaman__LARGE__
310*b30d1939SAndy Fiddaman__LCCDEBUGLEVEL
311*b30d1939SAndy Fiddaman__LCCOPTIMLEVEL
312*b30d1939SAndy Fiddaman__LCC__
313*b30d1939SAndy Fiddaman__MEDIUM__
314*b30d1939SAndy Fiddaman__MINGW32__
315*b30d1939SAndy Fiddaman__MSVCRT__
316*b30d1939SAndy Fiddaman__NT__
317*b30d1939SAndy Fiddaman__OPENNT
318*b30d1939SAndy Fiddaman__OS2__
319*b30d1939SAndy Fiddaman__QNX__
320*b30d1939SAndy Fiddaman__SC__
321*b30d1939SAndy Fiddaman__SMALL__
322*b30d1939SAndy Fiddaman__STATIC__
323*b30d1939SAndy Fiddaman__STDC__
324*b30d1939SAndy Fiddaman__STDC_HOSTED__
325*b30d1939SAndy Fiddaman__STDC_IEC_559__
326*b30d1939SAndy Fiddaman__STDC_IEC_559_COMPLEX__
327*b30d1939SAndy Fiddaman__STDC_ISO_10646__
328*b30d1939SAndy Fiddaman__STDC_VERSION__
329*b30d1939SAndy Fiddaman__STRLEN
330*b30d1939SAndy Fiddaman__TURBOC__
331*b30d1939SAndy Fiddaman__WATCOMC__
332*b30d1939SAndy Fiddaman__WIN32__
333*b30d1939SAndy Fiddaman__WINDOWS__
334*b30d1939SAndy Fiddaman__WINDOWS_386__
335*b30d1939SAndy Fiddaman__WINVER__
336*b30d1939SAndy Fiddaman__ZTC__
337*b30d1939SAndy Fiddaman__cdecl
338*b30d1939SAndy Fiddaman__cplusplus
339*b30d1939SAndy Fiddaman__i386
340*b30d1939SAndy Fiddaman__i386__
341*b30d1939SAndy Fiddaman__i486
342*b30d1939SAndy Fiddaman__i486__
343*b30d1939SAndy Fiddaman__i586
344*b30d1939SAndy Fiddaman__i586__
345*b30d1939SAndy Fiddaman__i686
346*b30d1939SAndy Fiddaman__i686__
347*b30d1939SAndy Fiddaman__k6
348*b30d1939SAndy Fiddaman__k6__
349*b30d1939SAndy Fiddaman__pentium
350*b30d1939SAndy Fiddaman__pentium__
351*b30d1939SAndy Fiddaman__pentiumpro
352*b30d1939SAndy Fiddaman__pentiumpro__
353*b30d1939SAndy Fiddaman__stdcall
354*b30d1939SAndy Fiddaman"
355*b30d1939SAndy Fiddaman	echo "#define	s(x)	#x"
356*b30d1939SAndy Fiddaman	echo "#define	q(x)	s(x)"
357*b30d1939SAndy Fiddaman	for i in $premac
358*b30d1939SAndy Fiddaman	do	echo "#ifdef $i"
359*b30d1939SAndy Fiddaman		echo "char* str_$i = \"#define $i\" q(:$i:);"
360*b30d1939SAndy Fiddaman		echo "#endif"
361*b30d1939SAndy Fiddaman	done
362*b30d1939SAndy Fiddaman	} > easy.c
363*b30d1939SAndy Fiddaman	$cc -E easy.c > easy.out 2>&1
364*b30d1939SAndy Fiddaman	sed     -e '/=/!d' -e 's,[^"]*,echo ,' -e 's/":/"/' -e 's/:"/"/' easy.out > easy.sh
365*b30d1939SAndy Fiddaman	. ./easy.sh >&3
366*b30d1939SAndy Fiddaman	if	[[ $cc == *CC ]]
367*b30d1939SAndy Fiddaman	then	src=cpp
368*b30d1939SAndy Fiddaman	else	src=c
369*b30d1939SAndy Fiddaman	fi
370*b30d1939SAndy Fiddaman	print 'typedef char wchar_t;' > easy.$src
371*b30d1939SAndy Fiddaman	if	! $cc -c easy.$src >/dev/null 2>&1
372*b30d1939SAndy Fiddaman	then	print -u3 '#define _WCHAR_T_DEFINED 1'
373*b30d1939SAndy Fiddaman		print -u3 '#define _NATIVE_WCHAR_T_DEFINED 1'
374*b30d1939SAndy Fiddaman		if	[[ ! $reserved ]]
375*b30d1939SAndy Fiddaman		then	reserved="#pragma pp:reserved"
376*b30d1939SAndy Fiddaman		fi
377*b30d1939SAndy Fiddaman		reserved="$reserved wchar_t"
378*b30d1939SAndy Fiddaman	fi
379*b30d1939SAndy Fiddaman	cat >&3 <<!
380*b30d1939SAndy Fiddaman#pragma pp:nopredefined
381*b30d1939SAndy Fiddaman
382*b30d1939SAndy Fiddaman$specific
383*b30d1939SAndy Fiddaman
384*b30d1939SAndy Fiddaman#define #hosttype(${hosttype})${assert}
385*b30d1939SAndy Fiddaman#define #architecture(${machine})
386*b30d1939SAndy Fiddaman#define #model()
387*b30d1939SAndy Fiddaman#define #machine(${machine})
388*b30d1939SAndy Fiddaman#define #addressing()
389*b30d1939SAndy Fiddaman#define #preroot()
390*b30d1939SAndy Fiddaman#define #universe(att)
391*b30d1939SAndy Fiddaman#define #dialect(${dialect})
392*b30d1939SAndy Fiddaman$undef_predef
393*b30d1939SAndy Fiddaman
394*b30d1939SAndy Fiddaman$reserved
395*b30d1939SAndy Fiddaman
396*b30d1939SAndy Fiddaman$pragmas
397*b30d1939SAndy Fiddaman
398*b30d1939SAndy Fiddaman#pragma pp:pluscomment
399*b30d1939SAndy Fiddaman$pragexpand
400*b30d1939SAndy Fiddaman#pragma pp:zeof
401*b30d1939SAndy Fiddaman#pragma pp:id "$"${standard}
402*b30d1939SAndy Fiddaman#pragma pp:nocatliteral
403*b30d1939SAndy Fiddaman#pragma pp:stringsplit
404*b30d1939SAndy Fiddaman#pragma pp:headerexpand
405*b30d1939SAndy Fiddaman#pragma pp:map "/#(pragma )?ident>/"
406*b30d1939SAndy Fiddaman#pragma pp:map "/#pragma lint:/" ",#pragma lint:(.*),##/*\1*/,u"
407*b30d1939SAndy Fiddaman#pragma pp:map "/#(pragma )?sccs>/"
408*b30d1939SAndy Fiddaman#pragma pp:map "/#pragma once/" ",#pragma once,#pragma pp:nomultiple,"
409*b30d1939SAndy Fiddaman#pragma pp:map "/#pragma comment.*linker.*manifest/"
410*b30d1939SAndy Fiddaman!
411*b30d1939SAndy Fiddaman	exit 0
412*b30d1939SAndy Fiddamanfi
413