# Top level makefile fragment for TREELANG For GCC. -*- makefile -*-

#   Copyright (C) 1994, 1995, 1997, 1998, 1999 2000, 2001, 2002, 2003 Free
#   Software Foundation, Inc.

#This file is part of GCC.

#GCC is free software; you can redistribute it and/or modify
#it under the terms of the GNU General Public License as published by
#the Free Software Foundation; either version 2, or (at your option)
#any later version.

#GCC is distributed in the hope that it will be useful,
#but WITHOUT ANY WARRANTY; without even the implied warranty of
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#GNU General Public License for more details.

#You should have received a copy of the GNU General Public License
#along with GCC; see the file COPYING.  If not, write to
#the Free Software Foundation, 59 Temple Place - Suite 330,
#Boston, MA 02111-1307, USA.

# This file provides the language dependent support in the main Makefile.
# Each language makefile fragment must provide the following targets:
#
# foo.all.build, foo.all.cross, foo.start.encap, foo.rest.encap,
# foo.info, foo.dvi,
# foo.install-normal, foo.install-common, foo.install-info, foo.install-man,
# foo.uninstall, foo.distdir,
# foo.mostlyclean, foo.clean, foo.distclean, foo.extraclean,
# foo.maintainer-clean, foo.stage1, foo.stage2, foo.stage3, foo.stage4
#
# where `foo' is the name of the language.
#
# It should also provide rules for:
#
# - making any compiler driver (eg: GCC)
# - the compiler proper (eg: treelang)
# - define the names for selecting the language in LANGUAGES.
#

## note program-prefix and program-suffix options are not supported
## just program_transform_name which is a sed script to transform the
## names

TREELANGSED = sed
TREELANGSEDFLAGS = -n

# back end compiler libraries etc
TREE_BE_LIBS = $(BACKEND) $(LIBIBERTY) $(INTLLIBS) $(LIBS) $(LIBDEPS) 
GCC_EXTRAS = -B./ -B$(build_tooldir)/bin/ -isystem $(build_tooldir)/include

# ./xgcc is the just built compiler. See GCC_FOR_TARGET in the GCC Makefile.in.
# If this can't be found, you probably have not done a bootstrap of GCC,
# which you need to do.

# GCC_FOR_TREELANG = ./xgcc $(GCC_EXTRAS)

TREE_GENERATED = $(srcdir)/treelang/lex.c $(srcdir)/treelang/parse.c\
	$(srcdir)/treelang/parse.h $(srcdir)/treelang/parse.output $(srcdir)/treelang/TAGS

TREE_SOURCE = ${srcdir}/treelang/parse.y ${srcdir}/treelang/lex.l ${srcdir}/treelang/tree1.c ${srcdir}/treelang/treelang.h ${srcdir}/treelang/treetree.c $(srcdir)/treelang/treetree.h

TREE_EXES = tree1$(exeext)

#no -Wtraditional warnings, allow long long
treelang-warn = $(LOOSE_WARN) -pedantic -Wno-long-long -Wmissing-prototypes -Wmissing-declarations

#
# Define the names for selecting treelang in LANGUAGES.

.phony: treelang TREELANG

treelang TREELANG:treelang.done

treelang.done: tree1$(exeext)
	$(STAMP) treelang.done

# no preprocessor

# core compiler 
tree1$(exeext): treelang/tree1.o treelang/treetree.o treelang/lex.o treelang/parse.o\
	$(TREE_BE_LIBS) c-convert.o c-typeck.o c-common.o c-decl.o attribs.o
	$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ \
	treelang/tree1.o treelang/treetree.o treelang/lex.o treelang/parse.o c-convert.o\
	c-typeck.o c-common.o c-decl.o attribs.o $(TREE_BE_LIBS)

#
# Compiling object files from source files.

# object file makes

treelang/tree1.o: $(srcdir)/treelang/tree1.c $(srcdir)/treelang/treelang.h \
	$(srcdir)/treelang/parse.h $(CONFIG_H) \
	gt-treelang-tree1.h gtype-treelang.h
	$(CC) -o $@ -c $(ALL_CFLAGS) $(INCLUDES) $< 

treelang/treetree.o: $(srcdir)/treelang/treetree.c $(srcdir)/treelang/treetree.h \
	$(CONFIG_H)
	$(CC) -o $@ -c $(ALL_CFLAGS) $(INCLUDES) $< 

treelang/parse.o: $(srcdir)/treelang/parse.c $(srcdir)/treelang/treelang.h \
	$(srcdir)/treelang/treetree.h $(CONFIG_H)
	$(CC) -o $@ -c $(ALL_CFLAGS) $(INCLUDES) $< 

