X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=hints%2Fhpux.sh;h=da8485f7174767aa204d6a864d61255bca937fcc;hb=ccf874816b57b9b91848a81cf43371bf7b3f17c8;hp=7eb996c149f2c1e87d3d8d4dab362c5b2a4b13a6;hpb=e08bfeb28a2f47e296d02a3d25f47d835024193f;p=p5sagit%2Fp5-mst-13.2.git diff --git a/hints/hpux.sh b/hints/hpux.sh index 7eb996c..da8485f 100644 --- a/hints/hpux.sh +++ b/hints/hpux.sh @@ -37,47 +37,65 @@ echo "Archname is $archname" ### HP-UX OS specific behaviour -set `echo " $ccflags " | sed -e 's/ -A[ea] / /' -e 's/ -D_HPUX_SOURCE / /'` -cc_cppflags="$* -D_HPUX_SOURCE" -ccflags="-Ae $cc_cppflags" -cppflags="-Aa -D__STDC_EXT__ $cc_cppflags" - -case "$prefix" in - "") prefix='/opt/perl5' ;; - esac - # -ldbm is obsolete and should not be used # -lBSD contains BSD-style duplicates of SVR4 routines that cause confusion # -lPW is obsolete and should not be used # The libraries crypt, malloc, ndir, and net are empty. -set `echo " $libswanted " | sed -e 's/ ld / /' -e 's/ dbm / /' -e 's/ BSD / /' -e 's/ PW / /'` +set `echo "X $libswanted " | sed -e 's/ ld / /' -e 's/ dbm / /' -e 's/ BSD / /' -e 's/ PW / /'` +shift libswanted="$*" -# By setting the deferred flag below, this means that if you run perl -# on a system that does not have the required shared library that you -# linked it with, it will die when you try to access a symbol in the -# (missing) shared library. If you would rather know at perl startup -# time that you are missing an important shared library, switch the -# comments so that immediate, rather than deferred loading is -# performed. Even with immediate loading, you can postpone errors for -# undefined (or multiply defined) routines until actual access by -# adding the "nonfatal" option. -# ccdlflags="-Wl,-E -Wl,-B,immediate $ccdlflags" -# ccdlflags="-Wl,-E -Wl,-B,immediate,-B,nonfatal $ccdlflags" -ccdlflags="-Wl,-E -Wl,-B,deferred $ccdlflags" - cc=${cc:-cc} +ar=/usr/bin/ar # Yes, truly override. We do not want the GNU ar. +full_ar=$ar # I repeat, no GNU ar. arrr. -ar=/usr/bin/ar # Yes, truly override. We do not want the GNU ar. -full_ar=$ar # I repeat, no GNU ar. arrr. +set `echo "X $ccflags " | sed -e 's/ -A[ea] / /' -e 's/ -D_HPUX_SOURCE / /'` +shift + cc_cppflags="$* -D_HPUX_SOURCE" +cppflags="-Aa -D__STDC_EXT__ $cc_cppflags" + +case "$prefix" in + "") prefix='/opt/perl5' ;; + esac + gnu_as=no + gnu_ld=no case `$cc -v 2>&1`"" in - *gcc*) ccisgcc="$define" ;; - *) ccisgcc='' - ccversion=`which cc | xargs what | awk '/Compiler/{print $2}'` + *gcc*) ccisgcc="$define" + ccflags="$cc_cppflags" case "`getconf KERNEL_BITS 2>/dev/null`" in - *64*) ldflags="$ldflags -Wl,+vnocompatwarnings" ;; + *64*) + echo "main(){}">try.c + # gcc with gas will not accept +DA2.0 + case "`$cc -c -Wa,+DA2.0 try.c 2>&1`" in + *"+DA2.0"*) # gas + gnu_as=yes + ;; + *) # HPas + ccflags="$ccflags -Wa,+DA2.0" + ;; + esac + # gcc with gld will not accept +vnocompatwarnings + case "`$cc -o try -Wl,+vnocompatwarnings try.c 2>&1`" in + *"+vnocompat"*) # gld + gnu_ld=yes + ;; + *) # HPld + ldflags="$ldflags -Wl,+vnocompatwarnings" + ccflags="$ccflags -Wl,+vnocompatwarnings" + ;; + esac + ;; esac + ;; + *) ccisgcc='' + ccversion=`which cc | xargs what | awk '/Compiler/{print $2}'` + ccflags="-Ae $cc_cppflags -Wl,+vnocompatwarnings" + # Needed because cpp does only support -Aa (not -Ae) + cpplast='-' + cppminus='-' + cppstdin='cc -E -Aa -D__STDC_EXT__' + cpprun=$cppstdin case "$d_casti32" in "") d_casti32='undef' ;; esac @@ -87,9 +105,27 @@ case `$cc -v 2>&1`"" in # When HP-UX runs a script with "#!", it sets argv[0] to the script name. toke_cflags='ccflags="$ccflags -DARG_ZERO_IS_SCRIPT"' - ### 64 BITNESS +# Some gcc versions do native 64 bit long (e.g. 2.9-hppa-000310) +# We have to force 64bitness to go search the right libraries + gcc_64native=no +case "$ccisgcc" in + $define|true|[Yy]) + echo 'int main(){long l;printf("%d\n",sizeof(l));}'>try.c + $cc -o try $ccflags $ldflags try.c + if [ "`try`" = "8" ]; then + cat <&4 + +*** This version of gcc uses 64 bit longs. -Duse64bitall is +*** implicitly set to enable continuation +EOM + use64bitall=$define + gcc_64native=yes + fi + ;; + esac + case "$use64bitall" in $define|true|[yY]*) use64bitint="$define" ;; esac @@ -140,8 +176,23 @@ EOM exit 1 fi - ccflags="$ccflags +DD64" - ldflags="$ldflags +DD64" + case "$ccisgcc" in + $define|true|[Yy]) + # For the moment, don't care that it ain't supported (yet) + # by gcc (up to and including 2.95.3), cause it'll crash + # anyway. Expect auto-detection of 64-bit enabled gcc on + # HP-UX soon, including a user-friendly exit + case $gcc_64native in + no) ccflags="$ccflags -mlp64" + ldflags="$ldflags -Wl,+DD64" + ;; + esac + ;; + *) + ccflags="$ccflags +DD64" + ldflags="$ldflags +DD64" + ;; + esac # Reset the library checker to make sure libraries # are the right type @@ -164,44 +215,123 @@ EOM ;; esac +# By setting the deferred flag below, this means that if you run perl +# on a system that does not have the required shared library that you +# linked it with, it will die when you try to access a symbol in the +# (missing) shared library. If you would rather know at perl startup +# time that you are missing an important shared library, switch the +# comments so that immediate, rather than deferred loading is +# performed. Even with immediate loading, you can postpone errors for +# undefined (or multiply defined) routines until actual access by +# adding the "nonfatal" option. +# ccdlflags="-Wl,-E -Wl,-B,immediate $ccdlflags" +# ccdlflags="-Wl,-E -Wl,-B,immediate,-B,nonfatal $ccdlflags" +if [ "$gnu_ld" = "yes" ]; then + ccdlflags="-Wl,-E $ccdlflags" +else + ccdlflags="-Wl,-E -Wl,-B,deferred $ccdlflags" + fi + ### COMPILER SPECIFICS +## Local restrictions (point to README.hpux to lift these) + +## Optimization limits +cat >try.c < + +int main () +{ + struct rlimit rl; + int i = getrlimit (RLIMIT_DATA, &rl); + printf ("%d\n", rl.rlim_cur / (1024 * 1024)); + } /* main */ +EOF +$cc -o try $ccflags $ldflags try.c + maxdsiz=`try` +if [ $maxdsiz -le 64 ]; then + # 64 Mb is probably not enough to optimize toke.c + # and regexp.c with -O2 + cat <&4 +Your kernel limits the data section of your programs to $maxdsiz Mb, +which is (sadly) not enough to fully optimize some parts of the +perl binary. I'll try to use a lower optimization level for +those parts. If you are a sysadmin, and you *do* want full +optimization, raise the 'maxdsiz' kernel configuration parameter +to at least 0x08000000 (128 Mb) and rebuild your kernel. +EOM +regexec_cflags='' + fi + case "$ccisgcc" in $define|true|[Yy]) case "$optimize" in - "") optimize="-g -O" ;; + "") optimize="-g -O" ;; + *O[3456789]*) optimize=`echo "$optimize" | sed -e 's/O[3-9]/O2/'` ;; esac - ld="$cc" + #ld="$cc" + ld=/usr/bin/ld cccdlflags='-fPIC' - lddlflags='-shared' + #lddlflags='-shared' + lddlflags='-b' + case "$optimize" in + *-g*-O*|*-O*-g*) + # gcc without gas will not accept -g + echo "main(){}">try.c + case "`$cc $optimize -c try.c 2>&1`" in + *"-g option disabled"*) + set `echo "X $optimize " | sed -e 's/ -g / /'` + shift + optimize="$*" + ;; + esac + ;; + esac + if [ $maxdsiz -le 64 ]; then + case "$optimize" in + *O2*) opt=`echo "$optimize" | sed -e 's/O2/O1/'` + toke_cflags="$toke_cflags;optimize=\"$opt\"" + regexec_cflags="optimize=\"$opt\"" + ;; + esac + fi ;; *) # HP's compiler cannot combine -g and -O case "$optimize" in - "") optimize="-O" ;; + "") optimize="+O2 +Onolimit" ;; + *O[3456789]*) optimize=`echo "$optimize" | sed -e 's/O[3-9]/O2/'` ;; esac + if [ $maxdsiz -le 64 ]; then + case "$optimize" in + *-O*|\ + *O2*) opt=`echo "$optimize" | sed -e 's/-O/+O2/' -e 's/O2/O1/' -e 's/ *+Onolimit//'` + toke_cflags="$toke_cflags;optimize=\"$opt\"" + regexec_cflags="optimize=\"$opt\"" + ;; + esac + fi ld=/usr/bin/ld cccdlflags='+Z' - lddlflags='-b' + lddlflags='-b +vnocompatwarnings' ;; esac - ## LARGEFILES -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 +#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