#!/bin/sh
#
# Configure options script for re-calling MagickCore compilation options
# required to use the MagickCore library.
#

prefix=@prefix@
exec_prefix=@exec_prefix@

usage="\
Usage: MagickCore-config [--cflags] [--cppflags] [--exec-prefix] [--ldflags] [--libs] [--prefix] [--version]"

if test $# -eq 0; then
      echo "${usage}" 1>&2
      echo "Example: gcc \`MagickCore-config --cflags --cppflags\` -o core core.c \`Magick-config --ldflags --libs\`" 1>&2
      exit 1
fi

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
      ;;
    --exec-prefix=*)
      exec_prefix=$optarg
      ;;
    --exec-prefix)
      echo $exec_prefix
      ;;
    --version)
      echo '@PACKAGE_VERSION@ Q@QUANTUM_DEPTH@ @MAGICK_HDRI@'
      ;;
    --cflags)
      @PKG_CONFIG@ --cflags MagickCore
      ;;
    --cxxflags)
      @PKG_CONFIG@ --cflags MagickCore
      ;;
    --cppflags)
      @PKG_CONFIG@ --cflags MagickCore
      ;;
    --ldflags)
      @PKG_CONFIG@ --libs MagickCore
      ;;
    --libs)
      @PKG_CONFIG@ --libs MagickCore
      ;;
    --coder-path)
      echo "@CODER_PATH@"
      ;;
    --filter-path)
      echo "@FILTER_PATH@"
      ;;
    *)
      echo "${usage}" 1>&2
      exit 1
      ;;
  esac
  shift
done
