#! /bin/sh
#
# The idea to this kind of setup info script was stolen from numerous
# other packages, such as neon, libxml and gnome.
#
# $Id$
#
prefix=@prefix@
exec_prefix=@exec_prefix@
includedir=@includedir@

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

Available values for OPTION include:

  --cc        compiler
  --cflags    pre-processor and compiler flags
  --feature   newline separated list of enabled features
  --help      display this help and exit
  --libs      library linking information
  --prefix    curl install prefix
  --version   output version information
  --vernum    output the version information as a number (hexadecimal)
EOF

    exit $1
}

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

while test $# -gt 0; do
    case "$1" in
    # this deals with options in the style
    # --option=value and extracts the value part
    # [not currently used]
    -*=*) value=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
    *) value= ;;
    esac

    case "$1" in
    --cc)
	echo @CC@
	;;

    --prefix)
	echo $prefix
	;;

    --feature)
	if test "@OPENSSL_ENABLED@" = "1"; then
          echo "SSL"
        fi
	if test "@KRB4_ENABLED@" = "1"; then
          echo "KRB4"
        fi
	if test "@IPV6_ENABLED@" = "1"; then
          echo "IPv6"
        fi
	if test "@CURL_DISABLE_HTTP@" = "1"; then
          echo "HTTP-disabled"
        fi
	if test "@CURL_DISABLE_FTP@" = "1"; then
          echo "FTP-disabled"
        fi
	if test "@CURL_DISABLE_GOPHER@" = "1"; then
          echo "GOPHER-disabled"
        fi
	if test "@CURL_DISABLE_FILE@" = "1"; then
          echo "FILE-disabled"
        fi
	if test "@CURL_DISABLE_TELNET@" = "1"; then
          echo "TELNET-disabled"
        fi
	if test "@CURL_DISABLE_LDAP@" = "1"; then
          echo "LDAP-disabled"
        fi
	if test "@CURL_DISABLE_DICT@" = "1"; then
          echo "DICT-disabled"
        fi
	;;

    --version)
	echo libcurl @VERSION@
	exit 0
	;;

    --vernum)
	echo @VERSIONNUM@
	exit 0
	;;

    --help)
	usage 0
	;;

    --cflags)
       	echo -I@includedir@
       	;;

    --libs)
       	echo -L@libdir@ -lcurl @LDFLAGS@ @LIBS@
       	;;

    *)
        echo "unknown option: $1"
	usage
	exit 1
	;;
    esac
    shift
done

exit 0
