1
REV	= HEAD
2
3
# version from an annotated tag
4
_ver0	= $(shell git describe $(REV) 2>/dev/null)
5
# version from a plain tag
6
_ver1	= $(shell git describe --tags $(REV) 2>/dev/null)
7
# SHA1
8
_ver2	= $(shell git rev-parse --verify --short $(REV) 2>/dev/null)
9
# hand-made
10
_ver3	= v2.4.0
11
12
VERSION	= $(or $(_ver0),$(_ver1),$(_ver2),$(_ver3))
13
14
all: main plugins man
15
16
include config.mk
17
include scripts/lib.mk
18
19
CFLAGS += -D_FILE_OFFSET_BITS=64
20
21
CMUS_LIBS = $(PTHREAD_LIBS) $(NCURSES_LIBS) $(ICONV_LIBS) $(DL_LIBS) $(DISCID_LIBS) $(CUE_LIBS) -lm $(COMPAT_LIBS)
22
23
input.o main.o ui_curses.o pulse.lo: .version
24
input.o main.o ui_curses.o pulse.lo: CFLAGS += -DVERSION=\"$(VERSION)\"
25
main.o server.o: CFLAGS += -DDEFAULT_PORT=3000
26
discid.o: CFLAGS += $(DISCID_CFLAGS)
27
job.o cue_utils.o: CFLAGS += $(CUE_CFLAGS)
28
29
.version: Makefile
30
	@test "`cat $@ 2> /dev/null`" = "$(VERSION)" && exit 0; \
31
	echo "   GEN    $@"; echo $(VERSION) > $@
32
33
# programs {{{
34
cmus-y := \
35
	ape.o browser.o buffer.o cache.o cmdline.o cmus.o command_mode.o comment.o \
36
	channelmap.o convert.lo debug.o discid.o editable.o expr.o filters.o \
37
	format_print.o gbuf.o glob.o help.o history.o http.o id3.o input.o job.o \
38
	keys.o keyval.o lib.o load_dir.o locking.o mergesort.o misc.o options.o \
39
	output.o pcm.o pl.o play_queue.o player.o \
40
	rbtree.o read_wrapper.o server.o search.o \
41
	search_mode.o spawn.o tabexp.o tabexp_file.o \
42
	track.o track_info.o tree.o u_collate.o uchar.o ui_curses.o \
43
	window.o worker.o xstrjoin.o
44
45
cmus-$(CONFIG_CUE) += cue_utils.o
46
47
$(cmus-y): CFLAGS += $(PTHREAD_CFLAGS) $(NCURSES_CFLAGS) $(ICONV_CFLAGS) $(DL_CFLAGS)
48
49
cmus: $(cmus-y) file.o path.o prog.o xmalloc.o
50
	$(call cmd,ld,$(CMUS_LIBS))
51
52
cmus-remote: main.o file.o path.o prog.o xmalloc.o
53
	$(call cmd,ld,$(COMPAT_LIBS))
54
55
# cygwin compat
56
DLLTOOL=dlltool
57
58
libcmus-$(CONFIG_CYGWIN) := libcmus.a
59
60
libcmus.a: $(cmus-y) file.o path.o prog.o xmalloc.o
61
	$(LD) -shared -o cmus.exe -Wl,--out-implib=libcmus.a -Wl,--base-file,cmus.base \
62
		-Wl,--export-all-symbols -Wl,--no-whole-archive $^ $(CMUS_LIBS)
63
	$(DLLTOOL) --output-def cmus.def --dllname cmus.exe --export-all-symbols $^
64
	$(DLLTOOL) --base-file cmus.base --dllname cmus.exe --input-def cmus.def --output-exp cmus.exp
65
	$(LD) -o cmus.exe -Wl,cmus.exp $^ $(CMUS_LIBS)
