### 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
# 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 <<EOM >&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
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
;;
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 <<EOF
+#include <sys/resource.h>
+
+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 <<EOM >&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 <<EOM >&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 <<EOM >&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