## -*-sh-*-
## BEGIN of icu-config-bottom.
## Copyright (c) 2002-2007, International Business Machines Corporation and
## others. All Rights Reserved.

ICUUC_FILE=${libdir}/${ICULIBS_COMMON_LIB_NAME}
    
#  echo ENABLE RPATH $ENABLE_RPATH and RPATHLDFLAGS=${RPATH_LDFLAGS}
if [ "x$PKGDATA_MODE" = "x" ]; then
    PKGDATA_MODE=dll
fi

}

## The actual code of icu-config goes here.

ME=`basename "$0"`

allflags()
{
    echo "  --bindir               Print binary directory path (bin)"
    echo "  --cc                   Print C compiler used [CC]"
    echo "  --cflags               Print C compiler flags [CFLAGS]"
    echo "  --cflags-dynamic       Print additional C flags for"
    echo "                             building shared libraries."
    echo "  --cppflags             Print C Preprocessor flags [CPPFLAGS]"
    echo "  --cppflags-dynamic     Print additional C Preprocessor flags for"
    echo "                             building shared libraries."
    echo "  --cppflags-searchpath  Print only -I include directives  (-Iinclude)"
    echo "  --cxx                  Print C++ compiler used [CXX]"
    echo "  --cxxflags             Print C++ compiler flags [CXXFLAGS]"
    echo "  --cxxflags-dynamic     Print additional C++ flags for"
    echo "                             building shared libraries."
    echo "  --detect-prefix        Attempt to detect prefix based on PATH"
    echo "  --exec-prefix          Print prefix for executables (/bin)"
    echo "  --exists               Return with 0 status if ICU exists else fail"
    echo "  --help, -?, --usage    Print this message"
    echo "  --icudata              Print shortname of ICU data file (icudt21l)"
    echo "  --icudata-install-dir  Print path to install data to - use as --install option to pkgdata(1)"
    echo "  --icudata-mode         Print default ICU pkgdata mode (dll) - use as --mode option to pkgdata(1)."
    echo "  --icudatadir           Print path to packaged archive data. Can set as [ICU_DATA]"
    echo "  --invoke               Print commands to invoke an ICU program"
    echo "  --invoke=<prog>        Print commands to invoke an ICU program named <prog> (ex: genrb)" 
    echo "  --ldflags              Print -L search path and -l libraries to link with ICU [LDFLAGS].  This is for the data, uc (common), and i18n libraries only.  "
    echo "  --ldflags-layout       Print ICU layout engine link directive. Use in addition to --ldflags"
    echo "  --ldflags-libsonly     Same as --ldflags, but only the -l directives"
    echo "  --ldflags-searchpath   Print only -L (search path) directive"
    echo "  --ldflags-system       Print only system libs ICU links with (-lpthread, -lm)"
    echo "  --ldflags-icuio        Print ICU icuio link directive. Use in addition to --ldflags "
    echo "  --ldflags-obsolete     Print ICU obsolete link directive. Use in addition to --ldflags. (requires icuapps/obsolete to be built and installed.) "
    echo "  --mandir               Print manpage (man) path"
    echo "  --prefix               Print PREFIX to icu install (/usr/local)"
    echo "  --prefix=XXX           Set prefix to XXX for remainder of command"
    echo "  --sbindir              Print system binary path (sbin) "
    echo "  --shared-datadir       Print shared data (share) path. This is NOT the ICU data dir."
    echo "  --shlib-c              Print the command to compile and build C shared libraries with ICU"
    echo "  --shlib-cc             Print the command to compile and build C++ shared libraries with ICU"
    echo "  --sysconfdir           Print system config (etc) path"
    echo "  --unicode-version      Print version of Unicode data used in ICU ($UNICODE_VERSION)"
    echo "  --version              Print ICU version ($VERSION)"
    echo "  --incfile              Print path to Makefile.inc (for -O option of pkgdata)"
    echo "  --install              Print path to install-sh"
    echo "  --mkinstalldirs              Print path to mkinstalldirs"
}

## Print the normal usage message
shortusage()
{
    echo "usage: ${ME} " `allflags | cut -c-25 | sed -e 's%.*%[ & ]%'`
}


usage()
{
    echo "${ME}: icu-config: ICU configuration helper script"
    echo
    echo "The most commonly used options will be --cflags, --cxxflags, --cppflags, and --ldflags."
    echo 'Example (in make):   CPFLAGS=$(shell icu-config --cppflags)'
    echo '                     LDFLAGS=$(shell icu-config --ldflags)'
    echo "                     (etc).."
    echo
    echo "Usage:"
    allflags

    echo 
    echo " [Brackets] show MAKE variable equivalents,  (parenthesis) show example output"
    echo
    echo "Copyright (c) 2002, International Business Machines Corporation and others. All Rights Reserved."
}

## Check the sanity of current variables
sanity()
{
    if [ ! -f ${ICUUC_FILE} ];
    then
	echo "### $ME: Can't find ${ICUUC_FILE} - ICU prefix is wrong."  1>&2
	echo "###      Try the --prefix= or --exec-prefix= options " 1>&2
	echo "###      or --detect-prefix"
	echo "### $ME: Exitting." 1>&2
	exit 2
    fi
}

## Main starts here.

