#! /bin/sh
#
# Copyright 2000, 2001, 2002, 2003, 2004, 2005 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
# and distributed under the terms of the FreeType project license,
# LICENSE.TXT.  By continuing to use, modify, or distribute this file you
# indicate that you have read the license and understand and accept it
# fully.

prefix=@prefix@
exec_prefix=@exec_prefix@
exec_prefix_set=no
includedir=@includedir@
libdir=@libdir@
enable_shared=@enable_shared@
wl=@wl@
hardcode_libdir_flag_spec='@hardcode_libdir_flag_spec@'

usage()
{
  cat <<EOF
Usage: freetype-config [OPTION]...
Get FreeType compilation and linking information.

Options:
  --prefix               display \`--prefix' value used for building the
                         FreeType library
  --prefix=PREFIX        override \`--prefix' value with PREFIX
  --exec-prefix          display \`--exec-prefix' value used for building
                         the FreeType library
  --exec-prefix=EPREFIX  override \`--exec-prefix' value with EPREFIX
  --version              display libtool version of the FreeType library
  --ftversion            display FreeType version number
  --libs                 display flags for linking with the FreeType library
  --libtool              display library name for linking with libtool
  --cflags               display flags for compiling with the FreeType
                         library
EOF
  exit $1
}

if test $# -eq 0 ; then
  usage 1 1>&2
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
    local_prefix=yes
    ;;
  --prefix)
    echo_prefix=yes
    ;;
  --exec-prefix=*)
    exec_prefix=$optarg
    exec_prefix_set=yes
    local_prefix=yes
    ;;
  --exec-prefix)
    echo_exec_prefix=yes
    ;;
  --version)
    echo @ft_version@
    exit 0
    ;;
  --ftversion)
    major=`grep define @prefix@/include/freetype2/freetype/freetype.h \
           | grep FREETYPE_MAJOR \
           | sed 's/.*[ 	]\([0-9][0-9]*\).*/\1/'`
    minor=`grep define @prefix@/include/freetype2/freetype/freetype.h \
           | grep FREETYPE_MINOR \
           | sed 's/.*[ 	]\([0-9][0-9]*\).*/\1/'`
    patch=`grep define @prefix@/include/freetype2/freetype/freetype.h \
           | grep FREETYPE_PATCH \
           | sed 's/.*[ 	]\([0-9][0-9]*\).*/\1/'`
    echo $major.$minor.$patch
    exit 0
    ;;
  --cflags)
    echo_cflags=yes
    ;;
  --libs)
    echo_libs=yes
    ;;
  --libtool)
    echo_libtool=yes
    ;;
  *)
    usage 1 1>&2
    ;;
  esac
  shift
done

if test "$local_prefix" = "yes" ; then
  if test "$exec_prefix_set" != "yes" ; then
    exec_prefix=$prefix
  fi
fi

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

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

if test "$exec_prefix_set" = "yes" ; then
  libdir=$exec_prefix/lib
else
  if test "$local_prefix" = "yes" ; then
    includedir=$prefix/include
    libdir=$prefix/lib
  fi
fi

if test "$echo_cflags" = "yes" ; then
  cflags="-I$includedir/freetype2"
  if test "$includedir" != "/usr/include" ; then
    echo $cflags -I$includedir
  else
    echo $cflags
  fi
fi

if test "$echo_libs" = "yes" ; then
  rpath=
  if test "$enable_shared" = "yes" ; then
    eval "rpath=\"$hardcode_libdir_flag_spec\""
  fi
  libs="-lfreetype @LIBZ@ @FT2_EXTRA_LIBS@"
  if test "$libdir" != "/usr/lib" && test "$libdir" != "/usr/lib64"; then
    echo -L$libdir $rpath $libs
  else
    echo $libs
  fi
fi

if test "$echo_libtool" = "yes" ; then
  convlib="libfreetype.la"
  echo $libdir/$convlib
fi

# EOF