66
67
# }}}
68
69
# input plugins {{{
70
cdio-objs		:= cdio.lo
71
flac-objs		:= flac.lo
72
mad-objs		:= mad.lo nomad.lo
73
mikmod-objs		:= mikmod.lo
74
modplug-objs		:= modplug.lo
75
mpc-objs		:= mpc.lo
76
vorbis-objs		:= vorbis.lo
77
wavpack-objs		:= wavpack.lo
78
wav-objs		:= wav.lo
79
mp4-objs		:= mp4.lo
80
aac-objs		:= aac.lo
81
ffmpeg-objs		:= ffmpeg.lo
82
cue-objs		:= cue.lo
83
84
ip-$(CONFIG_CDIO)	+= cdio.so
85
ip-$(CONFIG_FLAC)	+= flac.so
86
ip-$(CONFIG_MAD)	+= mad.so
87
ip-$(CONFIG_MIKMOD)	+= mikmod.so
88
ip-$(CONFIG_MODPLUG)	+= modplug.so
89
ip-$(CONFIG_MPC)	+= mpc.so
90
ip-$(CONFIG_VORBIS)	+= vorbis.so
91
ip-$(CONFIG_WAVPACK)	+= wavpack.so
92
ip-$(CONFIG_WAV)	+= wav.so
93
ip-$(CONFIG_MP4)	+= mp4.so
94
ip-$(CONFIG_AAC)	+= aac.so
95
ip-$(CONFIG_FFMPEG)	+= ffmpeg.so
96
ip-$(CONFIG_CUE)	+= cue.so
97
98
$(cdio-objs):		CFLAGS += $(CDIO_CFLAGS) $(CDDB_CFLAGS)
99
$(flac-objs):		CFLAGS += $(FLAC_CFLAGS)
100
$(mad-objs):		CFLAGS += $(MAD_CFLAGS)
101
$(mikmod-objs):		CFLAGS += $(MIKMOD_CFLAGS)
102
$(modplug-objs):	CFLAGS += $(MODPLUG_CFLAGS)
103
$(mpc-objs):		CFLAGS += $(MPC_CFLAGS)
104
$(vorbis-objs):		CFLAGS += $(VORBIS_CFLAGS)
105
$(wavpack-objs):	CFLAGS += $(WAVPACK_CFLAGS)
106
$(mp4-objs):		CFLAGS += $(MP4_CFLAGS)
107
$(aac-objs):		CFLAGS += $(AAC_CFLAGS)
108
$(ffmpeg-objs):		CFLAGS += $(FFMPEG_CFLAGS)
109
$(cue-objs):		CFLAGS += $(CUE_CFLAGS)
110
111
cdio.so: $(cdio-objs) $(libcmus-y)
112
	$(call cmd,ld_dl,$(CDIO_LIBS) $(CDDB_LIBS))
113
114
flac.so: $(flac-objs) $(libcmus-y)
115
	$(call cmd,ld_dl,$(FLAC_LIBS))
116
117
mad.so: $(mad-objs) $(libcmus-y)
118
	$(call cmd,ld_dl,$(MAD_LIBS) $(ICONV_LIBS))
119
120
mikmod.so: $(mikmod-objs) $(libcmus-y)
121
	$(call cmd,ld_dl,$(MIKMOD_LIBS))
122
123
modplug.so: $(modplug-objs) $(libcmus-y)
124
	$(call cmd,ld_dl,$(MODPLUG_LIBS))
125
126
mpc.so: $(mpc-objs) $(libcmus-y)
127
	$(call cmd,ld_dl,$(MPC_LIBS))
128
129
vorbis.so: $(vorbis-objs) $(libcmus-y)
130
	$(call cmd,ld_dl,$(VORBIS_LIBS))
131
132
wavpack.so: $(wavpack-objs) $(libcmus-y)
133
	$(call cmd,ld_dl,$(WAVPACK_LIBS))
134
135
wav.so: $(wav-objs) $(libcmus-y)
136
	$(call cmd,ld_dl,)
137
138
mp4.so: $(mp4-objs) $(libcmus-y)
139
	$(call cmd,ld_dl,$(MP4_LIBS))
140
141
aac.so: $(aac-objs) $(libcmus-y)
142
	$(call cmd,ld_dl,$(AAC_LIBS))
143
144
ffmpeg.so: $(ffmpeg-objs) $(libcmus-y)
145
	$(call cmd,ld_dl,$(FFMPEG_LIBS))
146
147
cue.so: $(cue-objs) $(libcmus-y)
148
	$(call cmd,ld_dl,$(CUE_LIBS))
