#!/bin/sh
## -*-sh-*-
#set -x
# BEGIN of icu-config-top
#******************************************************************************
#   Copyright (C) 1999-2004, International Business Machines
#   Corporation and others.  All Rights Reserved.
#******************************************************************************
# This script is designed to aid configuration of ICU.
# rpath links a library search path right into the binaries.


### END of icu-config-top

## Zero out prefix.
execprefix=
prefix=


loaddefs()
{

# Following from ./config/mh-linux
## -*-makefile-*-
#******************************************************************************
#   Copyright (C) 1999-2012, International Business Machines
#   Corporation and others.  All Rights Reserved.
#******************************************************************************
# This Makefile.inc is designed to be included into projects which make use
# of the ICU.

# CONTENTS OF THIS FILE
# 1). Base configuration information and linkage
# 2). Variables giving access to ICU tools
# 3). Host information
# 4). Compiler flags and settings 
# 5). Data Packaging directives
# 6). Include of platform make fragment (mh-* file)

##################################################################
#
#       *1*  base configuration information and linkage
#
##################################################################
# The PREFIX is the base of where ICU is installed.
# Inside this directory you should find  bin, lib, include/unicode, 
# etc.  If ICU is not installed in this directory, you must change the
# following line.  There should exist ${prefix}/include/unicode/utypes.h
# for example.
default_prefix="/usr/local"
if [ "x${prefix}" = "x" ]; then prefix="$default_prefix"; fi
exec_prefix="${prefix}"
libdir="${exec_prefix}/lib"
libexecdir="${exec_prefix}/libexec"
bindir="${exec_prefix}/bin"
datarootdir="${prefix}/share"
datadir="${datarootdir}"
sbindir="${exec_prefix}/sbin"

# about the ICU version
VERSION="50.1.1"
UNICODE_VERSION="6.2"

# The prefix for ICU libraries, normally 'icu'
ICUPREFIX="icu"
PACKAGE="icu"
LIBICU="lib${ICUPREFIX}"

# Static library prefix and file extension
STATIC_PREFIX="s"
LIBSICU="lib${STATIC_PREFIX}${ICUPREFIX}"
A="a"

# Suffix at the end of libraries. Usually empty.
ICULIBSUFFIX=""
# ICULIBSUFFIX_VERSION  is non-empty if it is to contain a library
# version. For example, if it is 21, it means libraries are named
# libicuuc21.so for example.

# rpath links a library search path right into the binaries.
## mh-files MUST NOT override RPATHLDFLAGS unless they provide
## equivalent '#SH#' lines for icu-config fixup
default_ENABLE_RPATH="NO"
if [ "x${ENABLE_RPATH}" = "x" ]; then ENABLE_RPATH="$default_ENABLE_RPATH"; fi
RPATHLDFLAGS="${LD_RPATH}${LD_RPATH_PRE}${libdir}"

# icu-config version of above 'if':
case "x$ENABLE_RPATH" in 
x[yY]*)
	ENABLE_RPATH=YES
	RPATHLDFLAGS="${LD_RPATH}${LD_RPATH_PRE}${libdir}"
	;;

x[nN]*)
	ENABLE_RPATH=NO
	RPATHLDFLAGS=""
	;;

x)
	ENABLE_RPATH=NO
	RPATHLDFLAGS=""
	;;

*)
	echo $0: Unknown --enable-rpath value ${ENABLE_RPATH} 1>&2
	exit 3
	;;
esac

# Name flexibility for the library naming scheme.  Any modifications should
# be made in the mh- file for the specific platform.
DATA_STUBNAME="data"
COMMON_STUBNAME="uc"
I18N_STUBNAME="i18n"
LAYOUT_STUBNAME="le"
LAYOUTEX_STUBNAME="lx"
IO_STUBNAME="io"
TOOLUTIL_STUBNAME="tu"
CTESTFW_STUBNAME="test"
 

