1
0
Fork 0
mirror of git://git.code.sf.net/p/cdesktopenv/code synced 2025-02-15 04:32:24 +00:00
cde/src/cmd/INIT/make.probe
Lefteris Koutsofios 0b36868c8c - added code to install an 'ar' script which appends the U flag to the first
argument. the semantics for ar were changed to zero out the timestamp of
  each module. nmake relies on the timestamp to tell if the module has changed

- added modified 'cc' scripts for linux to add the -P flag. modern gcc's put
  # lines that confuse nmake

- changed make.probe script to drop -nostartfiles for gcc >= 7.0
2020-02-12 12:46:56 -05:00

2247 lines
47 KiB
Text

:
### 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"
case `gcc -v 2>&1 | egrep gcc.version` in
*version' '7*) probe_shared_nostart= ;;
*version' '8*) probe_shared_nostart= ;;
*version' '9*) probe_shared_nostart= ;;
esac
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 <stdio.h>' > 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 <class T> void f(T){}' > implc_x.$src
echo 'template <class T> void f(T);' > implc_x.h
echo 'extern int NotalL(){return(0);}' > notall.$src
echo '#include <stdio.h>
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<class T> int gt(T a, T b);
template<class T> 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 <stdio.h>
int i;
int main(){int j;j = i * 10;return j;}' > strip.$src
echo 'template <class T> 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 <stdio.h> in dir'
elif $cc -c $1 -Iim imstd.$src
then : "$1 -Idir should find <stdio.h> in dir"
elif $cc -c -Iim $1 imstd.$src
then include_local=$1
break
else : "-Idir $1 should skip <stdio.h> 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 <stdio.h>
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 <stdio.h>
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 <stdio.h>
#include <dlfcn.h>
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 <<!
CC.VERSION.STRING = $i
!
echo CC.WARN = $CC_WARN
for i in $CC_ATTRIBUTES
do eval echo CC.$i = \$$i
done