-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile.in
242 lines (196 loc) · 8.14 KB
/
Makefile.in
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
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
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
.SUFFIXES:
.PHONY: clean distclean run
# variables {{{
# directories...
prefix = @prefix@
exec_prefix = @exec_prefix@
datarootdir = @datarootdir@
bindir = @bindir@
datadir = @datadir@
mandir = @mandir@
_ver0 = $(shell git rev-parse --verify --short HEAD 2>/dev/null)-git
_ver1 = @PACKAGE_VERSION@
VERSION = $(or $(_ver0),$(_ver1))
LIBS = $(addprefix -L ,@NCURSES_LIBS@)
features-@CONFIG_WIDE_CHAR@ += -feature wide-char
features-y += -feature ncurses-mouse-v@ncurses_mouse_version@
types-cflags-$(typed) = -types all.types
types-prereq-$(typed) = all.types
# programs+flags...
CSC = csc
TFLAGS = -uses base -prologue src/prologue.scm $(features-y)
CFLAGS = -fno-var-tracking-assignments
ALL_CFLAGS = $(CFLAGS) \
'-DSCMUS_DIR=\"$(datadir)/scmus\"' \
'-DVERSION=\"$(VERSION)\"'
CSCFLAGS =
ALL_CSCFLAGS = $(CSCFLAGS) \
$(addprefix -C , $(ALL_CFLAGS)) \
$(TFLAGS) \
-R coops \
-R coops-utils
$(types-cflags-y)
LD = csc
LDFLAGS =
INSTALL = @scripts/install
# function to add object extension to a list of files
objfiles = $(foreach f,$(1),$(addprefix ./,$(addsuffix .@OBJEXT@,$(subst /,.,$(f)))))
srcfiles = $(foreach f,$(1),$(addprefix src/,$(addsuffix .scm,$(f))))
# files...
eggs = coops coops-utils matchable regex sandbox unix-sockets utf8 vector-lib
units = bindings-view browser-view commands library-view log-view options options-view \
playlist-view queue-view search-view ui-curses user-api
tui_mods = $(addprefix tui/,display frame input list-box misc split-pane widget)
imodules = base client command command-line config ueval event format keys log option \
error status track tui $(tui_mods) view widgets
omodules = getopt iter mpd-client ncurses trie ustring
modules = $(imodules) $(omodules)
types = $(foreach unit,$(units) $(modules),$(addsuffix .types,$(unit)))
target = scmus@EXEEXT@
test-units = $(addprefix test/,event option iter trie ueval)
# files to delete on 'make clean'
clean = $(call objfiles,$(units) $(modules) $(test-units) main check) \
$(addprefix drewt.,$(addsuffix .import.scm,$(subst /,.,$(omodules)))) \
$(addprefix scmus.,$(addsuffix .import.scm,$(subst /,.,$(imodules)))) \
$(types) $(target) all.types
all: $(target)
# variables }}}
# dependencies {{{
# BUILD dependencies
main_deps = base client config ueval getopt log
base_deps = config ncurses
bindings-view_deps = base event keys ncurses error tui view widgets
browser-view_deps = base client event ncurses option track tui view widgets
client_deps = base event mpd-client option error status track
command-line_deps = base event iter ncurses tui
command_deps = base command-line error ueval event trie
commands_deps = base client command command-line ueval keys status tui widgets
error_deps = base command-line log
ueval_deps = base event option error
event_deps = base
format_deps = base ueval error status track ustring
keys_deps = base ueval event ncurses
library-view_deps = base client command-line event format ncurses option track tui view widgets
log_deps = base event
log-view_deps = base config event log tui view widgets
option_deps = base event
options_deps = base event format option tui
options-view_deps = base event ncurses option error tui view widgets
playlist-view_deps = base client event option status track tui view widgets
queue-view_deps = base client event option status track tui view widgets
search-view_deps = base client format ncurses option track tui view widgets
status_deps = base mpd-client track
track_deps = base
ui-curses_deps = base client command-line event format keys ncurses option error status tui \
view widgets
user-api_deps = base client command command-line config ueval event format keys ncurses \
option status track tui view widgets
ustring_deps = base
view_deps = base tui keys widgets
widgets_deps = base format ncurses option track tui
tui_deps = $(tui_mods)
tui/display_deps = base ncurses ustring
tui/frame_deps = base tui/display tui/misc tui/widget
tui/input_deps = base event ncurses tui/widget tui/misc
tui/list-box_deps = base ncurses tui/display tui/input tui/widget
tui/misc_deps = base ncurses tui/display tui/widget
tui/split-pane_deps = base tui/misc tui/widget
tui/widget_deps = base tui/display
# LOAD dependencies
main_uses = commands options ui-curses user-api
bindings-view_uses = options
browser-view_uses = options track
commands_uses =
library-view_uses = options
log-view_uses =
options-view_uses =
playlist-view_uses = options
queue-view_uses = options
search-view_uses = options
ui-curses_uses = bindings-view browser-view library-view log-view options options-view \
playlist-view queue-view search-view
user-api_uses = ui-curses
# Everything depends on prologue
$(call objfiles,$(units) $(modules)): src/prologue.scm $(types-prereq-y)
# Test dependencies
$(call objfiles,$(test-units)): src/prologue.scm test/test.scm
# Template to create a rule building %.o from src/%.scm. Because we are replacing '/' with '.' in
# output filenames, we can't use an implicit rule here.
define OBJECT_template =
$(call objfiles,$(1)): private ALL_CSCFLAGS += $(foreach d,$($(1)_deps) $($(1)_uses), -uses $(d))
$(call objfiles,$(1)): src/$(1).scm $(call objfiles,$($(1)_deps))
$$(call cmd,csc)
endef
$(foreach f,$(units) $(modules) main,$(eval $(call OBJECT_template,$(f))))
$(foreach f,$(units) $(modules),$(eval $(call objfiles,$(f)): private ALL_CSCFLAGS += -unit $(f)))
# Rule template for building test objects.
define TEST_template =
$(call objfiles,$(1)): $(1).scm
$$(call cmd,csc)
endef
$(foreach f,$(test-units) check, $(eval $(call TEST_template,$(f))))
# dependencies }}}
# rules {{{
ifeq ($(verbose),y)
quiet =
else
quiet = quiet_
endif
clean:
$(if $(clean), rm -f $(clean))
distclean: clean
$(if $(distclean), rm -f $(distclean))
run: all
$(if $(target), ./$(target))
%.types: %.scm
$(call cmd,types)
%.1: %.1.ronn
$(call cmd,man)
%.3: %.3.ronn
$(call cmd,man)
%.7: %.7.ronn
$(call cmd,man)
%.1.html: %.1.ronn
$(call cmd,wman)
%.3.html: %.3.ronn
$(call cmd,wman)
%.7.html: %.7.ronn
$(call cmd,wman)
# generate roff output from ronn markdown
quiet_cmd_man = MAN $@
cmd_man = ronn --roff $(MANFLAGS) $^
# generate html output from ronn markdown
quiet_cmd_wman = HTML $@
cmd_wman = ronn --html $(MANFLAGS) $^
# scheme compile for object files
quiet_cmd_csc = CSC $@
cmd_csc = $(CSC) -c $(ALL_CSCFLAGS) -J -o $@ $<
# generate type file
quiet_cmd_types = TYPES $@
cmd_types = $(CSC) -c $(TFLAGS) -analyze-only -emit-type-file $@ $<
# LD for programs; optional parameter: libraries
quiet_cmd_ld = LD $@
cmd_ld = $(LD) $(LDFLAGS) -o $@ $^ $(1)
# cmd macro (taken from kbuild)
cmd = @$(if $($(quiet)cmd_$(1)),echo ' $(call $(quiet)cmd_$(1),$(2))' &&) $(call cmd_$(1),$(2))
$(target): $(call objfiles,$(units) $(modules) main)
$(call cmd,ld,$(LIBS))
check: $(call objfiles,$(units) $(modules) $(test-units) check)
$(call cmd,ld,$(LIBS))
all.types: $(types)
$(call cmd,cat)
eggs:
chicken-install $(eggs)
docs/man/scmus.1 docs/man/scmus.1.html: private MANFLAGS += --manual="General Commands Manual"
docs/man/scmus.3 docs/man/scmus.3.html: private MANFLAGS += --manual="scmus Scripting Reference"
docs/man/scmus-tutorial.7 docs/man/scmus-tutorial.7.html: private MANFLAGS += --manual="Miscellaneous Information Manual"
man: docs/man/scmus.1 docs/man/scmus.3 docs/man/scmus-tutorial.7
web: docs/man/scmus.1.html docs/man/scmus.3.html docs/man/scmus-tutorial.7.html
install: all
$(INSTALL) -m755 $(bindir) scmus
$(INSTALL) -m644 $(datadir)/scmus data/scmusrc.scm
$(INSTALL) -m644 $(datadir)/scmus/colors $(wildcard data/colors/*)
$(INSTALL) -m644 $(mandir)/man1 docs/man/scmus.1
$(INSTALL) -m644 $(mandir)/man3 docs/man/scmus.3
$(INSTALL) -m644 $(mandir)/man7 docs/man/scmus-tutorial.7
# rules }}}