From bbc711f90ce9892bd87879f2349f97d5af48573c Mon Sep 17 00:00:00 2001 From: "David R. Favor" Date: Wed, 28 Apr 1999 03:45:28 -0500 Subject: [PATCH] AIX hints enhancements (threads build, SOCKS support) Message-ID: <372710F8.B1F73BEB@austin.ibm.com> Subject: Working build for AIX + gcc + threading p4raw-id: //depot/perl@3360 --- hints/aix.sh | 163 +++++++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 137 insertions(+), 26 deletions(-) diff --git a/hints/aix.sh b/hints/aix.sh index 7b111ff..d5ce755 100644 --- a/hints/aix.sh +++ b/hints/aix.sh @@ -6,6 +6,32 @@ # Merged on Mon Feb 6 10:22:35 EST 1995 by # Andy Dougherty +# +# Contact dfavor@corridor.com for any of the following: +# +# - AIX 43x and above support +# - gcc + threads support +# - socks support +# +# Apr 99 changes: +# +# - use nm in AIX 43x and above +# - gcc + threads now builds +# - added support for socks, when Dccflags=-DSOCKS specified +# +# Notes: +# +# - shared libperl support is tricky. if ever libperl.a ends up +# in /usr/local/lib/* it can override any subsequent builds of +# that same perl release. to make sure you know where the shared +# libperl.a is coming from do a 'dump -Hv perl' and check all the +# library search paths in the loader header. +# +# it would be nice to warn the user if a libperl.a exists that is +# going to override the current build, but that would be complex. +# +# better yet, a solid fix for this situation should be developed. +# # Configure finds setrgid and setruid, but they're useless. The man # pages state: @@ -15,19 +41,28 @@ d_setrgid='undef' d_setruid='undef' -# Neither do these functions work like Perl expects them to. -d_setregid='undef' -d_setreuid='undef' - alignbytes=8 -# Intuiting the existence of system calls under AIX is difficult, at best; -# the safest (and slowest...) technique is to find them empirically. -usenm='undef' +usemymalloc='n' + +# Intuiting the existence of system calls under AIX is difficult, +# at best; the safest technique is to find them empirically. + +# AIX 4.3.* and above default to using nm for symbol extraction +case "$osvers" in + 3.*|4.1.*|4.2.*) + usenm='undef' + ;; + *) + usenm='true' + ;; +esac so="a" dlext="so" +# Trying to set this breaks the POSIX.c compilation + # Make setsockopt work correctly. See man page. # ccflags='-D_BSD=44' @@ -50,13 +85,17 @@ case "$osvers" in ;; esac +# These functions don't work like Perl expects them to. +d_setregid='undef' +d_setreuid='undef' + # Changes for dynamic linking by Wayne Scott # # Tell perl which symbols to export for dynamic linking. case "$cc" in -*gcc*) ccdlflags="$ccdlflags -Xlinker" ;; +*gcc*) ccdlflags='-Xlinker -bE:perl.exp' ;; +*) ccdlflags='-bE:perl.exp' ;; esac -ccdlflags="$ccdlflags -bE:perl.exp" # The first 3 options would not be needed if dynamic libs. could be linked # with the compiler instead of ld. @@ -65,13 +104,84 @@ ccdlflags="$ccdlflags -bE:perl.exp" # symbol: boot_$(EXP) can it be auto-generated? case "$osvers" in 3*) - lddlflags="$lddlflags -H512 -T512 -bhalt:4 -bM:SRE -bI:$(PERL_INC)/perl.exp -bE:$(BASEEXT).exp -e _nostart -lc" + lddlflags='-H512 -T512 -bhalt:4 -bM:SRE -bI:$(PERL_INC)/perl.exp -bE:$(BASEEXT).exp -e _nostart' ;; *) - lddlflags="$lddlflags -bhalt:4 -bM:SRE -bI:$(PERL_INC)/perl.exp -bE:$(BASEEXT).exp -b noentry -lc" + lddlflags='-bhalt:4 -bM:SRE -bI:$(PERL_INC)/perl.exp -bE:$(BASEEXT).exp -b noentry' ;; esac +# +# if $ccflags contains -DSOCKS, then add socks library support. +# +# SOCKS support also requires each source module with socket support +# add the following lines directly after the #include : +# +# #ifdef SOCKS +# #include +# #endif +# +# It is expected that libsocks.a resides in /usr/local/lib and that +# socks.h resides in /usr/local/include. If these files live some +# different place then modify +# + +for arg in $ccflags ; do + + if [ "$arg" = "-DSOCKS" ] ; then + + sockslib=socks5 + incpath=/usr/local/include + libpath=/usr/local/lib + + echo >&4 "SOCKS using $incpath/socks.h and $libpath/lib${sockslib}.a" + echo >&4 "SOCKS requires source modifications. #include must change to:" + echo >&4 + echo >&4 " #include " + echo >&4 " #ifdef SOCKS" + echo >&4 " #include " + echo >&4 " #endif" + echo >&4 + echo >&4 "in some or all of the following files:" + echo >&4 + + for arg in `find . \( -name '*.c' -o -name '*.xs' -o -name '*.h' \) \ + -exec egrep -l '#.*include.*socket\.h' {} \; | \ + egrep -v "win32|vms|t/lib|Socket.c` ; do + echo >&4 " $arg" + done + + echo >&4 + + lddlflags="$lddlflags -l$sockslib" + + # setting $libs here breaks the optional libraries search + # for some reason, so use $libswanted instead + #libs="$libs -lsocks5" + + libswanted="$libswanted $sockslib" + + # + # path for include file + # + + locincpth="$locincpath /usr/local/include" + + # + # path for library not needed, if in /usr/local/lib as that + # directory is already searched. + # + + #loclibpth="$loclibpath /usr/local/lib" + + break + + fi + +done + +lddllibc="-lc" + # This script UU/usethreads.cbu will get 'called-back' by Configure # after it has prompted the user for whether to use threads. cat > UU/usethreads.cbu <<'EOCBU' @@ -79,17 +189,21 @@ case "$usethreads" in $define|true|[yY]*) ccflags="$ccflags -DNEED_PTHREAD_INIT" case "$cc" in - xlc_r) ;; - cc) - echo >&4 "Switching cc to xlc_r because of POSIX threads." - cc=xlc_r + gcc) ;; + cc_r) ;; + cc|xlc_r) + echo >&4 "Switching cc to cc_r because of POSIX threads." + # xlc_r has been known to produce buggy code in AIX 4.3.2. + # (e.g. pragma/overload core dumps) + # --jhi@iki.fi + cc=cc_r ;; - '' | cc_r) - cc=xlc_r + '') + cc=cc_r ;; *) cat >&4 <