#!/bin/sh
#
# Copyright (c) 2009, Damien Lespiau <damien.lespiau@gmail.com>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation
# files (the "Software"), to deal in the Software without
# restriction, including without limitation the rights to use,
# copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the
# Software is furnished to do so, subject to the following
# conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
# OTHER DEALINGS IN THE SOFTWARE.

# we need sed
SED=@SED@
if test -z "$SED" ; then
SED=sed
fi

lt_unmangle ()
{
   last_result=`echo $1 | $SED -e 's#.libs/##' -e 's#[0-9a-zA-Z_\-\.]*_la-##'`
}

# the tool to wrap (cc, cxx, ar, ranlib, ..)
tool="$1"
shift

# the reel tool (to call)
REEL_TOOL="$1"
shift

pass_through=0
preserved_args=
while test "$#" -gt 0; do
    opt="$1"
    shift

    case $opt in
    --shave-mode=*)
        mode=`echo $opt | $SED -e 's/[-_a-zA-Z0-9]*=//'`
        ;;
    -o)
        lt_output="$1"
        preserved_args="$preserved_args $opt"
        ;;
    -out:*|/out:*)
        lt_output="${opt:5}"
        preserved_args="$preserved_args $opt"
        ;;
    *)
        preserved_args="$preserved_args $opt"
        ;;
      esac
done

# mode=link is handled in the libtool wrapper
case "$mode,$tool" in
link,*)
    pass_through=1
    ;;
*,cxx)
    Q="  CXX   "
    ;;
*,cc)
    Q="  CC    "
    ;;
*,fc)
    Q="  FC    "
    ;;
*,f77)
    Q="  F77   "
    ;;
*,objc)
    Q="  OBJC   "
    ;;
*,mcs)
    Q="  MCS   "
    ;;
*,*)
    # should not happen
    Q="  CC    "
    ;;
esac

lt_unmangle "$lt_output"
output=$last_result

if test -z $V; then
    if test $pass_through -eq 0; then
        echo "$Q$output"
    fi
    $REEL_TOOL $preserved_args
else
    echo $REEL_TOOL $preserved_args
    $REEL_TOOL $preserved_args
fi