### To link your application with ICU:
# 1. use LDFLAGS, CFLAGS, etc from above
# 2. link with ${ICULIBS}
# 3. optionally, add one or more of:
#    - ${ICULIBS_I18N}    - i18n library, formatting, etc.
#    - ${ICULIBS_LAYOUT}  - ICU layout library. 
#    - ${ICULIBS_ICUIO}   - ICU stdio equivalent library

ICULIBS_COMMON="-l${ICUPREFIX}uc${ICULIBSUFFIX}${ICULIBSUFFIX_VERSION}"
ICULIBS_DATA="-l${ICUPREFIX}${DATA_STUBNAME}${ICULIBSUFFIX}${ICULIBSUFFIX_VERSION}"
ICULIBS_I18N="-l${ICUPREFIX}${I18N_STUBNAME}${ICULIBSUFFIX}${ICULIBSUFFIX_VERSION}"
ICULIBS_TOOLUTIL="-l${ICUPREFIX}tu${ICULIBSUFFIX}${ICULIBSUFFIX_VERSION}"
ICULIBS_CTESTFW="-l${ICUPREFIX}ctestfw${ICULIBSUFFIX}${ICULIBSUFFIX_VERSION}"
ICULIBS_ICUIO="-l${ICUPREFIX}io${ICULIBSUFFIX}${ICULIBSUFFIX_VERSION}"
ICULIBS_OBSOLETE="-l${ICUPREFIX}obsolete${ICULIBSUFFIX}${ICULIBSUFFIX_VERSION}"
ICULIBS_LAYOUT="-l${ICUPREFIX}le${ICULIBSUFFIX}${ICULIBSUFFIX_VERSION}"
ICULIBS_LAYOUTEX="-l${ICUPREFIX}lx${ICULIBSUFFIX}${ICULIBSUFFIX_VERSION}"
ICULIBS_BASE="${LIBS} -L${libdir}"

# for icu-config to test with
ICULIBS_COMMON_LIB_NAME="${LIBICU}${COMMON_STUBNAME}${ICULIBSUFFIX}${ICULIBSUFFIX_VERSION}.${SO}"
ICULIBS_COMMON_LIB_NAME_A="${LIBICU}${COMMON_STUBNAME}${ICULIBSUFFIX}.${A}"

# ICULIBS is the set of libraries your application should link
# with usually. Many applications will want to add ${ICULIBS_I18N} as well. 
ICULIBS="${ICULIBS_BASE} ${ICULIBS_I18N} ${ICULIBS_COMMON} ${ICULIBS_DATA} "

# Proper echo newline handling is needed in icu-config
ECHO_N="-n"
ECHO_C=""
# Not currently being used but good to have for proper tab handling
ECHO_T=""

##################################################################
#
#       *2*  access to ICU tools
#
##################################################################
# Environment variable to set a runtime search path
#   (Overridden when necessary in -mh files)
LDLIBRARYPATH_ENVVAR="LD_LIBRARY_PATH"

# Versioned target for a shared library
## FINAL_SO_TARGET = ${SO_TARGET}.${SO_TARGET_VERSION}
## MIDDLE_SO_TARGET = ${SO_TARGET}.${SO_TARGET_VERSION_MAJOR}

# Access to important ICU tools.
# Use as follows:  ${INVOKE} ${GENRB} arguments .. 
INVOKE="${LDLIBRARYPATH_ENVVAR}=${libdir}:$$${LDLIBRARYPATH_ENVVAR} ${LEAK_CHECKER}"
GENCCODE="${sbindir}/genccode"
ICUPKG="${sbindir}/icupkg"
GENCMN="${sbindir}/gencmn"
GENRB="${bindir}/genrb"
PKGDATA="${bindir}/pkgdata"

# moved here because of dependencies
pkgdatadir="${datadir}/${PACKAGE}${ICULIBSUFFIX}/${VERSION}"
pkglibdir="${libdir}/${PACKAGE}${ICULIBSUFFIX}/${VERSION}"

##################################################################
#
#       *3*  Information about the host
#
##################################################################

