##############################################################################
# Copyright (c) 1998-2007,2008 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:  Juergen Pfeifer, 1996
#
#  $Id: Makefile.in,v 1.61 2008/10/04 22:58:31 tom Exp $
#
.SUFFIXES:

SHELL		= /bin/sh
THIS		= Makefile

x		= @PROG_EXT@

top_srcdir	= @top_srcdir@
DESTDIR		= @DESTDIR@
srcdir		= @srcdir@
prefix		= @prefix@
exec_prefix	= @exec_prefix@
bindir		= @bindir@

ADA_INCLUDE	= $(DESTDIR)@ADA_INCLUDE@
ADA_OBJECTS	= $(DESTDIR)@ADA_OBJECTS@

INSTALL		= @INSTALL@
INSTALL_PROG	= @INSTALL_PROGRAM@
INSTALL_DATA	= @INSTALL_DATA@

AWK		= @AWK@
LN_S		= @LN_S@

CC		= @CC@
HOST_CC		= @BUILD_CC@
CFLAGS		= @CFLAGS@

CPPFLAGS	= @ACPPFLAGS@ \
		  -DHAVE_CONFIG_H -I$(srcdir)

CCFLAGS		= $(CPPFLAGS) $(CFLAGS)
CFLAGS_NORMAL	= $(CCFLAGS)
CFLAGS_DEBUG	= $(CCFLAGS) @CC_G_OPT@ -DTRACE
CFLAGS_PROFILE	= $(CCFLAGS) -pg
CFLAGS_SHARED	= $(CCFLAGS) @CC_SHARED_OPTS@

CFLAGS_DEFAULT	= $(CFLAGS_@DFT_UPR_MODEL@)

REL_VERSION	= @cf_cv_rel_version@
ABI_VERSION	= @cf_cv_abi_version@
LOCAL_LIBDIR	= @top_builddir@/lib

LINK		= $(HOST_CC)
LD_FLAGS	= @LD_MODEL@ $(LOCAL_LIBS) @LDFLAGS@ @LIBS@ @LOCAL_LDFLAGS2@ $(LDFLAGS) @TINFO_ARGS2@

RANLIB		= @RANLIB@

M4		= m4
M4FLAGS		= -DNCURSES_EXT_FUNCS=@NCURSES_EXT_FUNCS@

ADACURSES_CONFIG = adacurses-config

WRAPPER		= sh $(top_srcdir)/misc/shlib
GENERATE	= ./gen$x '@DFT_ARG_SUFFIX@'
DEL_ADAMODE	= sed -e '/^\-\-\ \ \-\*\-\ ada\ \-\*\-.*/d'

GNATHTML	= `type -p gnathtml || type -p gnathtml.pl`
GNATHP          = www.gnat.com

################################################################################
ALIB            = @cf_ada_package@
ABASE		= $(ALIB)-curses

ADA_SRCDIR	= ../src

GEN_FILES0      = Base_Defs

GEN_FILES1      = ACS_Map                      		\
		  AC_Rep                       		\
		  Base_Defs			        \
		  Character_Attribute_Set_Rep  		\
		  Color_Defs                   		\
		  Key_Definitions              		\
		  Linker_Options               		\
		  Old_Keys                     		\
		  Public_Variables                      \
		  Trace_Defs				\
		  Version_Info				\
		  Window_Offsets

GEN_FILES2      = Menu_Opt_Rep        		    	\
		  Menu_Base_Defs               		\
		  Menu_Linker_Options          		\
		  Item_Rep

GEN_FILES3      = Form_Opt_Rep                 		\
		  Form_Base_Defs               		\
		  Form_Linker_Options          		\
		  Field_Rep

GEN_FILES4      = Mouse_Base_Defs              		\
		  Mouse_Event_Rep			\
		  Mouse_Events                          \
		  Panel_Linker_Options

GEN_FILES5	= Chtype_Def                            \
		  Eti_Defs

