#!/bin/sh


# Author:  Ossama Othman <ossama@debian.org>
#
# Debian-specific shell script that can be used to display information
# necessary to build ACE applications.

# cleanup env to prevent extra output when called fom inside another
# makefile (like debian/rules)
unset MAKEFLAGS
unset MAKELEVEL


usage()
{
    cat <<EOF
Usage: ace-config OPTION [OPTIONS...] [LIBRARY]

Generic options:
  --version	output ACE version information
  --help	display this help and exit

Compilation support options:
  --cxx         print C++ compiler used for compiling
  --cxxflags	print C++ pre-processor and compiler flags
  --libs	print library linking information
  --libs-only-L	only print the -L/-R part of --libs
  --libs-only-l only print the -l part of --libs

Install directories ACE was configured with:
  --prefix  --exec-prefix  --bindir  --sbindir  --libexecdir  --datadir
  --sysconfdir  --sharedstatedir  --localstatedir  --libdir  --infodir
  --mandir  --includedir

Known values for LIBRARY are:

    ace
    tao         (calls tao-config)

EOF

    exit $1
}

if test $# -eq 0; then
    usage 1
fi

cxx=false
cxxflags=false
libs_L=false
libs_l=false

export ACE_ROOT=/usr/share/ace

# These values are only valid for ACE.
the_compiler=`make -f /usr/share/ace/ace-config.GNU deb_ace_cxx`
the_libs=`make -f /usr/share/ace/ace-config.GNU deb_ace_libs`
the_flags=`make -f /usr/share/ace/ace-config.GNU  deb_ace_cxxflags  deb_ace_cppflags`

while test $# -gt 0; do
    case "$1" in
    -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
    *) optarg= ;;
    esac

    case $1 in
    --version)
	echo ACE `grep ACE_VERSION /usr/include/ace/Version.h | sed -e 's/\#define ACE_VERSION //' -e 's/"//g'`
	exit 0
	;;
    --help)
	usage 0
	;;
    --cxx)
        cxx=true
        ;;
    --cxxflags)
       	cxxflags=true
       	;;
    --libs)
       	libs_L=true
	libs_l=true
       	;;
    --libs-only-L)
	libs_L=true
	;;
    --libs-only-l)
	libs_l=true
	;;
    --*)
	usage 1
	;;
    ace)
# These are set before this option parsing loop begins.
#        the_compiler="@CXX@"
#        the_libs="$the_libs @ACE_LIBDIR@ -lACE @ACE_LIBS@"
#        the_flags="$the_flags @ACE_INCLUDEDIR@ @CXXFLAGS@"
	;;
    tao)
	if test -x /usr/bin/tao-config; then
          # The TAO compiler should be the same as ACE's compiler!
          the_compiler="`tao-config --cxx tao`"
          the_libs="$the_libs `tao-config --libs tao`"
          the_flags="$the_flags `tao-config --cxxflags tao`"
	else
	  echo "Error: tao-config not found"
	  exit 1
	fi
	;;
    *)
	cnf_sh=${libdir}/${1}Conf.sh
	if test -f ${cnf_sh}; then
	    . ${cnf_sh}
	    up_name=`echo $1 | tr a-z A-Z`
            cnf_compiler=\$${up_name}_COMPILER
	    cnf_libdir=\$${up_name}_LIBDIR
	    cnf_libs=\$${up_name}_LIBS
	    cnf_flags=\$${up_name}_INCLUDEDIR
            the_compiler="`eval echo $cnf_compiler`"
	    the_libs="$the_libs `eval echo $cnf_libdir` `eval echo $cnf_libs`"
	    the_flags="$the_flags `eval echo $cnf_flags`"
	else
	    echo Unknown library \`$1\' 1>&2
	fi
	;;
    esac
    shift
done

if $cxx; then
    all_flags="$the_compiler"
fi

if $cxxflags; then
    all_flags="$all_flags $the_flags"
fi

if $libs_L || $libs_l; then
    all_flags="$all_flags $the_libs"
fi

if test -z "$all_flags" || test "x$all_flags" = "x "; then
    exit 1
fi

# Straight out any possible duplicates, but be careful to
# get `-lfoo -lbar -lbaz' for `-lfoo -lbaz -lbar -lbaz'
other_flags=
lib_L_flags=
rev_libs=
for i in $all_flags; do
    case "$i" in
    # a library, save it for later, in reverse order
    -l*) rev_libs="$i $rev_libs" ;;
    -L*|-R*)
	if $libs_L; then
	    case " $lib_L_flags " in
	    *\ $i\ *) ;;			# already there
	    *) lib_L_flags="$lib_L_flags $i" ;;	# add it to output
	    esac 
	fi;;
    *)
	case " $other_flags " in
	*\ $i\ *) ;;				# already there
	*) other_flags="$other_flags $i" ;;	# add it to output
        esac ;;
    esac
done

ord_libs=
if $libs_l; then
    for i in $rev_libs; do
	case " $ord_libs " in
	*\ $i\ *) ;;			# already there
	*) ord_libs="$i $ord_libs" ;;	# add it to output in reverse order
	esac
    done
fi

echo $other_flags $lib_L_flags $ord_libs

exit 0
