##############################################################################
# Copyright (c) 1998-2004,2005 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.34 2006/12/17 16:45:02 tom Exp $
#
.SUFFIXES:

SHELL		= /bin/sh
THIS		= Makefile

x		= @PROG_EXT@

srcdir		= @srcdir@
prefix		= @prefix@
exec_prefix	= @exec_prefix@
libdir		= @libdir@
includedir	= @includedir@

INSTALL		= @INSTALL@
INSTALL_DATA	= @INSTALL_DATA@

AWK		= @AWK@
LN_S		= @LN_S@

CC		= @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		= $(CC)
LDFLAGS		= @LDFLAGS@ @LD_MODEL@ @LIBS@

RANLIB		= @RANLIB@
################################################################################
ada_srcdir=../src

LD_FLAGS     = @LD_MODEL@ $(LOCAL_LIBS) @LDFLAGS@ @LIBS@ @LOCAL_LDFLAGS2@ $(LDFLAGS)

ADA          = @cf_ada_compiler@
ADAFLAGS     = @ADAFLAGS@ -I$(srcdir)

ADAMAKE      = @cf_ada_make@
ADAMAKEFLAGS = -a -A$(srcdir) -A$(ada_srcdir) -A$(srcdir)/$(ada_srcdir)

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

CARGS        =-cargs $(ADAFLAGS)
LARGS        =-largs @TEST_ARG2@ $(LD_FLAGS) -lAdaCurses
 
PROGS        = tour rain ncurses 

TOUR_OBJS    =	tour.o sample.o sample-curses_demo.o sample-explanation.o 	\
		sample-form_demo.o sample-function_key_setting.o 		\
		sample-header_handler.o sample-helpers.o 			\
		sample-keyboard_handler.o sample-manifest.o sample-menu_demo.o	\
		sample-menu_demo-aux.o sample-text_io_demo.o			\
		sample-curses_demo-attributes.o sample-curses_demo-mouse.o	\
		sample-form_demo-aux.o sample-my_field_type.o

RAIN_OBJS    =	rain.o status.o

NCURSES_OBJS = ncurses.o        	ncurses2-getch_test.o \
	ncurses2-acs_and_scroll.o       ncurses2-m.o \
	ncurses2-acs_display.o          ncurses2-menu_test.o \
	ncurses2-attr_test.o            ncurses2-overlap_test.o \
	ncurses2-color_edit.o           ncurses2-slk_test.o \
	ncurses2-color_test.o           ncurses2-test_sgr_attributes.o \
	ncurses2-demo_forms.o           ncurses2-trace_set.o \
	ncurses2-demo_pad.o             ncurses2-util.o \
	ncurses2-demo_panels.o          ncurses2.o \
	ncurses2-flushinp_test.o


all ::  tour$x rain$x ncurses$x
	@echo made $@

sources :
	@echo made $@

libs \
install \
install.libs ::
	@echo made $@

uninstall \
uninstall.libs ::
	@echo made $@

ncurses$x :
	$(ADAMAKE) $(ADAMAKEFLAGS) ncurses $(CARGS) $(LARGS)

tour$x :	explain.msg
	$(ADAMAKE) $(ADAMAKEFLAGS) tour $(CARGS) $(LARGS)

explain.msg:	$(srcdir)/explain.txt
	cp $(srcdir)/explain.txt $@

rain$x :
	$(ADAMAKE) $(ADAMAKEFLAGS) rain $(CARGS) $(LARGS)

mostlyclean:
	@echo made $@

clean :: mostlyclean
	rm -f *.o *.ali b_t*.* *.s $(PROGS) a.out core b_*_test.c *.xr[bs] \
	explain.msg trace screendump 

distclean :: clean
	rm -f Makefile

realclean :: distclean
	@echo made $@
