suffix.mk 5.54 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

sof's avatar
sof committed
33
HC_SPLIT_PRE= \
sof's avatar
sof committed
34
 $(RM) $@ ; if [ ! -d $(basename $@) ]; then mkdir $(basename $@); else \
rrt's avatar
rrt committed
35
 $(FIND) $(basename $@) -name '*.$(way_)o' -print | xargs $(RM) __rm_food ; fi
sof's avatar
sof committed
36
37
HC_SPLIT_POST  = touch $@

rrt's avatar
rrt committed
38
39
40
41
ifeq "$(SplitObjs)" "YES"
HC_PRE__  = $(HC_SPLIT_PRE) ;
HC_POST__ = $(HC_SPLIT_POST) ;
endif
sof's avatar
sof committed
42

sof's avatar
sof committed
43
44
SRC_HC_POST_OPTS += $(HC_POST__)
SRC_HC_PRE_OPTS  += $(HC_PRE__)
45
46

%.$(way_)o : %.hs
sof's avatar
sof committed
47
	$(HC_PRE_OPTS)
48
	$(HC) $(HC_OPTS) -c $< -o $@ -osuf $(subst .,,$(suffix $@))
sof's avatar
sof committed
49
	$(HC_POST_OPTS)
50
51
			 
%.$(way_)o : %.lhs	 
sof's avatar
sof committed
52
	$(HC_PRE_OPTS)
53
	$(HC) $(HC_OPTS) -c $< -o $@ -osuf $(subst .,,$(suffix $@))
sof's avatar
sof committed
54
	$(HC_POST_OPTS)
55
56
57
58
59
			 
%.$(way_)hc : %.lhs	 
	$(RM) $@
	$(HC) $(HC_OPTS) -C $< -o $@
			 
sof's avatar
sof committed
60
61
62
63
%.$(way_)hc : %.hs	 
	$(RM) $@
	$(HC) $(HC_OPTS) -C $< -o $@
			 
64
%.$(way_)o : %.$(way_)hc 
sof's avatar
sof committed
65
	$(HC_PRE_OPTS)
66
	$(HC) $(HC_OPTS) -c $< -o $@ -osuf $(subst .,,$(suffix $@))
sof's avatar
sof committed
67
	$(HC_POST_OPTS)
68

69
70
71
72
73
%.$(way_)o : %.hc 
	$(HC_PRE_OPTS)
	$(HC) $(HC_OPTS) -c $< -o $@ -osuf $(subst .,,$(suffix $@))
	$(HC_POST_OPTS)

74
75
76
77
78
%.$(way_)s : %.$(way_)hc 
	$(HC_PRE_OPTS)
	$(HC) $(HC_OPTS) -S $< -o $@ -osuf $(subst .,,$(suffix $@))
	$(HC_POST_OPTS)

79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
%.$(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 \
	    echo Panic! $< exists, but $@ does not. \
	    exit 1; \
	else exit 0 ; \
	fi							

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

#-----------------------------------------------------------------------------
# Happy Suffix Rules
#
.PRECIOUS: %.hs

%.hs : %.ly
sof's avatar
sof committed
113
	$(HAPPY) $(HAPPY_OPTS) $<
114
115
116
117
118
119
120
121

#-----------------------------------------------------------------------------
# Lx Suffix Rules
#

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

reid's avatar
reid committed
122
123
124
125
126
#-----------------------------------------------------------------------------
# Green-card Suffix Rules
#

%.hs : %.gc
sof's avatar
sof committed
127
128
129
130
	$(GREENCARD) $(GREENCARD_OPTS) $< -o $@

%.lhs : %.gc
	$(GREENCARD) $(GREENCARD_OPTS) $< -o $@
reid's avatar
reid committed
131

132
133
134
135
136
137
138
139
140
141
142
#-----------------------------------------------------------------------------
# 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 $@

143
144
145
146
%.$(way_)o : %.S
	@$(RM) $@
	$(CC) $(CC_OPTS) -c $< -o $@

147
148
149
150
151
152
153
#%.$(way_)s : %.c
#	@$(RM) $@
#	$(CC) $(CC_OPTS) -S $< -o $@

%.c : %.flex
	@$(RM) $@
	$(FLEX) -t $(FLEX_OPTS) $< > $@ || ( $(RM) $@ && exit 1 )
sof's avatar
sof committed
154
155
156
%.c : %.lex
	@$(RM) $@
	$(FLEX) -t $(FLEX_OPTS) $< > $@ || ( $(RM) $@ && exit 1 )
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172

#-----------------------------------------------------------------------------
# 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

173
174
%.runtest : %.hs
	$(TIME) $(RUNTEST) $(HC) $(RUNTEST_OPTS) $<
175
176
177

#-----------------------------------------------------------------------------
# Doc processing suffix rules
sof's avatar
sof committed
178
179
180
#
# ToDo: make these more robust
#
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
%.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 $< $@

199
200
201
202
203
#-----------------------------------------------------------------------------
# SGML suffix rules
#
%.sgml : %.vsgml
	@$(RM) $@
204
	expand $< | $(SGMLVERB) > $@
205
206
207

%.dvi : %.sgml
	@$(RM) $@
rrt's avatar
rrt committed
208
	$(SGML2DVI) $(SGML2DVI_OPTS) $<
209

sof's avatar
sof committed
210
%.ps : %.sgml
211
	@$(RM) $@
rrt's avatar
rrt committed
212
	$(SGML2PS) $(SGML2PS_OPTS) $<
213

214
215
%.html : %.sgml
	@$(RM) $@
sof's avatar
sof committed
216
	$(SGML2HTML) $(SGML2HTML_OPTS) $<
217
218
219

%.info : %.sgml
	@$(RM) $@
sof's avatar
sof committed
220
	$(SGML2INFO) $(SGML2INFO_OPTS) $<
221

rrt's avatar
rrt committed
222
%.rtf : %.sgml
223
	@$(RM) $@
rrt's avatar
rrt committed
224
	$(SGML2RTF) $(SGML2RTF_OPTS) $<
225

226
227
228
229
230
231
232
233
234
235
#-----------------------------------------------------------------------------
# Literate suffix rules

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

%.c : %.lc
	@$(RM) $@
sof's avatar
sof committed
236
	$(UNLIT) $(UNLIT_OPTS) $< $@
237
238
239
240
	@chmod 444 $@

%.h : %.lh
	@$(RM) $@
sof's avatar
sof committed
241
	$(UNLIT) $(UNLIT_OPTS) $< $@
242
	@chmod 444 $@
sof's avatar
sof committed
243
244
245
246
247
248
249
250
251
252

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

%.o : %.rc
	@$(RM) $@
	windres $< $@