#!/bin/sh

prefix=@prefix@

major_version=@MOD_MAJOR_VERSION@
minor_version=@MOD_MINOR_VERSION@
patch_version=@MOD_PATCH_VERSION@

usage()
{
	cat <<EOF
Usage: nspr-config [OPTIONS] [LIBRARIES]
Options:
	[--prefix[=DIR]]
	[--exec-prefix[=DIR]]
	[--includedir[=DIR]]
	[--libdir[=DIR]]
	[--version]
	[--libs]
	[--cflags]
Libraries:
	nspr
	plc
	plds
EOF
	exit $1
}

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

lib_nspr=yes
lib_plc=yes
lib_plds=yes

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
      ;;
    --prefix)
      echo_prefix=yes
      ;;
    --exec-prefix=*)
      exec_prefix=$optarg
      ;;
    --exec-prefix)
      echo_exec_prefix=yes
      ;;
    --includedir=*)
      includedir=$optarg
      ;;
    --includedir)
      echo_includedir=yes
      ;;
    --libdir=*)
      libdir=$optarg
      ;;
    --libdir)
      echo_libdir=yes
      ;;
    --version)
      echo ${major_version}.${minor_version}.${patch_version}
      ;;
    --cflags)
      echo_cflags=yes
      ;;
    --libs)
      echo_libs=yes
      ;;
    nspr)
      lib_nspr=yes
      ;;
    plc)
      lib_plc=yes
      ;;
    plds)
      lib_plds=yes
      ;;
    *)
      usage 1 1>&2
      ;;
  esac
  shift
done

# Set variables that may be dependent upon other variables
if test -z "$exec_prefix"; then
    exec_prefix=@exec_prefix@
fi
if test -z "$includedir"; then
    includedir=@includedir@
fi
if test -z "$libdir"; then
    libdir=@libdir@
fi

if test "$echo_prefix" = "yes"; then
    echo $prefix
fi

if test "$echo_exec_prefix" = "yes"; then
    echo $exec_prefix
fi

if test "$echo_includedir" = "yes"; then
    echo $includedir
fi

if test "$echo_libdir" = "yes"; then
    echo $libdir
fi

if test "$echo_cflags" = "yes"; then
    echo -I$includedir
fi

if test "$echo_libs" = "yes"; then
      libdirs=-L$libdir
      if test -n "$lib_plds"; then
	libdirs="$libdirs -lplds${major_version}"
      fi
      if test -n "$lib_plc"; then
	libdirs="$libdirs -lplc${major_version}"
      fi
      if test -n "$lib_nspr"; then
	libdirs="$libdirs -lnspr${major_version}"
      fi
      os_ldflags="@LDFLAGS@"
      for i in $os_ldflags ; do
	if echo $i | grep \^-L >/dev/null; then
	  libdirs="$libdirs $i"
        fi
      done
      echo $libdirs @OS_LIBS@
fi      

