xref: /openbsd-src/gnu/usr.bin/gcc/gcc/treelang/Make-lang.in (revision c87b03e512fc05ed6e0222f6fb0ae86264b1d05b)
1# Top level makefile fragment for TREELANG For GCC. -*- makefile -*-
2
3#   Copyright (C) 1994, 1995, 1997, 1998, 1999 2000, 2001, 2002, 2003 Free
4#   Software Foundation, Inc.
5
6#This file is part of GCC.
7
8#GCC is free software; you can redistribute it and/or modify
9#it under the terms of the GNU General Public License as published by
10#the Free Software Foundation; either version 2, or (at your option)
11#any later version.
12
13#GCC is distributed in the hope that it will be useful,
14#but WITHOUT ANY WARRANTY; without even the implied warranty of
15#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16#GNU General Public License for more details.
17
18#You should have received a copy of the GNU General Public License
19#along with GCC; see the file COPYING.  If not, write to
20#the Free Software Foundation, 59 Temple Place - Suite 330,
21#Boston, MA 02111-1307, USA.
22
23# This file provides the language dependent support in the main Makefile.
24# Each language makefile fragment must provide the following targets:
25#
26# foo.all.build, foo.all.cross, foo.start.encap, foo.rest.encap,
27# foo.info, foo.dvi,
28# foo.install-normal, foo.install-common, foo.install-info, foo.install-man,
29# foo.uninstall, foo.distdir,
30# foo.mostlyclean, foo.clean, foo.distclean, foo.extraclean,
31# foo.maintainer-clean, foo.stage1, foo.stage2, foo.stage3, foo.stage4
32#
33# where `foo' is the name of the language.
34#
35# It should also provide rules for:
36#
37# - making any compiler driver (eg: GCC)
38# - the compiler proper (eg: treelang)
39# - define the names for selecting the language in LANGUAGES.
40#
41
42## note program-prefix and program-suffix options are not supported
43## just program_transform_name which is a sed script to transform the
44## names
45
46TREELANGSED = sed
47TREELANGSEDFLAGS = -n
48
49# back end compiler libraries etc
50TREE_BE_LIBS = $(BACKEND) $(LIBIBERTY) $(INTLLIBS) $(LIBS) $(LIBDEPS)
51GCC_EXTRAS = -B./ -B$(build_tooldir)/bin/ -isystem $(build_tooldir)/include
52
53# ./xgcc is the just built compiler. See GCC_FOR_TARGET in the GCC Makefile.in.
54# If this can't be found, you probably have not done a bootstrap of GCC,
55# which you need to do.
56
57# GCC_FOR_TREELANG = ./xgcc $(GCC_EXTRAS)
58
59TREE_GENERATED = $(srcdir)/treelang/lex.c $(srcdir)/treelang/parse.c\
60	$(srcdir)/treelang/parse.h $(srcdir)/treelang/parse.output $(srcdir)/treelang/TAGS
61
62TREE_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
63
64TREE_EXES = tree1$(exeext)
65
66#no -Wtraditional warnings, allow long long
67treelang-warn = $(LOOSE_WARN) -pedantic -Wno-long-long -Wmissing-prototypes -Wmissing-declarations
68
69#
70# Define the names for selecting treelang in LANGUAGES.
71
72.phony: treelang TREELANG
73
74treelang TREELANG:treelang.done
75
76treelang.done: tree1$(exeext)
77	$(STAMP) treelang.done
78
79# no preprocessor
80
81# core compiler
82tree1$(exeext): treelang/tree1.o treelang/treetree.o treelang/lex.o treelang/parse.o\
83	$(TREE_BE_LIBS) c-convert.o c-typeck.o c-common.o c-decl.o attribs.o
84	$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ \
85	treelang/tree1.o treelang/treetree.o treelang/lex.o treelang/parse.o c-convert.o\
86	c-typeck.o c-common.o c-decl.o attribs.o $(TREE_BE_LIBS)
87
88#
89# Compiling object files from source files.
90
91# object file makes
92
93treelang/tree1.o: $(srcdir)/treelang/tree1.c $(srcdir)/treelang/treelang.h \
94	$(srcdir)/treelang/parse.h $(CONFIG_H) \
95	gt-treelang-tree1.h gtype-treelang.h
96	$(CC) -o $@ -c $(ALL_CFLAGS) $(INCLUDES) $<
97
98treelang/treetree.o: $(srcdir)/treelang/treetree.c $(srcdir)/treelang/treetree.h \
99	$(CONFIG_H)
100	$(CC) -o $@ -c $(ALL_CFLAGS) $(INCLUDES) $<
101
102treelang/parse.o: $(srcdir)/treelang/parse.c $(srcdir)/treelang/treelang.h \
103	$(srcdir)/treelang/treetree.h $(CONFIG_H)
104	$(CC) -o $@ -c $(ALL_CFLAGS) $(INCLUDES) $<
105
106treelang/lex.o: $(srcdir)/treelang/lex.c $(srcdir)/treelang/parse.h \
107	$(srcdir)/treelang/treelang.h $(CONFIG_H)
108	$(CC) -o $@ -c $(ALL_CFLAGS) $(INCLUDES) $<
109
110# generated files the files from lex and yacc are put into the source
111# directory in case someone wants to build but does not have
112# lex/yacc
113
114$(srcdir)/treelang/lex.c: $(srcdir)/treelang/lex.l
115	$(LEX) $(LEXFLAGS) -o$(srcdir)/treelang/lex.c $(srcdir)/treelang/lex.l
116
117$(srcdir)/treelang/parse.c $(srcdir)/treelang/parse.h: $(srcdir)/treelang/parse.y
118	$(BISON) $(BISONFLAGS) -v $(srcdir)/treelang/parse.y\
119	--output=$(srcdir)/treelang/parse.c --defines
120# -v
121
122gt-treelang-tree1.h gtype-treelang.h : s-gtype; @true
123
124#
125# Build hooks:
126
127treelang.all.build: treelang
128treelang.all.cross:
129	_error_not_here_yet - havent even thought about it - it may even work
130
131treelang.start.encap:
132treelang.rest.encap:
133
134.phony:treelang.info
135treelang.info: $(srcdir)/treelang/treelang.info
136
137$(srcdir)/treelang/treelang.info: $(srcdir)/treelang/treelang.texi \
138	 $(srcdir)/doc/include/gcc-common.texi \
139	 $(srcdir)/doc/include/gpl.texi \
140	 $(srcdir)/doc/include/fdl.texi \
141	 $(srcdir)/doc/include/funding.texi
142	cd $(srcdir) && $(MAKEINFO) $(MAKEINFOFLAGS) -Idoc/include \
143	-o treelang/treelang.info treelang/treelang.texi
144
145treelang.dvi: $(srcdir)/treelang/treelang.texi \
146	 $(srcdir)/doc/include/gcc-common.texi \
147	 $(srcdir)/doc/include/gpl.texi \
148	 $(srcdir)/doc/include/fdl.texi \
149	 $(srcdir)/doc/include/funding.texi
150	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
151	cd treelang && $(TEXI2DVI) -I $$s/doc/include $$s/treelang/treelang.texi
152
153treelang.generated-manpages:
154
155#
156# Install hooks:
157
158# Nothing to do here.
159treelang.install-normal: treelang.install.common
160
161# Install
162.phony:treelang.install.common
163.phony:treelang.install
164
165treelang.install treelang.install.common treelang.install-common: treelang.install.common.done
166
167treelang.install.common.done:  installdirs treelang.done
168	for name in $(TREE_EXES); \
169	do \
170	   if [ -f $$name ] ; then \
171	    name2="`echo \`basename $$name\` | sed -e '$(program_transform_name)' `"; \
172	    rm -f $(DESTDIR)$(bindir)/$$name2$(exeext); \
173	    echo $(INSTALL_PROGRAM) $$name$(exeext) $(DESTDIR)$(bindir)/$$name2$(exeext); \
174	    $(INSTALL_PROGRAM) $$name$(exeext) $(DESTDIR)$(bindir)/$$name2$(exeext); \
175	    chmod a+x $(DESTDIR)$(bindir)/$$name2$(exeext); \
176	  fi ; \
177	done
178	$(STAMP) treelang.install.common.done
179
180treelang.install-info: $(srcdir)/treelang/treelang.info
181	if [ -f $(srcdir)/treelang/treelang.info ] ; then \
182	  rm -f $(DESTDIR)$(infodir)/treelang.info*; \
183	  for f in $(srcdir)/treelang/treelang.info*; do \
184	      realfile=`echo $$f | sed -e 's|.*/\([^/]*\)$$|\1|'`; \
185	      $(INSTALL_DATA) $$f $(DESTDIR)$(infodir)/$$realfile; \
186	  done; \
187	  chmod a-x $(DESTDIR)$(infodir)/treelang.info*; \
188	else true; fi
189	@if [ -f $(srcdir)/treelang/treelang.info ] ; then \
190	  if $(SHELL) -c 'install-info --version | sed 1q | fgrep -s -v -i debian' >/dev/null 2>&1; then \
191	    echo " install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/treelang.info"; \
192	    install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/treelang.info || : ; \
193	  else : ; fi; \
194	else : ; fi
195
196treelang.install-man:
197
198treelang.uninstall:
199	for name in $(TREE_EXES); \
200	do \
201	  echo $$name; \
202	  name2="`echo $$name | sed -e '$(program_transform_name)' `"; \
203	  echo becomes $$name2; \
204	  echo -rm -rf $(DESTDIR)$(bindir)/$$name2$(exeext); \
205	  rm -rf $(DESTDIR)$(bindir)/$$name2$(exeext); \
206	done
207	-rm treelang.install.common.done
208
209#
210# Clean hooks:
211# A lot of the ancillary files are deleted by the main makefile.
212# We just have to delete files specific to us.
213
214treelang.mostlyclean:
215	for name in $(TREE_EXES); \
216	do \
217	  echo deleting $$name; \
218	  if [ -f treelang/$$name$(exeext) ] ; then \
219	    rm -f treelang/$$name$(exeext); \
220	  fi ; \
221	done
222	-rm -f treelang/*$(objext)
223	-rm -f treelang/*$(coverageexts)
224	-rm treelang.done
225
226
227treelang.clean: treelang.mostlyclean
228
229treelang.distclean: treelang.clean
230	-rm -f treelang/config.status
231	-rm -f treelang/*.output
232
233treelang.extraclean: treelang.distclean
234
235treelang.maintainer-clean: treelang.extraclean
236	for name in $(TREE_GENERATED); \
237	do \
238	  if [ -f $(srcdir)/treelang/$$name ] ; then \
239             echo deleting $(srcdir)/treelang/$$name; \
240	     rm -f $(srcdir)/treelang/$$name; \
241	  fi ; \
242	done
243	-rm -R $(srcdir)/treelang/*~
244
245
246#
247# Stage hooks:
248# The main makefile has already created stage?/treelang.
249
250treelang.stage1: stage1-start
251	-mv treelang/*$(objext) stage1/treelang
252treelang.stage2: stage2-start
253	-mv treelang/*$(objext) stage2/treelang
254treelang.stage3: stage3-start
255	-mv treelang/*$(objext) stage3/treelang
256treelang.stage4: stage4-start
257	-mv treelang/*$(objext) stage4/treelang
258#
259# Maintenance hooks:
260
261# This target creates the files that can be rebuilt, but go in the
262# distribution anyway.  It then copies the files to the distdir directory.
263treelang.distdir:
264#	not here yet sorry not sure if this is needed or not???
265
266# test hook
267# the other languages are hard coded in the main makefile.in - that seems to be wrong
268
269check-treelang: treelang.check
270
271TESTSUITEDIR = testsuite
272
273treelang.check: $(TESTSUITEDIR)/site.exp
274	-mkdir testsuite/treelang
275
276# these three files are empty and it seems diff has trouble generating
277# patch files for new empty files as required for cvs.
278# STAMP does not cut it here as I need an empty file.
279	touch $(srcdir)/testsuite/treelang/{a01gcco01runpgmerr,a01gcc.out01,a01gcc.out01err}
280	-rootme=`${PWD_COMMAND}`; export rootme; \
281	srcdir=`cd ${srcdir}; ${PWD_COMMAND}` ; export srcdir ; \
282	cd testsuite; \
283	EXPECT=${EXPECT} ; export EXPECT ; \
284	TRANSFORM=$(program_transform_name); export TRANSFORM; \
285	if [ -f $${rootme}/../expect/expect ] ; then  \
286	   TCL_LIBRARY=`cd .. ; cd ${srcdir}/../tcl/library ; ${PWD_COMMAND}` ; \
287	   export TCL_LIBRARY ; fi ; \
288	PATH=`cd ..;${PWD_COMMAND}`:$$PATH; export PATH; \
289	gcc_extras="-B`cd ..;${PWD_COMMAND}` -B`cd ..;${PWD_COMMAND}`/treelang"; export gcc_extras; \
290	$(RUNTEST) --tool treelang $(RUNTESTFLAGS)
291	rm $(srcdir)/testsuite/treelang/{a01gcco01runpgmerr,a01gcc.out01,a01gcc.out01err}
292#	GCC_EXTRAS="$(GCC_EXTRAS)"; export GCC_EXTRAS; \
293
294# copy the output files from the current test to source ie say the new results are OK
295treelang.check.fix: force
296	srcdir=`cd ${srcdir}; ${PWD_COMMAND}` ; export srcdir ;
297	-cp testsuite/treelang/*.out* t
298	-cp testsuite/treelang/*runpgm* t
299	-rm -f t/*nofilename
300
301treelang.wc: force
302	wc  ${TREE_SOURCE}
303
304#
305
306# Update the tags table for emacs find label (alt-.) function
307TAGS: treelang.tags
308
309.PHONY: treelang.tags
310
311treelang.tags:
312	cd $(srcdir)/treelang;						\
313	etags -l c ${TREE_SOURCE}
314
315.PHONY: treelang.html
316
317treelang.html:
318	cd $(srcdir)/treelang && texi2html -I ../doc/include -verbose -menu -split_chapter -number treelang.texi
319#	mv treelang*.html $(srcdir)/treelang
320