# Information about the host that 'configure' was run on.
host="x86_64-unknown-linux-gnu"
host_alias=""
host_cpu="x86_64"
host_vendor="unknown"
host_os="linux-gnu"
# Our platform canonical name (as determined by configure)
# this is a #define value (i.e. U_XXXX or XXXX)
platform="U_LINUX"

##################################################################
#
#       *4*  compiler flags and misc. options
#
##################################################################
AR="ar"
# initial tab keeps it out of the shell version.
ARFLAGS=" ${ARFLAGS}"
CC="gcc"
CFLAGS="-O2 -Wall -std=c99 -pedantic -Wshadow -Wpointer-arith -Wmissing-prototypes -Wwrite-strings ${THREADSCFLAGS} "
CPP="gcc -E"
CPPFLAGS="-ffunction-sections -fdata-sections ${THREADSCPPFLAGS}   ${LIBCPPFLAGS} -I${prefix}/include"
CXX="g++"
CXXFLAGS="-O2 -W -Wall -pedantic -Wpointer-arith -Wwrite-strings -Wno-long-long ${THREADSCXXFLAGS} "
DEFAULT_MODE="static"
DEFS="-DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DSIZEOF_VOID_P=8 -DHAVE_LIBM=1 -DHAVE_DLFCN_H=1 -DHAVE_DLOPEN=1 -DHAVE_GETTIMEOFDAY=1 -DHAVE_LIBPTHREAD=1 -DHAVE_INTTYPES_H=1 -DHAVE_DIRENT_H=1 -DHAVE_WCHAR_H=1 -DSIZEOF_WCHAR_T=4 "
FFLAGS="@FFLAGS@"
# use a consistent INSTALL 
INSTALL="${SHELL} ${pkgdatadir}/install-sh -c"
INSTALL_DATA="${INSTALL} -m 644"
INSTALL_PROGRAM="${INSTALL}"
INSTALL_SCRIPT="${INSTALL}"
LDFLAGS="-Wl,--gc-sections ${RPATHLDFLAGS}"
LIBS="-lpthread -ldl -lm  "
LIB_M=""
LIB_VERSION="50.1.1"
LIB_VERSION_MAJOR="50"
MKINSTALLDIRS="${SHELL} ${pkgdatadir}/mkinstalldirs"
RANLIB="ranlib"
RMV="rm -rf"
SHELL="/bin/sh"
SHLIB_c="${CC} ${DEFS} ${CPPFLAGS} ${CFLAGS} ${LDFLAGS} -shared"
SHLIB_cc="${CXX} ${DEFS} ${CPPFLAGS} ${CXXFLAGS} ${LDFLAGS} -shared"
U_IS_BIG_ENDIAN="0"
includedir="${prefix}/include"
infodir="${datarootdir}/info"
localstatedir="${prefix}/var"
mandir="${datarootdir}/man"
oldincludedir="/usr/include"
program_transform_name="s,x,x,"
sharedstatedir="${prefix}/com"
sysconfdir="${prefix}/etc"
INSTALL_L="${INSTALL_DATA}"

# for derivative builds - don't bother with VERBOSE/NONVERBOSE SILENT_COMPILE

##################################################################
#
#       *5* packaging options and directories
#
##################################################################

# The basename of the ICU data file (i.e. icudt21b )
ICUDATA_CHAR="l"
ICUDATA_NAME="icudt50l"

# Defaults for pkgdata's mode and directories
# The default data dir changes depending on what packaging mode 
# is being used
if [ "x$PKGDATA_MODE" = "x" ];
then
PKGDATA_MODE="static"
fi

case "$PKGDATA_MODE" in
common)
ICUDATA_DIR="${pkgdatadir}"
ICUPKGDATA_DIR="${ICUDATA_DIR}"
;;
dll)
ICUDATA_DIR="${pkgdatadir}"
ICUPKGDATA_DIR="${libdir}"
;;
*)
ICUDATA_DIR="${pkgdatadir}"
ICUPKGDATA_DIR="${ICUDATA_DIR}"
;;

esac

GENCCODE_ASSEMBLY="-a gcc"

