#! /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:

  --ca        ca bundle install path
  --cc        compiler
  --cflags    pre-processor and compiler flags
  --features  newline separated list of enabled features
  --protocols newline separated list of enabled protocols
  --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
    --ca)
	echo "@CURL_CA_BUNDLE@"
	;;

    --cc)
	echo "@CC@"
	;;

    --prefix)
	echo "$prefix"
	;;

    --feature|--features)
	if test "@USE_SSLEAY@" = "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 "@HAVE_LIBZ@" = "1"; then
          echo "libz"
        fi
	if test "@HAVE_ARES@" = "1"; then
          echo "AsynchDNS"
        fi
	;;

    --protocols)
	if test "@CURL_DISABLE_HTTP@" != "1"; then
          echo "HTTP"
	  if test "@USE_SSLEAY@" = "1"; then
            echo "HTTPS"
          fi
        fi
	if test "@CURL_DISABLE_FTP@" != "1"; then
          echo "FTP"
	  if test "@USE_SSLEAY@" = "1"; then
            echo "FTPS"
          fi
        fi
	if test "@CURL_DISABLE_GOPHER@" != "1"; then
          echo "GOPHER"
        fi
	if test "@CURL_DISABLE_FILE@" != "1"; then
          echo "FILE"
        fi
	if test "@CURL_DISABLE_TELNET@" != "1"; then
          echo "TELNET"
        fi
	if test "@CURL_DISABLE_LDAP@" != "1"; then
          echo "LDAP"
        fi
	if test "@CURL_DISABLE_DICT@" != "1"; then
          echo "DICT"
        fi
	;;
    --version)
	echo libcurl @VERSION@
	exit 0
	;;

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

    --help)
	usage 0
	;;

    --cflags)
       	if test "X@includedir@" = "X/usr/include"; then
          echo ""
        else
          echo "-I@includedir@"
        fi
       	;;

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

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

exit 0
