#!/bin/sh
# @(#) MQMBID sn=p800-003-150615.2 su=_O7DtFhOPEeWRp7-5NNeHyQ pn=install/unix/linux_2/amqicfil.sh
################################################################################
#
# Product: WebSphere MQ
#
# <N_OCO_COPYRIGHT>
# Licensed Materials - Property of IBM
#
# 5724-H72
# (c) Copyright IBM Corp. 2011 All Rights Reserved.
#
# US Government Users Restricted Rights - Use, duplication or
# disclosure restricted by GSA ADP Schedule Contract with
# IBM Corp.
# <NOC_COPYRIGHT>
#
# Module: amqicfil
#
# Usage:  amqicfil <install_path> <file_name>
#
# Description:
#  Modifies the specified file if it needs to be to allow for a relocated
#  installation. This will normally be run from an installation script.
#
# Exit code:
#   0 - File modified
#   1 - File does not need modification
#   2 - Error occurred
#
################################################################################

#
# If debug required dump out lots of potentially useful stuff and set -x
#
ID="@(#) MQMBID sn=p800-003-150615.2 su=_O7DtFhOPEeWRp7-5NNeHyQ pn=install/unix/linux_2/amqicfil.sh"
AMQICLIB_DEBUG_FLAG=""
AMQICVAR_DEBUG_FLAG=""
echo ${SHELLOPTS} | grep xtrace
if [ $? -eq 0 ] ; then
  AMQICLIB_DEBUG_FLAG="--debug"
  AMQICVAR_DEBUG_FLAG="-v"
fi

# ******************************************************************************
# * Global variables                                                           *
# ******************************************************************************
exitval=1                                      # Script exit value
rc=0                                           # Command return code
MQ_DEFAULT_INSTALLATION_PATH=/opt/mqm          # Default MQ installation path
MQ_INSTALLATION_PATH=$1                        # MQ installation path
filename=$2                                    # file name to check and modify

