[project @ 1997-03-14 05:31:07 by sof]
[ghc-hetmet.git] / mk / rules.mk
1 #-----------------------------------------------------------------------------
2 # $Id: rules.mk,v 1.3 1997/01/21 10:55:01 sof Exp $
3
4 # This file defines the default suffix rules.  It replaces suffixes.jm in the
5 # jmake system.
6
7 .SUFFIXES: .xdvi .ps .dvi .tex .fig .tib .verb .itex .itxi .ihtml .lit \
8         .p_o .o .s .hi .hc .lhc .lhs .hs .prl .lprl .sh .lsh \
9         .c .lc .h .lh .flex .lflex .y
10
11 ifndef SuffixRules_WantStdOnes
12 SuffixRules_WantStdOnes = YES /* but you can turn it off */
13 endif
14
15 #-----------------------------------------------------------------------------
16 # Doc processing suffix rules
17
18 ifdef DocProcessingSuffixRules
19
20 .tex.dvi:
21         @$(RM) $@
22         $(LTX) $<
23
24 .verb.tex:
25         @$(RM) $*.tex
26         expand $*.verb | $(VERBATIM) > $*.tex
27
28 .tib.tex:
29         @$(RM) $*.tex $*.verb-t.tex
30         $(TIB) $*.tib
31         expand $*.tib-t.tex | $(VERBATIM) > $*.tex
32         @$(RM) $*.tib-t.tex
33
34 .fig.ps:
35         @$(RM) $@
36         fig2dev -L ps $< $@
37
38 .fig.tex:
39         @$(RM) $@
40         fig2dev -L latex $< $@
41
42 endif
43
44 #-----------------------------------------------------------------------------
45 # Literate suffix rules
46
47 # ToDo: somehow macroize this lot.
48
49 ifdef LiterateSuffixRules
50
51 .lit:
52         @$(RM) $@
53         $(LIT2PGM) $(LIT2PGMFLAGS) -o $@ $<
54         @chmod 444 $@
55
56 .lit.itxi:
57         @$(RM) $@
58         $(LIT2TEXI) -c $(LIT2TEXIFLAGS) -o $@ $<
59         @chmod 444 $@
60
61 .lit.ihtml:
62         @$(RM) $@
63         $(LIT2HTML) -c $(LIT2HTMLFLAGS) -o $@ $<
64         @chmod 444 $@
65
66 .lit.itex:
67         @$(RM) $@
68         $(LIT2LATEX) -c $(LIT2LATEXFLAGS) -o $@ $<
69         @chmod 444 $@
70
71 .lhs.hs:
72         @$(RM) $@
73         $(LIT2PGM) $(LIT2PGMFLAGS) -o $@ $<
74         @chmod 444 $@
75
76 .lhs.itxi:
77         @$(RM) $@
78         $(LIT2TEXI) -c $(LIT2TEXIFLAGS) -o $@ $<
79         @chmod 444 $@
80
81 .lhs.ihtml:
82         @$(RM) $@
83         $(LIT2HTML) -c $(LIT2HTMLFLAGS) -o $@ $<
84         @chmod 444 $@
85
86 .lhs.itex:
87         @$(RM) $@
88         $(LIT2LATEX) -c $(LIT2LATEXFLAGS) -o $@ $<
89         @chmod 444 $@
90
91 .lhc.hc:
92         @$(RM) $@
93         $(LIT2PGM) $(LIT2PGMFLAGS) -o $@ $<
94         @chmod 444 $@
95
96 .lhc.itxi:
97         @$(RM) $@
98         $(LIT2TEXI) -c $(LIT2TEXIFLAGS) -o $@ $<
99         @chmod 444 $@
100
101 .lhc.ihtml:
102         @$(RM) $@
103         $(LIT2HTML) -c $(LIT2HTMLFLAGS) -o $@ $<
104         @chmod 444 $@
105
106 .lhc.itex:
107         @$(RM) $@
108         $(LIT2LATEX) -c $(LIT2LATEXFLAGS) -o $@ $<
109         @chmod 444 $@
110
111 .lprl.prl:
112         @$(RM) $@
113         $(LIT2PGM) $(LIT2PGMFLAGS) -o $@ $<
114         @chmod 444 $@
115
116 .lprl.itxi:
117         @$(RM) $@
118         $(LIT2TEXI) -c $(LIT2TEXIFLAGS) -o $@ $<
119         @chmod 444 $@
120
121 .lprl.ihtml:
122         @$(RM) $@
123         $(LIT2HTML) -c $(LIT2HTMLFLAGS) -o $@ $<
124         @chmod 444 $@
125
126 .lprl.itex:
127         @$(RM) $@
128         $(LIT2LATEX) -c $(LIT2LATEXFLAGS) -o $@ $<
129         @chmod 444 $@
130
131 .lsh.sh:
132         @$(RM) $@
133         $(LIT2PGM) $(LIT2PGMFLAGS) -o $@ $<
134         @chmod 444 $@
135
136 .lsh.itxi:
137         @$(RM) $@
138         $(LIT2TEXI) -c $(LIT2TEXIFLAGS) -o $@ $<
139         @chmod 444 $@
140
141 .lsh.ihtml:
142         @$(RM) $@
143         $(LIT2HTML) -c $(LIT2HTMLFLAGS) -o $@ $<
144         @chmod 444 $@
145
146 .lsh.itex:
147         @$(RM) $@
148         $(LIT2LATEX) -c $(LIT2LATEXFLAGS) -o $@ $<
149         @chmod 444 $@
150
151 .lc.c:
152         @$(RM) $@
153         $(LIT2PGM) $(LIT2PGMFLAGS) -o $@ $<
154         @chmod 444 $@
155
156 .lc.itxi:
157         @$(RM) $@
158         $(LIT2TEXI) -c $(LIT2TEXIFLAGS) -o $@ $<
159         @chmod 444 $@
160
161 .lc.ihtml:
162         @$(RM) $@
163         $(LIT2HTML) -c $(LIT2HTMLFLAGS) -o $@ $<
164         @chmod 444 $@
165
166 .lc.itex:
167         @$(RM) $@
168         $(LIT2LATEX) -c $(LIT2LATEXFLAGS) -o $@ $<
169         @chmod 444 $@
170
171 .lh.h:
172         @$(RM) $@
173         $(LIT2PGM) $(LIT2PGMFLAGS) -o $@ $<
174         @chmod 444 $@
175
176 .lh.itxi:
177         @$(RM) $@
178         $(LIT2TEXI) -c $(LIT2TEXIFLAGS) -o $@ $<
179         @chmod 444 $@
180
181 .lh.ihtml:
182         @$(RM) $@
183         $(LIT2HTML) -c $(LIT2HTMLFLAGS) -o $@ $<
184         @chmod 444 $@
185
186 .lh.itex:
187         @$(RM) $@
188         $(LIT2LATEX) -c $(LIT2LATEXFLAGS) -o $@ $<
189         @chmod 444 $@
190
191 .lflex.flex:
192         @$(RM) $@
193         $(LIT2PGM) $(LIT2PGMFLAGS) -o $@ $<
194         @chmod 444 $@
195
196 .lflex.itxi:
197         @$(RM) $@
198         $(LIT2TEXI) -c $(LIT2TEXIFLAGS) -o $@ $<
199         @chmod 444 $@
200
201 .lflex.ihtml:
202         @$(RM) $@
203         $(LIT2HTML) -c $(LIT2HTMLFLAGS) -o $@ $<
204         @chmod 444 $@
205
206 .lflex.itex:
207         @$(RM) $@
208         $(LIT2LATEX) -c $(LIT2LATEXFLAGS) -o $@ $<
209         @chmod 444 $@
210
211 endif
212
213 #-----------------------------------------------------------------------------
214 # C-related suffix rules
215
216 ifdef CSuffixRules
217
218 .s.o:
219         @$(RM) $@
220         $(AS) $(ASFLAGS) -o $@ $< || ( $(RM) $@ && exit 1 )
221
222 .c.o:
223         @$(RM) $@
224         $(CC) $(CFLAGS) -c $< -o $@
225
226 .c.s:
227         @$(RM) $@
228         $(CC) $(CFLAGS) -S $< -o $@
229
230 endif
231
232 ifdef FlexSuffixRules
233
234 .flex.c:
235         @$(RM) $@
236         $(FLEX) -t $(LFLAGS) $< > $@ || ( $(RM) $@ && exit 1 )
237
238 endif
239
240 #-----------------------------------------------------------------------------
241 # Yacc stuff
242
243 ifdef YaccSuffixRules
244
245 %.tab.c %.tab.h : %.y
246         @$(RM) $*.tab.h $*.tab.c y.tab.c y.tab.h y.output
247         $(YACC) $(YFLAGS) $<
248         $(MV) y.tab.c $*.tab.c
249         @chmod 444 $*.tab.c
250         $(MV) y.tab.h $*.tab.h
251         @chmod 444 $*.tab.h
252
253 endif
254
255 #-----------------------------------------------------------------------------
256 # Haskell Suffix Rules
257
258 # ToDo: these don't do the .hi-file games for hbc etc.
259
260 ifdef HaskellSuffixRules 
261 SuffixRule_o_hi         = YES
262 SuffixRule_lhs_o        = YES
263 SuffixRule_hs_o         = YES
264 endif
265
266 ifdef SuffixRule_lhs_o
267 %.o : %.hs
268         $(HC) $(HCFLAGS) $($*_flags) -c $< -o $@
269 endif
270
271 ifdef SuffixRule_hs_o
272 %.o : %.lhs
273         $(HC) $(HCFLAGS) $($*_flags) -c $< -o $@
274 endif
275
276 ifdef SuffixRule_lhs_hc
277 %.hc : %.lhs
278         $(HC) $(HCFLAGS) $($*_flags) -C $< -o $@
279 endif
280
281 ifdef SuffixRule_hc_o
282 %.o : %.hc
283         $(HC) $(HCFLAGS) $($*_flags) -c $< -o $@
284 endif
285
286 ifdef SuffixRule_o_hi
287 %.hi : %.o
288         @if [ ! -f $@ ] ; then \
289             echo You need to create an initial $@ by hand ; \
290             exit 1; \
291         else exit 0 ; \
292         fi                                                      
293 %.$(suffix)_hi : %.$(suffix)_o
294         @if [ ! -f $@ ] ; then \
295             echo You need to create an initial $@ by hand ; \
296             exit 1; \
297         else exit 0 ; \
298         fi                                                      
299 endif
300
301 ifdef SuffixRule_hc_hi
302 %.hi : %.hc
303         @if [ ! -f $@ ] ; then \
304             echo You need to create an initial $@ by hand ; \
305             exit 1; \
306         else exit 0 ; \
307         fi
308 endif
309
310 #-----------------------------------------------------------------------------
311 # Runtest rules for calling $(GHC) on a single-file Haskell program
312
313 ifdef GhcRunTestRules
314
315 %.runtest : %.hs
316         $(TIME) $(RUNSTDTEST) $(GHC) $(RUNSTDTEST_FLAGS) \
317           -o2 $*.stderr $($*_flags) $<
318
319 endif