#!/bin/sh

#set -x

#------------------------------------------------------
#
#  Syntax :
#
#  cmt_make_shlib_common.sh extract-arg tag library extra-args
#
#   with :
#
#      extract-arg  : either "extract" or "no_extract"
#      tag          : the current tag(s)
#      library      : the name of the library
#      extra-args   : extra link options
#
#------------------------------------------------------

extract=$1
shift

tag=$1
shift

lib=$1
shift

extra=$*

if [ "${CMTDEBUG:-}" ]; then
unset CMTDEBUG
set -x
fi

[ -n "${ld:-}" ] || ld=`${CMTROOT}/mgr/cmt show macro_value shlibbuilder -tag=${tag}` || exit
[ -n "${ldflags+CMT}" ] || ldflags=`${CMTROOT}/mgr/cmt show macro_value shlibflags -tag=${tag}` || exit
[ -n "${suffix+CMT}" ] || suffix=`${CMTROOT}/mgr/cmt show macro_value shlibsuffix -tag=${tag}` || exit
[ -n "${libprefix+CMT}" ] || libprefix=`${CMTROOT}/mgr/cmt show macro_value library_prefix -tag=${tag}` || exit
[ -n "${libsuffix+CMT}" ] || libsuffix=`${CMTROOT}/mgr/cmt show macro_value library_suffix -tag=${tag}` || exit

libname=${libprefix}${lib}${libsuffix}

if test "${ld}" = "" ; then
  exit 1
fi

if test "${bin}" = "" ; then
  bin=`${CMTROOT}/mgr/cmt show macro_value bin -tag=${tag}` || exit
fi

here=`/bin/pwd`
cd ${bin} || exit

/bin/rm -f ${libname}.${suffix} || exit

result=0

temp_shlib=${lib}temp_shlib

if test ${extract} = "extract"; then
  trap '/bin/rm -rf ${temp_shlib}; cd ${here}; exit ${result}' 1 2 15

  mkdir -p ${temp_shlib}
  /bin/rm -f ${temp_shlib}/*

  (cd ${temp_shlib}; ar x ../${libname}.a)
  result=$?
  if [ ${result} -ne 0 ]; then
      \rm -rf ${temp_shlib}
      cd ${here}
      exit ${result}
  fi

  #
  # Build a protected list of modules just extracted from
  # the static library
  #  Files containing space characters are accepted
  #
  test -z "$GREP_OPTIONS" || GREP_OPTIONS=
  modules=`ls -1 ${temp_shlib} | \
           grep '[.]o$' | \
           sed -e 's#^#'${temp_shlib}'/#' \
               -e 's#^#"#g' \
               -e 's#$#"#'`

  if test "${QUIET}" = ""; then set -v; fi

  eval ${ld} ${ldflags} -o ${libname}.${suffix} ${modules} ${extra}
  result=$?

  if test "${QUIET}" = ""; then set +v; fi

  /bin/rm -rf ${temp_shlib}

else

  if test "${QUIET}" = ""; then set -v; fi

  eval ${ld} ${ldflags} -all ${libname}.a -o ${libname}.${suffix} ${extra} -rpath `/bin/pwd`
  result=$?

  if test "${QUIET}" = ""; then set +v; fi

fi

cd ${here}
exit ${result}
