: ### this script contains archaic constructs that work with all sh variants ### # Glenn Fowler # AT&T Research # # @(#)make.probe (AT&T Research) 2011-06-01 # # C probe for make # # NOTE: C.probe must be included or .'d here # cc_dll_def=-D_BLD_DLL probe_ar_arflags="-Xany" probe_arflags="-xar" probe_ccs="strip size nm ld ar" # longest to shortest probe_debug="-g" probe_dll="'-G 0' -Wc,dll,exportall,longname,rent -Wc,exportall -dynamic $cc_dll_def" probe_export_dynamic="-rdynamic -export-dynamic -Wl,-export-dynamic -Wl,-E -bexpall -force_flat_namespace" probe_gcc_optimize="-O2" probe_gcc_version="*[Gg][Cc][Cc]*" probe_include_local="'-ignore-source-dir -iquote' -iquote -I-" probe_ldlazy='-zlazyload -znolazyload -Wl,-zlazyload -Wl,-znolazyload' probe_ldlib="LD_LIBRARY_PATH LIBPATH LPATH" probe_ldmap="'-Wl,-M' '-Qoption ld -M' '-Wl,-m' '-m'" probe_ldorigin="-Wl,-z,origin" probe_ldrecord='-zrecord -zignore -Wl,-zrecord -Wl,-zignore' probe_ldrunpath="-Wl,-R, -R -Wl,-rpath, -L" probe_ldstrip="'-s -mr' -Wl,-s" probe_lib="a lib" probe_lib_append="/usr/lib/pa1.1" probe_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" probe_lib_multiple="-Wl,-zmuldefs" probe_libdir="shlib lib" probe_nmflags="'' -p -B" probe_optimize="-O" probe_pic="-Kpic -KPIC -fpic -fPIC -pic -PIC +z +Z" probe_no_protect="'-fno-stack-protector -fno-stack-protector-all' -GS-" probe_readonly="-R -Krodata -xMerge -Wa,-r" probe_shared="'' -G -b -c -shared -Wl,dll" probe_shared_name="-Wl,-soname= -h" probe_shared_nostart="-nostartfiles" probe_shared_registry='"-update_registry $probe_shared_registry_file"' probe_shared_registry_file='registry.ld' probe_shared_registry_path="\$(LIBDIR)/$probe_shared_registry_file" probe_strict="'-ansi -pedantic' '-ansi -strict' -strict -ansi" probe_stripflags="'-f -s' -f -s" probe_unresolved="'-expect_unresolved \"*\"'" probe_warn="-Wall -fullwarn -w3 '-A -A' +w1" echo '#pragma pp:version' > libpp.$src echo '#define dDflag on' > dDflag.$src echo 'int main(){return 0;}' > doti.$src echo 'int code(){return 0;} int main(){return code();}' > export.$src echo '#include ' > imstd.$src echo '#include "_i_.h"' > imusr.$src echo 'int x;' > _i_.h mkdir im echo '(' > im/stdio.h echo '#include "implc_x.h" int main(){f(1);return 0;}' > implc.$src echo 'template void f(T){}' > implc_x.$src echo 'template void f(T);' > implc_x.h echo 'extern int NotalL(){return(0);}' > notall.$src echo '#include extern int i; int i = 1; extern int f(){return(!i);} int main(){FILE* fp=stdin;return(f());}' > pic.$src echo 'class x {int n;} m;' > plusplus.$src echo 'int prefix(){return 0;}' > prefix.$src echo 'template int gt(T a, T b); template int gt(T a, T b) { return a > b; } int main () { return gt(2,1); }' > ptr.$src echo 'int main(){return 0;}' > require.$src echo '#if mips && !sgi || __CYGWIN__ ( /* some systems choke on this probe */ #else #if test_const #define CONST const #else #define CONST #endif CONST char x[]={1,2,3,4,5,6,7,8,9,0}; int main(){*(char*)x=0; return x[0];} #endif' > readonly.$src # NOTE: sfclose() defined on uwin, not defined on all other systems echo 'extern int sfclose(); extern int ShareD(){return(sfclose());}' > shared.$src echo '#define g(a,b) a ## b volatile int a; const int g(x,y)=1; extern int c(int);' > stdc.$src echo 'extern int f(); int main() { return f(); }' > sovmain.$src echo 'int f() { return 0; }' > sovlib.$src echo '#include int i; int main(){int j;j = i * 10;return j;}' > strip.$src echo 'template void f(T){} int main(){f(1);return 0;}' > toucho.$src echo '#if defined(__STDC__) || defined(__cplusplus) extern type call(int); #endif int main() {call(0);return(0);}' > tstlib.$src echo 'int main(){return 0;}' > warn.$src echo 'int f(){return 0;}' > warn1.$src echo 'int f(){}' > warn2.$src echo 'int f(){int i; return 0;}' > warn3.$src echo 'int f(){int i; return i;}' > warn4.$src echo 'int f(){return g();}' > warn5.$src warn_enum="1 2 3 4 5" chmod -w *.$src ar_arflags= arflags= cc_dll= cc_pic= cc_PIC= dDflag= debug= dialect= dll_dir='$(LIBDIR)' dll_libraries= dll_variants= doti= exectype= export_dynamic= gnu= implicitc= include_local= lddynamic= ldlazy= ldnolazy= ldnorecord= ldorigin= ldrecord= ldrunpath= ldscript= ldstatic= ldstrip= Lflag= lib_dll= lib_all= lib_undef= libpath= libpp= makeoptions= nmedit= nmflags= no_protect= optimize= plusplus= prefix_archive=lib prefix_dynamic= prefix_shared=lib ptrcopy= ptrimplicit= ptrmkdir= readonly= repository= require= runpath= shared= shared_name= shared_registry= shellmagic= soversion= stdc= strict= stripflags= symprefix= toucho= warn= set $probe_lib lib=$1 d= for f in $stdinclude $usrinclude do case $f in -I*) ;; *) d="$d $f" ;; esac done stdinclude=$d set x $cc cc_dir=`echo $2 | sed -e 's,/*[^/]*$,,'` for c in $probe_ccs do if $executable $cc_dir/$c then x=$cc_dir/$c else x=$c fi eval $c='$x' done ld_dir= rm -f doti.$obj if $cc -c doti.$src then eval set x $probe_verbose shift for o do $cc $o doti.$obj $cc $o doti.$obj -lF0oB@r done 2>&1 | sed -e 's/^[+ ]*//' -e 's/[ ].*//' -e '/^\//!d' -e 's/:$//' -e '/ld[a-zA-Z0-9.]*$/!d' -e 's,///*,/,g' > t for i in `cat t` do rm -f t.$obj if test -x $i && $i -r -o t.$obj doti.$obj && test -f t.$obj then case $ld in ld) ld=$i ;; esac ld_dir=`echo $i | sed 's,/[^/]*$,,'` break fi done fi IFS=: set x $PATH IFS=$ifs path=$* m= for c in $probe_ccs do eval o='$'$c case $o in $c) ;; *) continue ;; esac C='${c}' for x in $cc_dir $ld_dir do cd $x for p in "${C}" "${C}[!a-zA-Z]*" "*[!a-zA-Z]${C}" "*[!a-zA-Z]${C}[!a-zA-Z]*" do eval set x $p case $# in 2) if $executable $2 then case $2 in *$c*$c*);; *) m=$p break 3 ;; esac fi ;; esac done done done cd $tmpdir for c in $probe_ccs do eval o='$'$c case $o in $c) ;; *) continue ;; esac for x in $cc_dir $ld_dir do if $executable $x/$c then eval $c='$x/$c' continue 2 fi case $m in ?*) eval set x $x/$m case $# in 2) if $executable $2 then eval $c='$2' continue 2 fi ;; esac ;; esac done for x in $path do if $executable $x/$c then eval $c='$x/$c' break fi done done dld=$cc rm -f dynamic.$exe if $cc -o dynamic.$exe dynamic.$obj && $executable dynamic.$exe then mkdir mylib echo > mylib/libc.$lib eval set x $probe_ldlib while : do shift case $# in 0) break ;; esac rm -f dynamic.$exe if eval $1=./mylib '$'cc -o dynamic.$exe dynamic.$obj then : else libpath=$1 break fi done fi test `$cc -E libpp.$src | grep -c '^#pragma pp:version "libpp '` -eq 1 && libpp=1 $cc -E doti.$src > doti.i && $cc -c doti.i && test -s doti.$obj && doti=1 if $cc -c imusr.$src then eval set x $probe_include_local while : do shift case $# in 0) break ;; esac if $cc -c $1 imusr.$src then : "$1 should skip \"_i_.h\" in ." elif $cc -c imstd.$src then if $cc -c -Iim imstd.$src then : '-Idir should find in dir' elif $cc -c $1 -Iim imstd.$src then : "$1 -Idir should find in dir" elif $cc -c -Iim $1 imstd.$src then include_local=$1 break else : "-Idir $1 should skip in dir" fi else : should find stdio.h fi done else : 'should find "_i_.h" in .' fi if $cc -c pic.$src 2>e then e=`wc -l e` s=`$size pic.$obj; wc pic.$obj` eval set x $probe_pic shift while : do case $# in 0|1) break ;; esac pic=$1 shift PIC=$1 shift rm -f pic.$obj $cc $pic -c pic.$src 2>e && test -f pic.$obj || continue $cc $pic -o pic.$exe pic.$obj && test -f pic.$exe || { rm -f pic.$exe $cc -o pic.$exe pic.$obj && test -f pic.$exe && continue } case `wc -l e` in $e) ;; *) continue ;; esac case $pic in ???*) m=`echo " $pic" | sed -e 's/^ [-+]//g' -e 's/./-& /g' -e 's/[-+] //g'` rm -f pic.$obj pic1.$exe if $cc $m -c pic.$src 2>e && test -f pic.$obj && $cc -o pic1.$exe pic.$obj && test -f pic1.$exe then case `wc -l e` in $e) cc_pic=$m break ;; esac fi cc_pic=$pic break ;; *) case `$size pic.$obj; wc pic.$obj` in $s) ;; *) cc_pic=$pic break ;; esac ;; esac done # this works around gcc 2.95 sun4 -fpic a.out core dump after exit case $hosted:$cc_pic in 1:?*) if ./pic.$exe then # this catches lynxos.ppc gcc that dumps -fpic and not -mshared echo 'static int* f() { static int v; return &v; } int main() { f(); return 0; }' > picok.$src $cc $cc_pic -o picok.$exe picok.$src && ./picok.$exe || cc_pic= else cc_pic= fi ;; esac case $cc_pic in ?*) rm -f pic.$obj if $cc $PIC -c pic.$src 2>e && test -f pic.$obj then cc_PIC=$PIC else cc_PIC=$cc_pic fi ;; *) eval set x $probe_dll while : do shift case $# in 0) break ;; esac rm -f pic.$obj pic.$exe $cc $1 -c pic.$src 2>e && test -f pic.$obj || continue $cc $1 -o pic.$exe pic.$obj && test -f pic.$exe || { rm -f pic.$exe $cc -o pic.$exe pic.$obj && test -f pic.$exe && continue } case $1 in -Wc,*exportall*) # get specific since sgi gets this far too rm -f pic.$exe pic.x $cc -Wl,dll -o pic.$exe pic.$obj || continue test -f pic.$exe || continue test -f pic.x || continue cc_dll="-D_SHARE_EXT_VARS $1" so=.x sd=.dll dld=$cc shared=-Wl,dll prefix_shared= probe_sd= probe_shared= #unused# lddynamic=-Bdynamic #unused# ldstatic=-Bstatic lib_dll=SYMBOL break ;; esac case `wc -l e` in $e) cc_dll=$1 break ;; esac done ;; esac fi $cc -c plusplus.$src && plusplus=1 $cc -E -dD dDflag.$src > t case `grep '#define[ ][ ]*dDflag[ ][ ]*on' t` in ?*) dDflag=1 ;; esac case `grep '#define.*_GNUC_' t` in ?*) gnu=1 ;; esac case $plusplus in "") $cc -c stdc.$src && stdc=1 ;; *) mkdir ptr cd ptr $cc -c ../ptr.$src & NFS_locks_are_botched=$! cd .. if $cc -c require.$src && $cc require.$obj then set x `$cc require.$obj 2>&1` d= while : do shift case $# in 0) break ;; esac case $1 in -l*) d="$d $1" ;; esac done for f in ++ do if $cc require.$obj -l$f then set x `$cc require.$obj -l$f 2>&1` r= while : do shift case $# in 0) break ;; esac case $1 in -l*) case " $d $r " in *" "$1" "*) ;; *) r="$r $1" ;; esac esac done case $r in ?*) require="$require $f" echo '' $r > req.$f ;; esac fi done fi cd ptr for i in * do if test -d $i then repository=$i break fi done cd .. kill -9 $NFS_locks_are_botched rm -rf ptr case $repository in *?) mkdir ptr cd ptr i=PTR case $repository in $i) i=$i$i ;; esac $cc -ptr$i -c ../ptr.$src & NFS_locks_are_botched=$! cd .. sleep 5 if test -d ptr/$i/$repository then ptrimplicit=1 fi kill -9 $NFS_locks_are_botched rm -rf ptr ;; esac $cc -o implc implc.$src && $executable implc && implicitc=1 if $cc -c toucho.$src && test -f toucho.$obj then o=`ls -l toucho.$obj` if $cc -o toucho toucho.$obj && $executable toucho then n=`ls -l touch.$obj` case $n in "$o") ;; *) toucho=1 ;; esac fi fi ;; esac if $cc -c pic.$src then eval set x $probe_nmflags while : do shift case $# in 0) break ;; esac case `$nm $1 pic.$obj | grep -c '[0123456789][ ][ ]*T[ ][ ]*[_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz]'` in 0) ;; *) nmflags=$1 break ;; esac done case $# in 0) case `$nm -gh pic.$obj | grep -c '|\.*[TtDdBbC][EeAaSsOo][XxTtSsMm]'` in 0) ;; *) nmflags=-gh nmedit="-e '/\.*[TtDdBbC][EeAaSsOo][XxTtSsMm]/!d' -e 's/[| ].*//'" ;; esac ;; *) nmedit="-e '/[ ]T[ ][ ]*[_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz]/!d' -e 's/.*[ ]T[ ][ ]*//'" ;; esac fi if $cc -c doti.$src then eval set x $probe_stripflags while : do shift case $# in 0) break ;; esac if $strip $1 doti.$obj then stripflags=$1 break fi done fi rm -f export.$obj export.exe if $cc -c export.$src then lm= if $cc -o export.exe export.$obj -lm 2>e && lm=-lm || $cc -o export.exe export.$obj 2>e then z=`wc -c < export.exe; $size export.exe 2>/dev/null` eval set x $probe_export_dynamic while : do shift case $# in 0) break ;; esac rm -f export.exe if $cc -o export.exe $1 export.$obj $lm 2>f && $executable export.exe then y=`wc -c < export.exe; $size export.exe 2>/dev/null` case $y in $z) ;; *) if cmp -s e f then export_dynamic=$1 break fi ;; esac fi done fi fi rm -f export.$obj export.exe rm -f strip.exe if $cc -o strip.exe strip.$src then z=`wc -c < strip.exe` eval set x $probe_ldstrip while : do shift case $# in 0) break ;; esac rm -f strip.exe if $cc -o strip.exe $1 strip.$src then case `wc -c < strip.exe` in $z) ;; *) ldstrip=$1 break ;; esac fi done fi rm -f strip.exe strip.$obj if $cc -c strip.$src && $cc -o strip.exe strip.$obj 2>e then eval set x x $probe_ldlazy while : do shift shift case $# in 0) break ;; esac rm -f strip.$exe $cc -o strip.$exe $1 strip.$obj $2 2>f && test -f strip.$exe || continue cmp -s e f || continue ldlazy=$1 ldnolazy=$2 break done eval set x x $probe_ldrecord while : do shift shift case $# in 0) break ;; esac rm -f strip.$exe $cc -o strip.$exe $1 strip.$obj $2 2>f && test -f strip.$exe || continue cmp -s e f || continue ldrecord=$1 ldnorecord=$2 break done fi case $cc_dll:$cc_pic:$so:$dynamic:$static in ::::|$cc_dll_def::::) : last chance dynamic checks while : do echo '__declspec(dllexport) int fun() { return 0; }' > exp.$src if $cc -c $cc_dll_def exp.$src then rm -f xxx.dll xxx.lib if $cc -shared -Wl,--enable-auto-image-base -Wl,--out-implib=xxx.lib -o xxx.dll exp.$obj && test -f xxx.lib -a -f xxx.dll then : cygwin cc_dll=$cc_dll_def dll_dir='$(BINDIR)' sd=.dll so=.dll.a ldscript=".def .exp .ign .res" lib_dll=option lib_all=-Wl,-whole-archive lib_undef=-Wl,-no-whole-archive dld=$cc shared='-shared -Wl,--enable-auto-image-base -Wl,--out-implib=$(<:N=*'$so')' prefix_dynamic=cyg prefix_shared=lib break fi fi break done ;; *) if $cc -c $cc_dll $cc_pic shared.$src && $cc -c $cc_dll $cc_pic notall.$src then for xx in "$cc" "$ld" do eval set x $probe_shared while : do shift case $# in 0) break ;; esac rm -f xxx$dll # UNDENT ... if $xx $1 -o xxx$dll shared.$obj 2>e && test -r xxx$dll then if test -s e && egrep -i 'unknown|invalid|option' e > /dev/null then continue fi case `PATH=/bin:/usr/bin:$PATH file xxx$dll` in *lib*|*obj*|*shared*) ;; "") $executable xxx$dll || continue ;; *ELF*|*elf*) $executable xxx$dll || continue case `strings xxx$dll | sed -e 's,.*[ |],,' | sort -u | egrep -i '^([._](dynamic|dynstr|dynsym))$'` in [012]) continue ;; esac ;; *archive*not*stripped*|*data*dynamic*not*stripped*) $executable xxx$dll || continue ;; *) continue ;; esac dld=$xx shared=$1 # does -nostartfiles make sense for C? case $plusplus in '') z=`wc -c < xxx$dll` eval set x $probe_shared_nostart while : do shift case $# in 0) break ;; esac rm -f xxx$dll if $dld $shared $1 -o xxx$dll shared.$obj 2>e && test -r xxx$dll then case `wc -c < xxx$dll` in $z) ;; *) if test -s e then case `cat e` in *[Ee][Rr][Rr][Oo][Rr]*|*[Ww][Aa][Rr][Nn][Ii][Nn][Gg]*|*[Oo][Pp][Tt][Ii][Oo][Nn]*) continue ;; esac fi case $shared in '') shared=$1 ;; *) shared="$shared $1" ;; esac break ;; esac fi done ;; esac case $cc_dll in "") cc_dll=$cc_dll_def ;; esac eval set x x $probe_sd while : do shift shift case $# in [01]) break ;; esac rm -f xxx xxx$1 xxx$2 if $dld $shared -o xxx shared.$obj 2>e then if test -f xxx$1 -a \( -f xxx$2 -o "$cc_dll" = "$cc_dll_def" \) then sd=$1 so=$2 lddynamic=-Bdynamic ldstatic=-Bstatic break 2 elif test -f xxx -a -f xxx$2 then sd=$1 so=$2 break 2 else case $so in '') so=$1 ;; esac break fi fi done rm -f libxxx.$lib $ar cr libxxx.$lib shared.$obj ranlib libxxx.$lib eval set x x $probe_lib_all_undef rm -f xxx$dll if $dld $shared -o xxx$dll libxxx.$lib && test -r xxx$dll then if $nm $nmflags xxx$dll | grep ShareD then lib_dll=OPTION set x x fi fi while : do shift shift case $# in 0|1) break ;; esac rm -f xxx$dll if $dld $shared -o xxx$dll $1 libxxx.$lib $2 && test -r xxx$dll then if $nm $nmflags xxx$dll | grep ShareD then lib_dll=option lib_all=$1 lib_undef=$2 break fi fi case $2 in ?*) if $dld $shared -o xxx$dll $1 libxxx.$lib && test -r xxx$dll then if $nm $nmflags xxx$dll | grep ShareD then lib_dll=option lib_all=$1 break fi fi ;; esac done case $lib_dll in OPTION) lib_dll=option ;; option) case $lib_undef in "") rm -f libyyy.$lib $ar cr libyyy.$lib notall.$obj ranlib libyyy.$lib $cc -c prefix.$src eval set x x $probe_lib_all_undef while : do shift shift case $# in 0|1) break ;; esac rm -f xxx$dll if $dld $shared -o xxx$dll prefix.$obj $lib_all libxxx.$lib $2 libyyy.$lib && test -r xxx$dll then rm -f t $nm $nmflags xxx$dll > t case `grep -c ShareD t`:`grep -c NotalL t` in 0:*) ;; *:0) lib_undef=$2 break ;; esac fi done ;; esac case $lib_undef in "") eval set x $probe_lib_multiple rm -f libyyy.$lib cp libxxx.$lib libyyy.$lib rm -f xxx$dll if $dld $shared -o xxx$dll prefix.$obj $lib_all libxxx.$lib libyyy.$lib && test -r xxx$dll then : else while : do shift case $# in 0) break ;; esac rm -f xxx$dll if $dld $shared -o xxx$dll prefix.$obj $lib_all $1 libxxx.$lib libyyy.$lib && test -r xxx$dll then rm -f t $nm $nmflags xxx$dll > t case `grep -c ShareD t` in 0) ;; *) lib_all="$lib_all $1" break ;; esac fi done fi lib_dll=symbol ;; esac ;; *) lib_dll=symbol ;; esac case `cat e` in ?*) eval set x $probe_unresolved while : do shift case $# in 0) break ;; esac rm -f xxx$dll if eval '$dld $shared' $1 '-o xxx$dll shared.$obj 2>e && test -r xxx$dll' then case `cat e` in "") shared="$shared $1"; break ;; esac fi done ;; esac r= eval set x $probe_shared_registry while : do shift r=x$r case $# in 0) break ;; esac rm -f xxx$dll if eval \$dld \$shared -o xxx\$dll $1 shared.\$obj && test -r xxx$dll -a -r $probe_shared_registry_file then probe_shared_registry_file='$(CC.SHARED.REGISTRY.PATH)' eval set x $probe_shared_registry i= while : do shift i=x$i case $i in $r) break ;; esac done shared_registry=$1 fi done break 2 fi # ... INDENT done done fi case $so in ?*) rm -f xxx* if $dld $shared -g -o xxx shared.$obj 2>e then set x $probe_sdb while : do shift case $1 in 0) break ;; esac if test -f xxx$1 then sdb=$1 break fi done fi if $cc -c require.$src then p=' /usr/proberun/lib:/local/runprobe/lib ' eval set x $probe_ldrunpath while : do shift case $# in 0) break ;; esac rm -f require.exe if $cc -o require.exe $1"$p" require.$obj && grep -c /proberun/ require.exe >/dev/null && grep -c /runprobe/ require.exe > /dev/null then ldrunpath=$1 eval set x $probe_ldorigin while : do shift case $# in 0) break ;; esac rm -f origin.exe if $cc -o origin.exe $1 $ldrunpath'$ORIGIN' require.$obj then if ./origin.exe > /dev/null 2>&1 then ldorigin="$1 $ldrunpath"'\$ORIGIN/$(BINDIR:P=R=$(DLLDIR))' fi break fi done break fi done fi rm -f libxxx$so if $cc -c sovmain.$src && $cc -c $cc_dll $cc_pic sovlib.c && $dld $shared -o libxxx$so sovlib.$obj && $cc -o sovmain.$exe -L. sovmain.$obj -lxxx then rm -f sovmain.$exe mv libxxx$so libxxx$so.5.6 if $cc -o sovmain.$exe -L. sovmain.$obj -lxxx then soversion=1 fi fi rm -f doti.$obj std64=/lib64 lcl64=/usr/local/lib64 if test -d $std64 -a -d $lcl64 && $cc -c doti.$src then for i in `cd $lcl64; ls *$so 2>/dev/null | sed 's/lib\([^.]*\).*/\1/'` do if $cc -o runpath.$exe doti.$obj -l$i >/dev/null 2>&1 then LD_LIBRARY_PATH= ./runpath.$exe >/dev/null 2>&1 && continue if LD_LIBRARY_PATH=$lcl64 ./runpath.$exe >/dev/null 2>&1 then runpath=$lcl64 break elif LD_LIBRARY_PATH=$std64 ./runpath.$exe >/dev/null 2>&1 then runpath=$std64 break elif LD_LIBRARY_PATH=$lcl64:$std64 ./runpath.$exe >/dev/null 2>&1 then runpath=$lcl64:$std64 break fi fi done fi ;; esac ;; esac rm -f shared.$obj if $cc -c shared.$src then eval set x $probe_ar_arflags while : do shift case $# in 0) break ;; esac rm -f libxxx.$lib if $ar $1 r libxxx.$lib shared.$obj && $ar $1 t libxxx.$lib 2>&1 | grep shared.$obj >/dev/null then ar_arflags=$1 break fi done eval set x $probe_arflags while : do shift case $# in 0) break ;; esac rm -f libxxx.$lib if $cc $1 -o libxxx.$lib shared.$obj && $ar t libxxx.$lib 2>&1 | grep shared.$obj >/dev/null then arflags=$1 break fi done fi case $shared in -G) case $cc_dll in "") cc_dll=$cc_dll_def ;; esac ;; *) case $lib_dll in symbol) echo 'extern int f(); int main() { f(); return 0; }' > main.$src echo '#include int f() { printf("hello world"); return 0; }' > member.$src if $cc -c main.$src && $cc -c member.$src then echo f > lib.exp rm -f lib.$obj main.exe 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 then dld=$ld shared='-T512 -H512 -L$(LIBDIR): -berok -bmodtype:SRE' lib_dll=export dll_libraries='-lm -lc' ldscript=.exp case $cc_dll in "") cc_dll=$cc_dll_def ;; esac case $so in "") so=.$obj ;; esac fi fi ;; esac ;; esac case $shared in ?*) if $cc -c $cc_dll $cc_pic shared.$src then eval set x $probe_shared_name while : do shift case $# in 0) break ;; esac rm -f xxx$dll if $dld $shared ${1}libfoo.1.2 -o xxx$dll shared.$obj 2>e && test -r xxx$dll then shared_name=$1 break fi done fi ;; esac case " $cc_dll " in *" $cc_dll_def "*) ;; " ") ;; *) cc_dll="$cc_dll_def $cc_dll" ;; esac case $hosttype in win32.*|cygwin.*|os2.*) Lflag=1 ;; *) if $cc -c doti.$src then if $cc -L. doti.$obj -lc >/dev/null then case $cc_dll in '') ;; *) Lflag=1 ;; esac fi fi ;; esac case $lib_dll in option) case $hosttype in linux.*) dll_libraries=-lc ;; esac ;; SYMBOL) lib_dll=symbol ;; symbol) echo "#include extern int fun() { puts(\"fun\"); return 0; }" > dllib.$src echo "extern int fun(); int main() { return fun(); }" > dlmain.$src pwd=`pwd` while : do if $cc -c $cc_dll $cc_pic dlmain.$src && $cc -c $cc_dll $cc_pic dllib.$src then rm -f libxxx$so if $dld $shared -o libxxx$so dllib.$obj && chmod 555 libxxx$so then rm -f dlmain.$exe if $cc -o dlmain.$exe dlmain.$obj $pwd/libxxx$so && (./dlmain.$exe) >/dev/null 2>&1 then break fi fi rm -f libxxx$so dlmain.$exe if $dld $shared -o libxxx$so dllib.$obj -lm -lc && chmod 555 libxxx$so && $cc -o dlmain.$exe dlmain.$obj $pwd/libxxx$so && (./dlmain.$exe) >/dev/null 2>&1 then dll_libraries='-lm -lc' fi fi break done # the dll_libraries probe is still lame case $dll_libraries in '') case $hosttype in sco.*|sol*.*|sun*) ;; *) dll_libraries='-lm -lc' ;; esac ;; esac ;; esac stdlib= a=`$cc -print-multi-directory 2>/dev/null` case $a in .) ;; *) for d in `$cc -print-search-dirs 2>/dev/null | sed -e '/^libraries:/!d' -e 's/.*=//' | tr : '\n' | grep /lib/` do if [ -d ${d}${a} ] then stdlib="$stdlib ${d}${a}" else case $d in */lib/) d=`echo '' $d | sed -e 's,/$,,'` if [ -d ${d}${a} ] then stdlib="$stdlib ${d}${a}" fi ;; esac fi done ;; esac case $stdlib in '') stdlib=`$cc -v doti.$src 2>&1 | sed 's/ */\n/g' | sed -e '/^-L/!d' -e 's/^-L//' | while read dir do if test -d "$dir" then (cd "$dir"; pwd) fi done` ;; *) eval set x $probe_verbose shift for o in "$@" do stdlib="$stdlib "`$cc $o doti.$src 2>&1 | sed 's/ */\n/g' | sed -e '/^-L/!d' -e '/\/lib64$/!d' -e 's/^-L//'` done ;; esac case $stdlib in ?*) keepstdlib=1 o=$stdlib stdlib= for dir in $o do case " $stdlib " in *" $o "*) continue ;; esac case $dir in /usr/lib64) i=/usr/local/lib64 a=/lib64 ;; /lib64) i=/usr/local/lib64 a=/usr/lib64 ;; /usr/lib) i=/usr/local/lib a=/lib ;; lib) i=/usr/local/lib a=/usr/lib ;; *) i= a= ;; esac if test "" != "$i" -a -d "$i" then case " $o " in *" $i "*) ;; *) stdlib="$stdlib $i" ;; esac fi stdlib="$stdlib $dir" if test "" != "$a" -a -d "$a" then case " $o " in *" $a "*) ;; *) stdlib="$stdlib $a" ;; esac fi done case $hosted in 1) case " $stdlib " in *" /usr/lib "*) ;; *) case " $stdlib " in *" /usr/local/lib "*) ;; *) stdlib="$stdlib /usr/local/lib" ;; esac stdlib="$stdlib /usr/lib" ;; esac case " $stdlib " in *" /lib "*) ;; *) stdlib="$stdlib /lib" ;; esac esac ;; *) keepstdlib=0 case $dir in */arch/$hosttype/lib/*) notlib=`echo $dir | sed "s,/arch/$hosttype/lib/.*,/arch/$hosttype/lib,"` ;; *) notlib=//// ;; esac tstlib= implib= if $cc -c hosted.$src then for f in `( eval set x $probe_verbose while : do shift case $# in 0) break ;; esac $cc $1 hosted.$obj done ) 2>&1 | sed -e 's/[ :]/\\ /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,//*$,,'` do case " $tstlib $implib " in *" $f "*) continue ;; esac case $f in $notlib) continue ;; esac if test -d $f then tstlib="$tstlib $f" elif test -f $f then d=`echo $f | sed -e 's,[\\\\/]*[^\\\\/]*\$,,'` case " $tstlib $implib " in *" $d "*) continue ;; esac case $d in *[\\/]usr[\\/]lib) x=$d d="`echo $d | sed -e 's,[\\\\/][\\\\/]*usr[\\\\/]lib\$,/lib,'`" case " $tstlib $implib " in *" $d "*) ;; *) implib="$implib $d" ;; esac implib="$implib $x" ;; *[\\/]lib) implib="$implib $d" d="`echo $d | sed -e 's,[\\\\/][\\\\/]*lib\$,/usr/lib,'`" case " $tstlib $implib " in *" $d "*) ;; *) implib="$implib $d" ;; esac ;; *) implib="$implib $d" ;; esac fi done fi tstlib="$tstlib $implib" if $cc -Dtype=void -Dcall=exit -c tstlib.$src && mv tstlib.$obj tst.$obj then case $plusplus in '') probe_lxx= ;; esac l= for sym in $probe_l $probe_lxx do case $l in "") l=$sym; continue ;; esac rm -f tstlib.$exe if $cc -o tstlib.$exe tst.$obj -l$l then eval set x $probe_ldmap while : do shift case $# in 0) break ;; esac 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` case $d in ?*) tstlib="$tstlib $d" ;; esac done fi l= done fi libstd= libset= stdlibroot="/ /usr/" for d in $tstlib do case $d in [\\/]lib|[\\/]usr[\\/]lib) ;; *) case " $stdlib " in *\ $d\ *) ;; *) if ls $d ${PREROOT+$PREROOT/../$d} > tmp.tmp && test -s tmp.tmp then for i in $probe_lib $obj do if grep -i "\\.$i\$" tmp.tmp >/dev/null then case " $probe_lib_append " in *\ $d\ *) libstd="$libstd $d" ;; *) stdlib="$stdlib $d" case $d in /usr/lib|/usr/lib/*) ;; /usr/lib?*) e=`echo $d | sed -e 's,/usr,,'` g=`echo $d/libc.* $e/libc.*` case "$e $g " in *".* "*);; *) stdlib="$stdlib $e" stdlibroot= ;; esac ;; esac ;; esac case $libset in "") case $i in $obj) ;; *) libset=1 lib=$i ;; esac ;; esac break fi done fi ;; esac ;; esac done 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'` do if test -d $d then case " $stdlib $libstd " in *\ ${d}\ *) ;; *) libstd="$libstd $d" ;; esac fi done case $hosted in "") tstlib= ;; *) tstlib="$stdlibroot /usr/ccs/ /usr/local/" ;; esac case $stdlibroot in ?*) d= for f in $stdinclude do f=`echo $f | sed -e 's,[^\\\\/]*\$,,'` d="$d $f" done tstlib="$d $tstlib" ;; esac $cc -c doti.$src > all.tmp for f in $probe_libdir do for d in $stdlib $libstd $tstlib do if test -d ${d}${f} then ls ${d}${f} ${PREROOT:+$PREROOT/../${d}${f}} | while read i do for j in ${d}${f}/${i} ${PREROOT:+$PREROOT/../${d}${f}/${i}} do if test -f $j -a -r $j -a -s $j then echo $i break fi done done > tmp.tmp if test -s tmp.tmp then if egrep -i "^${prefix_archive}[abcdefghijklmnopqrstuvwxyz0123456789_][abcdefghijklmnopqrstuvwxyz0123456789_]*\\.$lib\$" tmp.tmp >lib.tmp || egrep -i "\\.$obj\$" tmp.tmp >/dev/null || egrep -i "^${prefix_shared}[abcdefghijklmnopqrstuvwxyz0123456789_][abcdefghijklmnopqrstuvwxyz0123456789_]*\\$so(.[0-9]+)*\$" tmp.tmp >>lib.tmp then if test -s lib.tmp 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 xs=`sort all.tmp all.tmp tmp.tmp | uniq -u` case $xs in '') continue ;; esac ok=0 for x in $xs do case $x in *_p) continue ;; # linux gcc known to hang for -lc_p esac if $cc -o doti.$exe doti.$obj -l$x 2>e then ok=1 else if test -s e && egrep -i ":.*[ ](find|found|locate|search|-l$x)[ ]" e > /dev/null then if egrep -i ":.*[ ](access|permission)[ ]" e then : maybe else ok=0 break fi fi case $Lflag in 1) if $cc -L${d}${f} -o doti.$exe doti.$obj -l$x then ok=0 break fi ;; esac fi done case $ok in 0) continue ;; esac sort -u all.tmp tmp.tmp > lib.tmp mv lib.tmp all.tmp fi case " $stdlib $libstd " in *" ${d}${f} "*) ;; *) if test -d ${d}${f}/fsoft then stdlib="$stdlib ${d}${f}/"'$(FLOAT_OPTION)' fi stdlib="$stdlib ${d}${f}" ;; esac fi fi fi done done stdlib="$stdlib $libstd" case $stdlib in */shlib*) dy= st= for i in $stdlib $libstd do case $i in */shlib) dy="$dy $i" ;; *) st="$st $i" ;; esac done for i in /var do if test -d $i/shlib then dy="$dy $i/shlib" fi done stdlib="$dy $st" ;; esac ;; esac if $cc -c prefix.$src then eval set x $probe_symprefix while : do shift case $# in 0) break ;; esac if $nm $nmflags prefix.$obj | grep -c ${1}prefix >/dev/null then symprefix=$1 break fi done fi if $cc -c warn.$src 2>e && test -f warn.$obj then e=`wc -c < e` eval set x $probe_debug while : do shift case $# in 0) break ;; esac rm -f warn.$obj $cc $1 -c warn.$src 2>e && test -f warn.$obj || continue case `wc -c < e` in $e) debug=$1; break ;; esac done eval set x $probe_no_protect while : do shift case $# in 0) break ;; esac rm -f warn.$obj $cc $1 -c warn.$src 2>e && test -f warn.$obj || continue case `wc -c < e` in $e) no_protect=$1; break ;; esac done case $version_string in $probe_gcc_version) probe_optimize="$probe_gcc_optimize $probe_optimize" ;; esac eval set x $probe_optimize while : do shift case $# in 0) break ;; esac rm -f warn.$obj $cc $1 -c warn.$src 2>e && test -f warn.$obj || continue case `wc -c < e` in $e) optimize=$1; break ;; esac done eval set x $probe_strict while : do shift case $# in 0) break ;; esac rm -f warn.$obj $cc $1 -c warn.$src 2>e && test -f warn.$obj || continue n=`wc -c < e` if test $n -ge $e then strict=$1 break fi done $cc -c warn1.$src 2>e o=`wc -c < e` eval set x $probe_warn while : do shift case $# in 0) break ;; esac rm -f warn.$obj warn.$exe $cc -o warn.$exe $1 warn.$src 2>e && test -f warn.$exe || continue n=`wc -c < e` for i in $warn_enum do rm -f warn$i.$obj $cc -c $1 warn$i.$src 2>e && test -f warn$i.$obj || continue n=`wc -c < e` if test $n -gt $o then warn=$1 break 2 fi done done fi while : do case $hosted in 1) rm -f readonly.$exe eval set x '""' $probe_readonly while : do shift case $# in 0) break ;; esac for co in '' -Dtest_const do rm -f readonly.$exe if $cc -o readonly.$exe $co $1 readonly.$src && $executable readonly.$exe then if ./readonly.$exe >/dev/null 2>&1 then : else readonly=$1 break 3 fi fi done done rm -f readonly.$exe readonly.s if $cc -S readonly.$src && test -f readonly.s then if sed -e 's/^\([ ]*[.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_$:]*[ ]*\.*\)data/\1text/' \ -e 's/^\([ ]*[.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_$:]*[ ]*\.*\)zero[ ][ ]*/\1set .,.+/' \ -e 's/^\([ ]*[.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_$:]*[ ]*\.*\)space[ ][ ]*1/\1byte 0/' \ -e 's/^\([ ]*[.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_$:]*[ ]*\.*\)space[ ][ ]*2/\1byte 0,0/' \ -e 's/^\([ ]*[.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_$:]*[ ]*\.*\)space[ ][ ]*3/\1byte 0,0,0/' \ -e 's/^\([ ]*[.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_$:]*[ ]*\.*\)space[ ][ ]*4/\1byte 0,0,0,0/' \ readonly.s > ro.s && $cc -o readonly.$exe ro.s && $executable readonly.$exe then if ./readonly.$exe >/dev/null 2>&1 then : else readonly='-S.data' break fi fi rm -f readonly.$exe if sed -e 's/^\([ ]*[.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_$:]*[ ]*\.*\)idat/\1code/' \ -e 's/^\([ ]*[.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_$:]*[ ]*\.*\)zero[ ][ ]*/\1set .,.+/' \ -e 's/^\([ ]*[.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_$:]*[ ]*\.*\)space[ ][ ]*1/\1byte 0/' \ -e 's/^\([ ]*[.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_$:]*[ ]*\.*\)space[ ][ ]*2/\1byte 0,0/' \ -e 's/^\([ ]*[.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_$:]*[ ]*\.*\)space[ ][ ]*3/\1byte 0,0,0/' \ -e 's/^\([ ]*[.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_$:]*[ ]*\.*\)space[ ][ ]*4/\1byte 0,0,0,0/' \ readonly.s > ro.s && $cc -o readonly.$exe ro.s && $executable readonly.$exe then if ./readonly.$exe >/dev/null 2>&1 then : else readonly='-S.idat' break fi fi if sed -e 's/^\([ ]*[.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_$:]*[ ]*\.*\)data/\1rdata/' \ readonly.s > ro.s && $cc -o readonly.$exe ro.s && $executable readonly.$exe then if ./readonly.$exe >/dev/null 2>&1 then : else readonly='-S.rdata' break fi fi fi ;; esac break done case $stdc in ?*) dialect="$dialect ANSI" ;; esac case $plusplus in ?*) dialect="$dialect C++" ;; esac case $hosted in "") dialect="$dialect CROSS" ;; esac case $doti in ?*) dialect="$dialect DOTI" ;; esac case $gnu in ?*) dialect="$dialect GNU" ;; esac case $so:$dynamic:$static in ::) ;; *) dialect="$dialect DYNAMIC" case $soversion in ?*) dialect="$dialect VERSION" ;; esac ;; esac case $implicitc in ?*) dialect="$dialect IMPLICITC" ;; esac case $ptrcopy in ?*) dialect="$dialect PTRCOPY" ;; esac case $ptrimplicit in ?*) dialect="$dialect PTRIMPLICIT" ;; esac case $ptrmkdir in ?*) dialect="$dialect PTRMKDIR" ;; esac case $libpp in ?*) dialect="$dialect LIBPP" ;; esac case $toucho in ?*) dialect="$dialect TOUCHO" ;; esac case $dDflag in ?*) dialect="$dialect -dD" ;; esac # 2005-05-25 use $(CC.INCLUDE.LOCAL) instead case $include_local in ?*) dialect="$dialect -I-" ;; esac case $Lflag in ?*) dialect="$dialect -L" ;; esac ppcmd='$(CPP)' ppdir='$(CPP:D)' eval ppopt='"'$ppopt'"' eval ppenv='"'$ppenv'"' set x "" .$exe shift exe= for i do rm -f require$i done if $cc -o require require.$src then for i do if $executable require$i then exe=$i break fi done fi case $sa:$sd:$so in ::?*) eval set x $probe_sa while : do shift case $# in 0) break ;; esac for i in $stdlib do eval j="'" $i/lib*$1 "'" case $j in " $i/lib*$1 ") eval j="'" $i/lib*$1.[0123456789]* "'" case $j in " $i/lib*$1.[0123456789]* ") continue ;; esac ;; esac sa=$1 lddynamic=-Bdynamic ldstatic=-Bstatic break 2 done done ;; esac case $ldscript in "") case $so in .lib) ldscript=".def .exp" ;; *) ldscript=".ld" ;; esac ;; esac case $hosttype in '') hosttype=unknown ;; sgi.mips3) dll_variants='sgi.mips2:o32:-mips2 sgi.mips4:64:-mips4' ;; sgi.mips4) dll_variants='sgi.mips2:o32:-mips2 sgi.mips3:n32:-mips3' ;; esac case $hosted in "") ccnative=`echo $cc | sed -e 's,.*/,,'` ccs=$ccnative for c in cc gcc do case " $ccs " in *" $c "*) ;; *) ccs="$ccs $c" ;; esac done for p in $path do for c in $ccs do if $executable $p/$c then rm -f native.$exe if $p/$c -o native.$exe doti.$src && ./native.$exe then ccnative=$p/$c exectype=`package CC="$ccnative" || $SHELL -c "package CC='$ccnative'"` case $exectype in *[Uu][Ss][Aa][Gg][Ee]:*) exectype=`PATH=$_probe_PATH; export PATH; package CC="$ccnative" || $SHELL -c "package CC='$ccnative'"` ;; esac break 2 fi fi done done ;; *) ccnative=$cc exectype=$hosttype ;; esac # runtime shared lib exported symbol resolution case $cc_dll:$shared in :|:*|*:);; *) cat > cmd.c <<'!' #include #include typedef int (*Lib_f)(int**, int**, int**); int gbl_def = 1; int gbl_ref = 1; int gbl_ext; int main(int argc, char** argv) { void* dll; Lib_f lib; int* def; int* ref; int* ext; if (!(dll = dlopen(*++argv, RTLD_LAZY))) fprintf(stderr, "library not found\n"); else if (!((lib = (Lib_f)dlsym(dll, "lib"))) && !(lib = (Lib_f)dlsym(dll, "_lib"))) fprintf(stderr, "symbol not found\n"); else if ((*lib)(&def, &ref, &ext)) fprintf(stderr, "function failed\n"); else if (def == &gbl_def && ref == &gbl_ref && ext == &gbl_ext) printf("ALL\n"); else if (ref == &gbl_ref && ext == &gbl_ext) printf("REF\n"); else if (ext == &gbl_ext) printf("EXT\n"); return 0; } ! cat > lib.c <<'!' int gbl_def = 1; int gbl_ref; int gbl_ext; int lib(int** def, int** ref, int** ext) { *def = &gbl_def; *ref = &gbl_ref; *ext = &gbl_ext; return 0; } ! if $cc -c $cc_dll $cc_pic cmd.c && $cc -c $cc_dll $cc_pic lib.c && { $cc $cc_dll $export_dynamic -o cmd.exe cmd.o || $cc $cc_dll $export_dynamic -o cmd.exe cmd.o -ldl } && $dld $shared -o libgbl.dll lib.o then x=`./cmd.exe ./libgbl.dll` case $x in ?*) dialect="$dialect EXPORT=$x" ;; esac else case $sd:$hosttype in .dll:*win*) dialect="$dialect EXPORT=DLL" ;; esac fi ;; esac # shellmagic defined if installed shell scripts need magic echo ': got magic : echo ok' > ok chmod +x ok case `(eval ./ok | /bin/sh) 2>/dev/null` in ok) ;; *) echo '#!/bin/env sh : got magic : echo ok' > ok chmod +x ok case `(eval ./ok | /bin/sh) 2>/dev/null` in ok) shellmagic='$("#")!/bin/env sh' ;; *) for i in /emx/bin/bash.exe /emx/bin/sh.exe do if test -x $i then shellmagic='$("#")!'$i break fi done ;; esac ;; esac # # path cleanup # for i in ar ccnative dld ld nm size stdinclude stdlib strip do eval o='$'$i v=$o case $v in *//*) v=`echo $v | sed 's,///*,/,g'` ;; esac if (test . -ef "`pwd`") then k= for x in $v do case $x in */../*|*/..) case $x in /*) a=/ ;; *) a= ;; esac IFS=/ set '' $x IFS=$ifs r= for d do r="$d $r" done p= g= for d in $r do case $d in ..) g="$g $d" ;; *) case $g in '') case $p in '') p=$d ;; *) p=$d/$p ;; esac ;; *) set $g shift g=$* ;; esac ;; esac done case $a in '') for d in $g do p=$d/$p done ;; *) p=$a$p ;; esac case $p in /) continue ;; esac test $x -ef $p && x=$p ;; esac k="$k $x" done set '' $k shift v=$1 case $# in 0) ;; *) shift while : do case $# in 0) break ;; esac k= for d do for j in $v do test $d -ef $j && continue 2 done k="$k $d" done set '' $k case $# in 1) break ;; esac shift v="$v $1" shift done ;; esac fi case $v in $o) ;; *) eval $i='$'v ;; esac done case $keepstdlib in 1) ;; *) # # favor lib64 over lib # case $hosttype in *64|*[!0-9]64[!a-zA-Z0-9]*) o=$stdlib stdlib= for i in $o do case " $stdlib " in *" $i "*) continue ;; esac case $i in *64) stdlib="$stdlib $i" continue ;; esac case " $o " in *" ${i}64 "*) case " $stdlib " in *" ${i}64 "*) ;; *) stdlib="$stdlib ${i}64" ;; esac ;; esac stdlib="$stdlib $i" done ;; esac ;; esac # # set up for local override # CC_VERSION_STAMP=$version_stamp CC_VERSION_STRING=$version_string CC_CC=$cc CC_NATIVE=$ccnative CC_EXECTYPE=$exectype CC_HOSTTYPE=$hosttype CC_ALTPP_FLAGS=$ppopt CC_ALTPP_ENV=$ppenv CC_AR=$ar CC_AR_ARFLAGS=$ar_arflags CC_ARFLAGS=$arflags CC_DEBUG=$debug CC_DIALECT=$dialect CC_PICBIG=$cc_PIC CC_PICSMALL=$cc_pic CC_PIC=$CC_PICBIG CC_DLL_ONLY=$cc_dll case $CC_DLL_ONLY in '') CC_DLLBIG= CC_DLLSMALL= CC_DLL= ;; *) CC_DLLBIG="$CC_DLL_ONLY $CC_PICBIG" CC_DLLSMALL="$CC_DLL_ONLY $CC_PICSMALL" CC_DLL="$CC_DLL_ONLY $CC_PICBIG" ;; esac CC_DLL_DIR=$dll_dir CC_DLL_LIBRARIES=$dll_libraries CC_DLL_VARIANTS=$dll_variants CC_DYNAMIC=$dynamic CC_EXPORT_DYNAMIC=$export_dynamic CC_INCLUDE_LOCAL=$include_local CC_LD=$ld CC_LD_DYNAMIC=$lddynamic CC_LD_LAZY=$ldlazy CC_LD_NOLAZY=$ldnolazy CC_LD_ORIGIN=$ldorigin CC_LD_RECORD=$ldrecord CC_LD_NORECORD=$ldnorecord CC_LD_RUNPATH=$ldrunpath CC_LD_STATIC=$ldstatic CC_LD_STRIP=$ldstrip CC_LIB_DLL=$lib_dll CC_LIB_ALL=$lib_all CC_LIB_UNDEF=$lib_undef CC_MAKE_OPTIONS=$makeoptions CC_NM=$nm CC_NMEDIT=$nmedit CC_NMFLAGS=$nmflags CC_NOPROTECT=$no_protect CC_OPTIMIZE=$optimize CC_READONLY=$readonly CC_REPOSITORY=$repository CC_REQUIRE=$require CC_RUNPATH=$runpath CC_SHARED=$shared CC_SHARED_LD=$dld CC_SHARED_NAME=$shared_name CC_SHARED_REGISTRY=$shared_registry CC_SHARED_REGISTRY_PATH=$probe_shared_registry_path CC_SHELLMAGIC=$shellmagic CC_SIZE=$size CC_STATIC=$static CC_STDINCLUDE=$stdinclude CC_STDLIB=$stdlib CC_STRICT=$strict CC_STRIP=$strip CC_STRIP_FLAGS=$stripflags CC_PREFIX_ARCHIVE=$prefix_archive CC_PREFIX_DYNAMIC=$prefix_dynamic CC_PREFIX_SHARED=$prefix_shared CC_PREFIX_SYMBOL=$symprefix CC_SUFFIX_ARCHIVE=.$lib CC_SUFFIX_COMMAND=$suffix_command CC_SUFFIX_DEBUG=$sdb CC_SUFFIX_DYNAMIC=$sd CC_SUFFIX_LD=$ldscript CC_SUFFIX_OBJECT=.$obj CC_SUFFIX_SHARED=$so CC_SUFFIX_SOURCE=.$src CC_SUFFIX_STATIC=$sa CC_VERSION=$version_flags CC_WARN=$warn CC_ATTRIBUTES=$ATTRIBUTES exec >&3 # # check for local override # all CC_* but { CC_CC CC_VERSION_STAMP CC_VERSION_STRING } may be modified # additional CC.* may be printed on stdout # if test -f "$dir/probe.lcl" then . "$dir/probe.lcl" fi # # the payoff # case $version_stamp in ?*) echo "# $version_stamp" ;; esac echo CC.CC = $cc echo CC.NATIVE = $CC_NATIVE echo CC.EXECTYPE = $CC_EXECTYPE echo CC.HOSTTYPE = $CC_HOSTTYPE echo CC.ALTPP.FLAGS = $CC_ALTPP_FLAGS echo CC.ALTPP.ENV = $CC_ALTPP_ENV echo CC.AR = $CC_AR echo CC.AR.ARFLAGS = $CC_AR_ARFLAGS echo CC.ARFLAGS = $CC_ARFLAGS echo CC.DEBUG = $CC_DEBUG echo CC.DIALECT = $CC_DIALECT echo CC.DLLBIG = $CC_DLLBIG echo CC.DLLSMALL = $CC_DLLSMALL echo CC.DLL = $CC_DLL echo CC.DLL.DEF = $cc_dll_def echo CC.DLL.DIR = $CC_DLL_DIR echo CC.DLL.LIBRARIES = $CC_DLL_LIBRARIES echo CC.DLL.VARIANTS = $CC_DLL_VARIANTS echo CC.DYNAMIC = $CC_DYNAMIC echo CC.EXPORT.DYNAMIC = $CC_EXPORT_DYNAMIC echo CC.INCLUDE.LOCAL = $CC_INCLUDE_LOCAL # # 2004-02-14 release workaround # case $CC_SHARED_LD in $CC_CC) echo if LDSHARED echo CC.LD = $CC_LD echo else echo CC.LD = $CC_CC echo end ;; *) echo CC.LD = $CC_LD ;; esac echo CC.LD.DYNAMIC = $CC_LD_DYNAMIC echo CC.LD.LAZY = $CC_LD_LAZY echo CC.LD.NOLAZY = $CC_LD_NOLAZY echo CC.LD.ORIGIN = $CC_LD_ORIGIN echo CC.LD.RECORD = $CC_LD_RECORD echo CC.LD.NORECORD = $CC_LD_NORECORD echo CC.LD.RUNPATH = $CC_LD_RUNPATH echo CC.LD.STATIC = $CC_LD_STATIC echo CC.LD.STRIP = $CC_LD_STRIP echo CC.LIB.DLL = $CC_LIB_DLL echo CC.LIB.ALL = $CC_LIB_ALL echo CC.LIB.UNDEF = $CC_LIB_UNDEF echo CC.MAKE.OPTIONS = $CC_MAKE_OPTIONS echo CC.NM = $CC_NM case $CC_NMEDIT in ?*) CC_NMEDIT=" $CC_NMEDIT" ;; esac echo CC.NMEDIT ="$CC_NMEDIT" echo CC.NMFLAGS = $CC_NMFLAGS echo CC.NOPROTECT = $CC_NOPROTECT echo CC.OPTIMIZE = $CC_OPTIMIZE echo CC.PICBIG = $CC_PICBIG echo CC.PICSMALL = $CC_PICSMALL echo CC.PIC = $CC_PIC echo CC.READONLY = $CC_READONLY echo CC.REPOSITORY = $CC_REPOSITORY for f in $CC_REQUIRE do echo CC.REQUIRE.$f =`cat req.$f` done echo CC.RUNPATH = $CC_RUNPATH echo CC.SHARED = $CC_SHARED echo CC.SHARED.LD = $CC_SHARED_LD echo CC.SHARED.NAME = $CC_SHARED_NAME echo CC.SHARED.REGISTRY = $CC_SHARED_REGISTRY echo CC.SHARED.REGISTRY.PATH = $CC_SHARED_REGISTRY_PATH echo CC.SHELLMAGIC = $CC_SHELLMAGIC echo CC.SIZE = $CC_SIZE echo CC.STATIC = $CC_STATIC echo CC.STDINCLUDE = $CC_STDINCLUDE echo CC.STDLIB = $CC_STDLIB echo CC.STRICT = $CC_STRICT echo CC.STRIP = $CC_STRIP echo CC.STRIP.FLAGS = $CC_STRIP_FLAGS echo CC.PREFIX.ARCHIVE = $CC_PREFIX_ARCHIVE echo CC.PREFIX.DYNAMIC = $CC_PREFIX_DYNAMIC echo CC.PREFIX.SHARED = $CC_PREFIX_SHARED echo CC.PREFIX.SYMBOL = $CC_PREFIX_SYMBOL echo CC.SUFFIX.ARCHIVE = $CC_SUFFIX_ARCHIVE echo CC.SUFFIX.COMMAND = $CC_SUFFIX_COMMAND echo CC.SUFFIX.DEBUG = $CC_SUFFIX_DEBUG echo CC.SUFFIX.DYNAMIC = $CC_SUFFIX_DYNAMIC echo CC.SUFFIX.LD = $CC_SUFFIX_LD echo CC.SUFFIX.OBJECT = $CC_SUFFIX_OBJECT echo CC.SUFFIX.SHARED = $CC_SUFFIX_SHARED echo CC.SUFFIX.SOURCE = $CC_SUFFIX_SOURCE echo CC.SUFFIX.STATIC = $CC_SUFFIX_STATIC echo CC.VERSION = $CC_VERSION case $CC_VERSION_STRING in *\"*) i=`echo " $CC_VERSION_STRING" | sed -e 's,",\\\\",g' -e 's,^ ,,' -e 's,.*,"&",'` ;; *\'*) i=\"$CC_VERSION_STRING\" ;; *) i=$CC_VERSION_STRING ;; esac cat <