X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=hints%2Fsolaris_2.sh;h=6809d4cdf957e1d78a4770d7d5fe059add8d095b;hb=c4eb81271d38690def0c149c253ee8dc4015bfca;hp=30b59dd0d81c91e3e0411c6b8ab6583380a2a62a;hpb=de6124c856e6fc34c48856ef1aa5a4c3d045ad5f;p=p5sagit%2Fp5-mst-13.2.git diff --git a/hints/solaris_2.sh b/hints/solaris_2.sh index 30b59dd..6809d4c 100644 --- a/hints/solaris_2.sh +++ b/hints/solaris_2.sh @@ -45,15 +45,50 @@ case "$archname" in ;; esac +test -z "`${cc:-cc} -V 2>&1|grep -i workshop`" || ccname=workshop + +cat >UU/workshoplibpth.cbu<<'EOCBU' +case "$workshoplibpth_done" in +'') case "$use64bitall" in + "$define"|true|[yY]*) + loclibpth="$loclibpth /usr/lib/sparcv9" + if test -n "$workshoplibs"; then + loclibpth=`echo $loclibpth | sed -e "s% $workshoplibs%%" ` + for lib in $workshoplibs; do + # Logically, it should be sparcv9. + # But the reality fights back, it's v9. + loclibpth="$loclibpth $lib/sparcv9 $lib/v9" + done + fi + ;; + *) loclibpth="$loclibpth $workshoplibs" + ;; + esac + workshoplibpth_done="$define" + ;; +esac +EOCBU + +case "$ccname" in +workshop) + cat >try.c < +int main() { return(0); } +EOF + workshoplibs=`cc -### try.c -lsunmath -o try 2>&1|grep " -Y "|sed 's%.* -Y "P,\(.*\)".*%\1%'|tr ':' '\n'|grep '/SUNWspro/'` + . ./UU/workshoplibpth.cbu + ;; +esac + ###################################################### # General sanity testing. See below for excerpts from the Solaris FAQ. - +# # From roehrich@ironwood-fddi.cray.com Wed Sep 27 12:51:46 1995 # Date: Thu, 7 Sep 1995 16:31:40 -0500 # From: Dean Roehrich # To: perl5-porters@africa.nicoh.com # Subject: Re: On perl5/solaris/gcc - +# # Here's another draft of the perl5/solaris/gcc sanity-checker. case `type ${cc:-cc}` in @@ -292,8 +327,12 @@ case "$usethreads" in $define|true|[yY]*) ccflags="-D_REENTRANT $ccflags" - # sched_yield is in -lposix4 - set `echo X "$libswanted "| sed -e 's/ c / posix4 pthread c /'` + # sched_yield is in -lposix4 up to Solaris 2.6, in -lrt starting with Solaris 7 + case `uname -r` in + 5.[0-6] | 5.5.1) sched_yield_lib="posix4" ;; + *) sched_yield_lib="rt"; + esac + set `echo X "$libswanted "| sed -e "s/ c / $sched_yield_lib pthread c /"` shift libswanted="$*" @@ -318,7 +357,7 @@ $define|true|[yY]*) siglongjmp(env, 2); } EOM - if test "`arch`" = i86pc -a "$osvers" = 2.6 && \ + if test "`arch`" = i86pc -a `uname -r` = 5.6 && \ ${cc:-cc} try.c -lpthread >/dev/null 2>&1 && ./a.out; then d_sigsetjmp=$undef cat << 'EOM' >&2 @@ -333,64 +372,140 @@ EOM esac EOCBU -cat > UU/useuselargefiles.cbu <<'EOCBU' -# This script UU/useuselargefiles.cbu will get 'called-back' by Configure +cat > UU/uselargefiles.cbu <<'EOCBU' +# This script UU/uselargefiles.cbu will get 'called-back' by Configure # after it has prompted the user for whether to use large files. case "$uselargefiles" in ''|$define|true|[yY]*) - ccflags="$ccflags `getconf LFS_CFLAGS 2>/dev/null`" - ldflags="$ldflags `getconf LFS_LDFLAGS 2>/dev/null`" - libswanted="$libswanted `getconf LFS_LIBS 2>/dev/null|sed -e 's@^-l@@' -e 's@ -l@ @g`" + +# Keep these in the left margin. +ccflags_uselargefiles="`getconf LFS_CFLAGS 2>/dev/null`" +ldflags_uselargefiles="`getconf LFS_LDFLAGS 2>/dev/null`" +libswanted_uselargefiles="`getconf LFS_LIBS 2>/dev/null|sed -e 's@^-l@@' -e 's@ -l@ @g`" + + ccflags="$ccflags $ccflags_uselargefiles" + ldflags="$ldflags $ldflags_uselargefiles" + libswanted="$libswanted $libswanted_uselargefiles" ;; esac EOCBU -cat > UU/use64bitint.cbu <<'EOCBU' -# This script UU/use64bitint.cbu will get 'called-back' by Configure -# after it has prompted the user for whether to use 64 bit integers. -case "$use64bitint" in -$define|true|[yY]*) +# This is truly a mess. +case "$usemorebits" in +"$define"|true|[yY]*) + use64bitint="$define" + uselongdouble="$define" + ;; +esac + +cat > UU/use64bitall.cbu <<'EOCBU' +# This script UU/use64bitall.cbu will get 'called-back' by Configure +# after it has prompted the user for whether to be maximally 64 bitty. +case "$use64bitall-$use64bitall_done" in +"$define-"|true-|[yY]*-) case "`uname -r`" in - 2.[1-6]) + 5.[1-6]) cat >&4 <&4 < UU/use64bitall.cbu <<'EOCBU' -# This script UU/use64bitall.cbu will get 'called-back' by Configure -# after it has prompted the user for whether to be maximally 64 bitty. -case "$use64bitall" in -$define|true|[yY]*) +I do not see the 64-bit libc, $libc. +(You are either in an old sparc or in an x86.) +Cannot continue, aborting. + +EOM + exit 1 + fi + . ./UU/workshoplibpth.cbu case "$cc -v 2>/dev/null" in *gcc*) - # I don't know what are the flags to get gcc sparcv9-aware, - # I'm just guessing. --jhi - ccflags="$ccflags -mv9" - ldflags="$ccflags -mv9" - lddlflags="$lddlflags -G -mv9" + echo 'main() { return 0; }' > try.c + case "`${cc:-cc} -mcpu=v9 -m64 -S try.c 2>&1 | grep 'm64 is not supported by this configuration'`" in + *"m64 is not supported"*) + cat >&4 </dev/null` != X; then + ccflags="$ccflags -Wa,`getconf XBS5_LP64_OFF64_CFLAGS 2>/dev/null`" + fi + # no changes to ld flags, as (according to man ld): + # + # There is no specific option that tells ld to link 64-bit + # objects; the class of the first object that gets processed + # by ld determines whether it is to perform a 32-bit or a + # 64-bit link edit. ;; *) - ccflags="$ccflags `getconf XBS5_LP64_OFF64_CFLAGS`" - ldflags="$ccflags `getconf XBS5_LP64_OFF64_LDFLAGS`" - lddlflags="$lddlflags -G `getconf XBS5_LP64_OFF64_LDFLAGS`" + ccflags="$ccflags `getconf XBS5_LP64_OFF64_CFLAGS 2>/dev/null`" + ldflags="$ldflags `getconf XBS5_LP64_OFF64_LDFLAGS 2>/dev/null`" + lddlflags="$lddlflags -G `getconf XBS5_LP64_OFF64_LDFLAGS 2>/dev/null`" ;; esac - loclibpth="$loclibpth /usr/lib/sparcv9" libscheck='case "`/usr/bin/file $xxx`" in *64-bit*|*SPARCV9*) ;; *) xxx=/no/64-bit$xxx ;; esac' + use64bitall_done=yes ;; esac EOCBU +# Actually, we want to run this already now, if so requested, +# because we need to fix up things right now. +case "$use64bitall" in +"$define"|true|[yY]*) + . ./UU/use64bitall.cbu + ;; +esac + +cat > UU/uselongdouble.cbu <<'EOCBU' +# This script UU/uselongdouble.cbu will get 'called-back' by Configure +# after it has prompted the user for whether to use long doubles. +case "$uselongdouble-$uselongdouble_done" in +"$define-"|true-|[yY]*-) + case "$ccname" in + workshop) + libswanted="$libswanted sunmath" + loclibpth="$loclibpth /opt/SUNWspro/lib" + ;; + *) cat >&4 < /dev/null <<'End_of_Solaris_Notes'