#!@SHELL@
# $Id: ncurses-config.in,v 1.12 2007/03/17 20:02:19 tom Exp $
##############################################################################
# Copyright (c) 2006,2007 Free Software Foundation, Inc.                     #
#                                                                            #
# Permission is hereby granted, free of charge, to any person obtaining a    #
# copy of this software and associated documentation files (the "Software"), #
# to deal in the Software without restriction, including without limitation  #
# the rights to use, copy, modify, merge, publish, distribute, distribute    #
# with modifications, sublicense, and/or sell copies of the Software, and to #
# permit persons to whom the Software is furnished to do so, subject to the  #
# following conditions:                                                      #
#                                                                            #
# The above copyright notice and this permission notice shall be included in #
# all copies or substantial portions of the Software.                        #
#                                                                            #
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR #
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,   #
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL    #
# THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER      #
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING    #
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER        #
# DEALINGS IN THE SOFTWARE.                                                  #
#                                                                            #
# Except as contained in this notice, the name(s) of the above copyright     #
# holders shall not be used in advertising or otherwise to promote the sale, #
# use or other dealings in this Software without prior written               #
# authorization.                                                             #
##############################################################################
#
# Author: Thomas E. Dickey, 2006

prefix="@prefix@"
exec_prefix="@exec_prefix@"

bindir="@bindir@"
libdir="@libdir@"
datadir="@datadir@"
mandir="@mandir@"

THIS="ncurses@DFT_ARG_SUFFIX@"

LANG=C;		export LANG
LANGUAGE=C;	export LANGUAGE
LC_ALL=C;	export LC_ALL
LC_CTYPE=C;	export LC_CTYPE

test $# = 0 && exec @SHELL@ $0 --error

while test $# -gt 0; do
	case "$1" in
	-*=*)
		ARG=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'`
		;;
	*)
		ARG=
		;;
	esac

	case "$1" in
	# basic configuration
	--prefix=*)
		prefix="$ARG"
		test -z "$exec_prefix" && exec_prefix="$ARG"
		;;
	--prefix)
		echo "$prefix"
		;;
	--exec-prefix=*)
		exec_prefix="$ARG"
		;;
	--exec-prefix)
		echo "$exec_prefix"
		;;
	# compile/link
	--cflags)
		INCS=
		if test "${prefix}/include" != /usr/include ; then
			INCS="-I${prefix}/include"
		fi
		if test "@WITH_OVERWRITE@" != no ; then
			INCS="$INCS -I${prefix}/include/${THIS}"
		fi
		sed -e 's,^[ ]*,,' -e 's, [ ]*, ,g' -e 's,[ ]*$,,' <<-ENDECHO
			$INCS
ENDECHO
		;;
	--libs)
		sed -e 's,^[ ]*,,' -e 's, [ ]*, ,g' -e 's,[ ]*$,,' <<-ENDECHO
			-L${exec_prefix}/lib @EXTRA_LDFLAGS@ -l${THIS} @LIBS@
ENDECHO
		;;
	# identification
	--version)
		echo "@NCURSES_MAJOR@.@NCURSES_MINOR@.@NCURSES_PATCH@"
		;;
	--abi-version)
		echo "@cf_cv_abi_version@"
		;;
	--mouse-version)
		echo "@NCURSES_MOUSE_VERSION@"
		;;
	# locations
	--bindir)
		echo "${bindir}"
		;;
	--datadir)
		echo "${datadir}"
		;;
	--libdir)
		echo "${libdir}"
		;;
	--mandir)
		echo "${mandir}"
		;;
	--terminfo)
		echo "@TERMINFO@"
		;;
	--terminfo-dirs)
		echo "@TERMINFO_DIRS@"
		;;
	--termpath)
		echo "@TERMPATH@"
		;;
	# general info
	--help)
		cat <<ENDHELP
Usage: ${THIS}-config [options]

Options:
  --prefix           echos the package-prefix of ${THIS}
  --prefix=ARG       sets the package-prefix of ${THIS}
  --exec-prefix      echos the executable-prefix of ${THIS}
  --exec-prefix=ARG  sets the executable-prefix of ${THIS}

  --cflags           echos the C compiler flags needed to compile with ${THIS}
  --libs             echos the libraries needed to link with ${THIS}

  --version          echos the release+patchdate version of ${THIS}
  --abi-version      echos the ABI version of ${THIS}
  --mouse-version    echos the mouse-interface version of ${THIS}

  --bindir           echos the directory containing ${THIS} programs
  --datadir          echos the directory containing ${THIS} data
  --libdir           echos the directory containing ${THIS} libraries
  --mandir           echos the directory containing ${THIS} manpages
  --terminfo         echos the \$TERMINFO terminfo database path
  --terminfo-dirs    echos the \$TERMINFO_DIRS directory list
  --termpath         echos the \$TERMPATH termcap list

  --help             prints this message
ENDHELP
		;;
	--error|*)
		@SHELL@ $0 --help 1>&2
		exit 1
		;;
	esac
	shift
done
# vile:shmode