treelang/lex.o: $(srcdir)/treelang/lex.c $(srcdir)/treelang/parse.h \
	$(srcdir)/treelang/treelang.h $(CONFIG_H)
	$(CC) -o $@ -c $(ALL_CFLAGS) $(INCLUDES) $< 

# generated files the files from lex and yacc are put into the source
# directory in case someone wants to build but does not have
# lex/yacc

$(srcdir)/treelang/lex.c: $(srcdir)/treelang/lex.l
	$(LEX) $(LEXFLAGS) -o$(srcdir)/treelang/lex.c $(srcdir)/treelang/lex.l

$(srcdir)/treelang/parse.c $(srcdir)/treelang/parse.h: $(srcdir)/treelang/parse.y
	$(BISON) $(BISONFLAGS) -v $(srcdir)/treelang/parse.y\
	--output=$(srcdir)/treelang/parse.c --defines
# -v

gt-treelang-tree1.h gtype-treelang.h : s-gtype; @true

#
# Build hooks:

treelang.all.build: treelang
treelang.all.cross: 
	_error_not_here_yet - havent even thought about it - it may even work

treelang.start.encap:
treelang.rest.encap: 

.phony:treelang.info
treelang.info: $(srcdir)/treelang/treelang.info

$(srcdir)/treelang/treelang.info: $(srcdir)/treelang/treelang.texi \
	 $(srcdir)/doc/include/gcc-common.texi \
	 $(srcdir)/doc/include/gpl.texi \
	 $(srcdir)/doc/include/fdl.texi \
	 $(srcdir)/doc/include/funding.texi
	cd $(srcdir) && $(MAKEINFO) $(MAKEINFOFLAGS) -Idoc/include \
	-o treelang/treelang.info treelang/treelang.texi

treelang.dvi: $(srcdir)/treelang/treelang.texi \
	 $(srcdir)/doc/include/gcc-common.texi \
	 $(srcdir)/doc/include/gpl.texi \
	 $(srcdir)/doc/include/fdl.texi \
	 $(srcdir)/doc/include/funding.texi
	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
	cd treelang && $(TEXI2DVI) -I $$s/doc/include $$s/treelang/treelang.texi

treelang.generated-manpages:

#
# Install hooks:

# Nothing to do here.
treelang.install-normal: treelang.install.common

# Install 
.phony:treelang.install.common
.phony:treelang.install

treelang.install treelang.install.common treelang.install-common: treelang.install.common.done

treelang.install.common.done:  installdirs treelang.done 
	for name in $(TREE_EXES); \
	do \
	   if [ -f $$name ] ; then \
	    name2="`echo \`basename $$name\` | sed -e '$(program_transform_name)' `"; \
	    rm -f $(DESTDIR)$(bindir)/$$name2$(exeext); \
	    echo $(INSTALL_PROGRAM) $$name$(exeext) $(DESTDIR)$(bindir)/$$name2$(exeext); \
	    $(INSTALL_PROGRAM) $$name$(exeext) $(DESTDIR)$(bindir)/$$name2$(exeext); \
	    chmod a+x $(DESTDIR)$(bindir)/$$name2$(exeext); \
	  fi ; \
	done
	$(STAMP) treelang.install.common.done

treelang.install-info: $(srcdir)/treelang/treelang.info
	if [ -f $(srcdir)/treelang/treelang.info ] ; then \
	  rm -f $(DESTDIR)$(infodir)/treelang.info*; \
	  for f in $(srcdir)/treelang/treelang.info*; do \
	      realfile=`echo $$f | sed -e 's|.*/\([^/]*\)$$|\1|'`; \
	      $(INSTALL_DATA) $$f $(DESTDIR)$(infodir)/$$realfile; \
	  done; \
	  chmod a-x $(DESTDIR)$(infodir)/treelang.info*; \
	else true; fi
	@if [ -f $(srcdir)/treelang/treelang.info ] ; then \
	  if $(SHELL) -c 'install-info --version | sed 1q | fgrep -s -v -i debian' >/dev/null 2>&1; then \
	    echo " install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/treelang.info"; \
	    install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/treelang.info || : ; \
	  else : ; fi; \
	else : ; fi

treelang.install-man: 

