ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/staticperl/perl/hints/dec_osf.sh
Revision: 1.1
Committed: Thu Jun 30 14:27:07 2005 UTC (21 years, 4 months ago) by root
Content type: application/x-sh
Branch: MAIN
CVS Tags: PERL-5-8-7, HEAD
Branch point for: PERL
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.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    
61     cc=${cc:-cc}
62    
63     case "`$cc -v 2>&1 | grep cc`" in
64     *gcc*) isgcc=gcc ;;
65     esac
66    
67     # do NOT, I repeat, *NOT* take away the leading tabs
68     # Configure Black Magic (TM)
69     # reset
70     _DEC_cc_style=
71     case "$isgcc" in
72     gcc) 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    
89     Cannot continue, aborting.
90    
91     EOF
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    
104     Since you explicitly chose gcc, I assume that you know what are doing.
105    
106     EOF
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     ;;
123     esac
124    
125     # be nauseatingly ANSI
126     case "$isgcc" in
127     gcc) ccflags="$ccflags -ansi"
128     ;;
129     *) ccflags="$ccflags -std"
130     ;;
131     esac
132    
133     # for gcc the Configure knows about the -fpic:
134     # position-independent code for dynamic loading
135    
136     # we want optimisation
137    
138     case "$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     ;;
149     esac
150    
151     ## Optimization limits
152     case "$isgcc" in
153     gcc) # gcc 3.2.1 wants a lot of memory for -O3'ing toke.c
154     cat >try.c <<EOF
155     #include <sys/resource.h>
156    
157     int main ()
158     {
159     struct rlimit rl;
160     int i = getrlimit (RLIMIT_DATA, &rl);
161     printf ("%d\n", rl.rlim_cur / (1024 * 1024));
162     } /* main */
163     EOF
164     $cc -o try $ccflags $ldflags try.c
165     maxdsiz=`./try`
166     rm -f try try.c core
167     if [ $maxdsiz -lt 256 ]; then
168     # less than 256 MB is probably not enough to optimize toke.c with gcc -O3
169     cat <<EOM >&4
170    
171     Your process datasize is limited to $maxdsiz MB, which is (sadly) not
172     always enough to fully optimize some source code files of Perl,
173     at least 256 MB seems to be necessary as of Perl 5.8.0. I'll try to
174     use a lower optimization level for those parts. You could either try
175     using your shell's ulimit/limit/limits command to raise your datasize
176     (assuming the system-wide hard resource limits allow you to go higher),
177     or if you can't go higher and if you are a sysadmin, and you *do* want
178     the full optimization, you can tune the 'max_per_proc_data_size'
179     kernel parameter: see man sysconfigtab, and man sys_attrs_proc.
180    
181     EOM
182     toke_cflags='optimize=-O2'
183     fi
184     ;;
185     esac
186    
187     # The patch 23787
188     # http://public.activestate.com/cgi-bin/perlbrowse?patch=23787
189     # broke things for gcc (at least gcc 3.3) so that many of the pack()
190     # checksum tests for formats L, j, J, especially when combined
191     # with the < and > specifiers, started to fail if compiled with plain -O3.
192     case "$isgcc" in
193     gcc)
194     pp_pack_cflags='optimize="-O3 -fno-cse-skip-blocks"'
195     ;;
196     esac
197    
198     # we want dynamic fp rounding mode, and we want ieee exception semantics
199     case "$isgcc" in
200     gcc) ;;
201     *) case "$_DEC_cc_style" in
202     new) ccflags="$ccflags -fprm d -ieee" ;;
203     esac
204     ;;
205     esac
206    
207     # Make glibpth agree with the compiler suite. Note that /shlib
208     # is not here. That's on purpose. Even though that's where libc
209     # really lives from V4.0 on, the linker (and /sbin/loader) won't
210     # look there by default. The sharable /sbin utilities were all
211     # built with "-Wl,-rpath,/shlib" to get around that. This makes
212     # no attempt to figure out the additional location(s) searched by
213     # gcc, since not all versions of gcc are easily coerced into
214     # revealing that information.
215     glibpth="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc"
216     glibpth="$glibpth /usr/lib /usr/local/lib /var/shlib"
217    
218     # dlopen() is in libc
219     libswanted="`echo $libswanted | sed -e 's/ dl / /'`"
220    
221     # libPW contains nothing useful for perl
222     libswanted="`echo $libswanted | sed -e 's/ PW / /'`"
223    
224     # libnet contains nothing useful for perl here, and doesn't work
225     libswanted="`echo $libswanted | sed -e 's/ net / /'`"
226    
227     # libbsd contains nothing used by perl that is not already in libc
228     libswanted="`echo $libswanted | sed -e 's/ bsd / /'`"
229    
230     # libc need not be separately listed
231     libswanted="`echo $libswanted | sed -e 's/ c / /'`"
232    
233     # ndbm is already in libc
234     libswanted="`echo $libswanted | sed -e 's/ ndbm / /'`"
235    
236     # the basic lddlflags used always
237     lddlflags='-shared -expect_unresolved "*"'
238    
239     # Intentional leading tab.
240     myosvers="`/usr/sbin/sizer -v 2>/dev/null || uname -r`"
241    
242     # Fancy compiler suites use optimising linker as well as compiler.
243     # <spider@Orb.Nashua.NH.US>
244     case "`uname -r`" in
245     *[123].*) # old loader
246     lddlflags="$lddlflags -O3"
247     ;;
248     *) if $test "X$optimize" = "X$undef"; then
249     lddlflags="$lddlflags -msym"
250     else
251     case "$myosvers" in
252     *4.0D*)
253     # QAR 56761: -O4 + .so may produce broken code,
254     # fixed in 4.0E or better.
255     ;;
256     *)
257     lddlflags="$lddlflags $optimize"
258     ;;
259     esac
260     # -msym: If using a sufficiently recent /sbin/loader,
261     # keep the module symbols with the modules.
262     lddlflags="$lddlflags -msym -std"
263     fi
264     ;;
265     esac
266     # Yes, the above loses if gcc does not use the system linker.
267     # If that happens, let me know about it. <jhi@iki.fi>
268    
269     # Because there is no other handy way to recognize 3.X.
270     case "`uname -r`" in
271     *3.*) ccflags="$ccflags -DDEC_OSF1_3_X" ;;
272     esac
273    
274     # If debugging or (old systems and doing shared)
275     # then do not strip the lib, otherwise, strip.
276     # As noted above the -DDEBUGGING is added automagically by Configure if -g.
277     case "$optimize" in
278     *-g*) ;; # left intentionally blank
279     *) case "`uname -r`" in
280     *[123].*)
281     case "$useshrplib" in
282     false|undef|'') lddlflags="$lddlflags -s" ;;
283     esac
284     ;;
285     *) lddlflags="$lddlflags -s"
286     ;;
287     esac
288     ;;
289     esac
290    
291     #
292     # Make embedding in things like INN and Apache more memory friendly.
293     # Keep it overridable on the Configure command line, though, so that
294     # "-Uuseshrplib" prevents this default.
295     #
296    
297     case "$_DEC_cc_style.$useshrplib" in
298     new.) useshrplib="$define" ;;
299     esac
300    
301     # The EFF_ONLY_OK from <sys/access.h> is present but dysfunctional for
302     # [RWX]_OK as of Digital UNIX 4.0[A-D]?. If and when this gets fixed,
303     # please adjust this appropriately. See also pp_sys.c just before the
304     # emulate_eaccess().
305    
306     # Fixed in V5.0A.
307     case "$myosvers" in
308     *5.0[A-Z]*|*5.[1-9]*|*[6-9].[0-9]*)
309     : ok
310     ;;
311     *)
312     # V5.0 or previous
313     pp_sys_cflags='ccflags="$ccflags -DNO_EFF_ONLY_OK"'
314     ;;
315     esac
316    
317     # The off_t is already 8 bytes, so we do have largefileness.
318    
319     cat > UU/usethreads.cbu <<'EOCBU'
320     # This script UU/usethreads.cbu will get 'called-back' by Configure
321     # after it has prompted the user for whether to use threads.
322     case "$usethreads" in
323     $define|true|[yY]*)
324     # In Tru64 V5 (at least V5.1A, V5.1B) gcc (at least 3.2.2)
325     # cannot be used to compile a threaded Perl.
326     cat > pthread.c <<EOF
327     #include <pthread.h>
328     extern int foo;
329     EOF
330     $cc -c pthread.c 2> pthread.err
331     if grep -q "unrecognized compiler" pthread.err; then
332     cat >&4 <<EOF
333     ***
334     *** I'm sorry but your C compiler ($cc) cannot be used to
335     *** compile Perl with threads. The system C compiler should work.
336     ***
337    
338     Cannot continue, aborting.
339    
340     EOF
341     rm -f pthread.*
342     exit 1
343     fi
344     rm -f pthread.*
345     # Threads interfaces changed with V4.0.
346     case "$isgcc" in
347     gcc)
348     ccflags="-D_REENTRANT $ccflags"
349     ;;
350     *) case "`uname -r`" in
351     *[123].*) ccflags="-threads $ccflags" ;;
352     *) ccflags="-pthread $ccflags" ;;
353     esac
354     ;;
355     esac
356     case "`uname -r`" in
357     *[123].*) libswanted="$libswanted pthreads mach exc c_r" ;;
358     *) libswanted="$libswanted pthread exc" ;;
359     esac
360    
361     case "$usemymalloc" in
362     '')
363     usemymalloc='n'
364     ;;
365     esac
366     # These symbols are renamed in <time.h> so
367     # that the Configure hasproto doesn't see them.
368     d_asctime_r_proto="$define"
369     d_ctime_r_proto="$define"
370     d_gmtime_r_proto="$define"
371     d_localtime_r_proto="$define"
372     ;;
373     esac
374     EOCBU
375    
376     # malloc wrap works
377     case "$usemallocwrap" in
378     '') usemallocwrap='define' ;;
379     esac
380    
381     cat > UU/uselongdouble.cbu <<'EOCBU'
382     # This script UU/uselongdouble.cbu will get 'called-back' by Configure
383     # after it has prompted the user for whether to use long doubles.
384     case "$uselongdouble" in
385     $define|true|[yY]*)
386     case "$myosvers" in
387     *[1-4].0*) cat >&4 <<EOF
388    
389     ***
390     *** Sorry, you cannot use long doubles in pre-V5.0 releases of Tru64.
391     ***
392    
393     Cannot continue, aborting.
394    
395     EOF
396     exit 1
397     ;;
398     *)
399     # Test whether libc's been fixed yet.
400     cat >try.c <<\TRY
401     #include <stdio.h>
402     int main(int argc, char **argv)
403     {
404     unsigned long uvmax = ~0UL;
405     long double ld = uvmax + 0.0L;
406     char buf1[30], buf2[30];
407    
408     (void) sprintf(buf1, "%lu", uvmax);
409     (void) sprintf(buf2, "%.0Lf", ld);
410     return strcmp(buf1, buf2) != 0;
411     }
412     TRY
413     # Don't bother trying to work with Configure's idea of
414     # cc and the various flags. This might not work as-is
415     # with gcc -- but we're testing libc, not the compiler.
416     if cc -o try -std try.c && ./try
417     then
418     : ok
419     else
420     cat <<\UGLY >&4
421     !
422     Warning! Your libc has not yet been patched so that its "%Lf" format for
423     printing long doubles shows all the significant digits. You will get errors
424     in the t/op/numconvert test because of this. (The data is still good
425     internally, and the "%e" format of printf() or sprintf() in perl will still
426     produce valid results.) See README.tru64 for additional details.
427    
428     Continuing anyway.
429     !
430     UGLY
431     fi
432     $rm -f try try.c
433     esac
434     ;;
435     esac
436     EOCBU
437    
438     case "$myosvers" in
439     *[1-4].0*) d_modfl=undef ;; # must wait till 5.0
440     esac
441    
442     # Keep that leading tab.
443     old_LD_LIBRARY_PATH=$LD_LIBRARY_PATH
444     for p in $loclibpth
445     do
446     if test -d $p; then
447     echo "Appending $p to LD_LIBRARY_PATH." >& 4
448     case "$LD_LIBRARY_PATH" in
449     '') LD_LIBRARY_PATH=$p ;;
450     *) LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$p ;;
451     esac
452     fi
453     done
454     case "$LD_LIBRARY_PATH" in
455     "$old_LD_LIBRARY_PATH") ;;
456     *) echo "LD_LIBRARY_PATH is now $LD_LIBRARY_PATH." >& 4 ;;
457     esac
458     case "$LD_LIBRARY_PATH" in
459     '') ;;
460     * ) export LD_LIBRARY_PATH ;;
461     esac
462    
463     #
464     # Unset temporary variables no more needed.
465     #
466    
467     unset _DEC_cc_style
468    
469     #
470     # History:
471     #
472     # perl5.005_51:
473     #
474     # September-1998 Jarkko Hietaniemi <jhi@iki.fi>
475     #
476     # * Added the -DNO_EFF_ONLY_OK flag ('use filetest;' support).
477     #
478     # perl5.004_57:
479     #
480     # 19-Dec-1997 Spider Boardman <spider@Orb.Nashua.NH.US>
481     #
482     # * Newer Digital UNIX compilers enforce signaling for NaN without
483     # -ieee. Added -fprm d at the same time since it's friendlier for
484     # embedding.
485     #
486     # * Fixed the library search path to match cc, ld, and /sbin/loader.
487     #
488     # * Default to building -Duseshrplib on newer systems. -Uuseshrplib
489     # still overrides.
490     #
491     # * Fix -pthread additions for useshrplib. ld has no -pthread option.
492     #
493     #
494     # perl5.004_04:
495     #
496     # 19-Sep-1997 Spider Boardman <spider@Orb.Nashua.NH.US>
497     #
498     # * libnet on Digital UNIX is for JAVA, not for sockets.
499     #
500     #
501     # perl5.003_28:
502     #
503     # 22-Feb-1997 Jarkko Hietaniemi <jhi@iki.fi>
504     #
505     # * Restructuring Spider's suggestions.
506     #
507     # * Older Digital UNIXes cannot handle -Olimit ... for $lddlflags.
508     #
509     # * ld -s cannot be used in older Digital UNIXes when doing shared.
510     #
511     #
512     # 21-Feb-1997 Spider Boardman <spider@Orb.Nashua.NH.US>
513     #
514     # * -hidden removed.
515     #
516     # * -DSTANDARD_C removed.
517     #
518     # * -D_INTRINSICS added. (that -fast does not seem to buy much confirmed)
519     #
520     # * odbm not in libc, only ndbm. Therefore dbm back to $libswanted.
521     #
522     # * -msym for the newer runtime loaders.
523     #
524     # * $optimize also in $lddflags.
525     #
526     #
527     # perl5.003_27:
528     #
529     # 18-Feb-1997 Jarkko Hietaniemi <jhi@iki.fi>
530     #
531     # * unset _DEC_cc_style and more commentary on -std.
532     #
533     #
534     # perl5.003_26:
535     #
536     # 15-Feb-1997 Jarkko Hietaniemi <jhi@iki.fi>
537     #
538     # * -std and -ansi.
539     #
540     #
541     # perl5.003_24:
542     #
543     # 30-Jan-1997 Jarkko Hietaniemi <jhi@iki.fi>
544     #
545     # * Fixing the note on -DDEBUGGING.
546     #
547     # * Note on -O5 -fast.
548     #
549     #
550     # perl5.003_23:
551     #
552     # 26-Jan-1997 Jarkko Hietaniemi <jhi@iki.fi>
553     #
554     # * Notes on how to do both optimisation and debugging.
555     #
556     #
557     # 25-Jan-1997 Jarkko Hietaniemi <jhi@iki.fi>
558     #
559     # * Remove unneeded libraries from $libswanted: PW, bsd, c, dbm
560     #
561     # * Restructure the $lddlflags build.
562     #
563     # * $optimize based on which compiler we have.
564     #
565     #
566     # perl5.003_22:
567     #
568     # 23-Jan-1997 Achim Bohnet <ach@rosat.mpe-garching.mpg.de>
569     #
570     # * Added comments 'how to create a debugging version of perl'
571     #
572     # * Fixed logic of this script to prevent stripping of shared
573     # objects by the loader (see ld man page for -s) is debugging
574     # is set via the -g switch.
575     #
576     #
577     # 21-Jan-1997 Achim Bohnet <ach@rosat.mpe-garching.mpg.de>
578     #
579     # * now 'dl' is always removed from libswanted. Not only if
580     # optimize is an empty string.
581     #
582     #
583     # 17-Jan-1997 Achim Bohnet <ach@rosat.mpe-garching.mpg.de>
584     #
585     # * Removed 'dl' from libswanted: When the FreePort binary
586     # translator for Sun binaries is installed Configure concludes
587     # that it should use libdl.x.yz.fpx.so :-(
588     # Because the dlopen, dlclose,... calls are in the
589     # C library it not necessary at all to check for the
590     # dl library. Therefore dl is removed from libswanted.
591     #
592     #
593     # 1-Jan-1997 Achim Bohnet <ach@rosat.mpe-garching.mpg.de>
594     #
595     # * Set -Olimit to 3200 because perl_yylex.c got too big
596     # for the optimizer.
597     #