# $Id: Makefile.in,v 1.43 2015/08/05 09:25:55 tom Exp $
##############################################################################
# Copyright (c) 1998-2013,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-2001
#
# Makefile for ncurses source code.
#
# This makes/installs ncurses include-files
#
# The variable 'srcdir' refers to the source-distribution, and can be set with
# the configure script by "--srcdir=DIR".

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

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

DESTDIR		= @DESTDIR@
srcdir		= @srcdir@
prefix		= @prefix@
exec_prefix	= @exec_prefix@
includedir	= @includedir@
includesubdir	= @includesubdir@

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

INSTALL		= @INSTALL@
INSTALL_DATA	= @INSTALL_DATA@

AWK		= @AWK@
LN_S		= @LN_S@

CTAGS		= @CTAGS@
ETAGS		= @ETAGS@

VERSION		= @cf_cv_rel_version@

# The "Caps" file specifies the terminfo database format, as well as the list
# of function keys.
TERMINFO_CAPS	= $(srcdir)/@TERMINFO_CAPS@

# These files are generated by the configure script
CONFIG_SRC = \
	MKterm.h.awk \
	curses.head \
	ncurses_dll.h \
	termcap.h \
	unctrl.h

# These files are generated by this makefile
AUTO_SRC = \
	curses.h \
	hashsize.h \
	ncurses_def.h \
	parametrized.h \
	config.h \
	term.h

################################################################################
all \
libs \
depend \
sources \
install ::	$(AUTO_SRC)

curses.h : $(TERMINFO_CAPS) \
		curses.head \
		$(srcdir)/curses.tail \
		$(srcdir)/MKkey_defs.sh
	cat curses.head >$@
	AWK=$(AWK) $(SHELL) $(srcdir)/MKkey_defs.sh $(TERMINFO_CAPS) >>$@
	$(SHELL) -c 'if test "@NCURSES_CH_T@" = "cchar_t" ; then cat $(srcdir)/curses.wide >>$@ ; fi'
	cat $(srcdir)/curses.tail >>$@

term.h: $(TERMINFO_CAPS) MKterm.h.awk
	$(AWK) -f MKterm.h.awk $(TERMINFO_CAPS) > $@
	$(SHELL) $(srcdir)/edit_cfg.sh ../include/ncurses_cfg.h $@

hashsize.h: $(TERMINFO_CAPS) $(srcdir)/MKhashsize.sh
	$(SHELL) $(srcdir)/MKhashsize.sh $(TERMINFO_CAPS) >$@

ncurses_def.h: $(srcdir)/ncurses_defs $(srcdir)/MKncurses_def.sh
	AWK=$(AWK) $(SHELL) $(srcdir)/MKncurses_def.sh $(srcdir)/ncurses_defs >$@

parametrized.h: $(TERMINFO_CAPS) $(srcdir)/MKparametrized.sh
	AWK=$(AWK) $(SHELL) $(srcdir)/MKparametrized.sh $(TERMINFO_CAPS) >$@

# This is required by pthread.h on MinGW
config.h:
	touch $@

tags:
	$(CTAGS) *.[ch]

@MAKE_UPPER_TAGS@TAGS:
@MAKE_UPPER_TAGS@	$(ETAGS) *.[ch]

mostlyclean ::
	-rm -f core tags TAGS *~ *.bak *.i *.ln *.atac trace

clean :: mostlyclean
	-rm -f $(AUTO_SRC)
	-rm -rf *.dSYM

distclean :: clean
	-rm -f Makefile $(CONFIG_SRC) config.h

realclean :: distclean

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