suffix.mk 5.97 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#################################################################################
#
#			    suffix.mk
#
#		Suffix rules for fptools
#
#################################################################################

# 
# This file contain the default suffix rules for all the fptools projects.
#


# No need to define .SUFFIXES because we don't use any suffix rules
# Instead we use gmake's pattern rules exlusively

.SUFFIXES:

# However, if $(way) is set then we have to define $(way_) and $(_way)
# from it in the obvious fashion.
# This must be done here (or earlier), but not in target.mk with the other
# way management, because the pattern rules in this file take a snapshot of
# the value of $(way_) and $(_way), and it's no good setting them later!

ifneq "$(way)" ""
  way_ := $(way)_
  _way := _$(way)
endif

#-----------------------------------------------------------------------------
# Haskell Suffix Rules

33
34
35
36
37
# Turn off all the Haskell suffix rules if we're booting from .hc
# files.  The file bootstrap.mk contains alternative suffix rules in
# this case.
ifneq "$(BootingFromHc)" "YES"

38
%.$(way_)o : %.hs
sof's avatar
sof committed
39
	$(HC_PRE_OPTS)
40
	$(HC) $(HC_OPTS) -c $< -o $@
sof's avatar
sof committed
41
	$(HC_POST_OPTS)
42

43
%.$(way_)o : %.lhs	 
sof's avatar
sof committed
44
	$(HC_PRE_OPTS)
45
	$(HC) $(HC_OPTS) -c $< -o $@
sof's avatar
sof committed
46
	$(HC_POST_OPTS)
47

48
49
50
%.$(way_)hc : %.lhs	 
	$(RM) $@
	$(HC) $(HC_OPTS) -C $< -o $@
51

sof's avatar
sof committed
52
53
54
%.$(way_)hc : %.hs	 
	$(RM) $@
	$(HC) $(HC_OPTS) -C $< -o $@
55

56
%.$(way_)o : %.$(way_)hc 
sof's avatar
sof committed
57
	$(HC_PRE_OPTS)
58
	$(HC) $(HC_OPTS) -c $< -o $@
sof's avatar
sof committed
59
	$(HC_POST_OPTS)
60

61
62
%.$(way_)o : %.hc 
	$(HC_PRE_OPTS)
63
	$(HC) $(HC_OPTS) -c $< -o $@
64
65
	$(HC_POST_OPTS)

66
67
%.$(way_)s : %.$(way_)hc 
	$(HC_PRE_OPTS)
68
	$(HC) $(HC_OPTS) -S $< -o $@
69
70
	$(HC_POST_OPTS)

71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
%.$(way_)hc : %.lhc
	@$(RM) $@
	$(UNLIT) $< $@
	@chmod 444 $@


# Here's an interesting rule!
# The .hi file depends on the .o file,
# so if the .hi file is dated earlier than the .o file (commonly the case,
# when interfaces are stable) this rule just makes sure that the .o file,
# is up to date.  Then it does nothing to generate the .hi file from the 
# .o file, because the act of making sure the .o file is up to date also
# updates the .hi file (if necessary).

%.$(way_)hi : %.$(way_)o
	@if [ ! -f $@ ] ; then \
87
	    echo Panic! $< exists, but $@ does not.; \
88
89
90
91
92
93
	    exit 1; \
	else exit 0 ; \
	fi							

%.$(way_)hi : %.$(way_)hc
	@if [ ! -f $@ ] ; then \
94
	    echo Panic! $< exists, but $@ does not.; \
95
96
97
98
	    exit 1; \
	else exit 0 ; \
	fi

99
100
endif # BootingViaC

101
102
103
104
105
106
#-----------------------------------------------------------------------------
# Happy Suffix Rules
#
.PRECIOUS: %.hs

%.hs : %.ly
sof's avatar
sof committed
107
	$(HAPPY) $(HAPPY_OPTS) $<
108

109
110
111
%.hs : %.y
	$(HAPPY) $(HAPPY_OPTS) $<

112
113
114
#-----------------------------------------------------------------------------
# hsc2hs Suffix Rules
#
115
ifneq "$(BootingFromHc)" "YES"
116
%_hsc.c %_hsc.h %.hs : %.hsc
117
	$(HSC2HS) $(HSC2HS_OPTS) $<
118
	@touch $(patsubst %.hsc,%_hsc.c,$<)
119
endif
120

121
122
123
124
125
126
127
#-----------------------------------------------------------------------------
# Lx Suffix Rules
#

%.hs : %.lx
	$(LX) $(LX_OPTS) $<

reid's avatar
reid committed
128
129
130
131
#-----------------------------------------------------------------------------
# Green-card Suffix Rules
#

rrt's avatar
rrt committed
132
133
.PRECIOUS: %.gc

reid's avatar
reid committed
134
%.hs : %.gc
rrt's avatar
rrt committed
135
	$(GREENCARD) $(GC_OPTS) $< -o $@
sof's avatar
sof committed
136
137

%.lhs : %.gc
rrt's avatar
rrt committed
138
	$(GREENCARD) $(GC_OPTS) $< -o $@
reid's avatar
reid committed
139

rrt's avatar
rrt committed
140
141
142
%.gc : %.pgc
	$(CPP) $(GC_CPP_OPTS) $< | perl -pe 's#\\n#\n#g' > $@

