source: trunk/third/perl/hints/hpux.sh @ 14545

Revision 14545, 13.2 KB checked in by ghudson, 24 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r14544, which included commits to RCS files with non-trunk default branches.
Line 
1#! /bin/sh
2
3# hints/hpux.sh
4# Perl Configure hints file for Hewlett-Packard's HP-UX 9.x and 10.x
5# (Hopefully, 7.x through 11.x.)
6#
7# This file is based on hints/hpux_9.sh, Perl Configure hints file for
8# Hewlett Packard HP-UX 9.x
9#
10# Use Configure -Dcc=gcc to use gcc.
11#
12# From: Jeff Okamoto <okamoto@corp.hp.com>
13# and
14# hints/hpux_10.sh, Perl Configure hints file for Hewlett Packard HP-UX 10.x
15# From: Giles Lean <giles@nemeton.com.au>
16# and
17# Use #define CPU_* instead of comments for >= 10.x.
18# Support PA1.2 under 10.x.
19# Distinguish between PA2.0, PA2.1, etc.
20# Distinguish between MC68020, MC68030, MC68040
21# Don't assume every OS != 10 is < 10, (e.g., 11).
22# From: Chuck Phillips <cdp@fc.hp.com>
23# HP-UX 10 pthreads hints: Matthew T Harden <mthard@mthard1.monsanto.com>
24# From: Dominic Dunlop <domo@computer.org>
25# Abort and offer advice if bundled (non-ANSI) C compiler selected
26
27# This version: March 8, 2000
28# Current maintainer: Jeff Okamoto <okamoto@corp.hp.com>
29
30#--------------------------------------------------------------------
31# Use Configure -Dcc=gcc to use gcc.
32# Use Configure -Dprefix=/usr/local to install in /usr/local.
33#
34# You may have dynamic loading problems if the environment variable
35# LDOPTS='-a archive'.  Under >= 10.x, you can instead LDOPTS='-a
36# archive_shared' to prefer archive libraries without requiring them.
37# Regardless of HPUX release, in the "libs" variable or the ext.libs
38# file, you can always give explicit path names to archive libraries
39# that may not exist on the target machine.  E.g., /usr/lib/libndbm.a
40# instead of -lndbm.  See also note below on ndbm.
41#
42# ALSO, bear in mind that gdbm and Berkely DB contain incompatible
43# replacements for ndbm (and dbm) routines.  If you want concurrent
44# access to ndbm files, you need to make sure libndbm is linked in
45# *before* gdbm and Berkely DB.  Lastly, remember to check the
46# "ext.libs" file which is *probably* messing up the order.  Often,
47# you can replace ext.libs with an empty file to fix the problem.
48#
49# If you get a message about "too much defining", as may happen
50# in HPUX < 10, you might have to append a single entry to your
51# ccflags: '-Wp,-H256000'
52# NOTE: This is a single entry (-W takes the argument 'p,-H256000').
53#--------------------------------------------------------------------
54
55# Turn on the _HPUX_SOURCE flag to get many of the HP add-ons
56# regardless of compiler.  For the HP ANSI C compiler, you may also
57# want to include +e to enable "long long" and "long double".
58#
59# HP compiler flags to include (if at all) *both* as part of ccflags
60# and cc itself so Configure finds (and builds) everything
61# consistently:
62#       -Aa -D_HPUX_SOURCE +e
63#
64# Lastly, you may want to include the "-z" HP linker flag so that
65# reading from a NULL pointer causes a SEGV.
66ccflags="$ccflags -D_HPUX_SOURCE"
67
68# Check if you're using the bundled C compiler.  This compiler doesn't support
69# ANSI C (the -Aa flag) and so is not suitable for perl 5.5 and later.
70case "$cc" in
71'') if cc $ccflags -Aa 2>&1 | $contains 'option' >/dev/null
72    then
73             cat <<'EOM' >&4
74
75The bundled C compiler is not ANSI-compliant, and so cannot be used to
76build perl.  Please see the file README.hpux for advice on alternative
77compilers.
78
79Cannot continue, aborting.
80EOM
81        exit 1
82    else
83        ccflags="$ccflags -Aa"  # The add-on compiler supports ANSI C
84        # cppstdin and cpprun need the -Aa option if you use the unbundled
85        # ANSI C compiler (*not* the bundled K&R compiler or gcc)
86        # [XXX this should be set automatically by Configure, but isn't yet.]
87        # [XXX This is reported not to work.  You may have to edit config.sh.
88        #  After running Configure, set cpprun and cppstdin in config.sh,
89        #  run "Configure -S" and then "make".]
90        cpprun="${cc:-cc} -E -Aa"
91        cppstdin="$cpprun"
92        cppminus='-'
93        cpplast='-'
94    fi
95    case "$optimize" in
96        # For HP's ANSI C compiler, up to "+O3" is safe for everything
97        # except shared libraries (PIC code).  Max safe for PIC is "+O2".
98        # Setting both causes innocuous warnings.
99        '')     optimize='-O'
100                #optimize='+O3'
101                #cccdlflags='+z +O2'
102                ;;
103    esac
104    cc=cc
105    ;;
106esac
107
108case `$cc -v 2>&1`"" in
109*gcc*) ccisgcc="$define" ;;
110*) ccisgcc='' ;;
111esac
112
113# Determine the architecture type of this system.
114# Keep leading tab below -- Configure Black Magic -- RAM, 03/02/97
115        xxOsRevMajor=`uname -r | sed -e 's/^[^0-9]*//' | cut -d. -f1`;
116        #xxOsRevMinor=`uname -r | sed -e 's/^[^0-9]*//' | cut -d. -f2`;
117if [ "$xxOsRevMajor" -ge 10 ]
118then
119        # This system is running >= 10.x
120
121        # Tested on 10.01 PA1.x and 10.20 PA[12].x.  Idea: Scan
122        # /usr/include/sys/unistd.h for matches with "#define CPU_* `getconf
123        # CPU_VERSION`" to determine CPU type.  Note the part following
124        # "CPU_" is used, *NOT* the comment.
125        #
126        # ASSUMPTIONS: Numbers will continue to be defined in hex -- and in
127        # /usr/include/sys/unistd.h -- and the CPU_* #defines will be kept
128        # up to date with new CPU/OS releases.
129        xxcpu=`getconf CPU_VERSION`; # Get the number.
130        xxcpu=`printf '0x%x' $xxcpu`; # convert to hex
131        archname=`sed -n -e "s/^#[ \t]*define[ \t]*CPU_//p" /usr/include/sys/unistd.h |
132            sed -n -e "s/[ \t]*$xxcpu[ \t].*//p" |
133            sed -e s/_RISC/-RISC/ -e s/HP_// -e s/_/./`;
134else
135        # This system is running <= 9.x
136        # Tested on 9.0[57] PA and [78].0 MC680[23]0.  Idea: After removing
137        # MC6888[12] from context string, use first CPU identifier.
138        #
139        # ASSUMPTION: Only CPU identifiers contain no lowercase letters.
140        archname=`getcontext | tr ' ' '\012' | grep -v '[a-z]' | grep -v MC688 |
141            sed -e 's/HP-//' -e 1q`;
142        selecttype='int *'
143fi
144
145# Do this right now instead of the delayed callback unit approach.
146case "$use64bitall" in
147$define|true|[yY]*) use64bitint="$define" ;;
148esac
149case "$use64bitint" in
150$define|true|[yY]*)
151    if [ "$xxOsRevMajor" -lt 11 ]; then
152                cat <<EOM >&4
153
15464-bit compilation is not supported on HP-UX $xxOsRevMajor.
155You need at least HP-UX 11.0.
156Cannot continue, aborting.
157
158EOM
159                exit 1
160    fi
161
162    # Without the 64-bit libc we cannot do much.
163    libc='/lib/pa20_64/libc.sl'
164    if [ ! -f "$libc" ]; then
165                cat <<EOM >&4
166
167*** You do not seem to have the 64-bit libraries in /lib/pa20_64.
168*** Most importantly, I cannot find the $libc.
169*** Cannot continue, aborting.
170
171EOM
172                exit 1
173    fi
174
175    ccflags="$ccflags +DD64"
176    ldflags="$ldflags +DD64"
177    test -d /lib/pa20_64 && loclibpth="$loclibpth /lib/pa20_64"
178    libscheck='case "`/usr/bin/file $xxx`" in
179*LP64*|*PA-RISC2.0*) ;;
180*) xxx=/no/64-bit$xxx ;;
181esac'
182    if test -n "$ccisgcc" -o -n "$gccversion"; then
183        ld="$cc"
184    else       
185        ld=/usr/bin/ld
186    fi
187    ar=/usr/bin/ar
188    full_ar=$ar
189
190    if test -z "$ccisgcc" -a -z "$gccversion"; then
191       # The strict ANSI mode (-Aa) doesn't like the LL suffixes.
192       ccflags=`echo " $ccflags "|sed 's@ -Aa @ @g'`
193       case "$ccflags" in
194       *-Ae*) ;;
195       *) ccflags="$ccflags -Ae" ;;
196       esac
197    fi
198
199    set `echo " $libswanted " | sed -e 's@ dl @ @'`
200    libswanted="$*"
201
202    ;;
203esac
204
205case "$ccisgcc" in
206# Even if you use gcc, prefer the HP math library over the GNU one.
207"$define") test -d /lib/pa1.1 && ccflags="$ccflags -L/lib/pa1.1" ;;
208esac
209   
210case "$ccisgcc" in
211"$define") ;;
212*)  case "`getconf KERNEL_BITS 2>/dev/null`" in
213    *64*) ldflags="$ldflags -Wl,+vnocompatwarnings" ;;
214    esac
215    ;;
216esac
217
218# Remove bad libraries that will cause problems
219# (This doesn't remove libraries that don't actually exist)
220# -lld is unneeded (and I can't figure out what it's used for anyway)
221# -ldbm is obsolete and should not be used
222# -lBSD contains BSD-style duplicates of SVR4 routines that cause confusion
223# -lPW is obsolete and should not be used
224# The libraries crypt, malloc, ndir, and net are empty.
225# Although -lndbm should be included, it will make perl blow up if you should
226# copy the binary to a system without libndbm.sl.  See ccdlflags below.
227set `echo " $libswanted " | sed -e 's@ ld @ @' -e 's@ dbm @ @' -e 's@ BSD @ @' -e 's@ PW @ @'`
228libswanted="$*"
229
230# By setting the deferred flag below, this means that if you run perl
231# on a system that does not have the required shared library that you
232# linked it with, it will die when you try to access a symbol in the
233# (missing) shared library.  If you would rather know at perl startup
234# time that you are missing an important shared library, switch the
235# comments so that immediate, rather than deferred loading is
236# performed.  Even with immediate loading, you can postpone errors for
237# undefined (or multiply defined) routines until actual access by
238# adding the "nonfatal" option.
239# ccdlflags="-Wl,-E -Wl,-B,immediate $ccdlflags"
240# ccdlflags="-Wl,-E -Wl,-B,immediate,-B,nonfatal $ccdlflags"
241ccdlflags="-Wl,-E -Wl,-B,deferred $ccdlflags"
242
243case "$usemymalloc" in
244'') usemymalloc='y' ;;
245esac
246
247alignbytes=8
248# For native nm, you need "-p" to produce BSD format output.
249nm_opt='-p'
250
251# When HP-UX runs a script with "#!", it sets argv[0] to the script name.
252toke_cflags='ccflags="$ccflags -DARG_ZERO_IS_SCRIPT"'
253
254# If your compile complains about FLT_MIN, uncomment the next line
255# POSIX_cflags='ccflags="$ccflags -DFLT_MIN=1.17549435E-38"'
256
257# Comment this out if you don't want to follow the SVR4 filesystem layout
258# that HP-UX 10.0 uses
259case "$prefix" in
260'') prefix='/opt/perl5' ;;
261esac
262
263# HP-UX can't do setuid emulation offered by Configure
264case "$d_dosuid" in
265'') d_dosuid="$undef" ;;
266esac
267
268# HP-UX 11 groks also LD_LIBRARY_PATH but SHLIB_PATH
269# is recommended for compatibility.
270case "$ldlibpthname" in
271'') ldlibpthname=SHLIB_PATH ;;
272esac
273
274# HP-UX 10.20 and gcc 2.8.1 break UINT32_MAX.
275case "$ccisgcc" in
276"$define") ccflags="$ccflags -DUINT32_MAX_BROKEN" ;;
277esac
278
279cat > UU/cc.cbu <<'EOSH'
280# XXX This script UU/cc.cbu will get 'called-back' by Configure after it
281# XXX has prompted the user for the C compiler to use.
282# Get gcc to share its secrets.
283echo 'main() { return 0; }' > try.c
284        # Indent to avoid propagation to config.sh
285        verbose=`${cc:-cc} -v -o try try.c 2>&1`
286if echo "$verbose" | grep '^Reading specs from' >/dev/null 2>&1; then
287        # Using gcc.
288        : nothing to see here, move on.
289else
290        # Using cc.
291        ar=${ar:-ar}
292        case "`$ar -V 2>&1`" in
293        *GNU*)
294            if test -x /usr/bin/ar; then
295                cat <<END >&2
296
297*** You are using HP cc(1) but GNU ar(1).  This might lead into trouble
298*** later on, I'm switching to HP ar to play safe.
299
300END
301                ar=/usr/bin/ar
302            fi
303        ;;
304    esac
305fi
306
307EOSH
308
309# Date: Fri, 6 Sep 96 23:15:31 CDT
310# From: "Daniel S. Lewart" <d-lewart@uiuc.edu>
311# I looked through the gcc.info and found this:
312#   * GNU CC compiled code sometimes emits warnings from the HP-UX
313#     assembler of the form:
314#          (warning) Use of GR3 when frame >= 8192 may cause conflict.
315#     These warnings are harmless and can be safely ignored.
316
317cat > UU/usethreads.cbu <<'EOCBU'
318# This script UU/usethreads.cbu will get 'called-back' by Configure
319# after it has prompted the user for whether to use threads.
320case "$usethreads" in
321$define|true|[yY]*)
322        if [ "$xxOsRevMajor" -lt 10 ]; then
323            cat <<EOM >&4
324HP-UX $xxOsRevMajor cannot support POSIX threads.
325Consider upgrading to at least HP-UX 11.
326Cannot continue, aborting.
327EOM
328            exit 1
329        fi
330        case "$xxOsRevMajor" in
331        10)
332            # Under 10.X, a threaded perl can be built, but it needs
333            # libcma and OLD_PTHREADS_API.  Also <pthread.h> needs to
334            # be #included before any other includes (in perl.h)
335            if [ ! -f /usr/include/pthread.h -o ! -f /usr/lib/libcma.sl ]; then
336                cat <<EOM >&4
337In HP-UX 10.X for POSIX threads you need both of the files
338/usr/include/pthread.h and /usr/lib/libcma.sl.
339Either you must install the CMA package or you must upgrade to HP-UX 11.
340Cannot continue, aborting.
341EOM
342                exit 1
343            fi
344
345            # HP-UX 10.X uses the old pthreads API
346            case "$d_oldpthreads" in
347            '') d_oldpthreads="$define" ;;
348            esac
349
350            # include libcma before all the others
351            libswanted="cma $libswanted"
352
353            # tell perl.h to include <pthread.h> before other include files
354            ccflags="$ccflags -DPTHREAD_H_FIRST"
355
356            # CMA redefines select to cma_select, and cma_select expects int *
357            # instead of fd_set * (just like 9.X)
358            selecttype='int *'
359            ;;
360        11 | 12) # 12 may want upping the _POSIX_C_SOURCE datestamp...
361            ccflags=" -D_POSIX_C_SOURCE=199506L $ccflags"
362            set `echo X "$libswanted "| sed -e 's/ c / pthread c /'`
363            shift
364            libswanted="$*"
365            ;;
366        esac
367        usemymalloc='n'
368        ;;
369esac
370EOCBU
371
372case "$uselargefiles-$ccisgcc" in
373"$define-$define"|'-define')
374    cat <<EOM >&4
375
376*** I'm ignoring large files for this build because
377*** I don't know how to do use large files in HP-UX using gcc.
378
379EOM
380    uselargefiles="$undef"
381    ;;
382esac
383
384cat > UU/uselargefiles.cbu <<'EOCBU'
385# This script UU/uselargefiles.cbu will get 'called-back' by Configure
386# after it has prompted the user for whether to use large files.
387case "$uselargefiles" in
388''|$define|true|[yY]*)
389        # there are largefile flags available via getconf(1)
390        # but we cheat for now.
391        ccflags="$ccflags -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
392
393        if test -z "$ccisgcc" -a -z "$gccversion"; then
394           # The strict ANSI mode (-Aa) doesn't like large files.
395           ccflags=`echo " $ccflags "|sed 's@ -Aa @ @g'`
396           case "$ccflags" in
397           *-Ae*) ;;
398           *) ccflags="$ccflags -Ae" ;;
399           esac
400        fi
401
402        ;;
403esac
404EOCBU
405
406# keep that leading tab.
407        ccisgcc=''
408
Note: See TracBrowser for help on using the repository browser.