#!/bin/sh ############################################################################## # Copyright (c) 1996, 2009, Oracle and/or its affiliates. All rights reserved. # # genorasdksh.sh (SDK = Software Development Kit) -- AIX version # # Creates single shared client library for OCI, Pro*C, and XA. # # Makes either the base SDK library or full library depending on the # arguments given. Default (no arguments) is to make the full library. # If invoked with "-base", makes the base library. # # MODIFIED (MM/DD/YY) # msingal 11/17/09 - Bug/9108979 link libnnz11 static archive # spattnay 12/05/08 - Clean up 32bit reference # rchahal 08/26/08 - Add NZ lib to liborasdkbase.so linkline. # akaimale 10/14/07 - use RTL option for lib generation # akaimale 06/16/07 - Fix OBJECT_MODE issues & bug 6135078 # akaimale 06/11/07 - Use .exp file instead of .bom # mlfallon 04/09/07 - Change C++ runtime library to be # compatible with Gcc 3.4 # jboyce 02/13/07 - 10->11 # spattnay 03/08/07 - Bugz#21162 # spattnay 03/01/07 - Bugz#21064 # spattnay 03/01/07 - Bugz#21064 # tnallath 01/19/07 - add gssapi lib # garnaiz 12/12/06 - establish dependency on skgxp unconditionally # shahmed 11/29/06 - Add OBJECT_MODE=32i, 64. Bug-5533357 # skalyana 03/30/06 - # bsthanik 03/09/06 - libn10.a dependency for xdk # jboyce 11/04/05 - bom2def changes on linux # bsthanik 03/09/06 - libn10.a dependency for xdk # slahoran 05/10/05 - Port for AIX # mchengjr 03/02/05 - Add code snippet to fix issue with bom2def on Linux # mchengjr 02/15/05 - cleanup and add changes for new CRS symbols # imacky 01/25/05 - tweak for new syms # imacky 10/29/04 - remove pctina.o # imacky 10/07/04 - cleanup; addl syms; merge with base script # jboyce 07/09/04 - cleanup; xdk issues # jboyce 05/28/04 - Created genorasdksh.sh based on genclntsh.sh ############################################################################### echo '$Id: genorasdksh.sh /aix64/3 2009/11/17 13:41:39 msingal Exp $' PROGRAM=$0 # name of program (or symlink) MAJOR=11 # major version# MINOR=1 # minor version# OLIB=$ORACLE_HOME/lib # dir for Oracle libraries # Explicit path to ensure that we're using the correct commands ### PATH=/bin:/usr/bin:/usr/local/bin; export PATH # Print archive table of contents ### ARPRINT="/usr/bin/ar t" #------------------------------------------------------------------------------ # Process arguments #------------------------------------------------------------------------------ OSDK_BASE= ARGUMENTS= while [ x"$1" != x ]; do ARGUMENTS="${ARGUMENTS} $1" case $1 in -x) set -x; shift ;; -base) OSDK_BASE=1; shift ;; *) echo "Unknown argument $1"; exit 1 ;; esac done # lib32) LIB32=1; LOOP=1; shift ;; #------------------------------------------------------------------------------ # OraSDK client library names and locations #------------------------------------------------------------------------------ # Library to generate ### OSDK_NAM=orasdk # (short) library name OSDK_BASE_NAM=${OSDK_NAM}base # (short) base library name if [ "$OSDK_BASE" ]; then echo "Generating BASE ORASDK library..." OSDK_NAM=$OSDK_BASE_NAM else echo "Generating FULL ORASDK library..." fi OSDK_VER=$MAJOR.$MINOR # library version number OSDK_LNK=lib$OSDK_NAM.so # name of symlink to library OSDK_LIB=$OSDK_LNK # actual library file name # OraSDK base library name and locations (used to build full library) ## OSDK_BASE_LNK=lib$OSDK_BASE_NAM.so # library version number OSDK_BASE_LIB=$OSDK_BASE_LNK # actual library file name # Base library symbols list (NLSRTL, ORACORE, XDK) ### OSDK_BASE_SHREPT_FILE=orasdkbase_shrept.lst OSDK_BASE_SHREPT=$ORACLE_HOME/rdbms/admin/$OSDK_BASE_SHREPT_FILE # Additional symbol list for full library ### OSDK_SHREPT_FILE=orasdk_shrept.lst OSDK_SHREPT=$ORACLE_HOME/rdbms/admin/$OSDK_SHREPT_FILE # Base library map file OSDK_BASE_DEF_FILE=liborasdkbase.exp OSDK_BASE_DEF=$ORACLE_HOME/rdbms/admin/$OSDK_BASE_DEF_FILE # Destination directory for produced library ### LIB_DIR=$OLIB # On AIX set OBJECT_MODE appropriately # If there's a SRCHOME home, look there instead of ORACLE_HOME ### if [ "$SRCHOME" ]; then OSDK_BASE_SHREPT=$SRCHOME/rdbms/admin/$OSDK_BASE_SHREPT_FILE OSDK_SHREPT=$SRCHOME/rdbms/admin/$OSDK_SHREPT_FILE OSDK_BASE_DEF=$SRCHOME/rdbms/admin/$OSDK_BASE_DEF_FILE LIB_DIR=$SRCHOME/rdbms/lib if [ "$LIB32" ]; then LIB_DIR=${SRCHOME}/rdbms/lib32 OLIB=${SRCHOME}/lib32 OBJECT_MODE=32 fi else OBJECT_MODE=64 if [ "$LIB32" ]; then OLIB=${ORACLE_HOME}/lib32 LIB_DIR=${OLIB} OBJECT_MODE=32 fi fi export OBJECT_MODE #------------------------------------------------------------------------------ # Linker options and system libraries #------------------------------------------------------------------------------ # Linker command and options ### LD="ld -bnoentry -bM:SRE -bexpall -bI:/usr/lib/aio.exp -L$OLIB" LD_RUNTIME="-blibpath:$OLIB" LD_OPT="-bnoipath -brtl" # name inserted into library LD_DEST="$LIB_DIR/$OSDK_LIB" # output library LD_OUT="-o $LD_DEST" # output specification LD_SELF_CONTAINED="" if [ "$OSDK_BASE" ]; then LD_OPT="$LD_OPT -bE:$OSDK_BASE_DEF" BASE_LIB= else BASE_LIB=$LIB_DIR/$OSDK_BASE_LIB fi # Required system libraries ### SYSLIBS="`cat $OLIB/sysliblist` -lm -lc" # Add C++ standard template and runtime libraries to base library ### if [ "$OSDK_BASE" ]; then SYSLIBS="$SYSLIBS -lC" fi #------------------------------------------------------------------------------ # Oracle library definitions #------------------------------------------------------------------------------ LNLSRTL="-lnls$MAJOR" # NLSRTL (National Language) LUNLSRTL="-lunls$MAJOR" LSNLSRTL="-lsnls$MAJOR" LCORE="-lcore$MAJOR" # CORE LXDK="-lxml$MAJOR" # XML LSQL="-lsql$MAJOR" # Precomp LPLSQL="-lpls$MAJOR" # PL/SQL LSLAX="-lslax$MAJOR" LPLP="-lplp$MAJOR" LMM="-lmm" # RDBMS LCLIENT="-lclient$MAJOR" LCOMMON="-lcommon$MAJOR" LGENERIC="-lgeneric$MAJOR" LVSN="-lvsn$MAJOR" LLDAP="-lldapclnt$MAJOR" # LDAP LNNET_ON="-lnnet$MAJOR" # Native Net LNNET_OFF="-lnnetd$MAJOR" LSKGXP="-lskgxp$MAJOR" LZTGSS="-lztkg$MAJOR" LNENT= # Network [ -r $OLIB/libnent$MAJOR.a ] && LNENT="-lnent$MAJOR" LNZ= # NZ [ -r $OLIB/libnnz$MAJOR.so ] && LNZ="-lnnz$MAJOR -lzt$MAJOR" LNCRYPT="-lnsslb$MAJOR -lncrypt$MAJOR -ln$MAJOR -lnl$MAJOR -lnro$MAJOR $LZTGSS" LNETONLY="-ln$MAJOR" LNETWORK="`cat $OLIB/ldflags` $LNENT $LNZ $LNCRYPT" #------------------------------------------------------------------------------ # Utility functions #------------------------------------------------------------------------------ # Error: Print an error message and exit ### Error () { Status=$1 Msg="$2" echo "$PROGRAM: $Msg" 1>&2 exit $Status } # Check_Status: Check an exit status, if non-zero, raise an error ### Check_Status () { Status=$1 Msg="$2" [ $Status -ne 0 ] && Error $Status "$Msg" } # Remove_File: Remove a file verifying it has been removed ### Remove_File () { File=$1 /bin/rm -f $File [ ! -r $File ] Check_Status $? "Failed to remove $File" } # listf2: List the required symbols from the given shrept.lst file ### listf2 () { entryList=$1 product=$2 grep -v '#' $entryList | grep "$product *:" | \ awk '{ printf (" -u %s", $3); }' } # listf: List the required symbols from a product's shrept.lst file ### listf () { listf2 $ORACLE_HOME/$1/admin/shrept.lst $1 } #------------------------------------------------------------------------------ # Main program starts here #------------------------------------------------------------------------------ # Each product *must* provide a $PRODUCT/admin/shrept.lst ### ErrFiles= for product in rdbms precomp plsql ldap network; do SHREPT=$ORACLE_HOME/$product/admin/shrept.lst [ ! -f $SHREPT ] && ErrFiles="$ErrFiles $SHREPT" done [ "$ErrFiles" ] && Error 1 "$PROGRAM: Could not locate $ErrFiles" # Create lists of symbols to pass to ld ### if [ "$OSDK_BASE" ]; then SYMS_NLS="-bnogc $LNLSRTL $LUNLSRTL $LSNLSRTL -bgc" SYMS_CORE="-bnogc $LCORE -bgc" SYMS_XDK="`listf2 $OSDK_BASE_SHREPT xdk` $LXDK" LD_OBJS="" LD_SYMS="$SYMS_NLS $SYMS_CORE $SYMS_XDK" OLIBS="$LNETONLY $OLIB/libnnz$MAJOR.a" else # Oracle library dependencies ### if [ -z "$LIB32" ]; then XAONDY="$ORACLE_HOME/rdbms/lib/xaondy.o" else XAONDY="$ORACLE_HOME/rdbms/lib32/xaondy.o" fi NAUTAB="$OLIB/nautab.o" NAETAB="$OLIB/naeet.o $OLIB/naect.o" NAEDHS="$OLIB/naedhs.o" SYMS_RDBMS_AIX=" -u skgfgb0off" SYMS_OCIC="`listf rdbms` `listf2 $OSDK_SHREPT rdbms` $SYMS_RDBMS_AIX \ $LCLIENT $LGENERIC" SYMS_SQL="`listf precomp` `listf2 $OSDK_SHREPT precomp` $LSQL" SYMS_PLSQL="`listf plsql` `listf2 $OSDK_SHREPT plsql` $LPLSQL" SYMS_SLAX="`listf2 $OSDK_SHREPT slax` $LSLAX" SYMS_LDAP="`listf ldap` `listf2 $OSDK_SHREPT ldap` $LLDAP" SYMS_NETWORK="`listf network` `listf2 $OSDK_SHREPT network` $LNETWORK" SYMS_XDK="`listf2 $OSDK_BASE_SHREPT xdkjni` \ `listf2 $OSDK_SHREPT xdkjni` $LXDK" LD_OBJS="$NAUTAB $NAETAB $NAEDHS" LD_SYMS="$SYMS_XDK $SYMS_SQL $SYMS_PLSQL $SYMS_SLAX\ $SYMS_OCIC $SYMS_LDAP $SYMS_NETWORK" OLIBS="$LCLIENT $LSQL $LVSN $LNETWORK $LCLIENT \ $LCOMMON $LGENERIC $LMM $XAONDY $LNETWORK $LCLIENT $LCOMMON \ $LGENERIC $LTRACE $LNNET_ON $LSKGXP" fi # Create library ### echo "Creating $LD_DEST" Remove_File $LIB_DIR/$OSDK_LIB $LD $LD_RUNTIME $LD_OPT $LD_OUT $LD_SELF_CONTAINED $BASE_LIB \ $LD_OBJS $LD_SYMS $OLIBS $SYSLIBS $USRLIBS 2>&1 \ | grep -v "already exported" Check_Status $? "Failed to link $OSDK_LIB" (cd $LIB_DIR; ls -l $OSDK_LIB) # .so -> .so.11.1 is not needed on AIX #Below has been commented to clean up 32bit reference #if [ -z "${SRCHOME}" -a -d ${ORACLE_HOME}/lib32 ] #then # if [ -z "$LOOP" ] # then # ${ORACLE_HOME}/bin/genorasdksh $ARGUMENTS lib32 # fi #fi exit 0