bd1e268f09b9a1b2ac9c48d7d1bf447be4f2a78e
[p5sagit/p5-mst-13.2.git] / hints / hpux.sh
1 #!/usr/bin/sh
2
3 ### SYSTEM ARCHITECTURE
4
5 # Determine the architecture type of this system.
6 # Keep leading tab below -- Configure Black Magic -- RAM, 03/02/97
7         xxOsRevMajor=`uname -r | sed -e 's/^[^0-9]*//' | cut -d. -f1`;
8 if [ "$xxOsRevMajor" -ge 10 ]; then
9     # This system is running >= 10.x
10
11     # Tested on 10.01 PA1.x and 10.20 PA[12].x.
12     # Idea: Scan /usr/include/sys/unistd.h for matches with
13     # "#define CPU_* `getconf # CPU_VERSION`" to determine CPU type.
14     # Note the text following "CPU_" is used, *NOT* the comment.
15     #
16     # ASSUMPTIONS: Numbers will continue to be defined in hex -- and in
17     # /usr/include/sys/unistd.h -- and the CPU_* #defines will be kept
18     # up to date with new CPU/OS releases.
19     xxcpu=`getconf CPU_VERSION`; # Get the number.
20     xxcpu=`printf '0x%x' $xxcpu`; # convert to hex
21     archname=`sed -n -e "s/^#[ \t]*define[ \t]*CPU_//p" /usr/include/sys/unistd.h |
22         sed -n -e "s/[ \t]*$xxcpu[ \t].*//p" |
23         sed -e s/_RISC/-RISC/ -e s/HP_// -e s/_/./`;
24 else
25     # This system is running <= 9.x
26     # Tested on 9.0[57] PA and [78].0 MC680[23]0.  Idea: After removing
27     # MC6888[12] from context string, use first CPU identifier.
28     #
29     # ASSUMPTION: Only CPU identifiers contain no lowercase letters.
30     archname=`getcontext | tr ' ' '\012' | grep -v '[a-z]' | grep -v MC688 |
31         sed -e 's/HP-//' -e 1q`;
32     selecttype='int *'
33     fi
34
35 echo "Archname is $archname"
36
37
38 ### HP-UX OS specific behaviour
39
40 # Initial setting of some flags
41 ccflags="$ccflags -D_HPUX_SOURCE"
42 ldflags="$ldflags -D_HPUX_SOURCE"
43
44 # When HP-UX runs a script with "#!", it sets argv[0] to the script name.
45 toke_cflags='ccflags="$ccflags -DARG_ZERO_IS_SCRIPT"'
46
47 cc=${cc:-cc}
48
49 ar=/usr/bin/ar  # Yes, truly override.  We do not want the GNU ar.
50 full_ar=$ar     # I repeat, no GNU ar.  arrr.
51
52 case `$cc -v 2>&1`"" in
53     *gcc*)  ccisgcc="$define" ;;
54     *)      ccisgcc=''
55             ccversion=`which cc | xargs what | awk '/Compiler/{print $2}'`
56             case "`getconf KERNEL_BITS 2>/dev/null`" in
57                 *64*) ldflags="$ldflags -Wl,+vnocompatwarnings" ;;
58                 esac
59             case "$d_casti32" in
60                 "") d_casti32='undef' ;;
61                 esac
62             ;;
63     esac
64
65 set `echo X "$libswanted "| sed -e 's/ BSD//' -e 's/ PW//'`
66 shift
67 libswanted="$*"
68
69
70 ### 64 BITNESS
71
72 case "$use64bitall" in
73     $define|true|[yY]*) use64bitint="$define" ;;
74     esac
75
76 case "$usemorebits" in
77     $define|true|[yY]*) use64bitint="$define"; uselongdouble="$define" ;;
78     esac
79
80 case "$uselongdouble" in
81     $define|true|[yY]*)
82         cat <<EOM >&4
83
84 *** long doubles are not (yet) supported on HP-UX (any version)
85 *** Until it does, we cannot continue, aborting.
86 EOM
87         exit 1 ;;
88     esac
89
90 case "$use64bitint" in
91     $define|true|[Yy])
92
93         if [ "$xxOsRevMajor" -lt 11 ]; then
94             cat <<EOM >&4
95
96 *** 64-bit compilation is not supported on HP-UX $xxOsRevMajor.
97 *** You need at least HP-UX 11.0.
98 *** Cannot continue, aborting.
99 EOM
100             exit 1
101             fi
102
103         # Set libc and the library paths
104         case "$archname" in
105             PA-RISC*)
106                 loclibpth="$loclibpth /lib/pa20_64"
107                 libc='/lib/pa20_64/libc.sl' ;;
108             IA64*) 
109                 loclibpth="$loclibpth /usr/lib/hpux64"
110                 libc='/usr/lib/hpux64/libc.so' ;;
111             esac
112         if [ ! -f "$libc" ]; then
113             cat <<EOM >&4
114
115 *** You do not seem to have the 64-bit libc.
116 *** I cannot find the file $libc.
117 *** Cannot continue, aborting.
118 EOM
119             exit 1
120             fi
121
122         ccflags="$ccflags +DD64"
123         ldflags="$ldflags +DD64"
124
125         # Reset the library checker to make sure libraries
126         # are the right type
127         libscheck='case "`/usr/bin/file $xxx`" in
128                        *ELF-64*|*LP64*|*PA-RISC2.0*) ;;
129                        *) xxx=/no/64-bit$xxx ;;
130                        esac'
131
132         ;;
133
134     *)  # Not in 64-bit mode
135
136         case "$archname" in
137             PA-RISC*)
138                 libc='/lib/libc.sl' ;;
139             IA64*) 
140                 loclibpth="$loclibpth /usr/lib/hpux32"
141                 libc='/usr/lib/hpux32/libc.so' ;;
142             esac
143         ;;
144     esac
145
146
147 ### COMPILER SPECIFICS
148
149 case "$ccisgcc" in
150     $define|true|[Yy])
151         
152         case "$optimize" in
153             "") optimize="-g -O" ;;
154             esac
155         ld="$cc"
156         cccdlflags='-fPIC'
157         lddlflags='-shared'
158         ;;
159
160     *)  # HP's compiler cannot combine -g and -O
161         case "$optimize" in
162             "") optimize="-O" ;;
163             esac
164         ld=/usr/bin/ld
165         cccdlflags='+Z'
166         lddlflags='-b'
167         ;;
168     esac
169
170
171 ## LARGEFILES
172
173 case "$uselargefiles-$ccisgcc" in
174     "$define-$define"|'-define') 
175         cat <<EOM >&4
176
177 *** I'm ignoring large files for this build because
178 *** I don't know how to do use large files in HP-UX using gcc.
179
180 EOM
181         uselargefiles="$undef"
182         ;;
183     esac
184
185 cat >UU/uselargefiles.cbu <<'EOCBU'
186 # This script UU/uselargefiles.cbu will get 'called-back' by Configure 
187 # after it has prompted the user for whether to use large files.
188 case "$uselargefiles" in
189     ""|$define|true|[yY]*)
190         # there are largefile flags available via getconf(1)
191         # but we cheat for now.  (Keep that in the left margin.)
192 ccflags_uselargefiles="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
193
194         ccflags="$ccflags $ccflags_uselargefiles"
195
196         if test -z "$ccisgcc" -a -z "$gccversion"; then
197             # The strict ANSI mode (-Aa) doesn't like large files.
198             ccflags=`echo " $ccflags "|sed 's@ -Aa @ @g'`
199             case "$ccflags" in
200                 *-Ae*) ;;
201                 *)     ccflags="$ccflags -Ae" ;;
202                 esac
203             fi
204         ;;
205     esac
206 EOCBU
207
208 # THREADING
209
210 # This script UU/usethreads.cbu will get 'called-back' by Configure 
211 # after it has prompted the user for whether to use threads.
212 cat >UU/usethreads.cbu <<'EOCBU'
213 case "$usethreads" in
214     $define|true|[yY]*)
215         if [ "$xxOsRevMajor" -lt 10 ]; then
216             cat <<EOM >&4
217
218 HP-UX $xxOsRevMajor cannot support POSIX threads.
219 Consider upgrading to at least HP-UX 11.
220 Cannot continue, aborting.
221 EOM
222             exit 1
223             fi
224
225         if [ "$xxOsRevMajor" -eq 10 ]; then
226             # Under 10.X, a threaded perl can be built
227             if [ -f /usr/include/pthread.h ]; then
228                 if [ -f /usr/lib/libcma.sl ]; then
229                     # DCE (from Core OS CD) is installed
230
231                     # It needs # libcma and OLD_PTHREADS_API. Also
232                     # <pthread.h> needs to be #included before any
233                     # other includes (in perl.h)
234
235                     # HP-UX 10.X uses the old pthreads API
236                     d_oldpthreads="$define"
237
238                     # include libcma before all the others
239                     libswanted="cma $libswanted"
240
241                     # tell perl.h to include <pthread.h> before other
242                     # include files
243                     ccflags="$ccflags -DPTHREAD_H_FIRST"
244
245                     # CMA redefines select to cma_select, and cma_select
246                     # expects int * instead of fd_set * (just like 9.X)
247                     selecttype='int *'
248
249                 elif [ -f /usr/lib/libpthread.sl ]; then
250                     # PTH package is installed
251                     libswanted="pthread $libswanted"
252                 else
253                     libswanted="no_threads_available"
254                     fi
255             else
256                 libswanted="no_threads_available"
257                 fi
258
259             if [ $libswanted = "no_threads_available" ]; then
260                 cat <<EOM >&4
261
262 In HP-UX 10.X for POSIX threads you need both of the files
263 /usr/include/pthread.h and either /usr/lib/libcma.sl or /usr/lib/libpthread.sl.
264 Either you must upgrade to HP-UX 11 or install a posix thread library:
265
266     DCE-CoreTools from HP-UX 10.20 Hardware Extensions 3.0 CD (B3920-13941)
267
268 or
269
270     PTH package from e.g. http://hpux.tn.tudelft.nl/hppd/hpux/alpha.html
271
272 Cannot continue, aborting.
273 EOM
274                 exit 1
275                 fi
276         else
277             # 12 may want upping the _POSIX_C_SOURCE datestamp...
278             ccflags=" -D_POSIX_C_SOURCE=199506L $ccflags"
279             set `echo X "$libswanted "| sed -e 's/ c / pthread c /'`
280             shift
281             libswanted="$*"
282             fi
283
284         usemymalloc='n'
285         ;;
286     esac
287 EOCBU