149
150
# }}}
151
152
# output plugins {{{
153
pulse-objs		:= pulse.lo
154
alsa-objs		:= alsa.lo mixer_alsa.lo
155
arts-objs		:= arts.lo
156
oss-objs		:= oss.lo mixer_oss.lo
157
sun-objs		:= sun.lo mixer_sun.lo
158
ao-objs			:= ao.lo
159
waveout-objs		:= waveout.lo
160
roar-objs               := roar.lo
161
162
op-$(CONFIG_PULSE)	+= pulse.so
163
op-$(CONFIG_ALSA)	+= alsa.so
164
op-$(CONFIG_ARTS)	+= arts.so
165
op-$(CONFIG_OSS)	+= oss.so
166
op-$(CONFIG_SUN)	+= sun.so
167
op-$(CONFIG_AO)		+= ao.so
168
op-$(CONFIG_WAVEOUT)	+= waveout.so
169
op-$(CONFIG_ROAR)       += roar.so
170
171
$(pulse-objs): CFLAGS	+= $(PULSE_CFLAGS)
172
$(alsa-objs): CFLAGS	+= $(ALSA_CFLAGS)
173
$(arts-objs): CFLAGS	+= $(ARTS_CFLAGS)
174
$(oss-objs):  CFLAGS	+= $(OSS_CFLAGS)
175
$(sun-objs):  CFLAGS	+= $(SUN_CFLAGS)
176
$(ao-objs):   CFLAGS	+= $(AO_CFLAGS)
177
$(waveout-objs): CFLAGS += $(WAVEOUT_CFLAGS)
178
$(roar-objs): CFLAGS	+= $(ROAR_CFLAGS)
179
180
pulse.so: $(pulse-objs) $(libcmus-y)
181
	$(call cmd,ld_dl,$(PULSE_LIBS))
182
183
alsa.so: $(alsa-objs) $(libcmus-y)
184
	$(call cmd,ld_dl,$(ALSA_LIBS))
185
186
arts.so: $(arts-objs) $(libcmus-y)
187
	$(call cmd,ld_dl,$(ARTS_LIBS))
188
189
oss.so: $(oss-objs) $(libcmus-y)
190
	$(call cmd,ld_dl,$(OSS_LIBS))
191
192
sun.so: $(sun-objs) $(libcmus-y)
193
	$(call cmd,ld_dl,$(SUN_LIBS))
194
195
ao.so: $(ao-objs) $(libcmus-y)
196
	$(call cmd,ld_dl,$(AO_LIBS))
197
198
waveout.so: $(waveout-objs) $(libcmus-y)
199
	$(call cmd,ld_dl,$(WAVEOUT_LIBS))
200
201
roar.so: $(roar-objs) $(libcmus-y)
202
	$(call cmd,ld_dl,$(ROAR_LIBS))
203
# }}}
204
205
# man {{{
206
man1	:= Doc/cmus.1 Doc/cmus-remote.1
207
man7	:= Doc/cmus-tutorial.7
208
209
$(man1): Doc/ttman
210
$(man7): Doc/ttman
211
212
%.1: %.txt
213
	$(call cmd,ttman)
214
215
%.7: %.txt
216
	$(call cmd,ttman)
217
218
Doc/ttman.o: Doc/ttman.c
219
	$(call cmd,hostcc,)
220
221
Doc/ttman: Doc/ttman.o
222
	$(call cmd,hostld,)
223
224
quiet_cmd_ttman = MAN    $@
225
      cmd_ttman = Doc/ttman $< $@
226
# }}}
227
228
data		= $(wildcard data/*)
229
230
clean		+= *.o *.lo *.so cmus libcmus.a cmus.def cmus.base cmus.exp cmus-remote Doc/*.o Doc/ttman Doc/*.1 Doc/*.7 .install.log
231
distclean	+= .version config.mk config/*.h tags
232
233
main: cmus cmus-remote
234
plugins: $(ip-y) $(op-y)
235
man: $(man1) $(man7)
236
237
install-main: main
238
	$(INSTALL) -m755 $(bindir) cmus cmus-remote
239
240
install-plugins: plugins
241
	$(INSTALL) -m755 $(libdir)/cmus/ip $(ip-y)
242
	$(INSTALL) -m755 $(libdir)/cmus/op $(op-y)
243
244
install-data: man
245
	$(INSTALL) -m644 $(datadir)/cmus $(data)
246
	$(INSTALL) -m644 $(mandir)/man1 $(man1)
247
	$(INSTALL) -m644 $(mandir)/man7 $(man7)
248
	$(INSTALL) -m755 $(exampledir) cmus-status-display
249
250
install: all install-main install-plugins install-data
251
252
tags:
253
	exuberant-ctags *.[ch]
254
255
# generating tarball using GIT {{{
256
TARNAME	= cmus-$(VERSION)
257
258
dist:
259
	@tarname=$(TARNAME);						\
260
	test "$(_ver2)" || { echo "No such revision $(REV)"; exit 1; };	\
261
	echo "   DIST   $$tarname.tar.bz2";				\
262
	git archive --format=tar --prefix=$$tarname/ $(REV)^{tree} | bzip2 -c -9 > $$tarname.tar.bz2
263
264
# }}}
265
266
.PHONY: all main plugins man dist tags
267
.PHONY: install install-main install-plugins install-man