treelang.uninstall:
	for name in $(TREE_EXES); \
	do \
	  echo $$name; \
	  name2="`echo $$name | sed -e '$(program_transform_name)' `"; \
	  echo becomes $$name2; \
	  echo -rm -rf $(DESTDIR)$(bindir)/$$name2$(exeext); \
	  rm -rf $(DESTDIR)$(bindir)/$$name2$(exeext); \
	done
	-rm treelang.install.common.done

#
# Clean hooks:
# A lot of the ancillary files are deleted by the main makefile.
# We just have to delete files specific to us.

treelang.mostlyclean: 
	for name in $(TREE_EXES); \
	do \
	  echo deleting $$name; \
	  if [ -f treelang/$$name$(exeext) ] ; then \
	    rm -f treelang/$$name$(exeext); \
	  fi ; \
	done
	-rm -f treelang/*$(objext)
	-rm -f treelang/*$(coverageexts)
	-rm treelang.done


treelang.clean: treelang.mostlyclean

treelang.distclean: treelang.clean
	-rm -f treelang/config.status 
	-rm -f treelang/*.output

treelang.extraclean: treelang.distclean

treelang.maintainer-clean: treelang.extraclean
	for name in $(TREE_GENERATED); \
	do \
	  if [ -f $(srcdir)/treelang/$$name ] ; then \
             echo deleting $(srcdir)/treelang/$$name; \
	     rm -f $(srcdir)/treelang/$$name; \
	  fi ; \
	done
	-rm -R $(srcdir)/treelang/*~


#
# Stage hooks:
# The main makefile has already created stage?/treelang.

treelang.stage1: stage1-start
	-mv treelang/*$(objext) stage1/treelang
treelang.stage2: stage2-start
	-mv treelang/*$(objext) stage2/treelang
treelang.stage3: stage3-start
	-mv treelang/*$(objext) stage3/treelang
treelang.stage4: stage4-start
	-mv treelang/*$(objext) stage4/treelang
#
# Maintenance hooks:

# This target creates the files that can be rebuilt, but go in the
# distribution anyway.  It then copies the files to the distdir directory.
treelang.distdir:
#	not here yet sorry not sure if this is needed or not???

# test hook
# the other languages are hard coded in the main makefile.in - that seems to be wrong 

check-treelang: treelang.check

TESTSUITEDIR = testsuite

treelang.check: $(TESTSUITEDIR)/site.exp
	-mkdir testsuite/treelang 

# these three files are empty and it seems diff has trouble generating
# patch files for new empty files as required for cvs.
# STAMP does not cut it here as I need an empty file.
	touch $(srcdir)/testsuite/treelang/{a01gcco01runpgmerr,a01gcc.out01,a01gcc.out01err}
	-rootme=`${PWD_COMMAND}`; export rootme; \
	srcdir=`cd ${srcdir}; ${PWD_COMMAND}` ; export srcdir ; \
	cd testsuite; \
	EXPECT=${EXPECT} ; export EXPECT ; \
	TRANSFORM=$(program_transform_name); export TRANSFORM; \
	if [ -f $${rootme}/../expect/expect ] ; then  \
	   TCL_LIBRARY=`cd .. ; cd ${srcdir}/../tcl/library ; ${PWD_COMMAND}` ; \
	   export TCL_LIBRARY ; fi ; \
	PATH=`cd ..;${PWD_COMMAND}`:$$PATH; export PATH; \
	gcc_extras="-B`cd ..;${PWD_COMMAND}` -B`cd ..;${PWD_COMMAND}`/treelang"; export gcc_extras; \
	$(RUNTEST) --tool treelang $(RUNTESTFLAGS)
	rm $(srcdir)/testsuite/treelang/{a01gcco01runpgmerr,a01gcc.out01,a01gcc.out01err}
#	GCC_EXTRAS="$(GCC_EXTRAS)"; export GCC_EXTRAS; \

# copy the output files from the current test to source ie say the new results are OK
treelang.check.fix: force
	srcdir=`cd ${srcdir}; ${PWD_COMMAND}` ; export srcdir ; 
	-cp testsuite/treelang/*.out* t
	-cp testsuite/treelang/*runpgm* t
	-rm -f t/*nofilename

treelang.wc: force
	wc  ${TREE_SOURCE}

#

# Update the tags table for emacs find label (alt-.) function
TAGS: treelang.tags

.PHONY: treelang.tags

treelang.tags:
	cd $(srcdir)/treelang;						\
	etags -l c ${TREE_SOURCE}

.PHONY: treelang.html

treelang.html:
	cd $(srcdir)/treelang && texi2html -I ../doc/include -verbose -menu -split_chapter -number treelang.texi
#	mv treelang*.html $(srcdir)/treelang
