1# Copyright (c) 2011 Tim van der Molen <tim@kariliq.nl>
2#
3# Permission to use, copy, modify, and distribute this software for any
4# purpose with or without fee is hereby granted, provided that the above
5# copyright notice and this permission notice appear in all copies.
6#
7# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
8# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
9# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
10# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
11# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
12# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
13# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
14
15.if exists(config.mk)
16.include "config.mk"
17.endif
18
19PROG=		siren
20VERSION!=	cat version
21DIST=		${PROG}-${VERSION}
22
23SRCS+=		argv.c bind.c browser.c cache.c command.c conf.c dir.c \
24		format.c history.c input.c library.c log.c menu.c msg.c \
25		option.c path.c player.c playlist.c plugin.c prompt.c queue.c \
26		screen.c siren.c track.c view.c xmalloc.c
27OBJS=		${SRCS:S,c$,o,}
28
29IP_SRCS=	${IP:S,^,ip/,:S,$,.c,}
30IP_LIBS=	${IP_SRCS:S,.c$,.so,}
31IP_OBJS=	${IP_SRCS:S,.c$,.lo,}
32
33OP_SRCS=	${OP:S,^,op/,:S,$,.c,}
34OP_LIBS=	${OP_SRCS:S,.c$,.so,}
35OP_OBJS=	${OP_SRCS:S,.c$,.lo,}
36
37CC?=		cc
38CTAGS?=		ctags
39MKDEP?=		mkdep
40
41INSTALL_DIR=	install -dm 755
42INSTALL_BIN=	install -m 555
43INSTALL_LIB=	install -m 444
44INSTALL_MAN=	install -m 444
45
46CFLAGS+=	-Wall -W -Wbad-function-cast -Wcast-align -Wcast-qual \
47		-Wformat=2 -Wpointer-arith -Wshadow -Wundef -Wwrite-strings
48CPPCHECKFLAGS?=	-I /usr/include -I /usr/local/include --enable=all --force \
49		--quiet
50MKDEPFLAGS?=	-a
51
52.PHONY: all clean cleandir cleanlog cppcheck depend dist install manlint
53
54.SUFFIXES: .c .lo .o .so
55
56.c.lo:
57	${CC} ${CFLAGS} ${CFLAGS_LIB} ${CPPFLAGS} ${CPPFLAGS_${@:T:R}} -c -o \
58	    $@ $<
59
60.c.o:
61	${CC} ${CFLAGS} ${CPPFLAGS} -c -o $@ $<
62
63.lo.so:
64	${CC} -o $@ $< ${LDFLAGS} ${LDFLAGS_LIB} ${LDFLAGS_${@:T:R}}
65
66all: ${PROG} ${IP_LIBS} ${OP_LIBS}
67
68${PROG}: ${OBJS}
69	${CC} -o $@ ${OBJS} ${LDFLAGS} ${LDFLAGS_PROG}
70
71.depend: ${SRCS} ${IP_SRCS} ${OP_SRCS} ${PROG}.h
72	${MKDEP} ${MKDEPFLAGS} ${CPPFLAGS} ${SRCS}
73.for src in ${IP_SRCS} ${OP_SRCS}
74	${MKDEP} ${MKDEPFLAGS} ${CPPFLAGS_${src:T:R}} ${src}
75.endfor
76
77clean:
78	rm -f core *.core ${PROG} ${OBJS}
79	rm -f ${IP_LIBS} ${IP_OBJS}
80	rm -f ${OP_LIBS} ${OP_OBJS}
81
82cleandir: clean cleanlog
83	rm -f .depend tags config.h config.mk
84
85cleanlog:
86	rm -f *.log
87
88cppcheck:
89	cppcheck ${CPPCHECKFLAGS} *.c */*.c
90
91depend: .depend
92
93dist:
94	hg archive -X .hg\* -r ${DIST} ${DIST}
95	chmod -R go+rX ${DIST}
96	GZIP=-9 tar -czf ${DIST}.tar.gz ${DIST}
97	rm -fr ${DIST}
98	sha256 ${DIST}.tar.gz > ${DIST}.tar.gz.sha256
99	gpg -b ${DIST}.tar.gz
100
101install:
102	${INSTALL_DIR} ${DESTDIR}${BINDIR}
103	${INSTALL_DIR} ${DESTDIR}${MANDIR}/man1
104	${INSTALL_DIR} ${DESTDIR}${PLUGINDIR}
105	${INSTALL_DIR} ${DESTDIR}${PLUGINDIR}/ip
106	${INSTALL_DIR} ${DESTDIR}${PLUGINDIR}/op
107	${INSTALL_BIN} ${PROG} ${DESTDIR}${BINDIR}
108	${INSTALL_MAN} ${PROG}.1 ${DESTDIR}${MANDIR}/man1
109.if !empty(IP_LIBS)
110	${INSTALL_LIB} ${IP_LIBS} ${DESTDIR}${PLUGINDIR}/ip
111.endif
112.if !empty(OP_LIBS)
113	${INSTALL_LIB} ${OP_LIBS} ${DESTDIR}${PLUGINDIR}/op
114.endif
115
116manlint:
117	mandoc -Tlint -Wstyle ${PROG}.1
118
119tags: ${SRCS} ${IP_SRCS} ${OP_SRCS} ${PROG}.h
120	${CTAGS} -dtw ${SRCS} ${IP_SRCS} ${OP_SRCS}
121
122uninstall:
123	rm -f ${DESTDIR}${BINDIR}/${PROG}
124	rm -f ${DESTDIR}${MANDIR}/man1/${PROG}.1
125	rm -fr ${DESTDIR}${PLUGINDIR}
126