##################################################################
#
#       *6* Inclusion of platform make fragment (mh-* file)
#
##################################################################
# The mh- file ("make fragment") for the platform is included here. 
# It may override the above settings.
# It is put last so that the mh-file can override anything.
# The selfcheck is just a sanity check that this makefile is
# parseable. The mh fragment is only included if this does not occur.

## -*-makefile-*-
## Linux-specific setup
## Copyright (c) 1999-2012, International Business Machines Corporation and
## others. All Rights Reserved.

## Commands to generate dependency files
GEN_DEPS_c="${CC} -E -MM ${DEFS} ${CPPFLAGS}"
GEN_DEPS_cc="${CXX} -E -MM ${DEFS} ${CPPFLAGS}"

## Flags for position independent code
SHAREDLIBCFLAGS="-fPIC"
SHAREDLIBCXXFLAGS="-fPIC"
SHAREDLIBCPPFLAGS="-DPIC"

## Additional flags when building libraries and with threads
THREADSCPPFLAGS="-D_REENTRANT"
LIBCPPFLAGS=""

## Compiler switch to embed a runtime search path
LD_RPATH="-Wl,-zorigin,-rpath,\$\$ORIGIN "
LD_RPATH_PRE="-Wl,-rpath,"

## These are the library specific LDFLAGS
LDFLAGSICUDT="-nodefaultlibs -nostdlib"

## Compiler switch to embed a library name
# The initial tab in the next line is to prevent icu-config from reading it.
# We can't depend on MIDDLE_SO_TARGET being set.
LD_SONAME=

## Shared library options
LD_SOOPTIONS="-Wl,-Bsymbolic"

## Shared object suffix
SO="so"
## Non-shared intermediate object suffix
STATIC_O="ao"

## Compilation rules

## Dependency rules

## Versioned libraries rules

##  Bind internal references

# LDflags that pkgdata will use
BIR_LDFLAGS="-Wl,-Bsymbolic"

# Dependencies [i.e. map files] for the final library
BIR_DEPS=""

## Remove shared library 's'
STATIC_PREFIX_WHEN_USED=""
STATIC_PREFIX=""

## End Linux-specific setup

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

ICUUC_FILE="${libdir}/${ICULIBS_COMMON_LIB_NAME}"
ICUUC_FILE_A="${libdir}/${ICULIBS_COMMON_LIB_NAME_A}"
    
#  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 "  --noverify             Don't verify that ICU is actually installed."
    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"
    echo "  --incpkgdatafile       Print path to pkgdata.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}" -a ! -f "${ICUUC_FILE_A}" ] && [ ${IGNORE_ICUUC_FILE_CHECK} = "no" ] && [ ${SANITY} = "sane" ];
    then
	echo "### $ME: Can't find ${ICUUC_FILE} - ICU prefix is wrong."  1>&2
	echo "###      Try the --prefix= option " 1>&2
	echo "###      or --detect-prefix" 1>&2
        echo "###      (If you want to disable this check, use  the --noverify option)" 1>&2
	echo "### $ME: Exitting." 1>&2
	exit 2
    fi
}

## Main starts here.

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

# For certain options (e.g. --detect-prefix) don't check for icuuc library file.

IGNORE_ICUUC_FILE_CHECK="no";

SANITY="sane"

case "$1" in
--noverify)
    SANITY="nosanity"
    shift
    ;;
esac

case "$1" in 
*prefix*)
    IGNORE_ICUUC_FILE_CHECK="yes"
    ;;
esac

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