#
# Check number of parameters
#
if [ $# -lt 2 ] ; then
  echo "USAGE: amqicfil install_path file_name"
  exit 2
fi

basefilename=$(basename ${filename})

# For each file that is an ELF executable or shared library run amqiclib and amqicvar
filetype=`file ${filename}`
echo ${filetype} | grep ELF > /dev/null
rc=$?
if [ $rc -eq 0 ] ; then
  if [ ${basefilename} != amqiclib ] ; then
    amqiclib_q_out=`${MQ_INSTALLATION_PATH}/bin/amqiclib ${AMQICLIB_DEBUG_FLAG} -q ${filename} 2>&1 | grep "${MQ_DEFAULT_INSTALLATION_PATH}/" > /dev/null 2>&1`
    rc=$?
    if [ $rc -eq 0 ] ; then
      amqiclib_out=`${MQ_INSTALLATION_PATH}/bin/amqiclib ${AMQICLIB_DEBUG_FLAG} -s \^${MQ_DEFAULT_INSTALLATION_PATH}/ -p -r ${MQ_INSTALLATION_PATH}/ -s :${MQ_DEFAULT_INSTALLATION_PATH}/ -f -r :${MQ_INSTALLATION_PATH}/ ${filename} 2>&1`
      rc=$?
      if [ $rc -eq 0 ] ; then
        exitval=0
      elif [ $rc -ne 2  ] ; then
        echo "WARNING: Return code \"$rc\" from amqiclib while processing \"${filename}\", output is:" >&2
        echo "         ${amqiclib_out}" >&2
        exitval=2
      fi
    fi
  fi
  if [ ${basefilename} != amqicvar ] ; then
    amqicvar_q_out=`${MQ_INSTALLATION_PATH}/bin/amqicvar ${AMQICVAR_DEBUG_FLAG} -q -f ${filename} -i MQ_INSTALLATION_PATH 2>&1`
    rc=$?
    if [ $rc -eq 0 ] ; then
      echo "${amqicvar_q_out}" | grep "MQ_INSTALLATION_PATH=" | grep -v "=${MQ_INSTALLATION_PATH}\$" > /dev/null
      rc=$?
      if [ $rc -eq 0 ] ; then
        amqicvar_out=`${MQ_INSTALLATION_PATH}/bin/amqicvar ${AMQICVAR_DEBUG_FLAG} -f ${filename} -i MQ_INSTALLATION_PATH=${MQ_INSTALLATION_PATH} 2>&1`
        rc=$?
        if [ $rc -eq 0 ] ; then
          exitval=0
        else
          echo "WARNING: Return code \"$rc\" from amqicvar while processing \"${filename}\", output is:" >&2
          echo "         ${amqicvar_out}" >&2
          exitval=2
        fi
      fi
    elif [ $rc -ne 14 ] ; then
      echo "WARNING: Return code \"$rc\" from amqicvar -q while processing \"${filename}\", output is:" >&2
      echo "         ${amqicvar_q_out}" >&2
      exitval=2
    fi
  fi
# For each file that is not an ELF executable or shared library run amqicvar
else
  # Modify scripts
  if [ -f $filename ] && [ ${basefilename} != amqicrel ] && [ ${basefilename} != amqicfil ] ; then
    head -1 $filename | grep "^#\!" > /dev/null 2>&1
    rc=$?
    if [ $rc -eq 0 ] ; then
      amqicvar_q_out=`${MQ_INSTALLATION_PATH}/bin/amqicvar ${AMQICVAR_DEBUG_FLAG} -q -f ${filename} -t -i MQ_INSTALLATION_PATH 2>&1`
      rc=$?
      if [ $rc -eq 0 ] ; then
        echo "${amqicvar_q_out}" | grep "MQ_INSTALLATION_PATH=" | grep -v "=${MQ_INSTALLATION_PATH}\$" > /dev/null
        rc=$?
        if [ $rc -eq 0 ] ; then
          amqicvar_out=`${MQ_INSTALLATION_PATH}/bin/amqicvar ${AMQICVAR_DEBUG_FLAG} -f ${filename} -t -i MQ_INSTALLATION_PATH=${MQ_INSTALLATION_PATH} 2>&1`
          rc=$?
          if [ $rc -eq 0 ] ; then
            exitval=0
          else
            echo "WARNING: Return code \"$rc\" from amqicvar while processing \"${filename}\", output is:" >&2
            echo "         ${amqicvar_out}" >&2
            exitval=2
          fi
        fi
      elif [ $rc -ne 14 ] ; then
        echo "WARNING: Return code \"$rc\" from amqicvar -q while processing \"${filename}\", output is:" >&2
        echo "         ${amqicvar_q_out}" >&2
        exitval=2
      fi
    fi
  fi
  # Two special files that need relocating
  if [ -f ${filename} ] && [ ! -h  ${filename} ] ; then
    if [ ${basefilename} = "xaswit.mak" ] || [ ${basefilename} = "amqodqx.mk" ] ; then
      amqicvar_q_out=`${MQ_INSTALLATION_PATH}/bin/amqicvar ${AMQICVAR_DEBUG_FLAG} -q -f ${filename} -t -i MQ_INSTALLATION_PATH 2>&1`
      rc=$?
      if [ $rc -eq 0 ] ; then
        echo "${amqicvar_q_out}" | grep "MQ_INSTALLATION_PATH=" | grep -v "=${MQ_INSTALLATION_PATH}\$" > /dev/null
        rc=$?
        if [ $rc -eq 0 ] ; then
          amqicvar_out=`${MQ_INSTALLATION_PATH}/bin/amqicvar ${AMQICVAR_DEBUG_FLAG} -f ${filename} -t -i MQ_INSTALLATION_PATH=${MQ_INSTALLATION_PATH} 2>&1`
          rc=$?
          if [ $rc -eq 0 ] ; then
            exitval=0
          else
            echo "WARNING: Return code \"$rc\" from amqicvar while processing \"${filename}\", output is:" >&2
            echo "         ${amqicvar_out}" >&2
            exitval=2
          fi
        fi
      elif [ $rc -ne 14 ] ; then
        echo "WARNING: Return code \"$rc\" from amqicvar -q while processing \"${filename}\", output is:" >&2
        echo "         ${amqicvar_q_out}" >&2
        exitval=2
      fi
    fi
  fi
fi

exit $exitval