143
144
145
146
147
148
149
150
151
152
153
#-----------------------------------------------------------------------------
# C-related suffix rules

%.$(way_)o : %.$(way_)s
	@$(RM) $@
	$(AS) $(AS_OPTS) -o $@ $< || ( $(RM) $@ && exit 1 )

%.$(way_)o : %.c
	@$(RM) $@
	$(CC) $(CC_OPTS) -c $< -o $@

154
155
156
157
%.$(way_)o : %.S
	@$(RM) $@
	$(CC) $(CC_OPTS) -c $< -o $@

158
159
160
161
162
163
164
#%.$(way_)s : %.c
#	@$(RM) $@
#	$(CC) $(CC_OPTS) -S $< -o $@

%.c : %.flex
	@$(RM) $@
	$(FLEX) -t $(FLEX_OPTS) $< > $@ || ( $(RM) $@ && exit 1 )
sof's avatar
sof committed
165
166
167
%.c : %.lex
	@$(RM) $@
	$(FLEX) -t $(FLEX_OPTS) $< > $@ || ( $(RM) $@ && exit 1 )
168

169
170
171
172
# stubs are automatically generated and compiled by GHC
%_stub.$(way_)o: %.o
	@:

173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
#-----------------------------------------------------------------------------
# Yacc stuff

%.tab.c %.tab.h : %.y
	@$(RM) $*.tab.h $*.tab.c y.tab.c y.tab.h y.output
	$(YACC) $(YACC_OPTS) $<
	$(MV) y.tab.c $*.tab.c
	@chmod 444 $*.tab.c
	$(MV) y.tab.h $*.tab.h
	@chmod 444 $*.tab.h


#-----------------------------------------------------------------------------
# Runtest rules for calling $(HC) on a single-file Haskell program

188
189
%.runtest : %.hs
	$(TIME) $(RUNTEST) $(HC) $(RUNTEST_OPTS) $<
190
191
192

#-----------------------------------------------------------------------------
# Doc processing suffix rules
sof's avatar
sof committed
193
194
195
#
# ToDo: make these more robust
#
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
%.ps : %.dvi
	@$(RM) $@
	dvips $< -o $@

%.tex : %.tib
	@$(RM) $*.tex $*.verb-t.tex
	$(TIB) $*.tib
	expand $*.tib-t.tex | $(VERBATIM) > $*.tex
	@$(RM) $*.tib-t.tex

%.ps : %.fig
	@$(RM) $@
	fig2dev -L ps $< $@

%.tex : %.fig
	@$(RM) $@
	fig2dev -L latex $< $@

214
215
216
217
218
#-----------------------------------------------------------------------------
# SGML suffix rules
#
%.dvi : %.sgml
	@$(RM) $@
rrt's avatar
rrt committed
219
	$(SGML2DVI) $(SGML2DVI_OPTS) $<
220

sof's avatar
sof committed
221
%.ps : %.sgml
222
	@$(RM) $@
rrt's avatar
rrt committed
223
	$(SGML2PS) $(SGML2PS_OPTS) $<
224

225
226
%.html : %.sgml
	@$(RM) $@
227
228
229
#	$(PERL) $(COLLATEINDEX) -N -o index.sgml
#	$(JADE) -t sgml -V html-index -d $(SGMLSTYLESHEET) -c $(DOCBOOK_CATALOG) $<
#	$(PERL) $(COLLATEINDEX) -N -o index.sgml
sof's avatar
sof committed
230
	$(SGML2HTML) $(SGML2HTML_OPTS) $<
231

rrt's avatar
rrt committed
232
%.html : %.tex
233
	@$(RM) $@
rrt's avatar
rrt committed
234
235
236
237
	$(HEVEA) $(HEVEA_OPTS) $(patsubst %.tex,%.hva,$<) $<
	$(HEVEA) $(HEVEA_OPTS) $(patsubst %.tex,%.hva,$<) $<
	$(HACHA) $(HACHA_OPTS) $(patsubst %.tex,%.html,$<)
# Run HeVeA twice to resolve labels
238

rrt's avatar
rrt committed
239
%.rtf : %.sgml
240
	@$(RM) $@
rrt's avatar
rrt committed
241
	$(SGML2RTF) $(SGML2RTF_OPTS) $<
242

sof's avatar
sof committed
243
244
245
246
%.pdf : %.sgml
	@$(RM) $@
	$(SGML2PDF) $(SGML2PDF_OPTS) $<

247
248
249
250
251
252
253
254
255
256
#-----------------------------------------------------------------------------
# Literate suffix rules

%.prl : %.lprl
	@$(RM) $@
	$(UNLIT) $(UNLIT_OPTS) $< $@
	@chmod 444 $@

%.c : %.lc
	@$(RM) $@
sof's avatar
sof committed
257
	$(UNLIT) $(UNLIT_OPTS) $< $@
258
259
260
261
	@chmod 444 $@

%.h : %.lh
	@$(RM) $@
sof's avatar
sof committed
262
	$(UNLIT) $(UNLIT_OPTS) $< $@
263
	@chmod 444 $@
sof's avatar
sof committed
264
265
266
267
268
269
270

#-----------------------------------------------------------------------------
# Win32 resource files
#
# The default is to use the GNU resource compiler.
#

271
%.$(way_)o : %.$(way_)rc
sof's avatar
sof committed
272
273
	@$(RM) $@
	windres $< $@