# $Id: Makefile.in,v 1.79 2021/11/06 23:36:12 tom Exp $
##############################################################################
# Copyright 2018-2020,2021 Thomas E. Dickey                                  #
# Copyright 1998-2016,2017 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@

################################################################################

@MAKE_PHONY@.PHONY :	all
@MAKE_PHONY@.PHONY :	check
@MAKE_PHONY@.PHONY :	clean
@MAKE_PHONY@.PHONY :	depend
@MAKE_PHONY@.PHONY :	distclean
@MAKE_PHONY@.PHONY :	install
@MAKE_PHONY@.PHONY :	install.data
@MAKE_PHONY@.PHONY :	install.libs
@MAKE_PHONY@.PHONY :	libs
@MAKE_PHONY@.PHONY :	mostlyclean
@MAKE_PHONY@.PHONY :	realclean
@MAKE_PHONY@.PHONY :	sources
@MAKE_PHONY@.PHONY :	uninstall
@MAKE_PHONY@.PHONY :	uninstall.data
@MAKE_PHONY@.PHONY :	uninstall.libs

all \
depend \
sources ::

@MAKE_DATABASE@all \
@MAKE_DATABASE@sources :: terminfo.tmp

@MAKE_DATABASE@install :: @MISC_INSTALL_DATA@

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

NCURSES_CONFIG	= ncurses@DFT_ARG_SUFFIX@@cf_cv_abi_version@@cf_config_suffix@-config

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

# Make a list of the files that gen-pkgconfig might create:
@MAKE_PC_FILES@PC_FILES = \
@MAKE_PC_FILES@	@LIB_NAME@@USE_ARG_SUFFIX@@PC_MODULE_SUFFIX@.pc \
@MAKE_PC_FILES@	@TINFO_ARG_SUFFIX@@PC_MODULE_SUFFIX@.pc \
@MAKE_PC_FILES@	@TICS_NAME@@USE_ARG_SUFFIX@@PC_MODULE_SUFFIX@.pc \
@MAKE_PC_FILES@	@PANEL_NAME@@USE_ARG_SUFFIX@@PC_MODULE_SUFFIX@.pc \
@MAKE_PC_FILES@	@MENU_NAME@@USE_ARG_SUFFIX@@PC_MODULE_SUFFIX@.pc \
@MAKE_PC_FILES@	@FORM_NAME@@USE_ARG_SUFFIX@@PC_MODULE_SUFFIX@.pc \
@MAKE_PC_FILES@	@CXX_NAME@@USE_ARG_SUFFIX@@PC_MODULE_SUFFIX@.pc

# some packagers prefer to be able to construct pc-files on servers where
# pkg-config is not installed.  Work around that by creating the library
# directory during this rule:
@MAKE_PC_FILES@install \
@MAKE_PC_FILES@install.libs :: pc-files
@MAKE_PC_FILES@	@$(SHELL) -c 'case "x$(PKG_CONFIG_LIBDIR)" in \
@MAKE_PC_FILES@		x/*) \
@MAKE_PC_FILES@			mkdir -p $(DESTDIR)$(PKG_CONFIG_LIBDIR); \
@MAKE_PC_FILES@			for name in $(PC_FILES); do \
@MAKE_PC_FILES@				test -f $$name || continue; \
@MAKE_PC_FILES@				echo installing $$name; \
@MAKE_PC_FILES@				$(INSTALL_DATA) $$name $(DESTDIR)$(PKG_CONFIG_LIBDIR)/$$name; \
@MAKE_PC_FILES@			done \
@MAKE_PC_FILES@			;; \
@MAKE_PC_FILES@		*) \
@MAKE_PC_FILES@			echo "...skip actual install: no destination was given" ; \
@MAKE_PC_FILES@			;; \
@MAKE_PC_FILES@		esac'

@MAKE_PC_FILES@all \
@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) :
	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 'case x$(DESTDIR)$(PKG_CONFIG_LIBDIR) in \
@MAKE_PC_FILES@	x/*) \
@MAKE_PC_FILES@		for name in $(PC_FILES); do \
@MAKE_PC_FILES@			test -f $$name || continue; \
@MAKE_PC_FILES@			echo uninstalling $$name; \
@MAKE_PC_FILES@			rm -f $(DESTDIR)$(PKG_CONFIG_LIBDIR)/$$name; \
@MAKE_PC_FILES@		done \
@MAKE_PC_FILES@		;; \
@MAKE_PC_FILES@	esac'

tags :

@MAKE_UPPER_TAGS@TAGS :

mostlyclean :
@MAKE_DATABASE@	-rm -f terminfo.tmp
@MAKE_DATABASE@	-rm -f run_tic.sed
@MAKE_PC_FILES@	-rm -f pc-files $(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
###############################################################################
