#!@SHELL@
# $Id: gen-pkgconfig.in,v 1.29 2015/07/04 20:37:01 tom Exp $
##############################################################################
# Copyright (c) 2009-2014,2015 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
#
# The complete configure script for ncurses is the ncurses5-config (or similar
# name, depending on the flavor, e.g., ncursesw5-config, ncurses6-config, etc).
# That provides more information than pkg-config, and is the portable and
# recommended solution.
#
# For each library, generate a ".pc" file which depends on the base ncurses
# library, except that the tinfo library does not depend on ncurses.
LIB_NAME=@LIB_NAME@
TINFO_NAME=@TINFO_NAME@
PANEL_NAME=@PANEL_NAME@
MENU_NAME=@MENU_NAME@
FORM_NAME=@FORM_NAME@
CXX_NAME=@CXX_NAME@
DFT_DEP_SUFFIX=@DFT_DEP_SUFFIX@
TINFO_ARG_SUFFIX=@TINFO_ARG_SUFFIX@
CXX_LIB_SUFFIX=@CXX_LIB_SUFFIX@

suffix=@PC_MODULE_SUFFIX@
prefix="@prefix@"
exec_prefix="@exec_prefix@"
includedir="@includedir@@includesubdir@"
libdir="@libdir@"

show_prefix='@prefix@'
show_exec_prefix='@exec_prefix@'
show_includedir='@includedir@@includesubdir@'
show_libdir='@libdir@'

MAIN_LIBRARY="${LIB_NAME}@USE_ARG_SUFFIX@"
SUB_LIBRARY="${TINFO_ARG_SUFFIX}"
PANEL_LIBRARY="${PANEL_NAME}@USE_ARG_SUFFIX@"
MENU_LIBRARY="${MENU_NAME}@USE_ARG_SUFFIX@"
FORM_LIBRARY="${FORM_NAME}@USE_ARG_SUFFIX@"

CFLAGS="@PKG_CFLAGS@"
if test "$includedir" != "/usr/include" ; then
	includetop=`echo "$includedir" | sed -e 's,/include/[^/]*$,/include,'`
	test "$includetop" = "/usr/include" && includetop="$includedir"
	if test "x$includetop" != "x$includedir"
	then
		CFLAGS="$CFLAGS -I${includetop}"
	fi
	CFLAGS="$CFLAGS -I\${includedir}"
fi

LDFLAGS=
if test "$libdir" != "/usr/lib" ; then
	LDFLAGS="$LDFLAGS -L\${libdir}"
fi
if test "x@EXTRA_LDFLAGS@" != "x" ; then
	LDFLAGS="$LDFLAGS @EXTRA_LDFLAGS@"
fi

# Check if we should specify the tinfo library explicitly so that terminfo
# functions or curses variables (which also reside in tinfo) can be linked
# using the -lncurses option.
NEED_TINFO=no
if test "x@TINFO_LIBS@" != "x" && \
   test "x$TINFO_ARG_SUFFIX" != "x$MAIN_LIBRARY"
then
	case "x$LDFLAGS" in
	(*--as-needed*)
		NEED_TINFO=yes
		;;
	esac
	case "x$LDFLAGS" in
	(*,-rpath,*)
		;;
	(*)
		NEED_TINFO=yes
		;;
	esac
fi

for name in @PC_MODULES_TO_MAKE@
do
	name="${name}"
	LIBS="-l$name"

	desc="ncurses @NCURSES_MAJOR@.@NCURSES_MINOR@"
	reqs=

	if test $name = $MAIN_LIBRARY ; then
		desc="$desc library"
		test $NEED_TINFO = yes && LIBS="$LIBS -l$TINFO_ARG_SUFFIX"
	elif test $name = $SUB_LIBRARY ; then
		desc="$desc terminal interface library"
	elif expr $name : ".*${CXX_NAME}.*" >/dev/null ; then
		reqs="$PANEL_LIBRARY${suffix}, $MENU_LIBRARY${suffix}, $FORM_LIBRARY${suffix}, $MAIN_LIBRARY${suffix}"
		desc="$desc add-on library"
	else
		reqs="$MAIN_LIBRARY${suffix}"
		desc="$desc add-on library"
	fi

	if test $name != $SUB_LIBRARY && \
	   test $SUB_LIBRARY != $MAIN_LIBRARY && \
	   test $name != $TINFO_NAME && \
	   test $NEED_TINFO != yes ; then
		test -n "$reqs" && reqs="$reqs, "
		reqs="${reqs}${SUB_LIBRARY}${suffix}"
	fi

	echo "** creating ${name}${suffix}.pc"
	cat >${name}${suffix}.pc <<EOF
# pkg-config file generated by `basename $0`
# vile:makemode

prefix=$show_prefix
exec_prefix=$show_exec_prefix
libdir=$show_libdir
includedir=$show_includedir
abi_version=@cf_cv_abi_version@
major_version=@NCURSES_MAJOR@
version=@NCURSES_MAJOR@.@NCURSES_MINOR@.@NCURSES_PATCH@

Name: ${name}${suffix}
Description: $desc
Version: \${version}
URL: http://invisible-island.net/ncurses
Requires.private: $reqs
Libs: $LDFLAGS $LIBS
Libs.private: @LIBS@
Cflags: $CFLAGS
EOF

done
# vile:shmode
