#! /bin/sh

prefix=@prefix@
exec_prefix=@exec_prefix@
includedir=@includedir@
libdir=@libdir@

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

Known values for OPTION are:

  --prefix=DIR		change libxml prefix [default $prefix]
  --exec-prefix=DIR	change libxml exec prefix [default $exec_prefix]
  --libs		print library linking information
  --cflags		print pre-processor and compiler flags
  --modules		module support enabled
  --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 @VERSION@
	exit 0
	;;

    --help)
	usage 0
	;;

    --cflags)
       	echo @XML_INCLUDEDIR@ @XML_CFLAGS@
       	;;

    --libtool-libs)
	if [ -r ${libdir}/@XML_LIBTOOLLIBS@ ]
	then
	    echo ${libdir}/@XML_LIBTOOLLIBS@
	fi
        ;;

    --modules)
       	echo @WITH_MODULES@
       	;;

    --libs)
        if [ "`uname`" = "Linux" ]
	then
	    if [ "@XML_LIBDIR@" = "-L/usr/lib" -o "@XML_LIBDIR@" = "-L/usr/lib64" ]
	    then
		echo @XML_LIBS@ @MODULE_PLATFORM_LIBS@
	    else
		echo @XML_LIBDIR@ @XML_LIBS@ @MODULE_PLATFORM_LIBS@
	    fi
	else
	    echo @XML_LIBDIR@ @XML_LIBS@ @MODULE_PLATFORM_LIBS@ @WIN32_EXTRA_LIBADD@
	fi
       	;;

    *)
	usage
	exit 1
	;;
    esac
    shift
done

exit 0
