#!/bin/sh
# $Id: ncurses-config.in,v 1.25 2011/03/19 22:43:38 tom Exp $
##############################################################################
# Copyright (c) 2006-2010,2011 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-on

prefix="/usr/local/google/home/pgynther/clients/buildroot/output/host/usr"
exec_prefix="${prefix}"

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

THIS="ncurses"
TINFO_LIB="ncurses"

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

# with --disable-overwrite, we installed into a subdirectory, but transformed
# the headers to include like this:
#	<ncurses/curses.h>
if test xno = xno ; then
	case $includedir in
	$prefix/include/ncurses)
		includedir=`echo "$includedir" | sed -e 's,/[^/]*$,,'`
		;;
	esac
fi

test $# = 0 && exec /bin/sh $0 --error

while test $# -gt 0; do
	case "$1" in
	# basic configuration
	--prefix)
		echo "$prefix"
		;;
	--exec-prefix)
		echo "$exec_prefix"
		;;
	# compile/link
	--cflags)
		INCS=
		if test "xno" = xno ; then
			INCS="$INCS -I${includedir}/${THIS}"
		fi
		if test "${includedir}" != /usr/include ; then
			INCS="$INCS -I${includedir}"
		fi
		sed -e 's,^[ ]*,,' -e 's, [ ]*, ,g' -e 's,[ ]*$,,' <<-ENDECHO
			$INCS
ENDECHO
		;;
	--libs)
		if test ncurses = ncurses ; then
		sed -e 's,^[ ]*,,' -e 's, [ ]*, ,g' -e 's,[ ]*$,,' <<-ENDECHO
			-L$libdir -Wl,-rpath,/usr/local/google/home/pgynther/clients/buildroot/output/host/usr/lib -Wl,-rpath,/usr/local/google/home/pgynther/clients/buildroot/output/host/lib  -l${THIS} 
ENDECHO
		else
		sed -e 's,^[ ]*,,' -e 's, [ ]*, ,g' -e 's,[ ]*$,,' <<-ENDECHO
			-L$libdir -Wl,-rpath,/usr/local/google/home/pgynther/clients/buildroot/output/host/usr/lib -Wl,-rpath,/usr/local/google/home/pgynther/clients/buildroot/output/host/lib  -l${THIS} -l${TINFO_LIB} 
ENDECHO
		fi
		;;
	# identification
	--version)
		echo "5.9.20110404"
		;;
	--abi-version)
		echo "5"
		;;
	--mouse-version)
		echo "1"
		;;
	# locations
	--bindir)
		echo "${bindir}"
		;;
	--datadir)
		echo "${datadir}"
		;;
	--includedir)
		echo "${includedir}"
		;;
	--libdir)
		echo "${libdir}"
		;;
	--mandir)
		echo "${mandir}"
		;;
	--terminfo)
		echo "/usr/local/google/home/pgynther/clients/buildroot/output/host/usr/share/terminfo"
		;;
	--terminfo-dirs)
		echo "/usr/local/google/home/pgynther/clients/buildroot/output/host/usr/share/terminfo"
		;;
	--termpath)
		echo ""
		;;
	# general info
	--help)
		cat <<ENDHELP
Usage: ${THIS}-config [options]

Options:
  --prefix           echos the package-prefix of ${THIS}
  --exec-prefix      echos 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
  --includedir       echos the directory containing ${THIS} header files
  --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
