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