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 63# do NOT, I repeat, *NOT* take away the leading tabs 64# Configure Black Magic (TM) 65 # reset 66 _DEC_cc_style= 67case "`$cc -v 2>&1 | grep cc`" in 68*gcc*) _gcc_version=`$cc --version 2>&1 | tr . ' '` 69 set $_gcc_version 70 if test "$1" -lt 2 -o \( "$1" -eq 2 -a \( "$2" -lt 95 -o \( "$2" -eq 95 -a "$3" -lt 2 \) \) \); then 71 cat >&4 <<EOF 72 73*** Your cc seems to be gcc and its version ($_gcc_version) seems to be 74*** less than 2.95.2. This is not a good idea since old versions of gcc 75*** are known to produce buggy code when compiling Perl (and no doubt for 76*** other programs, too). 77*** 78*** Therefore, I strongly suggest upgrading your gcc. (Why don't you use 79*** the vendor cc is also a good question. It comes with the operating 80*** system and produces good code.) 81 82Cannot continue, aborting. 83 84EOF 85 exit 1 86 fi 87 if test "$1" -eq 2 -a "$2" -eq 95 -a "$3" -le 2; then 88 cat >&4 <<EOF 89 90*** Note that as of gcc 2.95.2 (19991024) and Perl 5.6.0 (March 2000) 91*** if the said Perl is compiled with the said gcc the lib/sdbm test 92*** may dump core (meaning that the SDBM_File extension is unusable). 93*** As this core dump never happens with the vendor cc, this is most 94*** probably a lingering bug in gcc. Therefore unless you have a better 95*** gcc installation you are still better off using the vendor cc. 96 97Since you explicitly chose gcc, I assume that you know what are doing. 98 99EOF 100 fi 101 ;; 102*) # compile something small: taint.c is fine for this. 103 ccversion=`cc -V | awk '/(Compaq|DEC) C/ {print $3}'` 104 # the main point is the '-v' flag of 'cc'. 105 case "`cc -v -I. -c taint.c -o taint$$.o 2>&1`" in 106 */gemc_cc*) # we have the new DEC GEM CC 107 _DEC_cc_style=new 108 ;; 109 *) # we have the old MIPS CC 110 _DEC_cc_style=old 111 ;; 112 esac 113 # cleanup 114 rm -f taint$$.o 115 ;; 116esac 117 118# be nauseatingly ANSI 119case "`$cc -v 2>&1 | grep gcc`" in 120*gcc*) ccflags="$ccflags -ansi" 121 ;; 122*) ccflags="$ccflags -std" 123 ;; 124esac 125 126# for gcc the Configure knows about the -fpic: 127# position-independent code for dynamic loading 128 129# we want optimisation 130 131case "$optimize" in 132'') case "`$cc -v 2>&1 | grep gcc`" in 133 *gcc*) 134 optimize='-O3' ;; 135 *) case "$_DEC_cc_style" in 136 new) optimize='-O4' 137 ccflags="$ccflags -fprm d -ieee" 138 ;; 139 old) optimize='-O2 -Olimit 3200' ;; 140 esac 141 ccflags="$ccflags -D_INTRINSICS" 142 ;; 143 esac 144 ;; 145esac 146 147# Make glibpth agree with the compiler suite. Note that /shlib 148# is not here. That's on purpose. Even though that's where libc 149# really lives from V4.0 on, the linker (and /sbin/loader) won't 150# look there by default. The sharable /sbin utilities were all 151# built with "-Wl,-rpath,/shlib" to get around that. This makes 152# no attempt to figure out the additional location(s) searched by 153# gcc, since not all versions of gcc are easily coerced into 154# revealing that information. 155glibpth="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc" 156glibpth="$glibpth /usr/lib /usr/local/lib /var/shlib" 157 158# dlopen() is in libc 159libswanted="`echo $libswanted | sed -e 's/ dl / /'`" 160 161# libPW contains nothing useful for perl 162libswanted="`echo $libswanted | sed -e 's/ PW / /'`" 163 164# libnet contains nothing useful for perl here, and doesn't work 165libswanted="`echo $libswanted | sed -e 's/ net / /'`" 166 167# libbsd contains nothing used by perl that is not already in libc 168libswanted="`echo $libswanted | sed -e 's/ bsd / /'`" 169 170# libc need not be separately listed 171libswanted="`echo $libswanted | sed -e 's/ c / /'`" 172 173# ndbm is already in libc 174libswanted="`echo $libswanted | sed -e 's/ ndbm / /'`" 175 176# the basic lddlflags used always 177lddlflags='-shared -expect_unresolved "*"' 178 179# Fancy compiler suites use optimising linker as well as compiler. 180# <spider@Orb.Nashua.NH.US> 181case "`uname -r`" in 182*[123].*) # old loader 183 lddlflags="$lddlflags -O3" 184 ;; 185*) if $test "X$optimize" = "X$undef"; then 186 lddlflags="$lddlflags -msym" 187 else 188 case "`/usr/sbin/sizer -v`" in 189 *4.0D*) 190 # QAR 56761: -O4 + .so may produce broken code, 191 # fixed in 4.0E or better. 192 ;; 193 *) 194 lddlflags="$lddlflags $optimize" 195 ;; 196 esac 197 # -msym: If using a sufficiently recent /sbin/loader, 198 # keep the module symbols with the modules. 199 lddlflags="$lddlflags -msym -std" 200 fi 201 ;; 202esac 203# Yes, the above loses if gcc does not use the system linker. 204# If that happens, let me know about it. <jhi@iki.fi> 205 206 207# If debugging or (old systems and doing shared) 208# then do not strip the lib, otherwise, strip. 209# As noted above the -DDEBUGGING is added automagically by Configure if -g. 210case "$optimize" in 211 *-g*) ;; # left intentionally blank 212*) case "`uname -r`" in 213 *[123].*) 214 case "$useshrplib" in 215 false|undef|'') lddlflags="$lddlflags -s" ;; 216 esac 217 ;; 218 *) lddlflags="$lddlflags -s" 219 ;; 220 esac 221 ;; 222esac 223 224# 225# Make embedding in things like INN and Apache more memory friendly. 226# Keep it overridable on the Configure command line, though, so that 227# "-Uuseshrplib" prevents this default. 228# 229 230case "$_DEC_cc_style.$useshrplib" in 231 new.) useshrplib="$define" ;; 232esac 233 234# The EFF_ONLY_OK from <sys/access.h> is present but dysfunctional for 235# [RWX]_OK as of Digital UNIX 4.0[A-D]?. If and when this gets fixed, 236# please adjust this appropriately. See also pp_sys.c just before the 237# emulate_eaccess(). 238 239# Fixed in V5.0A. 240case "`/usr/sbin/sizer -v`" in 241*5.0[A-Z]*|*5.[1-9]*|*[6-9].[0-9]*) 242 : ok 243 ;; 244*) 245# V5.0 or previous 246pp_sys_cflags='ccflags="$ccflags -DNO_EFF_ONLY_OK"' 247 ;; 248esac 249 250# The off_t is already 8 bytes, so we do have largefileness. 251 252cat > UU/usethreads.cbu <<'EOCBU' 253# This script UU/usethreads.cbu will get 'called-back' by Configure 254# after it has prompted the user for whether to use threads. 255case "$usethreads" in 256$define|true|[yY]*) 257 # Threads interfaces changed with V4.0. 258 case "`$cc -v 2>&1 | grep gcc`" in 259 *gcc*)ccflags="-D_REENTRANT $ccflags" ;; 260 *) case "`uname -r`" in 261 *[123].*) ccflags="-threads $ccflags" ;; 262 *) ccflags="-pthread $ccflags" ;; 263 esac 264 ;; 265 esac 266 case "`uname -r`" in 267 *[123].*) libswanted="$libswanted pthreads mach exc c_r" ;; 268 *) libswanted="$libswanted pthread exc" ;; 269 esac 270 271 case "$usemymalloc" in 272 '') 273 usemymalloc='n' 274 ;; 275 esac 276 ;; 277esac 278EOCBU 279 280cat > UU/uselongdouble.cbu <<'EOCBU' 281# This script UU/uselongdouble.cbu will get 'called-back' by Configure 282# after it has prompted the user for whether to use long doubles. 283case "$uselongdouble" in 284$define|true|[yY]*) d_Gconvert='sprintf((b),"%.*Lg",(n),(x))' ;; 285esac 286EOCBU 287 288# 289# Unset temporary variables no more needed. 290# 291 292unset _DEC_cc_style 293 294# 295# History: 296# 297# perl5.005_51: 298# 299# September-1998 Jarkko Hietaniemi <jhi@iki.fi> 300# 301# * Added the -DNO_EFF_ONLY_OK flag ('use filetest;' support). 302# 303# perl5.004_57: 304# 305# 19-Dec-1997 Spider Boardman <spider@Orb.Nashua.NH.US> 306# 307# * Newer Digital UNIX compilers enforce signaling for NaN without 308# -ieee. Added -fprm d at the same time since it's friendlier for 309# embedding. 310# 311# * Fixed the library search path to match cc, ld, and /sbin/loader. 312# 313# * Default to building -Duseshrplib on newer systems. -Uuseshrplib 314# still overrides. 315# 316# * Fix -pthread additions for useshrplib. ld has no -pthread option. 317# 318# 319# perl5.004_04: 320# 321# 19-Sep-1997 Spider Boardman <spider@Orb.Nashua.NH.US> 322# 323# * libnet on Digital UNIX is for JAVA, not for sockets. 324# 325# 326# perl5.003_28: 327# 328# 22-Feb-1997 Jarkko Hietaniemi <jhi@iki.fi> 329# 330# * Restructuring Spider's suggestions. 331# 332# * Older Digital UNIXes cannot handle -Olimit ... for $lddlflags. 333# 334# * ld -s cannot be used in older Digital UNIXes when doing shared. 335# 336# 337# 21-Feb-1997 Spider Boardman <spider@Orb.Nashua.NH.US> 338# 339# * -hidden removed. 340# 341# * -DSTANDARD_C removed. 342# 343# * -D_INTRINSICS added. (that -fast does not seem to buy much confirmed) 344# 345# * odbm not in libc, only ndbm. Therefore dbm back to $libswanted. 346# 347# * -msym for the newer runtime loaders. 348# 349# * $optimize also in $lddflags. 350# 351# 352# perl5.003_27: 353# 354# 18-Feb-1997 Jarkko Hietaniemi <jhi@iki.fi> 355# 356# * unset _DEC_cc_style and more commentary on -std. 357# 358# 359# perl5.003_26: 360# 361# 15-Feb-1997 Jarkko Hietaniemi <jhi@iki.fi> 362# 363# * -std and -ansi. 364# 365# 366# perl5.003_24: 367# 368# 30-Jan-1997 Jarkko Hietaniemi <jhi@iki.fi> 369# 370# * Fixing the note on -DDEBUGGING. 371# 372# * Note on -O5 -fast. 373# 374# 375# perl5.003_23: 376# 377# 26-Jan-1997 Jarkko Hietaniemi <jhi@iki.fi> 378# 379# * Notes on how to do both optimisation and debugging. 380# 381# 382# 25-Jan-1997 Jarkko Hietaniemi <jhi@iki.fi> 383# 384# * Remove unneeded libraries from $libswanted: PW, bsd, c, dbm 385# 386# * Restructure the $lddlflags build. 387# 388# * $optimize based on which compiler we have. 389# 390# 391# perl5.003_22: 392# 393# 23-Jan-1997 Achim Bohnet <ach@rosat.mpe-garching.mpg.de> 394# 395# * Added comments 'how to create a debugging version of perl' 396# 397# * Fixed logic of this script to prevent stripping of shared 398# objects by the loader (see ld man page for -s) is debugging 399# is set via the -g switch. 400# 401# 402# 21-Jan-1997 Achim Bohnet <ach@rosat.mpe-garching.mpg.de> 403# 404# * now 'dl' is always removed from libswanted. Not only if 405# optimize is an empty string. 406# 407# 408# 17-Jan-1997 Achim Bohnet <ach@rosat.mpe-garching.mpg.de> 409# 410# * Removed 'dl' from libswanted: When the FreePort binary 411# translator for Sun binaries is installed Configure concludes 412# that it should use libdl.x.yz.fpx.so :-( 413# Because the dlopen, dlclose,... calls are in the 414# C library it not necessary at all to check for the 415# dl library. Therefore dl is removed from libswanted. 416# 417# 418# 1-Jan-1997 Achim Bohnet <ach@rosat.mpe-garching.mpg.de> 419# 420# * Set -Olimit to 3200 because perl_yylex.c got too big 421# for the optimizer. 422# 423