#!/bin/sh
# Copyright (C) 2000-2005 Open Source Telecom Corporation.
# Copyright (C) 2006-2008 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.

ost_cv_dynloader="@ost_cv_dynloader@"      
modflags="@MODULE_FLAGS@"
ccflags="@THREAD_FLAGS@ @COMMON_FLAGS@"
cclink="@SOCKET_LIBS@ @GETOPT_LIBS@ @THREAD_LIBS@"
ccload="@DYN_LOADER@"
ccstd="@SSL_LIBS@ @ZSTREAM_LIBS@"
prefix="@prefix@"
exec_prefix="@exec_prefix@"
libdir="-L@libdir@"

includedir="@includedir@"

usage()
{
	cat <<EOF
Usage: ccgnu2-config [OPTIONS]
Options:
	[--prefix[=DIR]]
	[--sysroot[=DIR]]
	[--exec-prefix[=DIR]]
	[--version]
	[--flags]
	[--libs]
	[--gnulibs]
	[--iolibs]
	[--extlibs]
	[--stdlibs]
	[--includes]
	[--module]
EOF
	exit $1
}

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

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
		;;
	--sysroot=*)
		sysroot=$optarg
		prefix=$sysroot$prefix
		includedir=$sysroot$includedir
		libdir="-L$sysroot@libdir@"
		;;
	--prefix)
		echo @prefix@
		;;
	--exec-prefix=*)
		exec_prefix=$optarg
		libdir=$exec_prefix/lib
		;;
	--exec-prefix)
		echo $exec_prefix
	;;
	--version)
		echo @VERSION@
		;;
	--flags)
		echo $ccflags
		;;
	--libs | --gnulibs)
		echo $libdir -lccgnu2 $ccload $cclink
		;;
	--cclibs)
		echo $cclink
		;;
	--iolibs)
		echo $libdir -lccgnu2 $ccload $cclink
		;;
	--stdlibs)
		echo $libdir -lccext2 -lccgnu2 $ccstd $ccload $cclink
		;;
	--extlibs)
		echo -lccext2 $ccstd
		;;
	--includes)
		echo -I$includedir 
		;;
	--dyn | --dso)
		echo $ost_cv_dynloader
		;;
	--modflags | --module)
		echo $modflags
		;;
	--help)
		usage 0
		;;
	*)
		usage 1 1>&2
		;;
	esac
	shift
done

