#!/bin/sh
# Copyright (C) 2006-2007 David Sugar, Tycho Softworks.
#
# This file is free software; as a special exception the author gives
# unlimited permission to copy and/or distribute it, with or without
# modifications, as long as this notice is preserved.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

prefix=/usr/local
exec_prefix=${prefix}
includedir=${prefix}/include

if [ "`ldd /bin/sh | grep lib64`" = "" ]
then
    libdir=${exec_prefix}/lib
else
    libdir=${exec_prefix}/lib64
fi

usage()
{
    cat <<EOF
Usage: commoncpp-config [OPTION]

Known values for OPTION are:

  --prefix=DIR      change ucommon prefix [default $prefix]
  --exec-prefix=DIR change ucommon exec prefix [default $exec_prefix]
  --libs        print library linking information
  --cflags      print pre-processor and compiler flags
  --includes    print framework include directory
  --plugins     print framework plugin directory
  --help        display this help and exit
  --version     output version information
EOF

    exit $1
}

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

cflags=false
libs=false

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

    case "$1" in
    --prefix=*)
        prefix=$optarg
        includedir=$prefix/include
        libdir=$prefix/lib
        ;;

    --prefix)
        echo $prefix
        ;;

    --exec-prefix=*)
        exec_prefix=$optarg
        libdir=$exec_prefix/lib
        ;;

    --exec-prefix)
        echo $exec_prefix
        ;;

    --version)
        echo 6.0.7
        exit 0
        ;;

    --help)
        usage 0
        ;;

    --cflags)
        echo  -Wno-long-long -DNEW_STDCPP -pthread -fno-check-new -finline -fvisibility=hidden -DUCOMMON_VISIBILITY=1
        ;;

    --libtool-libs)
        if [ -r ${libdir}/libcommoncpp.la ]
        then
            echo ${libdir}/libcommoncpp.la
        fi
        ;;

    --libs)
        echo -lcommoncpp -lucommon   -lrt  -ldl -lpthread -lc
        ;;

    --includes)
        echo /usr/local/include/ucommon
        ;;

    *)
        usage
        exit 1
        ;;

    esac
    shift
done

exit 0
