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

Revision 14545, 11.3 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# hints/aix.sh
2# AIX 3.x.x hints thanks to Wayne Scott <wscott@ichips.intel.com>
3# AIX 4.1 hints thanks to Christopher Chan-Nui <channui@austin.ibm.com>.
4# AIX 4.1 pthreading by Christopher Chan-Nui <channui@austin.ibm.com> and
5#         Jarkko Hietaniemi <jhi@iki.fi>.
6# AIX 4.3.x LP64 build by Steven Hirsch <hirschs@btv.ibm.com>
7# Merged on Mon Feb  6 10:22:35 EST 1995 by
8#   Andy Dougherty  <doughera@lafcol.lafayette.edu>
9
10#
11# Contact dfavor@corridor.com for any of the following:
12#
13#    - AIX 43x and above support
14#    - gcc + threads support
15#    - socks support
16#
17# Apr 99 changes:
18#
19#    - use nm in AIX 43x and above
20#    - gcc + threads now builds
21#    [(added support for socks) Jul 99 SOCKS support rewritten]
22#
23# Notes:
24#
25#    - shared libperl support is tricky. if ever libperl.a ends up
26#      in /usr/local/lib/* it can override any subsequent builds of
27#      that same perl release. to make sure you know where the shared
28#      libperl.a is coming from do a 'dump -Hv perl' and check all the
29#      library search paths in the loader header.
30#
31#      it would be nice to warn the user if a libperl.a exists that is
32#      going to override the current build, but that would be complex.
33#
34#      better yet, a solid fix for this situation should be developed.
35#
36
37# Configure finds setrgid and setruid, but they're useless.  The man
38# pages state:
39#    setrgid: The EPERM error code is always returned.
40#    setruid: The EPERM error code is always returned. Processes cannot
41#             reset only their real user IDs.
42d_setrgid='undef'
43d_setruid='undef'
44
45alignbytes=8
46
47case "$usemymalloc" in
48'')  usemymalloc='n' ;;
49esac
50
51# Intuiting the existence of system calls under AIX is difficult,
52# at best; the safest technique is to find them empirically.
53
54# AIX 4.3.* and above default to using nm for symbol extraction
55case "$osvers" in
56   3.*|4.1.*|4.2.*)
57      usenm='undef'
58      ;;
59   *)
60      usenm='true'
61      ;;
62esac
63
64so="a"
65# AIX itself uses .o (libc.o) but we prefer compatibility
66# with the rest of the world and with rest of the scripting
67# languages (Tcl, Python) and related systems (SWIG).
68# Stephanie Beals <bealzy@us.ibm.com>
69dlext="so"
70
71# Take possible hint from the environment.  If 32-bit is set in the
72# environment, we can override it later.  If set for 64, the
73# 'sizeof' test sees a native 64-bit architecture and never looks back.
74case "$OBJECT_MODE" in
7532)
76    cat >&4 <<EOF
77
78You have OBJECT_MODE=32 set in the environment.
79I take this as a hint you do not want to
80build for a 64-bit address space. You will be
81given the opportunity to change this later.
82EOF
83    ;;
8464)
85    cat >&4 <<EOF
86
87You have OBJECT_MODE=64 set in the environment.
88This forces a full 64-bit build.  If that is
89not what you intended, please terminate this
90program, unset it and restart.
91EOF
92    ;;
93*)  ;;
94esac
95
96# Trying to set this breaks the POSIX.c compilation
97
98# Make setsockopt work correctly.  See man page.
99# ccflags='-D_BSD=44'
100
101# uname -m output is too specific and not appropriate here
102case "$archname" in
103'') archname="$osname" ;;
104esac
105
106cc=${cc:-cc}
107
108case "$osvers" in
1093*) d_fchmod=undef
110    ccflags="$ccflags -D_ALL_SOURCE"
111    ;;
112*)  # These hints at least work for 4.x, possibly other systems too.
113    ccflags="$ccflags -D_ALL_SOURCE -D_ANSI_C_SOURCE -D_POSIX_SOURCE"
114    case "$cc" in
115     *gcc*) ;;
116     *) ccflags="$ccflags -qmaxmem=16384" ;;
117    esac
118    nm_opt='-B'
119    ;;
120esac
121
122# These functions don't work like Perl expects them to.
123d_setregid='undef'
124d_setreuid='undef'
125
126# Changes for dynamic linking by Wayne Scott <wscott@ichips.intel.com>
127#
128# Tell perl which symbols to export for dynamic linking.
129case "$cc" in
130*gcc*) ccdlflags='-Xlinker' ;;
131esac
132# the required -bE:$installarchlib/CORE/perl.exp is added by
133# libperl.U (Configure) later.
134
135case "$ldlibpthname" in
136'') ldlibpthname=LIBPATH ;;
137esac
138
139# The first 3 options would not be needed if dynamic libs. could be linked
140# with the compiler instead of ld.
141# -bI:$(PERL_INC)/perl.exp  Read the exported symbols from the perl binary
142# -bE:$(BASEEXT).exp        Export these symbols.  This file contains only one
143#                           symbol: boot_$(EXP)  can it be auto-generated?
144case "$osvers" in
1453*)
146    lddlflags="$lddlflags -H512 -T512 -bhalt:4 -bM:SRE -bI:\$(PERL_INC)/perl.exp -bE:\$(BASEEXT).exp -e _nostart -lc"
147    ;;
148*)
149    lddlflags="$lddlflags -bhalt:4 -bM:SRE -bI:\$(PERL_INC)/perl.exp -bE:\$(BASEEXT).exp -b noentry -lc"
150    ;;
151esac
152
153# This script UU/usethreads.cbu will get 'called-back' by Configure
154# after it has prompted the user for whether to use threads.
155cat > UU/usethreads.cbu <<'EOCBU'
156case "$usethreads" in
157$define|true|[yY]*)
158        ccflags="$ccflags -DNEED_PTHREAD_INIT"
159        case "$cc" in
160        gcc) ;;
161        cc_r) ;;
162        cc|xl[cC]_r)
163            echo >&4 "Switching cc to cc_r because of POSIX threads."
164            # xlc_r has been known to produce buggy code in AIX 4.3.2.
165            # (e.g. pragma/overload core dumps)  Let's suspect xlC_r, too.
166            # --jhi@iki.fi
167            cc=cc_r
168            ;;
169        '')
170            cc=cc_r
171            ;;
172        *)
173            cat >&4 <<EOM
174For pthreads you should use the AIX C compiler cc_r.
175(now your compiler was set to '$cc')
176Cannot continue, aborting.
177EOM
178            exit 1
179            ;;
180        esac
181
182        # c_rify libswanted.
183        set `echo X "$libswanted "| sed -e 's/ \([cC]\) / \1_r /g'`
184        shift
185        libswanted="$*"
186        # c_rify lddlflags.
187        set `echo X "$lddlflags "| sed -e 's/ \(-l[cC]\) / \1_r /g'`
188        shift
189        lddlflags="$*"
190
191        # Insert pthreads to libswanted, before any libc or libC.
192        set `echo X "$libswanted "| sed -e 's/ \([cC]\) / pthreads \1 /'`
193        shift
194        libswanted="$*"
195        # Insert pthreads to lddlflags, before any libc or libC.
196        set `echo X "$lddlflags " | sed -e 's/ \(-l[cC]\) / -lpthreads \1 /'`
197        shift
198        lddlflags="$*"
199
200        ;;
201esac
202EOCBU
203
204# This script UU/uselargefiles.cbu will get 'called-back' by Configure
205# after it has prompted the user for whether to use large files.
206cat > UU/uselargefiles.cbu <<'EOCBU'
207case "$uselargefiles" in
208''|$define|true|[yY]*)
209        lfcflags="`getconf XBS5_ILP32_OFFBIG_CFLAGS 2>/dev/null`"
210        lfldflags="`getconf XBS5_ILP32_OFFBIG_LDFLAGS 2>/dev/null`"
211        # _Somehow_ in AIX 4.3.1.0 the above getconf call manages to
212        # insert(?) *something* to $ldflags so that later (in Configure) evaluating
213        # $ldflags causes a newline after the '-b64' (the result of the getconf).
214        # (nothing strange shows up in $ldflags even in hexdump;
215        #  so it may be something in the shell, instead?)
216        # Try it out: just uncomment the below line and rerun Configure:
217# echo >&4 "AIX 4.3.1.0 $lfldflags mystery" ; exit 1
218        # Just don't ask me how AIX does it, I spent hours wondering.
219        # Therefore the line re-evaluating lfldflags: it seems to fix
220        # the whatever it was that AIX managed to break. --jhi
221        lfldflags="`echo $lfldflags`"
222        lflibs="`getconf XBS5_ILP32_OFFBIG_LIBS 2>/dev/null|sed -e 's@^-l@@' -e 's@ -l@ @g`"
223        case "$lfcflags$lfldflags$lflibs" in
224        '');;
225        *) ccflags="$ccflags $lfcflags"
226           ldflags="$ldflags $lfldflags"
227           libswanted="$libswanted $lflibs"
228           ;;
229        esac
230        lfcflags=''
231        lfldflags=''
232        lflibs=''
233        ;;
234esac
235EOCBU
236
237# This script UU/use64bitint.cbu will get 'called-back' by Configure
238# after it has prompted the user for whether to use 64 bit integers.
239cat > UU/use64bitint.cbu <<'EOCBU'
240case "$use64bitint" in
241$define|true|[yY]*)
242            case "`oslevel`" in
243            3.*|4.[012].*)
244                cat >&4 <<EOM
245AIX `oslevel` does not support 64-bit interfaces.
246You should upgrade to at least AIX 4.3.
247EOM
248                exit 1
249                ;;
250            esac
251            ;;
252esac
253EOCBU
254
255cat > UU/use64bitall.cbu <<'EOCBU'
256# This script UU/use64bitall.cbu will get 'called-back' by Configure
257# after it has prompted the user for whether to be maximally 64-bitty.
258case "$use64bitall" in
259$define|true|[yY]*)
260            case "`oslevel`" in
261            3.*|4.[012].*)
262                cat >&4 <<EOM
263AIX `oslevel` does not support 64-bit interfaces.
264You should upgrade to at least AIX 4.3.
265EOM
266                exit 1
267                ;;
268            esac
269            echo " "
270            echo "Checking the CPU width of your hardware..." >&4
271            $cat >size.c <<EOCP
272#include <stdio.h>
273#include <sys/systemcfg.h>
274int main (void)
275{
276  printf("%d\n",_system_configuration.width);
277  return(0);
278}
279EOCP
280            set size
281            if eval $compile_ok; then
282                lfcpuwidth=`./size`
283                echo "You are running on $lfcpuwidth bit hardware."
284            else
285                dflt="32"
286                echo " "
287                echo "(I can't seem to compile the test program.  Guessing...)"
288                rp="What is the width of your CPU (in bits)?"
289                . ./myread
290                lfcpuwidth="$ans"
291            fi
292            $rm -f size.c size
293            case "$lfcpuwidth" in
294            32*)
295                cat >&4 <<EOM
296Bzzzt! At present, you can only perform a
297full 64-bit build on a 64-bit machine.
298EOM
299                exit 1
300                ;;
301            esac
302            lfcflags="`getconf XBS5_LP64_OFF64_CFLAGS 2>/dev/null`"
303            lfldflags="`getconf XBS5_LP64_OFF64_LDFLAGS 2>/dev/null`"
304            # See jhi's comments above regarding this re-eval.  I've
305            # seen similar weirdness in the form of:
306            #
307# 1506-173 (W) Option lm is not valid.  Enter xlc for list of valid options.
308            #
309            # error messages from 'cc -E' invocation. Again, the offending
310            # string is simply not detectable by any means.  Since it doesn't
311            # do any harm, I didn't pursue it. -- sh
312            lfldflags="`echo $lfldflags`"
313            lflibs="`getconf XBS5_LP64_OFF64_LIBS 2>/dev/null|sed -e 's@^-l@@' -e 's@ -l@ @g`"
314            # -q32 and -b32 may have been set by uselargefiles or user.
315            # Remove them.
316            ccflags="`echo $ccflags | sed -e 's@-q32@@'`"
317            ldflags="`echo $ldflags | sed -e 's@-b32@@'`"
318            # Tell archiver to use large format.  Unless we remove 'ar'
319            # from 'trylist', the Configure script will just reset it to 'ar'
320            # immediately prior to writing config.sh.  This took me hours
321            # to figure out.
322            trylist="`echo $trylist | sed -e 's@^ar @@' -e 's@ ar @ @g' -e 's@ ar$@@'`"
323            ar="ar -X64"
324            nm_opt="-X64 $nm_opt"
325            # Note: Placing the 'lfcflags' variable into the 'ldflags' string
326            # is NOT a typo.  ldlflags is passed to the C compiler for final
327            # linking, and it wants -q64 (-b64 is for ld only!).
328            case "$lfcflags$lfldflags$lflibs" in
329            '');;
330            *) ccflags="$ccflags $lfcflags"
331               ldflags="$ldflags $lfcflags"
332               lddlflags="$lfldflags $lddlflags"
333               libswanted="$libswanted $lflibs"
334               ;;
335            esac
336            case "$ccflags" in
337            *-DUSE_64_BIT_ALL*) ;;
338            *) ccflags="$ccflags -DUSE_64_BIT_ALL";;
339            esac
340            case "$archname64" in
341            ''|64*) archname64=64all ;;
342            esac
343            longsize="8"
344            # Don't try backwards compatibility
345            bincompat="$undef"
346            d_bincompat5005="$undef"
347            lfcflags=''
348            lfldflags=''
349            lflibs=''
350            lfcpuwidth=''
351            ;;
352esac
353EOCBU
354
355cat > UU/uselongdouble.cbu <<'EOCBU'
356# This script UU/uselongdouble.cbu will get 'called-back' by Configure
357# after it has prompted the user for whether to use long doubles.
358case "$uselongdouble" in
359$define|true|[yY]*)
360        ccflags="$ccflags -qlongdouble"
361        # The explicit cc128, xlc128, xlC128 are not needed,
362        # the -qlongdouble should do the trick. --jhi
363        d_Gconvert='sprintf((b),"%.*llg",(n),(x))'
364        ;;
365esac
366EOCBU
367
368# If the C++ libraries, libC and libC_r, are available we will prefer them
369# over the vanilla libc, because the libC contain loadAndInit() and
370# terminateAndUnload() which work correctly with C++ statics while libc
371# load() and unload() do not.  See ext/DynaLoader/dl_aix.xs.
372# The C-to-C_r switch is done by usethreads.cbu, if needed.
373if test -f /lib/libC.a -a X"`$cc -v 2>&1 | grep gcc`" = X; then
374    # Cify libswanted.
375    set `echo X "$libswanted "| sed -e 's/ c / C c /'`
376    shift
377    libswanted="$*"
378    # Cify lddlflags.
379    set `echo X "$lddlflags "| sed -e 's/ -lc / -lC -lc /'`
380    shift
381    lddlflags="$*"
382fi
383
384# EOF
Note: See TracBrowser for help on using the repository browser.