GEN_TARGETS     = $(ADA_SRCDIR)/$(ABASE).ads         			\
		  $(ADA_SRCDIR)/$(ABASE).adb         			\
	          $(ADA_SRCDIR)/$(ABASE)-aux.ads   			\
	          $(ADA_SRCDIR)/$(ABASE)-trace.ads   			\
	          $(ADA_SRCDIR)/$(ABASE)-menus.ads   			\
	          $(ADA_SRCDIR)/$(ABASE)-forms.ads   			\
	          $(ADA_SRCDIR)/$(ABASE)-mouse.ads 			\
	          $(ADA_SRCDIR)/$(ABASE)-panels.ads			\
	          $(ADA_SRCDIR)/$(ABASE)-menus-menu_user_data.ads	\
	          $(ADA_SRCDIR)/$(ABASE)-menus-item_user_data.ads	\
	          $(ADA_SRCDIR)/$(ABASE)-forms-form_user_data.ads	\
	          $(ADA_SRCDIR)/$(ABASE)-forms-field_types.ads		\
	          $(ADA_SRCDIR)/$(ABASE)-forms-field_user_data.ads	\
	          $(ADA_SRCDIR)/$(ABASE)-panels-user_data.ads

GEN_SRC		= $(srcdir)/$(ABASE).ads.m4				\
		  $(srcdir)/$(ABASE).adb.m4				\
	          $(srcdir)/$(ABASE)-aux.ads.m4 	  		\
	          $(srcdir)/$(ABASE)-trace.ads.m4 	  		\
	          $(srcdir)/$(ABASE)-menus.ads.m4 	  		\
	          $(srcdir)/$(ABASE)-forms.ads.m4   			\
	          $(srcdir)/$(ABASE)-mouse.ads.m4			\
	          $(srcdir)/$(ABASE)-panels.ads.m4			\
	          $(srcdir)/$(ABASE)-menus-menu_user_data.ads.m4	\
	          $(srcdir)/$(ABASE)-menus-item_user_data.ads.m4	\
	          $(srcdir)/$(ABASE)-forms-form_user_data.ads.m4	\
	          $(srcdir)/$(ABASE)-forms-field_types.ads.m4		\
	          $(srcdir)/$(ABASE)-forms-field_user_data.ads.m4	\
	          $(srcdir)/$(ABASE)-panels-user_data.ads.m4


all \
libs :	$(GEN_TARGETS)
	@echo made $@

sources:

$(ADA_INCLUDE) \
$(ADA_OBJECTS) :
	sh $(top_srcdir)/mkdirs.sh $@

install \
install.libs :: $(ADA_INCLUDE)
	@echo installing package $(ALIB) in $(ADA_INCLUDE)
	@$(top_srcdir)/tar-copy.sh '$(ALIB)*.ad?' $(ADA_SRCDIR) $(ADA_INCLUDE)
	@$(top_srcdir)/tar-copy.sh '$(ALIB)[-.]*.ad?' $(ADA_SRCDIR) $(ADA_INCLUDE)
	@test $(srcdir) != ./ && $(top_srcdir)/tar-copy.sh '$(ALIB)*.ad?' $(srcdir)/../src $(ADA_INCLUDE)
	@test $(srcdir) != ./ && $(top_srcdir)/tar-copy.sh '$(ALIB)[-.]*.ad?' $(srcdir)/../src $(ADA_INCLUDE)