if [ $# -gt 0 -a $1 = "--selfcheck" ];
then
	echo "passed"
	exit 
	# EXIT for self check
fi

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
	    ;;
        
        --noverify)
            echo "### $ME: Error: --noverify must be the first argument." 1>&2
            exit 1
            ;;
            
    --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 $ECHO_N "${CFLAGS} ${ECHO_C}"
	    ;;
	    
	--cc)
	    echo $ECHO_N "${CC} ${ECHO_C}"
	    ;;
	    
	--cxx)
	    echo $ECHO_N "${CXX} ${ECHO_C}"
	    ;;

	--cxxflags)
	    echo $ECHO_N "${CXXFLAGS} ${ECHO_C}"
	    ;;

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

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

	--cppflags-dynamic)
	    echo $ECHO_N "${SHAREDLIBCPPFLAGS} ${ECHO_C}"
	    ;;

	--cxxflags-dynamic)
	    echo $ECHO_N "${SHAREDLIBCXXFLAGS} ${ECHO_C}"
	    ;;

	--cflags-dynamic)
	    echo $ECHO_N "${SHAREDLIBCFLAGS} ${ECHO_C}"
	    ;;

	--ldflags-system)
	    echo $ECHO_N "${LIBS} ${ECHO_C}"
	    ;;

	--ldflags)
	    echo $ECHO_N "${LDFLAGS} ${ICULIBS} ${LIBS} ${ECHO_C}"
# $RPATH_LDFLAGS
	    ;;

	--ldflags-libsonly)
	    echo $ECHO_N "${ICULIBS_I18N} ${ICULIBS_COMMON} ${ICULIBS_DATA} ${ECHO_C}"
	    ;;

	--ldflags-icuio)
	    echo $ECHO_N " ${ICULIBS_ICUIO} ${ECHO_C}"
	    ;;

	--ldflags-obsolete)
	    echo $ECHO_N "${ICULIBS_OBSOLETE} ${ECHO_C}"
	    ;;

	--ldflags-toolutil)
	    echo $ECHO_N " ${ICULIBS_TOOLUTIL} ${ECHO_C}"
	    ;;

	--ldflags-layout)
	    echo $ECHO_N "${ICULIBS_LAYOUT} ${ICULIBS_LAYOUTEX} ${ECHO_C}"
	    ;;

	--ldflags-searchpath)
	    echo $ECHO_N "-L${libdir} ${ECHO_C}"
	    ;;

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

	--exec-prefix)
	    echo $exec_prefix
	    ;;

	--prefix)
	    echo $prefix
	    ;;

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

	--sysconfdir)
	    echo $sysconfdir
	    ;;

	--mandir)
	    echo $mandir
	    ;;

	--shared-datadir)
	    echo $ECHO_N "${datadir} ${ECHO_C}"
	    ;;

        --incfile)
	    echo $ECHO_N "${pkglibdir}/Makefile.inc ${ECHO_C}"
	    ;;

	--incpkgdatafile)
	    echo $ECHO_N "${pkglibdir}/pkgdata.inc ${ECHO_C}"
	    ;;

	--icudata)
	    echo $ECHO_N "${ICUDATA_NAME} ${ECHO_C}"
	    ;;

	--icudata-mode)
	    echo $ECHO_N "${PKGDATA_MODE} ${ECHO_C}"
	    ;;

	--icudata-install-dir)
        echo $ECHO_N "${ICUPKGDATA_DIR} ${ECHO_C}"
	    ;;
	    
	--icudatadir)
	    echo $ECHO_N "${ICUDATA_DIR} ${ECHO_C}"
	    ;;

	--shlib-c)
	    echo $ECHO_N "${SHLIB_c} ${ECHO_C}"
	    ;;

	--shlib-cc)
	    echo $ECHO_N "${SHLIB_cc} ${ECHO_C}"
	    ;;

	--version)
	    echo $ECHO_N $VERSION
	    ;;

	--unicode-version)
	    echo $ECHO_N $UNICODE_VERSION
	    ;;
	
	--host)
	    echo $host
	    exit 0
	    ;;

	--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
    
    # Reset the ignore icuuc file check flag
    if [ $IGNORE_ICUUC_FILE_CHECK = "yes" ]; then
        IGNORE_ICUUC_FILE_CHECK="no"
        sanity
    fi
done
echo
# Check once before we quit (will check last used prefix)
sanity
## END of icu-config-bottom

exit 0

# Rebuilt on Wed Jan 2 17:41:22 PST 2013
