# $Id: Makefile.in,v 1.63 2015/08/05 23:15:41 tom Exp $
##############################################################################
# Copyright (c) 1998-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 1996-on
#
# Makefile for ncurses miscellany directory
#
# This makes/installs the terminfo database
#
# The variable 'srcdir' refers to the source-distribution, and can be set with
# the configure script by "--srcdir=DIR".
#
# The rules are organized to produce the libraries for the configured models,
# and the programs with the configured default model.

# turn off _all_ suffix rules; we'll generate our own
.SUFFIXES :

SHELL		= @SHELL@
VPATH		= @srcdir@
THIS		= Makefile

CF_MFLAGS 	= @cf_cv_makeflags@
@SET_MAKE@

DESTDIR		= @DESTDIR@
top_srcdir	= @top_srcdir@
srcdir		= @srcdir@
prefix		= @prefix@
exec_prefix	= @exec_prefix@
bindir		= @bindir@
libdir		= @libdir@
datarootdir	= @datarootdir@
datadir		= @datadir@
includesubdir	= @includesubdir@

INCLUDEDIR	= $(DESTDIR)$(includedir)$(includesubdir)

tabsetdir	= $(datadir)/tabset
ticdir		= @TERMINFO@
ticfile		= $(ticdir).db
source		= @TERMINFO_SRC@

INSTALL		= @INSTALL@
INSTALL_PROGRAM	= @INSTALL_PROGRAM@
INSTALL_SCRIPT	= @INSTALL_SCRIPT@
INSTALL_DATA	= @INSTALL_DATA@

PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@

################################################################################
all :	terminfo.tmp

depend :

sources :: terminfo.tmp 

install : @MISC_INSTALL_DATA@ install.libs

install.data :	terminfo.tmp \
		$(DESTDIR)$(libdir) \
		$(DESTDIR)$(datadir) \
		$(DESTDIR)$(tabsetdir)
	DESTDIR=${DESTDIR} \
	prefix=${prefix} \
	exec_prefix=${exec_prefix} \
	bindir=${bindir} \
	top_srcdir=${top_srcdir} \
	srcdir=${srcdir} \
	datadir=${datadir} \
	ticdir=${ticdir} \
	source=terminfo.tmp \
	cross_compiling=@cross_compiling@ \
	$(SHELL) ./run_tic.sh
	@cd $(srcdir)/tabset && \
		$(SHELL) -c 'for i in * ; do \
			if test -f $$i ; then \
			echo installing $$i; \
			$(INSTALL_DATA) $$i $(DESTDIR)$(tabsetdir)/$$i; \
			fi; done'

NCURSES_CONFIG	= ncurses@DFT_ARG_SUFFIX@@cf_cv_abi_version@-config

install.libs :: $(DESTDIR)$(bindir) ncurses-config
	$(INSTALL_SCRIPT) ncurses-config $(DESTDIR)$(bindir)/$(NCURSES_CONFIG)

@MAKE_PC_FILES@install.libs :: pc-files $(DESTDIR)$(PKG_CONFIG_LIBDIR)
@MAKE_PC_FILES@	$(SHELL) -c 'for name in *.pc; do $(INSTALL_DATA) $$name $(DESTDIR)$(PKG_CONFIG_LIBDIR)/$$name; done'

@MAKE_PC_FILES@sources :: pc-files
@MAKE_PC_FILES@pc-files :
@MAKE_PC_FILES@	$(SHELL) ./gen-pkgconfig
@MAKE_PC_FILES@	touch $@

terminfo.tmp : run_tic.sed $(source)
	echo '** adjusting tabset paths'
	sed -f run_tic.sed $(source) >terminfo.tmp

run_tic.sed :
	WHICH_XTERM=@WHICH_XTERM@ \
	XTERM_KBS=@XTERM_KBS@ \
	datadir=${datadir} \
	$(SHELL) $(srcdir)/gen_edit.sh >$@

$(DESTDIR)$(bindir) \
$(DESTDIR)$(libdir) \
$(DESTDIR)$(datadir) \
$(DESTDIR)$(tabsetdir) \
$(DESTDIR)$(PKG_CONFIG_LIBDIR) :
	mkdir -p $@

uninstall : @MISC_UNINSTALL_DATA@ uninstall.libs

uninstall.data :
	-test -d $(DESTDIR)$(tabsetdir) && rm -rf $(DESTDIR)$(tabsetdir)
	-test -d $(DESTDIR)$(ticdir) && rm -rf $(DESTDIR)$(ticdir)
	-test -f $(DESTDIR)$(ticfile) && rm -f $(DESTDIR)$(ticfile)

uninstall.libs :
	-rm -f $(DESTDIR)$(bindir)/$(NCURSES_CONFIG)
@MAKE_PC_FILES@	$(SHELL) -c 'for name in *.pc; do rm -f $(DESTDIR)$(PKG_CONFIG_LIBDIR)/$$name; done'

tags :

@MAKE_UPPER_TAGS@TAGS :

mostlyclean :
	-rm -f terminfo.tmp
	-rm -f run_tic.sed
@MAKE_PC_FILES@	-rm -f *.pc pc-files
	-rm -f core tags TAGS *~ *.bak *.ln *.atac trace

clean :: mostlyclean

distclean : clean
@MAKE_PC_FILES@	-rm -f gen-pkgconfig
	-rm -f Makefile run_tic.sh ncurses-config

realclean : distclean

###############################################################################
# The remainder of this file is automatically generated during configuration
###############################################################################