install \
install.libs :: $(ADA_OBJECTS)
	@echo installing package $(ALIB) in $(ADA_OBJECTS)
	@-chmod a-wx $(ADA_SRCDIR)/*.ali
	@$(top_srcdir)/tar-copy.sh '$(ALIB)*.ali' $(ADA_SRCDIR) $(ADA_OBJECTS)
	@$(top_srcdir)/tar-copy.sh '$(ALIB)[-.]*.ali' $(ADA_SRCDIR) $(ADA_OBJECTS)
	@-chmod u+x $(ADA_SRCDIR)/*.ali

install \
install.libs :: $(DESTDIR)$(bindir) adacurses-config
	$(INSTALL_PROG) adacurses-config $(DESTDIR)$(bindir)/$(ADACURSES_CONFIG)

uninstall \
uninstall.libs ::
	@echo removing package $(ALIB) from $(ADA_INCLUDE)
	-@cd $(ADA_INCLUDE) && rm -f $(ALIB)[-.]*

uninstall \
uninstall.libs ::
	@echo removing package $(ALIB) from $(ADA_OBJECTS)
	-@cd $(ADA_OBJECTS) && rm -f $(ALIB)[-.]*

uninstall \
uninstall.libs ::
	-rm -f $(DESTDIR)$(bindir)/$(ADACURSES_CONFIG)

gen$x:	gen.o
	@ECHO_LINK@ $(LINK) $(CFLAGS_NORMAL) gen.o $(LD_FLAGS) -o $@

gen.o:	$(srcdir)/gen.c
	$(HOST_CC) $(CFLAGS_NORMAL) -c -o $@ $(srcdir)/gen.c
################################################################################
Character_Attribute_Set_Rep: gen$x
	$(WRAPPER) "$(GENERATE) B A" >$@

Base_Defs: gen$x
	$(WRAPPER) "$(GENERATE) B B" >$@

Color_Defs: gen$x
	$(WRAPPER) "$(GENERATE) B C" >$@

Window_Offsets: gen$x
	$(WRAPPER) "$(GENERATE) B D" >$@

Key_Definitions: gen$x
	$(WRAPPER) "$(GENERATE) B K" >$@

Linker_Options: gen$x
	$(WRAPPER) "$(GENERATE) B L" >$@

ACS_Map: gen$x
	$(WRAPPER) "$(GENERATE) B M" >$@

Old_Keys: gen$x
	$(WRAPPER) "$(GENERATE) B O" >$@

Public_Variables: gen$x
	$(WRAPPER) "$(GENERATE) B P" >$@

AC_Rep: gen$x
	$(WRAPPER) "$(GENERATE) B R" >$@

Version_Info: gen$x
	$(WRAPPER) "$(GENERATE) B V" >$@

Trace_Defs: gen$x
	$(WRAPPER) "$(GENERATE) B T" >$@
################################################################################
Menu_Opt_Rep: gen$x
	$(WRAPPER) "$(GENERATE) M R" >$@

Menu_Base_Defs: gen$x
	$(WRAPPER) "$(GENERATE) M B" >$@

Menu_Linker_Options: gen$x
	$(WRAPPER) "$(GENERATE) M L" >$@

Item_Rep: gen$x
	$(WRAPPER) "$(GENERATE) M I" >$@
################################################################################
Form_Opt_Rep: gen$x
	$(WRAPPER) "$(GENERATE) F R" >$@

Form_Base_Defs: gen$x
	$(WRAPPER) "$(GENERATE) F B" >$@

Form_Linker_Options: gen$x
	$(WRAPPER) "$(GENERATE) F L" >$@

Field_Rep: gen$x
	$(WRAPPER) "$(GENERATE) F I" >$@
################################################################################
Mouse_Base_Defs: gen$x
	$(WRAPPER) "$(GENERATE) P B" >$@

Mouse_Event_Rep: gen$x
	$(WRAPPER) "$(GENERATE) P M" >$@

Mouse_Events: gen$x
	$(WRAPPER) "$(GENERATE) B E" >$@

Panel_Linker_Options: gen$x
	$(WRAPPER) "$(GENERATE) P L" >$@

Chtype_Def: gen$x
	$(WRAPPER) "$(GENERATE) E C" >$@

Eti_Defs: gen$x
	$(WRAPPER) "$(GENERATE) E E" >$@
################################################################################
$(ADA_SRCDIR)/$(ABASE).ads: 	$(srcdir)/$(ABASE).ads.m4 \
				$(GEN_FILES1) $(srcdir)/normal.m4
	$(M4) $(M4FLAGS) -DM4MACRO=$(srcdir)/normal.m4 \
	$(srcdir)/$(ABASE).ads.m4 |\
	$(DEL_ADAMODE) >$@

$(ADA_SRCDIR)/$(ABASE).adb: 	$(srcdir)/$(ABASE).adb.m4 \
				$(GEN_FILES1) $(srcdir)/normal.m4
	$(M4) $(M4FLAGS) -DM4MACRO=$(srcdir)/normal.m4 \
	$(srcdir)/$(ABASE).adb.m4 |\
	$(DEL_ADAMODE) >$@

$(ADA_SRCDIR)/$(ABASE)-aux.ads: $(srcdir)/$(ABASE)-aux.ads.m4 \
				$(GEN_FILES5) $(srcdir)/normal.m4
	$(M4) $(M4FLAGS) -DM4MACRO=$(srcdir)/normal.m4 \
	$(srcdir)/$(ABASE)-aux.ads.m4 |\
	$(DEL_ADAMODE) >$@

$(ADA_SRCDIR)/$(ABASE)-trace.ads: $(srcdir)/$(ABASE)-trace.ads.m4 \
				$(GEN_FILES5) $(srcdir)/normal.m4
	$(M4) $(M4FLAGS) -DM4MACRO=$(srcdir)/normal.m4 \
	$(srcdir)/$(ABASE)-trace.ads.m4 |\
	$(DEL_ADAMODE) >$@

$(ADA_SRCDIR)/$(ABASE)-menus.ads: $(srcdir)/$(ABASE)-menus.ads.m4 \
				  $(GEN_FILES2) $(srcdir)/normal.m4
	$(M4) $(M4FLAGS) -DM4MACRO=$(srcdir)/normal.m4 \
	$(srcdir)/$(ABASE)-menus.ads.m4 |\
	$(DEL_ADAMODE) >$@

$(ADA_SRCDIR)/$(ABASE)-forms.ads: $(srcdir)/$(ABASE)-forms.ads.m4 \
				  $(GEN_FILES3) $(srcdir)/normal.m4
	$(M4) $(M4FLAGS) -DM4MACRO=$(srcdir)/normal.m4 \
	$(srcdir)/$(ABASE)-forms.ads.m4 |\
	$(DEL_ADAMODE) >$@

$(ADA_SRCDIR)/$(ABASE)-mouse.ads: $(srcdir)/$(ABASE)-mouse.ads.m4 \
				  $(GEN_FILES4) $(srcdir)/normal.m4
	$(M4) $(M4FLAGS) -DM4MACRO=$(srcdir)/normal.m4 \
	$(srcdir)/$(ABASE)-mouse.ads.m4 |\
	$(DEL_ADAMODE) >$@

$(ADA_SRCDIR)/$(ABASE)-panels.ads: $(srcdir)/$(ABASE)-panels.ads.m4 \
				   $(srcdir)/normal.m4
	$(M4) $(M4FLAGS) -DM4MACRO=$(srcdir)/normal.m4 \
	$(srcdir)/$(ABASE)-panels.ads.m4 |\
	$(DEL_ADAMODE) >$@

$(ADA_SRCDIR)/$(ABASE)-menus-menu_user_data.ads: \
		$(srcdir)/$(ABASE)-menus-menu_user_data.ads.m4 \
		$(srcdir)/normal.m4
	$(M4) $(M4FLAGS) -DM4MACRO=$(srcdir)/normal.m4 \
	$(srcdir)/$(ABASE)-menus-menu_user_data.ads.m4 |\
	$(DEL_ADAMODE) >$@

$(ADA_SRCDIR)/$(ABASE)-menus-item_user_data.ads: \
		$(srcdir)/$(ABASE)-menus-item_user_data.ads.m4 \
		$(srcdir)/normal.m4
	$(M4) $(M4FLAGS) -DM4MACRO=$(srcdir)/normal.m4 \
	$(srcdir)/$(ABASE)-menus-item_user_data.ads.m4 |\
	$(DEL_ADAMODE) >$@

$(ADA_SRCDIR)/$(ABASE)-forms-form_user_data.ads: \
		$(srcdir)/$(ABASE)-forms-form_user_data.ads.m4 \
		$(srcdir)/normal.m4
	$(M4) $(M4FLAGS) -DM4MACRO=$(srcdir)/normal.m4 \
	$(srcdir)/$(ABASE)-forms-form_user_data.ads.m4 |\
	$(DEL_ADAMODE) >$@

$(ADA_SRCDIR)/$(ABASE)-forms-field_types.ads: \
		$(srcdir)/$(ABASE)-forms-field_types.ads.m4 \
		$(srcdir)/normal.m4
	$(M4) $(M4FLAGS) -DM4MACRO=$(srcdir)/normal.m4 \
	$(srcdir)/$(ABASE)-forms-field_types.ads.m4 |\
	$(DEL_ADAMODE) >$@

$(ADA_SRCDIR)/$(ABASE)-forms-field_user_data.ads: \
		$(srcdir)/$(ABASE)-forms-field_user_data.ads.m4 \
		$(srcdir)/normal.m4
	$(M4) $(M4FLAGS) -DM4MACRO=$(srcdir)/normal.m4 \
	$(srcdir)/$(ABASE)-forms-field_user_data.ads.m4 |\
	$(DEL_ADAMODE) >$@

$(ADA_SRCDIR)/$(ABASE)-panels-user_data.ads: \
		$(srcdir)/$(ABASE)-panels-user_data.ads.m4 \
		$(srcdir)/normal.m4
	$(M4) $(M4FLAGS) -DM4MACRO=$(srcdir)/normal.m4 \
	$(srcdir)/$(ABASE)-panels-user_data.ads.m4 |\
	$(DEL_ADAMODE) >$@

install.progs ::

tags:
	ctags *.[ch]

@MAKE_UPPER_TAGS@TAGS:
@MAKE_UPPER_TAGS@	etags *.[ch]

mostlyclean ::
	-rm -f a.out core gen$x *.o
	-rm -f $(GEN_FILES1)
	-rm -f $(GEN_FILES2)
	-rm -f $(GEN_FILES3)
	-rm -f $(GEN_FILES4)
	-rm -f $(GEN_FILES5)

clean :: mostlyclean
	-rm -f $(GEN_TARGETS) instab.tmp *.ad[bs] *.html *.ali *.tmp

distclean :: clean
	-rm -f adacurses-config
	-rm -f Makefile

realclean :: distclean

HTML_DIR = ../../doc/html/ada

instab.tmp : table.m4 $(GEN_SRC)
	@rm -f $@
	@for f in $(GEN_SRC) ; do \
	  $(M4) $(M4FLAGS) -DM4MACRO=table.m4 $$f | $(DEL_ADAMODE) >> $@ ;\
	done;

$(HTML_DIR)/table.html : instab.tmp
	@-touch $@
	@-chmod +w $@
	@echo '<!DOCTYPE HTML'  > $@
	@echo 'PUBLIC "-//IETF//DTD HTML 3.0//EN">' >> $@
	@echo '<HTML>' >> $@
	@echo '<HEAD>' >> $@
	@echo '<TITLE>Correspondence between ncurses C and Ada functions</TITLE>' >>$@
	@echo '</HEAD>' >> $@
	@echo '<BODY>' >> $@
	@echo '<H1>Correspondence between ncurses C and Ada functions</H1>' >>$@
	@echo '<H2>Sorted by C function name</H2>' >>$@
	@echo '<TABLE ALIGN=CENTER BORDER>' >>$@
	@echo '<TR ALIGN=LEFT>' >>$@
	@echo '<TH>C name</TH><TH>Ada name</TH><TH>man page</TH></TR>' >>$@
	@sort < instab.tmp >> $@
	@echo '</TABLE></BODY></HTML>' >>$@
	@rm -f instab.tmp

adahtml:
	@find $(HTML_DIR) -type f -exec rm -f {} \;
	@mkdir -p $(HTML_DIR)
	cp -p ../src/*.ad[sb] . && chmod +w *.ad[sb]
	ln -sf ../src/*.ali .
	@echo "Filtering generated files"
	@for f in $(GEN_SRC); do \
	   h=`basename $$f` ;\
	   g=`basename $$f .ads.m4` ;\
	   if test "$$g" != "$$h" ; then \
	      $(M4) $(M4FLAGS) -DM4MACRO=html.m4 $$f | $(DEL_ADAMODE) > $$g.ads ;\
	      echo "... $$g.ads" ;\
	   fi \
	done
	@-rm -f $(HTML_DIR)/$(ALIB)*.htm*
	$(GNATHTML) -d -f $(ALIB)*.ads
	for f in html/$(ALIB)*.htm*; do \
	   a=`basename $$f` ; \
	   sed -e 's/You may also.*body.*//' <$$f |\
	   sed -e 's%GNAT%<A HREF="http://$(GNATHP)">GNAT</A>%g' |\
	   sed -e 's%&lt;A HREF%<A HREF%g' |\
	   sed -e 's%"&gt;%">%g' |\
	   sed -e 's/3X/3x/g' |\
	   sed -e 's/$$\([ABCDEFGHIJKLMNOPQRSTUVWXZabcdefghijklmnopqrstuvwxz0123456789_]*:.*\)\$$/@\1@/' |\
	   sed -e 's%&lt;/A&gt;%</A>%g' > $$a.tmp ;\
	   mv $$a.tmp $$f ;\
	done
	@rm -f *.ad[sb] *.ali *.tmp
	@for f in funcs.htm main.htm ; do \
	  sed -e "\%<A HREF=funcs/ .htm>\[ \]</A>%d" < html/$$f > $$f ;\
	  mv $$f html/$$f ;\
	done
	@rm -f "html/funcs/ .htm"
	@cp -pdrf html/* $(HTML_DIR)/
	@rm -rf html

html : adahtml $(HTML_DIR)/table.html
	@echo made $@

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