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

#   Copyright (C) 1994, 1995, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005,
#   2006, 2007 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 3, 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 COPYING3.  If not see
# <http://www.gnu.org/licenses/>.


# This file provides the language dependent support in the main Makefile.
# Each language makefile fragment must provide the following targets:
#
# foo.all.cross, foo.start.encap, foo.rest.encap,
# foo.install-common, foo.install-man, foo.install-info, foo.install-pdf,
# foo.info, foo.dvi, foo.pdf, foo.html, foo.uninstall,
# foo.mostlyclean, foo.clean, foo.distclean,
# 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: tree1)
# - 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

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 = lex.c parse.c parse.h parse.output
# We need to use something other than treelang here because the directory
# is called treelang
TREE_EXES = gtreelang

#strict warnings for treelang
treelang-warn = $(STRICT_WARN)
# bison emits some unused static arrays (yytoknum)
treelang/parse.o-warn = -Wno-error
# flex produces 'no previous prototype' warnings
treelang/lex.o-warn = -Wno-error

#
# Define the names for selecting treelang in LANGUAGES.

.phony: treelang

treelang:treelang.done

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

# no preprocessor

# core compiler
tree1$(exeext): treelang/tree1.o treelang/treetree.o treelang/tree-convert.o \
	treelang/lex.o treelang/parse.o \
	$(BACKEND) $(LIBSDEPS) attribs.o
	$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ \
	treelang/tree1.o treelang/treetree.o treelang/tree-convert.o \
	treelang/lex.o treelang/parse.o \
	$(BACKEND) $(LIBS) attribs.o $(GMPLIBS)

# Create the compiler driver treelang.
gtreelang$(exeext): $(GCC_OBJS) version.o prefix.o intl.o $(EXTRA_GCC_OBJS) \
  $(LIBDEPS) treelang/spec.o
	$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ treelang/spec.o \
	  $(GCC_OBJS) version.o prefix.o intl.o $(EXTRA_GCC_OBJS) $(LIBS)



#
# Compiling object files from source files.

# object file makes

treelang/tree1.o: treelang/tree1.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
  $(FLAGS_H) toplev.h $(GGC_H) $(TREE_H) $(DIAGNOSTIC_H) treelang/treelang.h \
  input.h treelang/treetree.h options.h opts.h \
  treelang/treetree.h gt-treelang-tree1.h gtype-treelang.h

treelang/treetree.o: treelang/treetree.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
  $(TM_H) $(TREE_H) $(FLAGS_H) output.h $(RTL_H) $(GGC_H) toplev.h \
  $(VARRAY_H) $(LANGHOOKS_DEF_H) langhooks.h treelang/treelang.h input.h \
  treelang/treetree.h treelang/parse.h $(TARGET_H)

treelang/tree-convert.o: treelang/tree-convert.c $(CONFIG_H) $(SYSTEM_H) \
  coretypes.h $(DIAGNOSTIC_H) $(TREE_H) $(FLAGS_H) toplev.h langhooks.h $(TM_H)

treelang/spec.o: treelang/spec.c $(CONFIG_H) $(SYSTEM_H) \
  coretypes.h $(DIAGNOSTIC_H) $(TREE_H) $(FLAGS_H) toplev.h langhooks.h $(TM_H)

treelang/parse.o: treelang/parse.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
  $(TM_H) $(DIAGNOSTIC_H) treelang/treelang.h input.h treelang/treetree.h \
  toplev.h

treelang/lex.o: treelang/lex.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
  $(TM_H) $(DIAGNOSTIC_H) $(TREE_H) treelang/treelang.h input.h \
  treelang/parse.h toplev.h

# 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

treelang.srcextra: treelang/parse.c treelang/parse.h treelang/lex.c
	-cp -p $^ $(srcdir)/treelang

treelang/lex.c: treelang/lex.l
	-$(FLEX) $(FLEXFLAGS) -o$@ $<

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

# -v

#
# Build hooks:

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

treelang.start.encap:
treelang.rest.encap:
treelang.man:
treelang.srcman:

treelang.tags: force
	cd $(srcdir)/treelang; etags -o TAGS.sub *.y *.l *.c *.h; \
	etags --include TAGS.sub --include ../TAGS.sub

treelang.info: doc/treelang.info

treelang.srcinfo: doc/treelang.info
	-cp -p $^ $(srcdir)/doc

treelang.dvi: doc/treelang.dvi

TREELANG_PDFFILES = doc/treelang.pdf

treelang.pdf: $(TREELANG_PDFFILES)

TEXI_TREELANG_FILES = treelang/treelang.texi \
	 $(gcc_docdir)/include/gcc-common.texi \
	 $(gcc_docdir)/include/gpl.texi \
	 $(gcc_docdir)/include/fdl.texi \
	 $(gcc_docdir)/include/funding.texi \
	 gcc-vers.texi

doc/treelang.info: $(TEXI_TREELANG_FILES)
	$(MAKEINFO) $(MAKEINFOFLAGS) -I $(gcc_docdir)/include -o $@ $<

doc/treelang.dvi: $(TEXI_TREELANG_FILES)
	$(TEXI2DVI) -I $(abs_docdir)/include -o $@ $<

doc/treelang.pdf: $(TEXI_TREELANG_FILES)
	$(TEXI2PDF) -I $(abs_docdir)/include -o $@ $<

treelang.html: $(build_htmldir)/treelang/index.html

$(build_htmldir)/treelang/index.html: $(TEXI_TREELANG_FILES)
	$(mkinstalldirs) $(@D)
	rm -f $(@D)/*
	$(TEXI2HTML) -I $(gcc_docdir)/include -I $(srcdir)/treelang -o $(@D) $<

#
# Install hooks:

# 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

# We might not be able to build the info files
treelang.install-info: $(DESTDIR)$(infodir)/treelang.info

treelang.install-pdf: $(TREELANG_PDFFILES)
	@$(NORMAL_INSTALL)
	test -z "$(pdfdir)/gcc" || $(mkinstalldirs) "$(DESTDIR)$(pdfdir)/gcc"
	@list='$(TREELANG_PDFFILES)'; for p in $$list; do \
	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
	  f=$(pdf__strip_dir) \
	  echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(pdfdir)/gcc/$$f'"; \
	  $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(pdfdir)/gcc/$$f"; \
	done

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.maintainer-clean: treelang.distclean
	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
treelang.stageprofile: stageprofile-start
	-mv treelang/*$(objext) stageprofile/treelang
treelang.stagefeedback: stagefeedback-start
	-mv treelang/*$(objext) stagefeedback/treelang
#
# Maintenance hooks:

# test hook

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.
	-rootme=`${PWD_COMMAND}`; export rootme; \
	srcdir=`cd ${srcdir}; ${PWD_COMMAND}` ; export srcdir ; \
	cd testsuite; \
	EXPECT=${EXPECT} ; export EXPECT ; \
	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)

# 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

#

config.status: treelang/config-lang.in
