X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=hints%2Fdec_osf.sh;h=fd0100305b4072407cefc81eb01eb15aaba30d86;hb=9bf2270250326fb85445d6849ed84a94434dd12c;hp=336e0ef99ef782ee1f887912ba3fbffcdc07e962;hpb=45d3b5469846d045649a3f1b7d0f06e1edd30ad7;p=p5sagit%2Fp5-mst-13.2.git diff --git a/hints/dec_osf.sh b/hints/dec_osf.sh index 336e0ef..fd01003 100644 --- a/hints/dec_osf.sh +++ b/hints/dec_osf.sh @@ -60,6 +60,42 @@ cc=${cc:-cc} +# Intentional leading tabs. + myosvers="`/usr/sbin/sizer -v 2>/dev/null || uname -r`" + unamer="`uname -r`" + +# Fancy compiler suites use optimising linker as well as compiler. +# +case "$unamer" in +*[123].*) # old loader + lddlflags="$lddlflags -O3" + ;; +*) if $test "X$optimize" = "X$undef"; then + lddlflags="$lddlflags -msym" + else + case "$myosvers" in + *4.0D*) + # QAR 56761: -O4 + .so may produce broken code, + # fixed in 4.0E or better. + ;; + *) + lddlflags="$lddlflags $optimize" + ;; + esac + # -msym: If using a sufficiently recent /sbin/loader, + # keep the module symbols with the modules. + lddlflags="$lddlflags -msym $_lddlflags_strict_ansi" + fi + ;; +esac +# Yes, the above loses if gcc does not use the system linker. +# If that happens, let me know about it. + +# Because there is no other handy way to recognize 3.X. +case "$unamer" in +*3.*) ccflags="$ccflags -DDEC_OSF1_3_X" ;; +esac + case "`$cc -v 2>&1 | grep cc`" in *gcc*) isgcc=gcc ;; esac @@ -71,7 +107,7 @@ esac case "$isgcc" in gcc) if [ "X$gccversion" = "X" ]; then # Done too late in Configure if hinted - gccversion=`$cc --version | sed 's/.*(GCC) *//'` + gccversion=`$cc -dumpversion` fi set $gccversion if test "$1" -lt 2 -o \( "$1" -eq 2 -a \( "$2" -lt 95 -o \( "$2" -eq 95 -a "$3" -lt 3 \) \) \); then @@ -113,8 +149,8 @@ EOF int main() { return 0; } EOF ccversion=`cc -V | awk '/(Compaq|DEC) C/ {print $3}' | grep '^V'` - # the main point is the '-v' flag of 'cc'. - case "`cc -v -c try.c 2>&1`" in + # the main point is the '-v' flag of 'cc'. + case "`cc -v -c try.c 2>&1`" in */gemc_cc*) # we have the new DEC GEM CC _DEC_cc_style=new ;; @@ -127,7 +163,7 @@ EOF # but even then the lddlflags needs to stay -std1. # If it is not, we must use -std1 for both flags. # - case "`cc -c99 try.c 2>&1`" in + case "`cc -c99 try.c 2>&1`" in *"-c99: Unknown flag"*) _ccflags_strict_ansi="-std1" ;; @@ -152,7 +188,10 @@ EOF _lddlflags_strict_ansi="-std1" # -no_ansi_alias because Perl code is not that strict # (also gcc uses by default -fno-strict-aliasing). - _ccflags_strict_ansi="$_ccflags_strict_ansi -no_ansi_alias" + case "$unamer" in + *[1234].*) ;; + *5.*) _ccflags_strict_ansi="$_ccflags_strict_ansi -no_ansi_alias" ;; + esac # Cleanup. rm -f try.c try.o ;; @@ -167,9 +206,10 @@ ccflags="$ccflags $_ccflags_strict_ansi" # its moral equivalent, _XOPEN_SOURCE=500 (which would # define a lot of the required prototypes for us), because # the gcc-processed version of contains fatally -# conflicting prototypes for wait3(). +# conflicting prototypes for wait3(). The _SOCKADDR_LEN is +# needed to get struct sockaddr and struct sockaddr_in to align. case "$cc" in -*g++*) ccflags="$ccflags -D_XOPEN_SOURCE -D_OSF_SOURCE -D_AES_SOURCE -D_BSD -D_POSIX_C_SOURCE=199309L -D_POSIX_PII_SOCKET" ;; +*g++*) ccflags="$ccflags -D_XOPEN_SOURCE -D_OSF_SOURCE -D_AES_SOURCE -D_BSD -D_POSIX_C_SOURCE=199309L -D_POSIX_PII_SOCKET -D_SOCKADDR_LEN" ;; esac # for gcc the Configure knows about the -fpic: @@ -183,7 +223,7 @@ case "$optimize" in *) case "$_DEC_cc_style" in new) optimize='-O4' ;; old) optimize='-O2 -Olimit 3200' ;; - esac + esac ccflags="$ccflags -D_INTRINSICS" ;; esac @@ -250,7 +290,7 @@ esac # we want dynamic fp rounding mode, and we want ieee exception semantics case "$isgcc" in -gcc) ;; +gcc) ccflags="$ccflags -mfp-rounding-mode=d -mieee" ;; *) case "$_DEC_cc_style" in new) ccflags="$ccflags -fprm d -ieee" ;; esac @@ -289,47 +329,12 @@ libswanted="`echo $libswanted | sed -e 's/ ndbm / /'`" # the basic lddlflags used always lddlflags='-shared -expect_unresolved "*"' -# Intentional leading tab. - myosvers="`/usr/sbin/sizer -v 2>/dev/null || uname -r`" - -# Fancy compiler suites use optimising linker as well as compiler. -# -case "`uname -r`" in -*[123].*) # old loader - lddlflags="$lddlflags -O3" - ;; -*) if $test "X$optimize" = "X$undef"; then - lddlflags="$lddlflags -msym" - else - case "$myosvers" in - *4.0D*) - # QAR 56761: -O4 + .so may produce broken code, - # fixed in 4.0E or better. - ;; - *) - lddlflags="$lddlflags $optimize" - ;; - esac - # -msym: If using a sufficiently recent /sbin/loader, - # keep the module symbols with the modules. - lddlflags="$lddlflags -msym $_lddlflags_strict_ansi" - fi - ;; -esac -# Yes, the above loses if gcc does not use the system linker. -# If that happens, let me know about it. - -# Because there is no other handy way to recognize 3.X. -case "`uname -r`" in -*3.*) ccflags="$ccflags -DDEC_OSF1_3_X" ;; -esac - # If debugging or (old systems and doing shared) # then do not strip the lib, otherwise, strip. # As noted above the -DDEBUGGING is added automagically by Configure if -g. case "$optimize" in *-g*) ;; # left intentionally blank -*) case "`uname -r`" in +*) case "$unamer" in *[123].*) case "$useshrplib" in false|undef|'') lddlflags="$lddlflags -s" ;; @@ -337,8 +342,8 @@ case "$optimize" in ;; *) lddlflags="$lddlflags -s" ;; - esac - ;; + esac + ;; esac # @@ -370,7 +375,7 @@ esac # The off_t is already 8 bytes, so we do have largefileness. cat > UU/usethreads.cbu <<'EOCBU' -# This script UU/usethreads.cbu will get 'called-back' by Configure +# This script UU/usethreads.cbu will get 'called-back' by Configure # after it has prompted the user for whether to use threads. case "$usethreads" in $define|true|[yY]*) @@ -378,7 +383,7 @@ $define|true|[yY]*) # cannot be used to compile a threaded Perl. cat > pthread.c < -extern int foo; +extern int foo; EOF $cc -c pthread.c 2> pthread.err if egrep -q "unrecognized compiler|syntax error" pthread.err; then @@ -400,13 +405,13 @@ EOF gcc) ccflags="-D_REENTRANT $ccflags" ;; - *) case "`uname -r`" in + *) case "$unamer" in *[123].*) ccflags="-threads $ccflags" ;; *) ccflags="-pthread $ccflags" ;; esac ;; - esac - case "`uname -r`" in + esac + case "$unamer" in *[123].*) libswanted="$libswanted pthreads mach exc c_r" ;; *) libswanted="$libswanted pthread exc" ;; esac @@ -432,7 +437,7 @@ case "$usemallocwrap" in esac cat > UU/uselongdouble.cbu <<'EOCBU' -# This script UU/uselongdouble.cbu will get 'called-back' by Configure +# 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" in $define|true|[yY]*) @@ -502,7 +507,7 @@ do '') LD_LIBRARY_PATH=$p ;; *) LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$p ;; esac - fi + fi done case "$LD_LIBRARY_PATH" in "$old_LD_LIBRARY_PATH") ;; @@ -513,12 +518,33 @@ case "$LD_LIBRARY_PATH" in * ) export LD_LIBRARY_PATH ;; esac +# Enforce strict data. +case "$isgcc" in +gcc) ;; +*) # -trapuv poisons uninitialized stack with + # 0xfff58005fff58005 which is as a pointer a segmentation fault and + # as a floating point a signaling NaN. As integers/longs that causes + # no traps but at least it is not zero. + # -readonly_strings moves string constants into read-only section + # which hopefully means that modifying them leads into segmentation + # faults. + # + for i in -trapuv -readonly_strings + do + case "$ccflags" in + *$i*) ;; + *) ccflags="$ccflags $i" ;; + esac + done + ;; +esac + # # Unset temporary variables no more needed. # unset _DEC_cc_style - + # # History: # @@ -558,14 +584,14 @@ unset _DEC_cc_style # * Restructuring Spider's suggestions. # # * Older Digital UNIXes cannot handle -Olimit ... for $lddlflags. -# +# # * ld -s cannot be used in older Digital UNIXes when doing shared. # # # 21-Feb-1997 Spider Boardman # # * -hidden removed. -# +# # * -DSTANDARD_C removed. # # * -D_INTRINSICS added. (that -fast does not seem to buy much confirmed) @@ -631,7 +657,7 @@ unset _DEC_cc_style # # * now 'dl' is always removed from libswanted. Not only if # optimize is an empty string. -# +# # # 17-Jan-1997 Achim Bohnet # @@ -641,10 +667,10 @@ unset _DEC_cc_style # Because the dlopen, dlclose,... calls are in the # C library it not necessary at all to check for the # dl library. Therefore dl is removed from libswanted. -# +# # # 1-Jan-1997 Achim Bohnet -# +# # * Set -Olimit to 3200 because perl_yylex.c got too big # for the optimizer. #