Hrmph. Is having a test for an exact version of MM_Unix.pm
[p5sagit/p5-mst-13.2.git] / hints / aix.sh
index a85c213..2d2468a 100644 (file)
@@ -54,12 +54,20 @@ esac
 # AIX 4.3.* and above default to using nm for symbol extraction
 case "$osvers" in
    3.*|4.1.*|4.2.*)
-      usenm='undef'
-      usenativedlopen='false'
+      case "$usenm" in
+         '') usenm='undef'
+         esac
+      case "$usenativedlopen" in
+         '') usenativedlopen='false'
+         esac
       ;;
    *)
-      usenm='true'
-      usenativedlopen='true'
+      case "$usenm" in
+         '') usenm='true'
+         esac
+      case "$usenativedlopen" in
+         '') usenativedlopen='true'
+         esac
       ;;
 esac
 
@@ -115,7 +123,7 @@ case "$osvers" in
     ccflags="$ccflags -D_ALL_SOURCE -D_ANSI_C_SOURCE -D_POSIX_SOURCE"
     case "$cc" in
      *gcc*) ;;
-     *) ccflags="$ccflags -qmaxmem=16384" ;;
+     *) ccflags="$ccflags -qmaxmem=16384 -qnoansialias" ;;
     esac
     nm_opt='-B'
     ;;
@@ -129,12 +137,32 @@ d_setreuid='undef'
 #
 # Tell perl which symbols to export for dynamic linking.
 cccdlflags='none'      # All AIX code is position independent
+cc_type=xlc
 case "$cc" in
-*gcc*) ccdlflags='-Xlinker' ;;
+*gcc*)
+   cc_type=gcc
+   ccdlflags='-Xlinker' ;;
 *) ccversion=`lslpp -L | grep 'C for AIX Compiler$' | awk '{print $2}'`
    case "$ccversion" in
      '') ccversion=`lslpp -L | grep 'IBM C and C++ Compilers LUM$' | awk '{print $2}'`
-       ;;
+        ;;
+     *.*.*.*.*.*.*)            # Ahhrgg, more than one C compiler installed
+        first_cc_path=`which ${cc:-cc}`
+        case "$first_cc_path" in
+          *vac*)
+            cc_type=vac ;;
+          /usr/bin/cc)         # Check the symlink
+            if [ -h $first_cc_path ] ; then
+              ls -l $first_cc_path > reflect
+              if grep -i vac reflect >/dev/null 2>&1 ; then
+                cc_type=vac
+                fi
+              rm -f reflect
+              fi
+            ;;
+          esac
+        ccversion=`lslpp -L | grep 'C for AIX Compiler$' | grep -i $cc_type | awk '{print $2}' | head -1`
+        ;;
      esac
    case "$ccversion" in
      3.6.6.0)
@@ -152,14 +180,14 @@ EOF
      5.0.0.0)
        cat >&4 <<EOF
 ***
-*** This C compiler ($ccversion) is known to have optimizer problems
-*** when compiling perl.c.
+*** This C compiler ($ccversion) is known to have too many optimizer
+*** bugs to compile a working Perl.
 ***
-*** Disabling optimization for that file but consider upgrading
-*** your C compiler.
+*** Consider upgrading your C compiler, or getting the GNU cc (gcc).
 ***
+*** Cannot continue, aborting.
 EOF
-perl_cflags='optimize='
+       exit 1
        ;;
      5.0.1.0)
        cat >&4 <<EOF
@@ -201,7 +229,7 @@ esac
 case "`oslevel`" in
     4.2.1.*)
       case "$ccversion" in    # Don't know if needed for gcc
-          3.1.4.*)    # libswanted "bind ... c ..." => "... c bind ..."
+          3.1.4.*|5.0.2.*)    # libswanted "bind ... c ..." => "... c bind ..."
               set `echo X "$libswanted "| sed -e 's/ bind\( .*\) \([cC]\) / \1 \2 bind /'`
               shift
               libswanted="$*"
@@ -249,11 +277,11 @@ EOM
        lddlflags="$*"
 
        # Insert pthreads to libswanted, before any libc or libC.
-       set `echo X "$libswanted "| sed -e 's/ \([cC]\) / pthreads \1 /'`
+       set `echo X "$libswanted "| sed -e 's/ \([cC]_r\) / pthreads \1 /'`
        shift
        libswanted="$*"
        # Insert pthreads to lddlflags, before any libc or libC.
-       set `echo X "$lddlflags " | sed -e 's/ \(-l[cC]\) / -lpthreads \1 /'`
+       set `echo X "$lddlflags " | sed -e 's/ \(-l[cC]_r\) / -lpthreads \1 /'`
        shift
        lddlflags="$*"
 
@@ -318,8 +346,8 @@ EOM
         # Move xld-spefific -bflags.
         ccflags="`echo $ccflags | sed -e 's@ -b@ -Wl,-b@g'`"
         ldflags="`echo ' '$ldflags | sed -e 's@ -b@ -Wl,-b@g'`"
+        lddlflags="`echo ' '$lddlflags | sed -e 's@ -b@ -Wl,-b@g'`"
         ld='gcc'
-        lddlflags="`echo $lddlflags | sed -e 's@ -b@ -Wl,-b@g'`"
         echo >&4 "(using ccflags   $ccflags)"
         echo >&4 "(using ldflags   $ldflags)"
         echo >&4 "(using lddlflags $lddlflags)"
@@ -461,24 +489,31 @@ EOCBU
 
 if test $usenativedlopen = 'true'
 then
-        ccflags="$ccflags -DUSE_NATIVE_DLOPEN"
-       ldflags="$ldflags -brtl"
+    ccflags="$ccflags -DUSE_NATIVE_DLOPEN"
+    case "$cc" in
+      *gcc*) ldflags="$ldflags -Wl,-brtl" ;;
+      *)     ldflags="$ldflags -brtl" ;;
+      esac
 else
-    # If the C++ libraries, libC and libC_r, are available we will prefer them
-    # over the vanilla libc, because the libC contain loadAndInit() and
-    # terminateAndUnload() which work correctly with C++ statics while libc
-    # load() and unload() do not.  See ext/DynaLoader/dl_aix.xs.
-    # The C-to-C_r switch is done by usethreads.cbu, if needed.
-    if test -f /lib/libC.a -a X"`$cc -v 2>&1 | grep gcc`" = X; then
-       # Cify libswanted.
-       set `echo X "$libswanted "| sed -e 's/ c / C c /'`
-       shift
-       libswanted="$*"
-       # Cify lddlflags.
-       set `echo X "$lddlflags "| sed -e 's/ -lc / -lC -lc /'`
-       shift
-       lddlflags="$*"
-    fi
+    case `oslevel` in
+       4.2.*)  ;;      # libC_r has broke gettimeofday
+        *)  # If the C++ libraries, libC and libC_r, are available we will
+           # prefer them over the vanilla libc, because the libC contain
+           # loadAndInit() and terminateAndUnload() which work correctly
+           # with C++ statics while libc load() and unload() do not. See
+           # ext/DynaLoader/dl_aix.xs. The C-to-C_r switch is done by
+           # usethreads.cbu, if needed.
+           if test -f /lib/libC.a -a X"`$cc -v 2>&1 | grep gcc`" = X; then
+               # Cify libswanted.
+               set `echo X "$libswanted "| sed -e 's/ c / C c /'`
+               shift
+               libswanted="$*"
+               # Cify lddlflags.
+               set `echo X "$lddlflags "| sed -e 's/ -lc / -lC -lc /'`
+               shift
+               lddlflags="$*"
+           fi
+       esac
 fi
 
 # EOF