#!/bin/sh # # $Header: buildtools/scripts/genagtsh.sh /stpl_db_11.2.0_aix.ppc32/2 2010/08/26 03:39:37 vlakkund Exp $ # # genagtsh.sh # # Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. # # NAME # genagtsh.sh - Generate an agent shared library # # DESCRIPTION # # Invocation: # # genagtsh.sh lib_name agent_version hs_driver # # lib_name: Filename of library to generate; # typically, $(LIBAGTSH) as used in the # RDBMS Makefile. E.g., "libagtsh.so" # # lib_version: Version of the shared library # # On UNIX ".agent_version" is appended to # the shared-library filename. E.g., "1.0" # # # NOTES # This is a remote descendent of the script used to generate # the client shared library, libclntsh.so. # # MODIFIED (MM/DD/YY) # vlakkund 08/26/10 - Bug 9182380 : backport # 'vlakkund_bug-9182380_main_2' to 11202 # vlakkund 07/23/10 - Bug 9182380 # vlakkund 04/06/09 - bug 8410300 : Set OBJECT_MODE before nm call # nmuthukr 04/01/09 - bug_8393820 : Fix object mode # akaimale 09/13/07 - Generate shared object using -G flag # akaimale 04/17/07 - remove symbols exported directly from this script # and move them to agtept.lst # anandsri 04/12/07 - 10->11 # spattnay 04/10/07 - Bug/5982677 # spattnay 03/01/07 - Bugz#21064 # dosulliv 10/09/03 - # dosulliv 06/09/03 - # dosulliv 03/13/03 - # jtao 02/27/03 - # jtao 02/13/03 - # plebld 12/06/02 - change core9 to core10 # ycao 09/17/02 - add libsnls9 # jtao 09/26/02 - # tkarren 09/25/02 - Add -lnnz9 flag # jtao 06/06/02 - # sawadhwa 12/19/01 - Disable post-wait kernel extension in AIX5L # mkrohan 11/08/00 - Search for product 9 libraries # mkrohan 10/26/00 - Update to version 9 # mkrohan 05/26/00 - Branched as an OSD # pravelin 02/01/00 - Use platform-specific library if available # inetwork 11/26/98 - Adding additional Network libraries # mluong 08/28/98 - # mluong 08/27/98 - change -lextp8 to -lpls8 # mluong 06/22/98 - # mluong 06/09/98 - # mluong 06/05/98 - agent to agent8 # mluong 06/04/98 - change core and nlsrtl name # mluong 06/02/98 - CDM 2 - plsql # mluong 05/29/98 - CDM 2 - network # pravelin 03/17/98 - Eliminate directory path from ld -h operand # pravelin 02/05/98 - If in ADE replace .so symlink with actual file # pravelin 02/05/98 - Fix typo causing ADE build problems # jdoskow 01/28/98 - # pravelin 10/30/97 - Script to build an agent shared library # pravelin 10/30/97 - Creation # # Set shell variables from script parameters if [ "$1" = "-32" ]; then LIB_NAME=$2 # Library name LIB_VER=$3 # Library version number LIB=lib else LIB_NAME=$1 # Library name LIB_VER=$2 # Library version number LIB=lib fi RDBMS_VER=11 trap '/bin/rm -f $EXPORT_LIST ; exit 1' 1 2 15 # Function to list symbols required in shared library listf_agent() { entryList=${AGENT_SYMS} grep -v '#' $entryList | grep rdbms | awk '{print $3}' } # Function used to convert lists of symbols to proper format for linker fmt_syms() { awk '/[ \t]*#/ {next}\ {printf " -u %s", $1}' ; } generate_export_list() { if [ $# != 1 -a $# != 2 ] ; then echo "Error: wrong number of arguments to generate_export_list." >&2 echo " 1 argument required, 1 optional, $# supplied." >&2 return 1 fi if [ ! -r "$1" ] ; then echo "$0 Error: generate_export_list unable to read library $1." >&2 echo " Please check the permissions and try again." >&2 return 2 fi if [ $# = 2 ] ; then GREP_STRING="egrep $2" else GREP_STRING=cat fi /bin/nm -B -h -g "$1" | grep -v '\- U ' | awk '{print $3}' | \ egrep -v '^\.|^TOC' |sort | $GREP_STRING |uniq return 0 } # Explicit path to ensure that we're using the correct commands PATH=/usr/bin:/usr/ccs/bin export PATH if [ "$SRCHOME" != "" ]; then LIB_DIR=${SRCHOME}/rdbms/${LIB} # lib. destination directory else LIB_DIR=${ORACLE_HOME}/${LIB} # lib. destination directory fi # Related variables AGENT_LIB=${LIB_NAME}.${LIB_VER} # actual library file name AGENT_LIBNAME=`basename ${LIB_NAME}` # base lib name without version AGENT_SYMS="${ORACLE_HOME}/rdbms/admin/agtept.lst" # list of symbols to force EXPORT_LIST=${LIB_DIR}/agtsh.exp LIBAGENT=${LIB_DIR}/libagent${RDBMS_VER}.a IS64BIT=`file ${ORACLE_HOME}/${LIB}/nautab.o | grep XCOFF`; if [ -z "$IS64BIT" ] then LDOBJSZ=-b32 OBJECT_MODE=32 else LDOBJSZ=-b64 OBJECT_MODE=64 fi export OBJECT_MODE # Create lists of symbols to pass to ld /bin/rm -f $EXPORT_LIST listf_agent > $EXPORT_LIST ||exit 4 # Identify OSD library, if any, needed for this platform. # Do this only if a get_platform executable exists in $ORACLE_HOME/bin # and libagent${RDBMS_VER}_$PLATFORM.{any extension} exists in $ORACLE_HOME/lib. if [ -x ${ORACLE_HOME}/bin/get_platform ]; then PLATFORM=`${ORACLE_HOME}/bin/get_platform` if [ -s ${ORACLE_HOME}/${LIB}/lib${PLATFORM}.* ]; then AGENT_OSD_LIB="-lagent${RDBMS_VER}_${PLATFORM}" # else leave $AGENT_OSD_LIB undefined fi fi generate_export_list $LIBAGENT '^hos' >> $EXPORT_LIST || exit 1 # If in ADE, the library may be a symlink to the label server. # If so, pull it over... AGENT_LIBFILE=`basename ${AGENT_LIB}` # lib filename without path AGENT_LIBPATH=${LIB_DIR}/${AGENT_LIBFILE} # lib path for ADE link if [ -h ${AGENT_LIBPATH} ]; then echo "copying ${AGENT_LIBFILE} to local disk" cp -p ${AGENT_LIBPATH} ${AGENT_LIBPATH}.tmp rm -f ${AGENT_LIPATH} mv ${AGENT_LIBPATH}.tmp ${AGENT_LIBPATH} chmod +w ${AGENT_LIBPATH} fi LNNET="-lnnet${RDBMS_VER}" LSQL="-lsql${RDBMS_VER}" LPLSQL=-lpls${RDBMS_VER} LAGENT=-lagent${RDBMS_VER} LMM="-lmm" LCLIENT="-lclient${RDBMS_VER}" LGENERIC="-lgeneric${RDBMS_VER}" LNLSRTL="-lnls${RDBMS_VER}" LSNLSRTL="-lsnls${RDBMS_VER}" LUNLSRTL="-lunls${RDBMS_VER}" LCORE="-lcore${RDBMS_VER}" LCOMMON=-lcommon${RDBMS_VER} LXML="-lxml${RDBMS_VER}" LLDAP="-lldapclnt${RDBMS_VER} -lnldap${RDBMS_VER} -lztkg${RDBMS_VER}" LNETWORK="-lntcp${RDBMS_VER} ${LLDAP} -lnhost${RDBMS_VER} -lntns${RDBMS_VER} -lnoname${RDBMS_VER} -ln${RDBMS_VER} -lncrypt${RDBMS_VER} -lnbeq${RDBMS_VER} -lnus${RDBMS_VER} -lntcps${RDBMS_VER} -lnl${RDBMS_VER} -lnro${RDBMS_VER} -lntcp${RDBMS_VER} ${LLDAP} -lnhost${RDBMS_VER} -lntns${RDBMS_VER} -lnoname${RDBMS_VER} -lnsslb${RDBMS_VER} -ln${RDBMS_VER} -lnbeq${RDBMS_VER} -lnl${RDBMS_VER} -lnnz${RDBMS_VER} -lzt${RDBMS_VER}" OSV=`/usr/bin/uname -v` if [ "$OSV" = "4" ]; then AIXIMP="-bI:${ORACLE_HOME}/lib/pw-syscall.exp" fi SHARED_OBJ=$LIB_DIR/shr.o # Linker command and options LD="ld -bnoentry -bhalt:5 -L$ORACLE_HOME/$LIB" LD_OPT="-bE:$EXPORT_LIST $AIXIMP -bM:SRE -G ${LDOBJSZ}" # name inserted into library LD_OUT="-o $SHARED_OBJ" # output specification NAUTAB="${ORACLE_HOME}/${LIB}/nautab.o" NAETAB="${ORACLE_HOME}/${LIB}/naeet.o ${ORACLE_HOME}/${LIB}/naect.o" NAEDHS="${ORACLE_HOME}/${LIB}/naedhs.o" SYSLIBS=`cat ${ORACLE_HOME}/${LIB}/sysliblist` LDFLAGS=`cat ${ORACLE_HOME}/${LIB}/ldflags` OLIBS="${LCLIENT} ${LSQL} ${LNETWORK} ${LCLIENT} ${LCOMMON} ${LGENERIC} ${LMM} ${LNLSRTL} ${LCORE} ${LNLSRTL} ${LCORE} ${LNLSRTL} ${LNETWORK} ${LCLIENT} ${LCOMMON} ${LXML} ${LGENERIC} ${LNLSRTL} ${LCORE} ${LNLSRTL} ${LCORE} ${LNLSRTL} ${LPLSQL} ${LNNET}" # Create shared object ${LD} ${LD_OPT} ${LD_OUT} ${NAFLAGS} ${NAUTAB} ${NAETAB} \ ${NAEDHS} ${OLIBS} ${SYSLIBS} ${AGENT_OSD_LIB} ${LAGENT} \ ${LPLS} -ldl ${LNETWORK} ${LNLSRTL} ${LSNLSRTL} ${LCORE} ${LCOMMON} ${LCORE} \ ${LNLSRTL} ${LSNLSRTL} ${LSNLSRTL} ${LUNLSRTL} ${LDFLAGS} # Create .a library, if the input file is .so, change it to .a if [ `basename $LIB_NAME .so` != `basename $LIB_NAME` ]; then LIB_NAMEA=`dirname $LIB_NAME`/`basename $LIB_NAME .so`.a ar crl $LIB_NAMEA $SHARED_OBJ # Link $LIB_NAME to avoid Makefile calling this script everytime ln -sf $LIB_NAMEA $LIB_NAME else LIB_NAME_TMP=${LIB_DIR}/`basename $LIB_NAME` rm -f $LIB_NAME_TMP ar crl $LIB_NAME $SHARED_OBJ fi /bin/rm -f $SHARED_OBJ exit 0