1CC ?= gcc
2CFLAGS += -Wall -I. -fPIC
3PREFIX ?= $(DESTDIR)/usr/local
4TESTS = $(patsubst %.c, %, $(wildcard t/*.c))
5
6ifdef ANSI
7	# -D_BSD_SOURCE for MAP_ANONYMOUS
8	CFLAGS += -ansi -D_BSD_SOURCE
9	LDLIBS += -lbsd-compat
10endif
11
12%:
13	$(CC) $(LDFLAGS) $(TARGET_ARCH) $(filter %.o %.a %.so, $^) $(LDLIBS) -o $@
14
15%.o:
16	$(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c $(filter %.c, $^) $(LDLIBS) -o $@
17
18%.a:
19	$(AR) rcs $@ $(filter %.o, $^)
20
21%.so:
22	$(CC) -shared $(LDFLAGS) $(TARGET_ARCH) $(filter %.o, $^) $(LDLIBS) -o $@
23
24all: libtap.a libtap.so tap.pc tests
25
26tap.pc:
27	@echo generating tap.pc
28	@echo 'prefix='$(PREFIX) > tap.pc
29	@echo 'exec_prefix=$${prefix}' >> tap.pc
30	@echo 'libdir=$${prefix}/lib' >> tap.pc
31	@echo 'includedir=$${prefix}/include' >> tap.pc
32	@echo '' >> tap.pc
33	@echo 'Name: libtap' >> tap.pc
34	@echo 'Description: Write tests in C' >> tap.pc
35	@echo 'Version: 0.1.0' >> tap.pc
36	@echo 'URL: https://github.com/zorgnax/libtap' >> tap.pc
37	@echo 'Libs: -L$${libdir} -ltap' >> tap.pc
38	@echo 'Cflags: -I$${includedir}' >> tap.pc
39
40libtap.a: tap.o
41
42libtap.so: tap.o
43
44tap.o: tap.c tap.h
45
46tests: $(TESTS)
47
48$(TESTS): %: %.o libtap.a
49
50$(patsubst %, %.o, $(TESTS)): %.o: %.c tap.h
51
52clean:
53	rm -rf *.o t/*.o tap.pc libtap.a libtap.so $(TESTS)
54
55install: libtap.a tap.h libtap.so tap.pc
56	mkdir -p $(PREFIX)/lib $(PREFIX)/include $(PREFIX)/lib/pkgconfig
57	install -c libtap.a $(PREFIX)/lib
58	install -c libtap.so $(PREFIX)/lib
59	install -c tap.pc $(PREFIX)/lib/pkgconfig
60	install -c tap.h $(PREFIX)/include
61
62uninstall:
63	rm $(PREFIX)/lib/libtap.a $(PREFIX)/lib/libtap.so $(PREFIX)/include/tap.h
64
65dist:
66	rm libtap.zip
67	zip -r libtap *
68
69check test: all
70	./t/test
71
72.PHONY: all clean install uninstall dist check test tests
73