suffix.mk 5.14 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
35
 $(RM) $@ ; if [ ! -d $(basename $@) ]; then mkdir $(basename $@); else \
 find $(basename $@) -name '*.$(way_)o' -print | xargs $(RM) __rm_food ; fi
sof's avatar
sof committed
36
37
38
39
40
41
42
HC_SPLIT_POST  = touch $@

HC_PRE__       = $(patsubst %,$(HC_SPLIT_PRE) ; ,$(filter -split-objs,$(HC_OPTS)))
HC_POST__      = $(patsubst %,$(HC_SPLIT_POST) ; ,$(filter -split-objs,$(HC_OPTS)))

SRC_HC_POST += $(HC_POST__)
SRC_HC_PRE  += $(HC_PRE__)
43
44

%.$(way_)o : %.hs
sof's avatar
sof committed
45
	$(SRC_HC_PRE)
46
	$(HC) $(HC_OPTS) -c $< -o $@ -osuf $(subst .,,$(suffix $@))
sof's avatar
sof committed
47
	$(SRC_HC_POST)
48
49
			 
%.$(way_)o : %.lhs	 
sof's avatar
sof committed
50
	$(SRC_HC_PRE)
51
	$(HC) $(HC_OPTS) -c $< -o $@ -osuf $(subst .,,$(suffix $@))
sof's avatar
sof committed
52
	$(SRC_HC_POST)
53
54
55
56
57
			 
%.$(way_)hc : %.lhs	 
	$(RM) $@
	$(HC) $(HC_OPTS) -C $< -o $@
			 
sof's avatar
sof committed
58
59
60
61
%.$(way_)hc : %.hs	 
	$(RM) $@
	$(HC) $(HC_OPTS) -C $< -o $@
			 
62
%.$(way_)o : %.$(way_)hc 
sof's avatar
sof committed
63
	$(SRC_HC_PRE)
64
	$(HC) $(HC_OPTS) -c $< -o $@ -osuf $(subst .,,$(suffix $@))
sof's avatar
sof committed
65
	$(SRC_HC_POST)
66
67
68
69
70
71
72
73
74
75
76
77
78
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

%.$(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
	$(HAPPY) $(HAPPY_OPTS) -g $<

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

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

reid's avatar
reid committed
110
111
112
113
114
115
116
#-----------------------------------------------------------------------------
# Green-card Suffix Rules
#

%.hs : %.gc
	$(GREENCARD) $(GREENCARD_OPTS) $<

117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#-----------------------------------------------------------------------------
# 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 $@

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

%.c : %.flex
	@$(RM) $@
	$(FLEX) -t $(FLEX_OPTS) $< > $@ || ( $(RM) $@ && exit 1 )
sof's avatar
sof committed
135
136
137
%.c : %.lex
	@$(RM) $@
	$(FLEX) -t $(FLEX_OPTS) $< > $@ || ( $(RM) $@ && exit 1 )
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153

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

154
155
%.runtest : %.hs
	$(TIME) $(RUNTEST) $(HC) $(RUNTEST_OPTS) $<
156
157
158

#-----------------------------------------------------------------------------
# Doc processing suffix rules
sof's avatar
sof committed
159
160
161
#
# ToDo: make these more robust
#
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
%.dvi : %.tex
	@$(RM) $@
	$(LTX) $<

%.ps : %.dvi
	@$(RM) $@
	dvips $< -o $@

%.tex : %.verb
	@$(RM) $*.tex
	expand $*.verb | $(VERBATIM) > $*.tex

%.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 $< $@

188
189
190
191
192
#-----------------------------------------------------------------------------
# SGML suffix rules
#
%.sgml : %.vsgml
	@$(RM) $@
193
	expand $< | $(SGMLVERB) > $@
194

195
196
197
198
%.tex : %.sgml
	@$(RM) $@
	$(SGML2LATEX) -m --output=tex $<

199
200
201
202
%.dvi : %.sgml
	@$(RM) $@
	$(SGML2LATEX) -m --output=dvi $<

203
204
205
%,ps : %.sgml
	@$(RM) $@
	$(SGML2LATEX) -m --output=ps $<
206

207
208
209
210
211
212
213
214
215
216
217
218
%.html : %.sgml
	@$(RM) $@
	$(SGML2HTML) $<

%.info : %.sgml
	@$(RM) $@
	$(SGML2INFO) $<

%.txt : %.sgml
	@$(RM) $@
	$(SGML2TXT) $<

219
220
221
222
223
224
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) $@
	$(UNLIT) $< $@
	@chmod 444 $@

%.h : %.lh
	@$(RM) $@
	$(UNLIT) $< $@
	@chmod 444 $@