X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=hints%2Fsolaris_2.sh;h=adb20a14e869d1df3667cf95ec90cbd347fa5b8a;hb=8364ae4d1547eeb0d46e6f2c35b9c230722f7963;hp=9f868712c1607b1b97d06d615c028cb76ca4dbda;hpb=c738ada5c2b149bacfb891c4348ca9a16cf967e2;p=p5sagit%2Fp5-mst-13.2.git diff --git a/hints/solaris_2.sh b/hints/solaris_2.sh index 9f86871..adb20a1 100644 --- a/hints/solaris_2.sh +++ b/hints/solaris_2.sh @@ -1,18 +1,11 @@ # hints/solaris_2.sh -# Last modified: Friday, 2000-09-01 -# Lupe Christoph -# Based on version by: +# Last modified: Thu Nov 9 14:21:02 EST 2000 # Andy Dougherty -# Which was based on input from lots of folks, especially +# Based on input from lots of folks, especially # Dean Roehrich -# Additional input from Alan Burlison, Jarkko Hietaniemi, -# and Richard Soderberg. - -# For consistency with gcc, we do not adopt Sun Marketing's -# removal of the '2.' prefix from the Solaris version number. -# (Configure tries to detect an old fixincludes and needs -# this information.) - +# +# See README.solaris for additional information. +# # If perl fails tests that involve dynamic loading of extensions, and # you are using gcc, be sure that you are NOT using GNU as and ld. One # way to do that is to invoke Configure with @@ -32,14 +25,13 @@ d_suidsafe=define set `echo $glibpth | sed -e 's@/usr/ucblib@@'` glibpth="$*" -# Remove unwanted libraries. -lucb contains incompatible routines. -# -lld and -lsec don't do anything useful. -lcrypt does not -# really provide anything we need over -lc, so we droip it, too. +# Remove bad libraries. -lucb contains incompatible routines. +# -lld doesn't do anything useful. # -lmalloc can cause a problem with GNU CC & Solaris. Specifically, # libmalloc.a may allocate memory that is only 4 byte aligned, but # GNU CC on the Sparc assumes that doubles are 8 byte aligned. # Thanks to Hallvard B. Furuseth -set `echo " $libswanted " | sed -e 's@ ld @ @' -e 's@ malloc @ @' -e 's@ ucb @ @' -e 's@ sec @ @' -e 's@ crypt @ @'` +set `echo " $libswanted " | sed -e 's@ ld @ @' -e 's@ malloc @ @' -e 's@ ucb @ @'` libswanted="$*" # Look for architecture name. We want to suggest a useful default. @@ -55,17 +47,17 @@ case "$archname" in ;; esac -ccversion="`${cc:-cc} -V 2>&1|sed 's/^cc: //'`" +cc=${cc:-cc} + +ccversion="`$cc -V 2>&1|head -1|sed 's/^cc: //'`" case "$ccversion" in *WorkShop*) ccname=workshop ;; *) ccversion='' ;; esac -if test `uname -p` = "sparc"; then - # This is only needed for SPARC V9 - cat >UU/workshoplibpth.cbu<<'EOCBU' +cat >UU/workshoplibpth.cbu<<'EOCBU' case "$workshoplibpth_done" in - '') case "$use64bitall" in +'') case "$use64bitall" in "$define"|true|[yY]*) loclibpth="$loclibpth /usr/lib/sparcv9" if test -n "$workshoplibs"; then @@ -76,6 +68,8 @@ case "$workshoplibpth_done" in loclibpth="$loclibpth $lib/sparcv9 $lib/v9" done fi + # Really? + ccflags="$ccflags -Dstdchar='unsigned char'" ;; *) loclibpth="$loclibpth $workshoplibs" ;; @@ -84,7 +78,6 @@ case "$workshoplibpth_done" in ;; esac EOCBU -fi case "$ccname" in workshop) @@ -415,35 +408,16 @@ case "$usemorebits" in ;; esac -if test `uname -p` = "sparc"; then - 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]*) - case "`uname -r`" in - 5.[0-4]) - cat >&4 < UU/use64bitall.cbu <<'EOCBU' +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 - 5.[0-6]) + 5.[1-6]) cat >&4 <&4 </dev/null" in *gcc*) echo 'main() { return 0; }' > try.c @@ -498,15 +473,14 @@ esac' ;; 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]*) + +# 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 -fi +esac cat > UU/uselongdouble.cbu <<'EOCBU' # This script UU/uselongdouble.cbu will get 'called-back' by Configure @@ -536,204 +510,15 @@ EOCBU # because we need to fix up things right now. case "$uselongdouble" in "$define"|true|[yY]*) - . ./UU/uselongdouble.cbu + # Need to be double smart because we can be either here or there. + if test -f UU/uselongdouble.cbu; then + . ./UU/uselongdouble.cbu + else + if test -f uselongdouble.cbu; then + . ./uselongdouble.cbu + fi + fi ;; esac rm -f try.c try.o try - -# This is just a trick to include some useful notes. -cat > /dev/null <<'End_of_Solaris_Notes' - -Here are some notes kindly contributed by Dean Roehrich. - ------ -Generic notes about building Perl5 on Solaris: -- Use /usr/ccs/bin/make. -- If you use GNU make, remove its setgid bit. -- Remove all instances of *ucb* from your path. -- Make sure libucb is not in /usr/lib (it should be in /usr/ucblib). -- Do not use GNU as or GNU ld, or any of GNU binutils or GNU libc. -- Do not use /usr/ucb/cc. -- Do not change Configure's default answers, except for the path names. -- Do not use -lmalloc. -- Do not build on SunOS 4 and expect it to work properly on SunOS 5. -- /dev/fd must be mounted if you want set-uid scripts to work. - - -Here are the gcc-related questions and answers from the Solaris 2 FAQ. Note -the themes: - - run fixincludes - - run fixincludes correctly - - don't use GNU as or GNU ld - -Question 5.7 covers the __builtin_va_alist problem people are always seeing. -Question 6.1.3 covers the GNU as and GNU ld issues which are always biting -people. -Question 6.9 is for those who are still trying to compile Perl4. - -The latest Solaris 2 FAQ can be found in the following locations: - rtfm.mit.edu:/pub/usenet-by-group/comp.sys.sun.admin - ftp.fwi.uva.nl:/pub/solaris - -Perl5 comes with a script in the top-level directory called "myconfig" which -will print a summary of the configuration in your config.sh. My summary for -Solaris 2.4 and gcc 2.6.3 follows. I have also built with gcc 2.7.0 and the -results are identical. This configuration was generated with Configure's -d -option (take all defaults, don't bother prompting me). All tests pass for -Perl5.001, patch.1m. - -Summary of my perl5 (patchlevel 1) configuration: - Platform: - osname=solaris, osver=2.4, archname=sun4-solaris - uname='sunos poplar 5.4 generic_101945-27 sun4d sparc ' - hint=recommended - Compiler: - cc='gcc', optimize='-O', ld='gcc' - cppflags='' - ccflags ='' - ldflags ='' - stdchar='unsigned char', d_stdstdio=define, usevfork=false - voidflags=15, castflags=0, d_casti32=define, d_castneg=define - intsize=4, alignbytes=8, usemymalloc=y, randbits=15 - Libraries: - so=so - libpth=/lib /usr/lib /usr/ccs/lib /usr/local/lib - libs=-lsocket -lnsl -ldl -lm -lc -lcrypt - libc=/usr/lib/libc.so - Dynamic Linking: - dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef - cccdlflags='-fpic', ccdlflags=' ', lddlflags='-G' - - -Dean -roehrich@cray.com -9/7/95 - ------------ - -Archive-name: Solaris2/FAQ -Version: 1.70 -Last-Modified: 2000/07/06 10:01:14 -Maintained-by: Casper Dik - -5.9) Why do I get __builtin_va_alist or __builtin_va_arg_incr undefined? - - You're using gcc without properly installing the gcc fixed - include files. Or you ran fixincludes after installing gcc - w/o moving the gcc supplied varargs.h and stdarg.h files out - of the way and moving them back again later. This often - happens when people install gcc from a binary - distribution. If there's a tmp directory in gcc's include - directory, fixincludes didn't complete. You should have run - "just-fixinc" instead. - - Another possible cause is that you're using ``gcc -I/usr/include.'' - - Reinstall gcc or upgrade to gcc 2.8.0 or later, which - doesn't require a reinstallation after every OS upgrade, if - you run Solaris 2.5 or later. - -6.1) Where is the C compiler or where can I get one? - - [...] - - 4) Gcc. - - Gcc is available from the GNU archives in source form. You - need gcc 2.3.3 or later, and you should prefer gcc 2.8.0 or - later as it works better with Solaris 2.x include files. You - should not use GNU as or GNU ld. Make sure you run - just-fixinc if you use a binary distribution. Better is to - get a binary version and use that to bootstrap gcc from - source. - - GNU software is available from: - - prep.ai.mit.edu:/pub/gnu - gatekeeper.dec.com:/pub/GNU - ftp.uu.net:/systems/gnu - wuarchive.wustl.edu:/mirrors/gnu - nic.funet.fi:/pub/gnu - - When you install gcc, don't make the mistake of installing - GNU binutils or GNU libc, they are not as capable as their - counterparts you get with Solaris 2.x. - -6.11) I can't get perl 4.036 to compile or run. - - Run Configure, and use the solaris_2_0 hints, don't use the - solaris_2_1 hints and don't use the config.sh you may - already have. First you must make sure Configure and make - don't find /usr/ucb/cc. (It must use gcc or the native C - compiler: /opt/SUNWspro/bin/cc) - - Some questions need a special answer. - - Are your system (especially dbm) libraries compiled with - gcc? [y] y - - yes: gcc 2.3.3 or later uses the standard calling - conventions, same as Sun's C. - - Any additional cc flags? [ -traditional -Dvolatile=__volatile__ - -I/usr/ucbinclude] -traditional -Dvolatile=__volatile__ - - Remove /usr/ucbinclude. - - Any additional libraries? [-lsocket -lnsl -ldbm -lmalloc -lm - -lucb] -lsocket -lnsl -lm - - Don't include -ldbm, -lmalloc and -lucb. - - Perl 5 compiles out of the box. - ----------------------------------------------------------------- - -64-bitness, from Alan Burlison (added by jhi 2000-02-21) - - You need a machine running Solaris 2.7 or above. - - Here's some rules: - - 1. Solaris 2.7 and above will run in either 32 bit or 64 bit mode, - via a reboot. - 2. You can build 64 bit apps whilst running 32 bit mode and vice-versa. - 3. 32 bit apps will run under Solaris running in either 32 or 64 bit mode. - 4. 64 bit apps require Solaris to be running 64 bit mode - 5. It is possible to select the appropriate 32 or 64 bit version of an - app at run-time using isaexec(3). - 6. You can detect the OS mode using "isainfo -v", e.g. - fubar$ isainfo -v # Ultra 30 in 64 bit mode - 64-bit sparcv9 applications - 32-bit sparc applications - 7. To compile 64 bit you need to use the flag "-xarch=v9". - getconf(1) will tell you this, e.g. - fubar$ getconf -a | grep v9 - XBS5_LP64_OFF64_CFLAGS: -xarch=v9 - XBS5_LP64_OFF64_LDFLAGS: -xarch=v9 - XBS5_LP64_OFF64_LINTFLAGS: -xarch=v9 - XBS5_LPBIG_OFFBIG_CFLAGS: -xarch=v9 - XBS5_LPBIG_OFFBIG_LDFLAGS: -xarch=v9 - XBS5_LPBIG_OFFBIG_LINTFLAGS: -xarch=v9 - _XBS5_LP64_OFF64_CFLAGS: -xarch=v9 - _XBS5_LP64_OFF64_LDFLAGS: -xarch=v9 - _XBS5_LP64_OFF64_LINTFLAGS: -xarch=v9 - _XBS5_LPBIG_OFFBIG_CFLAGS: -xarch=v9 - _XBS5_LPBIG_OFFBIG_LDFLAGS: -xarch=v9 - _XBS5_LPBIG_OFFBIG_LINTFLAGS: -xarch=v9 - - > > Now, what should we do, then? Should -Duse64bits in a v9 box cause - > > Perl to compiled in v9 mode? Or should we for compatibility stick - > > with 32 bit builds and let the people in the know to add the -xarch=v9 - > > to ccflags (and ldflags?)? - - > I think the second (explicit) mechanism should be the default. Unless - > you want to allocate more than ~ 4Gb of memory inside Perl, you don't - > need Perl to be a 64-bit app. Put it this way, on a machine running - > Solaris 8, there are 463 executables under /usr/bin, but only 15 of - > those require 64 bit versions - mainly because they invade the kernel - > address space, e.g. adb, kgmon etc. Certainly we don't recommend users - > to build 64 bit apps unless they need the address space. - -End_of_Solaris_Notes