#!/bin/sh
#
# CUPS configuration utility.
#
# Copyright © 2007-2019 by Apple Inc.
# Copyright © 2001-2006 by Easy Software Products, all rights reserved.
#
# Licensed under Apache License v2.0.  See the file "LICENSE" for more
# information.
#

VERSION="@CUPS_VERSION@"
APIVERSION="2.3"
BUILD="@CUPS_BUILD@"

prefix=@prefix@
exec_prefix=@exec_prefix@
bindir=@bindir@
includedir=@includedir@
libdir=@libdir@
datarootdir=@datadir@
datadir=@datadir@
sysconfdir=@sysconfdir@
cups_datadir=@CUPS_DATADIR@
cups_serverbin=@CUPS_SERVERBIN@
cups_serverroot=@CUPS_SERVERROOT@
cups_printerroot=@CUPS_PRINTERROOT@
INSTALLSTATIC=@INSTALLSTATIC@

# flags for compiler and linker...
CFLAGS=""
LDFLAGS="@EXPORT_LDFLAGS@"
LIBS="@LIBGSSAPI@ @DNSSDLIBS@ @EXPORT_SSLLIBS@ @LIBZ@ @LIBS@"

# Check for local invocation...
selfdir=`dirname $0`

if test -f "$selfdir/cups/cups.h"; then
    CFLAGS="-I$selfdir"
    LDFLAGS="-L$selfdir/cups $LDFLAGS"
    libdir="$selfdir/cups"
else
    if test $includedir != /usr/include; then
	CFLAGS="$CFLAGS -I$includedir"
    fi

    if test $libdir != /usr/lib -a $libdir != /usr/lib32 -a $libdir != /usr/lib64; then
	LDFLAGS="$LDFLAGS -L$libdir"
    fi
fi


usage ()
{
    echo "Usage: cups-config --api-version"
    echo "       cups-config --build"
    echo "       cups-config --cflags"
    echo "       cups-config --datadir"
    echo "       cups-config --help"
    echo "       cups-config --ldflags"
    echo "       cups-config [--image] [--static] --libs"
    echo "       cups-config --serverbin"
    echo "       cups-config --serverroot"
    echo "       cups-config --printerroot"
    echo "       cups-config --version"

    exit $1
}

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

# Parse command line options
static=no

while test $# -gt 0; do
    case $1 in
	--api-version)
	    echo $APIVERSION
	    ;;
	--build)
	    echo $BUILD
	    ;;
	--cflags)
	    echo $CFLAGS
	    ;;
	--datadir)
	    echo $cups_datadir
	    ;;
	--help)
	    usage 0
	    ;;
	--image)
	    # Do nothing
	    ;;
	--ldflags)
	    echo $LDFLAGS
	    ;;
	--libs)
	    if test $static = no; then
	        libs="@EXTLINKCUPS@";
	    else
	        libs="$libdir/libcups.a $LIBS";
	    fi
	    echo $libs
	    ;;
        --printerroot)
           echo $cups_printerroot
           ;;
	--serverbin)
	    echo $cups_serverbin
	    ;;
	--serverroot)
	    echo $cups_serverroot
	    ;;
	--static)
	    if test -z "$INSTALLSTATIC"; then
	        echo "WARNING: Static libraries not installed." >&2
	    else
	        static=yes
	    fi
	    ;;
	--version)
	    echo $VERSION
	    ;;
	*)
	    usage 1
	    ;;
    esac

    shift
done