if [ $# -lt 1 ]; then
    shortusage
    exit 1
fi


# Load our variables from autoconf
# ALWAYS load twice because of dependencies
loaddefs
loaddefs
sanity

while [ $# -gt 0 ];
do
    arg="$1"
    var=`echo $arg | sed -e 's/^[^=]*=//'`
#    echo "### processing $arg" 1>&2
    case "$arg" in

        # undocumented.
	--debug)
	    set -x
	    ;;

        --so)
            echo $SO
            ;;

	--bindir)
	    echo $bindir
	    ;;

	--libdir)
	    echo $libdir
	    ;;

	--exists)
	    sanity
	    ;;

	--sbindir)
	    echo $sbindir
	    ;;

	--mkinstalldirs)
	    echo ${MKINSTALLDIRS}
	    ;;

	--install)
	    echo ${INSTALL}
	    ;;

	--invoke=*)
	    QUOT="\""
            CMD="${var}"

            # If it's not a locally executable command (1st choice) then 
            # search for it in the ICU directories. 
            if [ ! -x ${CMD} ]; then
                if [ -x ${bindir}/${var} ]; then
                    CMD="${bindir}/${var}"
                fi
                if [ -x ${sbindir}/${var} ]; then
                    CMD="${sbindir}/${var}"
                fi
            fi

	    echo "env ${QUOT}${LDLIBRARYPATH_ENVVAR}=${libdir}:"'${'"${LDLIBRARYPATH_ENVVAR}"'}'${QUOT} ${CMD}
	    ;;

	--invoke)
	    QUOT="\""
	    echo "env ${QUOT}${LDLIBRARYPATH_ENVVAR}=${libdir}:"'${'"${LDLIBRARYPATH_ENVVAR}"'}'${QUOT}
	    ;;

	--cflags)
	    echo $CFLAGS
	    ;;
	    
	--cc)
	    echo $CC
	    ;;
	    
	--cxx)
	    echo $CXX
	    ;;

	--cxxflags)
	    echo $CXXFLAGS
	    ;;

	--cppflags)
	    # Don't echo the -I. - it's unneeded.
	    echo $CPPFLAGS | sed -e 's/-I. //'
	    ;;

	--cppflags-searchpath)
	    echo -I${prefix}/include
	    ;;

	--cppflags-dynamic)
	    echo $SHAREDLIBCPPFLAGS
	    ;;

	--cxxflags-dynamic)
	    echo $SHAREDLIBCXXFLAGS
	    ;;

	--cflags-dynamic)
	    echo $SHAREDLIBCFLAGS
	    ;;

	--ldflags-system)
	    echo $LIBS
	    ;;

	--ldflags)
	    echo $LDFLAGS $ICULIBS $LIBS 
# $RPATH_LDFLAGS
	    ;;

	--ldflags-libsonly)
	    echo $ICULIBS_I18N $ICULIBS_COMMON $ICULIBS_DATA 
	    ;;

	--ldflags-icuio)
	    echo $ICULIBS_ICUIO
	    ;;

	--ldflags-obsolete)
	    echo $ICULIBS_OBSOLETE
	    ;;

	--ldflags-toolutil)
	    echo $ICULIBS_TOOLUTIL
	    ;;

	--ldflags-layout)
	    echo $ICULIBS_LAYOUT $ICULIBS_LAYOUTEX
	    ;;

	--ldflags-searchpath)
	    echo -L${libdir}
	    ;;

	--detect-prefix)
	    HERE=`echo $0 | sed -e "s/$ME//g"`
	    if [ -f $HERE/../lib/${ICULIBS_COMMON_LIB_NAME} ]; then
		prefix=$HERE/..
		echo "## Using --prefix=${prefix}" 1>&2
	    fi
	    loaddefs
	    loaddefs
	    sanity
	    ;;

	--exec-prefix)
	    echo $exec_prefix
	    ;;

	--prefix)
	    echo $prefix
	    ;;

	--prefix=*)
	    prefix=$var
	    loaddefs
	    loaddefs
	    sanity
	    ;;

	--sysconfdir)
	    echo $sysconfdir
	    ;;

	--mandir)
	    echo $mandir
	    ;;

	--shared-datadir)
	    echo $datadir
	    ;;

        --incfile)
	    echo $pkglibdir/Makefile.inc
	    ;;

	--icudata)
	    echo $ICUDATA_NAME
	    ;;

	--icudata-mode)
	    echo $PKGDATA_MODE
	    ;;

	--icudata-install-dir)
            echo $ICUPKGDATA_DIR
	    ;;
	    
	--icudatadir)
	    echo $ICUDATA_DIR
	    ;;

	--shlib-c)
	    echo $SHLIB_c
	    ;;

	--shlib-cc)
	    echo $SHLIB_cc
	    ;;

	--version)
            echo $VERSION
            ;;

        --unicode-version)
            echo $UNICODE_VERSION
            ;;

	--help)
	    usage
	    exit 0
	    ;;

	--usage)
	    usage
	    exit 0
	    ;;

#	--enable-rpath=*)
#	    ENABLE_RPATH=$var
#	    loaddefs
#	    ;;

	-?)
	    usage
	    exit 0
	    ;;

        *)
	    echo ${ME}: ERROR Unknown Option $arg 1>&2
            echo 1>&2
            shortusage 1>&2
	    echo "### $ME: Exitting." 1>&2
            exit 1;
            ;;
    esac
    shift
done

# Check once before we quit (will check last used prefix)
sanity
## END of icu-config-bottom

exit 0

