#!/bin/sh
# $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="/usr/local"
exec_prefix="${prefix}"

bindir="${exec_prefix}/bin"
libdir="${exec_prefix}/lib"
datadir="${prefix}/share"
mandir="${prefix}/man"

THIS="ncurses"

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

test $# = 0 && exec /bin/sh $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 "" != 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  -l${THIS} 
ENDECHO
		;;
	# identification
	--version)
		echo "5.7.20081102"
		;;
	--abi-version)
		echo "5"
		;;
	--mouse-version)
		echo "1"
		;;
	# locations
	--bindir)
		echo "${bindir}"
		;;
	--datadir)
		echo "${datadir}"
		;;
	--libdir)
		echo "${libdir}"
		;;
	--mandir)
		echo "${mandir}"
		;;
	--terminfo)
		echo "/usr/local/share/terminfo"
		;;
	--terminfo-dirs)
		echo "/usr/local/share/terminfo"
		;;
	--termpath)
		echo ""
		;;
	# 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|*)
		/bin/sh $0 --help 1>&2
		exit 1
		;;
	esac
	shift
done
# vile:shmode
