1# hints/dec_osf.sh 2 3# * If you want to debug perl or want to send a 4# stack trace for inclusion into an bug report, call 5# Configure with the additional argument -Doptimize=-g2 6# or uncomment this assignment to "optimize": 7# 8#optimize=-g2 9# 10# If you want both to optimise and debug with the DEC cc 11# you must have -g3, e.g. "-O4 -g3", and (re)run Configure. 12# 13# * gcc can always have both -g and optimisation on. 14# 15# * debugging optimised code, no matter what compiler 16# one is using, can be surprising and confusing because of 17# the optimisation tricks like code motion, code removal, 18# loop unrolling, and inlining. The source code and the 19# executable code simply do not agree any more while in 20# mid-execution, the optimiser only cares about the results. 21# 22# * Configure will automatically add the often quoted 23# -DDEBUGGING for you if the -g is specified. 24# 25# * There is even more optimisation available in the new 26# (GEM) DEC cc: -O5 and -fast. "man cc" will tell more about them. 27# The jury is still out whether either or neither help for Perl 28# and how much. Based on very quick testing, -fast boosts 29# raw data copy by about 5-15% (-fast brings in, among other 30# things, inlined, ahem, fast memcpy()), while on the other 31# hand searching things (index, m//, s///), seems to get slower. 32# Your mileage will vary. 33# 34# * The -std is needed because the following compiled 35# without the -std and linked with -lm 36# 37# #include <math.h> 38# #include <stdio.h> 39# int main(){short x=10,y=sqrt(x);printf("%d\n",y);} 40# 41# will in Digital UNIX 3.* and 4.0b print 0 -- and in Digital 42# UNIX 4.0{,a} dump core: Floating point exception in the printf(), 43# the y has become a signaling NaN. 44# 45# * Compilation warnings like: 46# 47# "Undefined the ANSI standard macro ..." 48# 49# can be ignored, at least while compiling the POSIX extension 50# and especially if using the sfio (the latter is not a standard 51# part of Perl, never mind if it says little to you). 52# 53 54# If using the DEC compiler we must find out the DEC compiler style: 55# the style changed between Digital UNIX (aka DEC OSF/1) 3 and 56# Digital UNIX 4. The old compiler was originally from Ultrix and 57# the MIPS company, the new compiler is originally from the VAX world 58# and it is called GEM. Many of the options we are going to use depend 59# on the compiler style. 60 61cc=${cc:-cc} 62 63case "`$cc -v 2>&1 | grep cc`" in 64*gcc*) isgcc=gcc ;; 65esac 66 67# do NOT, I repeat, *NOT* take away the leading tabs 68# Configure Black Magic (TM) 69 # reset 70 _DEC_cc_style= 71case "$isgcc" in 72gcc) if [ "X$gccversion" = "X" ]; then 73 # Done too late in Configure if hinted 74 gccversion=`$cc --version | sed 's/.*(GCC) *//'` 75 fi 76 set $gccversion 77 if test "$1" -lt 2 -o \( "$1" -eq 2 -a \( "$2" -lt 95 -o \( "$2" -eq 95 -a "$3" -lt 3 \) \) \); then 78 cat >&4 <<EOF 79 80*** Your cc seems to be gcc and its version ($gccversion) seems to be 81*** less than 2.95.3. This is not a good idea since old versions of gcc 82*** are known to produce buggy code when compiling Perl (and no doubt for 83*** other programs, too). 84*** 85*** Therefore, I strongly suggest upgrading your gcc. (Why don't you use 86*** the vendor cc is also a good question. It comes with the operating 87*** system and produces good code.) 88 89Cannot continue, aborting. 90 91EOF 92 exit 1 93 fi 94 if test "$1" -eq 2 -a "$2" -eq 95 -a "$3" -le 2; then 95 cat >&4 <<EOF 96 97*** Note that as of gcc 2.95.2 (19991024) and Perl 5.6.0 (March 2000) 98*** if the said Perl is compiled with the said gcc the lib/sdbm test 99*** may dump core (meaning that the SDBM_File extension is unusable). 100*** As this core dump never happens with the vendor cc, this is most 101*** probably a lingering bug in gcc. Therefore unless you have a better 102*** gcc installation you are still better off using the vendor cc. 103 104Since you explicitly chose gcc, I assume that you know what are doing. 105 106EOF 107 fi 108 ;; 109*) # compile something small: taint.c is fine for this. 110 ccversion=`cc -V | awk '/(Compaq|DEC) C/ {print $3}' | grep '^V'` 111 # the main point is the '-v' flag of 'cc'. 112 case "`cc -v -I. -c taint.c -o taint$$.o 2>&1`" in 113 */gemc_cc*) # we have the new DEC GEM CC 114 _DEC_cc_style=new 115 ;; 116 *) # we have the old MIPS CC 117 _DEC_cc_style=old 118 ;; 119 esac 120 # cleanup 121 rm -f taint$$.o 122 ;; 123esac 124 125# be nauseatingly ANSI 126case "$isgcc" in 127gcc) ccflags="$ccflags -ansi" 128 ;; 129*) ccflags="$ccflags -std" 130 ;; 131esac 132 133# for gcc the Configure knows about the -fpic: 134# position-independent code for dynamic loading 135 136# we want optimisation 137 138case "$optimize" in 139'') case "$isgcc" in 140 gcc) optimize='-O3' ;; 141 *) case "$_DEC_cc_style" in 142 new) optimize='-O4' ;; 143 old) optimize='-O2 -Olimit 3200' ;; 144 esac 145 ccflags="$ccflags -D_INTRINSICS" 146 ;; 147 esac 148 ;; 149esac 150 151# we want dynamic fp rounding mode, and we want ieee exception semantics 152case "$isgcc" in 153gcc) ;; 154*) case "$_DEC_cc_style" in 155 new) ccflags="$ccflags -fprm d -ieee" ;; 156 esac 157 ;; 158esac 159 160# Make glibpth agree with the compiler suite. Note that /shlib 161# is not here. That's on purpose. Even though that's where libc 162# really lives from V4.0 on, the linker (and /sbin/loader) won't 163# look there by default. The sharable /sbin utilities were all 164# built with "-Wl,-rpath,/shlib" to get around that. This makes 165# no attempt to figure out the additional location(s) searched by 166# gcc, since not all versions of gcc are easily coerced into 167# revealing that information. 168glibpth="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc" 169glibpth="$glibpth /usr/lib /usr/local/lib /var/shlib" 170 171# dlopen() is in libc 172libswanted="`echo $libswanted | sed -e 's/ dl / /'`" 173 174# libPW contains nothing useful for perl 175libswanted="`echo $libswanted | sed -e 's/ PW / /'`" 176 177# libnet contains nothing useful for perl here, and doesn't work 178libswanted="`echo $libswanted | sed -e 's/ net / /'`" 179 180# libbsd contains nothing used by perl that is not already in libc 181libswanted="`echo $libswanted | sed -e 's/ bsd / /'`" 182 183# libc need not be separately listed 184libswanted="`echo $libswanted | sed -e 's/ c / /'`" 185 186# ndbm is already in libc 187libswanted="`echo $libswanted | sed -e 's/ ndbm / /'`" 188 189# the basic lddlflags used always 190lddlflags='-shared -expect_unresolved "*"' 191 192# Fancy compiler suites use optimising linker as well as compiler. 193# <spider@Orb.Nashua.NH.US> 194case "`uname -r`" in 195*[123].*) # old loader 196 lddlflags="$lddlflags -O3" 197 ;; 198*) if $test "X$optimize" = "X$undef"; then 199 lddlflags="$lddlflags -msym" 200 else 201 case "`/usr/sbin/sizer -v`" in 202 *4.0D*) 203 # QAR 56761: -O4 + .so may produce broken code, 204 # fixed in 4.0E or better. 205 ;; 206 *) 207 lddlflags="$lddlflags $optimize" 208 ;; 209 esac 210 # -msym: If using a sufficiently recent /sbin/loader, 211 # keep the module symbols with the modules. 212 lddlflags="$lddlflags -msym -std" 213 fi 214 ;; 215esac 216# Yes, the above loses if gcc does not use the system linker. 217# If that happens, let me know about it. <jhi@iki.fi> 218 219 220# If debugging or (old systems and doing shared) 221# then do not strip the lib, otherwise, strip. 222# As noted above the -DDEBUGGING is added automagically by Configure if -g. 223case "$optimize" in 224 *-g*) ;; # left intentionally blank 225*) case "`uname -r`" in 226 *[123].*) 227 case "$useshrplib" in 228 false|undef|'') lddlflags="$lddlflags -s" ;; 229 esac 230 ;; 231 *) lddlflags="$lddlflags -s" 232 ;; 233 esac 234 ;; 235esac 236 237# 238# Make embedding in things like INN and Apache more memory friendly. 239# Keep it overridable on the Configure command line, though, so that 240# "-Uuseshrplib" prevents this default. 241# 242 243case "$_DEC_cc_style.$useshrplib" in 244 new.) useshrplib="$define" ;; 245esac 246 247# The EFF_ONLY_OK from <sys/access.h> is present but dysfunctional for 248# [RWX]_OK as of Digital UNIX 4.0[A-D]?. If and when this gets fixed, 249# please adjust this appropriately. See also pp_sys.c just before the 250# emulate_eaccess(). 251 252# Fixed in V5.0A. 253case "`/usr/sbin/sizer -v`" in 254*5.0[A-Z]*|*5.[1-9]*|*[6-9].[0-9]*) 255 : ok 256 ;; 257*) 258# V5.0 or previous 259pp_sys_cflags='ccflags="$ccflags -DNO_EFF_ONLY_OK"' 260 ;; 261esac 262 263# The off_t is already 8 bytes, so we do have largefileness. 264 265cat > UU/usethreads.cbu <<'EOCBU' 266# This script UU/usethreads.cbu will get 'called-back' by Configure 267# after it has prompted the user for whether to use threads. 268case "$usethreads" in 269$define|true|[yY]*) 270 # Threads interfaces changed with V4.0. 271 case "$isgcc" in 272 gcc) ccflags="-D_REENTRANT $ccflags" ;; 273 *) case "`uname -r`" in 274 *[123].*) ccflags="-threads $ccflags" ;; 275 *) ccflags="-pthread $ccflags" ;; 276 esac 277 ;; 278 esac 279 case "`uname -r`" in 280 *[123].*) libswanted="$libswanted pthreads mach exc c_r" ;; 281 *) libswanted="$libswanted pthread exc" ;; 282 esac 283 284 case "$usemymalloc" in 285 '') 286 usemymalloc='n' 287 ;; 288 esac 289 # These symbols are renamed in <time.h> so 290 # that the Configure hasproto doesn't see them. 291 d_asctime_r_proto="$define" 292 d_ctime_r_proto="$define" 293 d_gmtime_r_proto="$define" 294 d_localtime_r_proto="$define" 295 ;; 296esac 297EOCBU 298 299cat > UU/uselongdouble.cbu <<'EOCBU' 300# This script UU/uselongdouble.cbu will get 'called-back' by Configure 301# after it has prompted the user for whether to use long doubles. 302case "$uselongdouble" in 303$define|true|[yY]*) 304 case "`/usr/sbin/sizer -v`" in 305 *[1-4].0*) cat >&4 <<EOF 306 307*** 308*** Sorry, you cannot use long doubles in pre-V5.0 releases of Tru64. 309*** 310 311Cannot continue, aborting. 312 313EOF 314 exit 1 315 ;; 316 *) 317 # Test whether libc's been fixed yet. 318 cat >try.c <<\TRY 319#include <stdio.h> 320int main(int argc, char **argv) 321{ 322 unsigned long uvmax = ~0UL; 323 long double ld = uvmax + 0.0L; 324 char buf1[30], buf2[30]; 325 326 (void) sprintf(buf1, "%lu", uvmax); 327 (void) sprintf(buf2, "%.0Lf", ld); 328 return strcmp(buf1, buf2) != 0; 329} 330TRY 331 # Don't bother trying to work with Configure's idea of 332 # cc and the various flags. This might not work as-is 333 # with gcc -- but we're testing libc, not the compiler. 334 if cc -o try -std try.c && ./try 335 then 336 : ok 337 else 338 cat <<\UGLY >&4 339! 340Warning! Your libc has not yet been patched so that its "%Lf" format for 341printing long doubles shows all the significant digits. You will get errors 342in the t/op/numconvert test because of this. (The data is still good 343internally, and the "%e" format of printf() or sprintf() in perl will still 344produce valid results.) See README.tru64 for additional details. 345 346Continuing anyway. 347! 348UGLY 349 fi 350 $rm -f try try.c 351 esac 352 ;; 353esac 354EOCBU 355 356case "`/usr/sbin/sizer -v`" in 357*[1-4].0*) d_modfl=undef ;; # must wait till 5.0 358esac 359 360# Keep those leading tabs. 361 needusrshlib='' 362 old_LD_LIBRARY_PATH=$LD_LIBRARY_PATH 363for p in $loclibpth 364do 365 if test -n "`ls $p/libdb.so* 2>/dev/null`"; then 366 needusrshlib=yes 367 fi 368 if test -d $p; then 369 echo "Appending $p to LD_LIBRARY_PATH." >& 4 370 case "$LD_LIBRARY_PATH" in 371 '') LD_LIBRARY_PATH=$p ;; 372 *) LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$p ;; 373 esac 374 fi 375done 376case "$LD_LIBRARY_PATH" in 377"$old_LD_LIBRARY_PATH") ;; 378*) echo "LD_LIBRARY_PATH is now $LD_LIBRARY_PATH." >& 4 ;; 379esac 380# This is evil but I can't think of a nice workaround: 381# the /usr/shlib/libdb.so needs to be seen first, 382# or running Configure will fail. 383if test -n "$needusrshlib"; then 384 echo "Prepending /usr/shlib to loclibpth." >& 4 385 loclibpth="/usr/shlib $loclibpth" 386 echo "loclibpth is now $loclibpth." >& 4 387fi 388 389# 390# Unset temporary variables no more needed. 391# 392 393unset _DEC_cc_style 394 395# 396# History: 397# 398# perl5.005_51: 399# 400# September-1998 Jarkko Hietaniemi <jhi@iki.fi> 401# 402# * Added the -DNO_EFF_ONLY_OK flag ('use filetest;' support). 403# 404# perl5.004_57: 405# 406# 19-Dec-1997 Spider Boardman <spider@Orb.Nashua.NH.US> 407# 408# * Newer Digital UNIX compilers enforce signaling for NaN without 409# -ieee. Added -fprm d at the same time since it's friendlier for 410# embedding. 411# 412# * Fixed the library search path to match cc, ld, and /sbin/loader. 413# 414# * Default to building -Duseshrplib on newer systems. -Uuseshrplib 415# still overrides. 416# 417# * Fix -pthread additions for useshrplib. ld has no -pthread option. 418# 419# 420# perl5.004_04: 421# 422# 19-Sep-1997 Spider Boardman <spider@Orb.Nashua.NH.US> 423# 424# * libnet on Digital UNIX is for JAVA, not for sockets. 425# 426# 427# perl5.003_28: 428# 429# 22-Feb-1997 Jarkko Hietaniemi <jhi@iki.fi> 430# 431# * Restructuring Spider's suggestions. 432# 433# * Older Digital UNIXes cannot handle -Olimit ... for $lddlflags. 434# 435# * ld -s cannot be used in older Digital UNIXes when doing shared. 436# 437# 438# 21-Feb-1997 Spider Boardman <spider@Orb.Nashua.NH.US> 439# 440# * -hidden removed. 441# 442# * -DSTANDARD_C removed. 443# 444# * -D_INTRINSICS added. (that -fast does not seem to buy much confirmed) 445# 446# * odbm not in libc, only ndbm. Therefore dbm back to $libswanted. 447# 448# * -msym for the newer runtime loaders. 449# 450# * $optimize also in $lddflags. 451# 452# 453# perl5.003_27: 454# 455# 18-Feb-1997 Jarkko Hietaniemi <jhi@iki.fi> 456# 457# * unset _DEC_cc_style and more commentary on -std. 458# 459# 460# perl5.003_26: 461# 462# 15-Feb-1997 Jarkko Hietaniemi <jhi@iki.fi> 463# 464# * -std and -ansi. 465# 466# 467# perl5.003_24: 468# 469# 30-Jan-1997 Jarkko Hietaniemi <jhi@iki.fi> 470# 471# * Fixing the note on -DDEBUGGING. 472# 473# * Note on -O5 -fast. 474# 475# 476# perl5.003_23: 477# 478# 26-Jan-1997 Jarkko Hietaniemi <jhi@iki.fi> 479# 480# * Notes on how to do both optimisation and debugging. 481# 482# 483# 25-Jan-1997 Jarkko Hietaniemi <jhi@iki.fi> 484# 485# * Remove unneeded libraries from $libswanted: PW, bsd, c, dbm 486# 487# * Restructure the $lddlflags build. 488# 489# * $optimize based on which compiler we have. 490# 491# 492# perl5.003_22: 493# 494# 23-Jan-1997 Achim Bohnet <ach@rosat.mpe-garching.mpg.de> 495# 496# * Added comments 'how to create a debugging version of perl' 497# 498# * Fixed logic of this script to prevent stripping of shared 499# objects by the loader (see ld man page for -s) is debugging 500# is set via the -g switch. 501# 502# 503# 21-Jan-1997 Achim Bohnet <ach@rosat.mpe-garching.mpg.de> 504# 505# * now 'dl' is always removed from libswanted. Not only if 506# optimize is an empty string. 507# 508# 509# 17-Jan-1997 Achim Bohnet <ach@rosat.mpe-garching.mpg.de> 510# 511# * Removed 'dl' from libswanted: When the FreePort binary 512# translator for Sun binaries is installed Configure concludes 513# that it should use libdl.x.yz.fpx.so :-( 514# Because the dlopen, dlclose,... calls are in the 515# C library it not necessary at all to check for the 516# dl library. Therefore dl is removed from libswanted. 517# 518# 519# 1-Jan-1997 Achim Bohnet <ach@rosat.mpe-garching.mpg.de> 520# 521# * Set -Olimit to 3200 because perl_yylex.c got too big 522# for the optimizer. 523# 524