X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=hints%2Fhpux.sh;h=c9524cf55d675b140ce6eb23cccf35d4fa24c135;hb=afd0dee8f37b552b4439a98b985a329f920c6ddc;hp=66fe7c460658a78f63e4677111c01fce57f27b43;hpb=146174a91a192983720a158796dc066226ad0e55;p=p5sagit%2Fp5-mst-13.2.git diff --git a/hints/hpux.sh b/hints/hpux.sh index 66fe7c4..c9524cf 100644 --- a/hints/hpux.sh +++ b/hints/hpux.sh @@ -21,8 +21,15 @@ # Don't assume every OS != 10 is < 10, (e.g., 11). # From: Chuck Phillips # HP-UX 10 pthreads hints: Matthew T Harden +# From: Dominic Dunlop +# Abort and offer advice if bundled (non-ANSI) C compiler selected +# From: H.Merijn Brand +# ccversion detection +# perl/64/HP-UX wants libdb-3.0 to be shared ELF 64 +# generic pthread support detection for PTH package -# This version: August 15, 1997 + +# This version: March 8, 2000 # Current maintainer: Jeff Okamoto #-------------------------------------------------------------------- @@ -64,21 +71,19 @@ ccflags="$ccflags -D_HPUX_SOURCE" # Check if you're using the bundled C compiler. This compiler doesn't support -# ANSI C (the -Aa flag) nor can it produce shared libraries. Thus we have -# to turn off dynamic loading. +# ANSI C (the -Aa flag) and so is not suitable for perl 5.5 and later. case "$cc" in '') if cc $ccflags -Aa 2>&1 | $contains 'option' >/dev/null then - case "$usedl" in - '') usedl="$undef" cat <<'EOM' >&4 -The bundled C compiler can not produce shared libraries, so you will -not be able to use dynamic loading. +The bundled C compiler is not ANSI-compliant, and so cannot be used to +build perl. Please see the file README.hpux for advice on alternative +compilers. +Cannot continue, aborting. EOM - ;; - esac + exit 1 else ccflags="$ccflags -Aa" # The add-on compiler supports ANSI C # cppstdin and cpprun need the -Aa option if you use the unbundled @@ -92,19 +97,26 @@ EOM cppminus='-' cpplast='-' fi - # For HP's ANSI C compiler, up to "+O3" is safe for everything - # except shared libraries (PIC code). Max safe for PIC is "+O2". - # Setting both causes innocuous warnings. - #optimize='+O3' - #cccdlflags='+z +O2' - optimize='-O' + case "$optimize" in + # For HP's ANSI C compiler, up to "+O3" is safe for everything + # except shared libraries (PIC code). Max safe for PIC is "+O2". + # Setting both causes innocuous warnings. + '') optimize='-O' + #optimize='+O3' + #cccdlflags='+z +O2' + ;; + esac + cc=cc ;; esac -# Even if you use gcc, prefer the HP math library over the GNU one. +cc=${cc:-cc} -case "`$cc -v 2>&1`" in -"*gcc*" ) test -d /lib/pa1.1 && ccflags="$ccflags -L/lib/pa1.1" ;; +case `$cc -v 2>&1`"" in +*gcc*) ccisgcc="$define" ;; +*) ccisgcc='' + ccversion=`which cc | xargs what | awk '/Compiler/{print $2}'` + ;; esac # Determine the architecture type of this system. @@ -139,6 +151,80 @@ else selecttype='int *' fi +# Do this right now instead of the delayed callback unit approach. +case "$use64bitall" in +$define|true|[yY]*) use64bitint="$define" ;; +esac +case "$use64bitint" in +$define|true|[yY]*) + if [ "$xxOsRevMajor" -lt 11 ]; then + cat <&4 + +64-bit compilation is not supported on HP-UX $xxOsRevMajor. +You need at least HP-UX 11.0. +Cannot continue, aborting. + +EOM + exit 1 + fi + + # Without the 64-bit libc we cannot do much. + libc='/lib/pa20_64/libc.sl' + if [ ! -f "$libc" ]; then + cat <&4 + +*** You do not seem to have the 64-bit libraries in /lib/pa20_64. +*** Most importantly, I cannot find the $libc. +*** Cannot continue, aborting. + +EOM + exit 1 + fi + + ccflags="$ccflags +DD64" + ldflags="$ldflags +DD64" + test -d /lib/pa20_64 && loclibpth="$loclibpth /lib/pa20_64" + libswanted="$libswanted pthread" + libscheck='case "`/usr/bin/file $xxx`" in +*LP64*|*PA-RISC2.0*) ;; +*) xxx=/no/64-bit$xxx ;; +esac' + if test -n "$ccisgcc" -o -n "$gccversion"; then + ld="$cc" + else + ld=/usr/bin/ld + fi + ar=/usr/bin/ar + full_ar=$ar + + if test -z "$ccisgcc" -a -z "$gccversion"; then + # The strict ANSI mode (-Aa) doesn't like the LL suffixes. + ccflags=`echo " $ccflags "|sed 's@ -Aa @ @g'` + case "$ccflags" in + *-Ae*) ;; + *) ccflags="$ccflags -Ae" ;; + esac + fi + + set `echo " $libswanted " | sed -e 's@ dl @ @'` + libswanted="$*" + + ;; +esac + +case "$ccisgcc" in +# Even if you use gcc, prefer the HP math library over the GNU one. +"$define") test -d /lib/pa1.1 && ccflags="$ccflags -L/lib/pa1.1" ;; +esac + +case "$ccisgcc" in +"$define") ;; +*) case "`getconf KERNEL_BITS 2>/dev/null`" in + *64*) ldflags="$ldflags -Wl,+vnocompatwarnings" ;; + esac + ;; +esac + # Remove bad libraries that will cause problems # (This doesn't remove libraries that don't actually exist) # -lld is unneeded (and I can't figure out what it's used for anyway) @@ -164,7 +250,10 @@ libswanted="$*" # ccdlflags="-Wl,-E -Wl,-B,immediate,-B,nonfatal $ccdlflags" ccdlflags="-Wl,-E -Wl,-B,deferred $ccdlflags" -usemymalloc='y' +case "$usemymalloc" in +'') usemymalloc='y' ;; +esac + alignbytes=8 # For native nm, you need "-p" to produce BSD format output. nm_opt='-p' @@ -193,8 +282,8 @@ case "$ldlibpthname" in esac # HP-UX 10.20 and gcc 2.8.1 break UINT32_MAX. -case "$cc" in -*gcc*) ccflags="$ccflags -DUINT32_MAX_BROKEN" ;; +case "$ccisgcc" in +"$define") ccflags="$ccflags -DUINT32_MAX_BROKEN" ;; esac cat > UU/cc.cbu <<'EOSH' @@ -215,8 +304,8 @@ else if test -x /usr/bin/ar; then cat <&2 -NOTE: You are using HP cc(1) but GNU ar(1). This might lead into trouble -later on, I'm switching to HP ar to play safe. +*** You are using HP cc(1) but GNU ar(1). This might lead into trouble +*** later on, I'm switching to HP ar to play safe. END ar=/usr/bin/ar @@ -235,9 +324,9 @@ EOSH # (warning) Use of GR3 when frame >= 8192 may cause conflict. # These warnings are harmless and can be safely ignored. +cat > UU/usethreads.cbu <<'EOCBU' # This script UU/usethreads.cbu will get 'called-back' by Configure # after it has prompted the user for whether to use threads. -cat > UU/usethreads.cbu <<'EOCBU' case "$usethreads" in $define|true|[yY]*) if [ "$xxOsRevMajor" -lt 10 ]; then @@ -250,33 +339,50 @@ EOM fi case "$xxOsRevMajor" in 10) - # Under 10.X, a threaded perl can be built, but it needs - # libcma and OLD_PTHREADS_API. Also needs to - # be #included before any other includes (in perl.h) - if [ ! -f /usr/include/pthread.h -o ! -f /usr/lib/libcma.sl ]; then + # Under 10.X, a threaded perl can be built + if [ -f /usr/include/pthread.h ]; then + if [ -f /usr/lib/libcma.sl ]; then + # DCE (from Core OS CD) is installed + + # It needs # libcma and OLD_PTHREADS_API. Also + # needs to be #included before any other includes + # (in perl.h) + + # HP-UX 10.X uses the old pthreads API + d_oldpthreads="$define" + + # include libcma before all the others + libswanted="cma $libswanted" + + # tell perl.h to include before other include files + ccflags="$ccflags -DPTHREAD_H_FIRST" + + # CMA redefines select to cma_select, and cma_select expects int * + # instead of fd_set * (just like 9.X) + selecttype='int *' + + elif [ -f /usr/lib/libpthread.sl ]; then + # PTH package is installed + libswanted="pthread $libswanted" + else + libswanted="no_threads_available" + fi + else + libswanted="no_threads_available" + fi + + if [ $libswanted = "no_threads_available" ]; then cat <&4 In HP-UX 10.X for POSIX threads you need both of the files -/usr/include/pthread.h and /usr/lib/libcma.sl. -Either you must install the CMA package or you must upgrade to HP-UX 11. +/usr/include/pthread.h and either /usr/lib/libcma.sl or /usr/lib/libpthread.sl. +Either you must upgrade to HP-UX 11 or install a posix thread library: + DCE-CoreTools from HP-UX 10.20 Hardware Extensions 3.0 CD (B3920-13941) or + PTH package from i.e. http://hpux.tn.tudelft.nl/hppd/hpux/alpha.html Cannot continue, aborting. EOM exit 1 - fi - - # HP-UX 10.X uses the old pthreads API - case "$d_oldpthreads" in - '') d_oldpthreads="$define" ;; - esac - - # include libcma before all the others - libswanted="cma $libswanted" - - # tell perl.h to include before other include files - ccflags="$ccflags -DPTHREAD_H_FIRST" + fi - # CMA redefines select to cma_select, and cma_select expects int * - # instead of fd_set * (just like 9.X) - selecttype='int *' ;; 11 | 12) # 12 may want upping the _POSIX_C_SOURCE datestamp... ccflags=" -D_POSIX_C_SOURCE=199506L $ccflags" @@ -290,74 +396,44 @@ EOM esac EOCBU -# This script UU/uselfs.cbu will get 'called-back' by Configure -# after it has prompted the user for whether to use 64 bits. -cat > UU/uselfs.cbu <<'EOCBU' +case "$uselargefiles-$ccisgcc" in +"$define-$define"|'-define') + cat <&4 + +*** I'm ignoring large files for this build because +*** I don't know how to do use large files in HP-UX using gcc. + +EOM + uselargefiles="$undef" + ;; +esac + +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]*) - lfcflags="`getconf _CS_XBS5_ILP32_OFFBIG_CFLAGS 2>/dev/null`" - lfldflags="`getconf _CS_XBS5_ILP32_OFFBIG_LDFLAGS 2>/dev/null`" - lflibs="`getconf _CS_XBS5_ILP32_OFFBIG_LIBS 2>/dev/null|sed -e 's@^-l@@' -e 's@ -l@ @g`" - case "$lfcflags$lfldflags$lflibs" in - '');; - *) # This sucks. To get the HP-UX strict ANSI mode (-Aa) to - # approve of large file offsets, we must turn on the 64-bitness - # (+DD64), too. A callback file (a hack) calling another, yuck. - case "$use64bits" in - $undef|false|[nN]*|'') - use64bits="$define" - if $test -f use64bits.cbu; then - echo "(Large files in HP-UX require also 64-bitness, picking up 64-bit hints...)" - . ./use64bits.cbu - fi - ;; +''|$define|true|[yY]*) + # there are largefile flags available via getconf(1) + # but we cheat for now. (Keep that in the left margin.) +ccflags_uselargefiles="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64" + + ccflags="$ccflags $ccflags_uselargefiles" + + if test -z "$ccisgcc" -a -z "$gccversion"; then + # The strict ANSI mode (-Aa) doesn't like large files. + ccflags=`echo " $ccflags "|sed 's@ -Aa @ @g'` + case "$ccflags" in + *-Ae*) ;; + *) ccflags="$ccflags -Ae" ;; esac - ccflags="$ccflags $lfcflags" - ldflags="$ldflags $ldldflags" - libswanted="$libswanted $lflibs" - ;; - esac - lfcflags='' - lfldflags='' - lflibs='' - ;; -esac -EOCBU + fi -# This script UU/use64bits.cbu will get 'called-back' by Configure -# after it has prompted the user for whether to use 64 bits. -cat > UU/use64bits.cbu <<'EOCBU' -case "$ccflags" in -*+DD64*) # Been here, done this (via uselfs.cbu, most likely.) - ;; -*) case "$use64bits" in -$define|true|[yY]*) - if [ "$xxOsRevMajor" -lt 11 ]; then - cat <&4 -64-bit compilation is not supported on HP-UX $xxOsRevMajor. -You need at least HP-UX 11.0. -Cannot continue, aborting. -EOM - exit 1 - fi - if [ ! -f /lib/pa20_64/libc.sl ]; then - cat <&4 -You do not seem to have the 64-bit libraries in /lib/pa20_64. -Most importantly, I cannot find /lib/pa20_64/libc.sl. -Cannot continue, aborting. -EOM - exit 1 - fi - ccflags="$ccflags +DD64" - ldflags="$ldflags +DD64" - ld=/usr/bin/ld - set `echo " $libswanted " | sed -e 's@ dl @ @'` - libswanted="$*" - glibpth="/lib/pa20_64" - esac - ;; + ;; esac EOCBU +# keep that leading tab. + ccisgcc='' - +# Until we figure out what to be probe for in Configure (ditto for irix_6.sh) +d_casti32='undef'