aboutsummaryrefslogtreecommitdiff
path: root/Makefile
blob: 08adee39e82e535f522705736e813eeff388fe33 (plain)
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
OBJS:=$(patsubst %.cpp,%.o,$(wildcard src/*.cpp))
USRCS:=$(wildcard src/unit/*.cpp)
UOBJS:=$(patsubst %.cpp,%.o,$(USRCS))
UNIT:=$(foreach ut,$(patsubst %.cpp,%,$(wildcard src/unit/*.cpp)),unit/$(notdir $(ut)))
TOBJS:=$(patsubst %.cpp,%.o,$(wildcard src/test/*.cpp))
TDIRS:=$(filter-out %.o %.cpp %.h %.d,$(wildcard src/test/*))
TESTS:=$(patsubst src/test/%.o,tests/%,$(TOBJS)) $(patsubst src/test/%,tests/%,$(TDIRS))
ATOBJS:=$(TOBJS) $(patsubst %.cpp,%.o,$(foreach dr,$(TDIRS),$(wildcard $(dr)/*.cpp)))
LIB:=libbu++.a
DATE:=$(shell date +%F)

TXTCPP:="\ g++:\ \ \ "
TXTLNK:="\ \ ld:\ \ \ "
TXTDEP:="\ dep:\ \ \ "
TXTARC:="\ \ ar:\ \ \ "

.PHONY: all clean dist tests depclean cleanapi
.SILENT: clean $(OBJS) $(TOBJS) $(ATOBJS) $(UNIT) $(UOBJS) $(TESTS) $(patsubst %.o,%.d,$(OBJS) $(TOBJS) $(ATOBJS) $(UOBJS) $(TESTS)) $(LIB)

all: libbu++.a tests unit

depclean:
	-rm $(patsubst %.o,%.d,$(OBJS) $(ATOBJS) $(UOBJS))

-include $(patsubst %.o,%.d,$(OBJS) $(ATOBJS) $(UOBJS))

clean:
	-rm $(OBJS) $(ATOBJS) $(UOBJS) $(TESTS) $(LIB)

# This bit I cribbed from the docs, seems to work great though!
%.d: %.cpp
	echo "$(TXTDEP)$@"
	g++ $(CXXFLAGS) -Isrc -M $(CPPFLAGS) $< | sed 's,\($(notdir $*)\)\.o[: ]*,$(dir $*)\1.o $@: ,g' > $@

%.o: %.cpp
	echo "$(TXTCPP)$@"
	g++ $(CXXFLAGS) -Isrc $(foreach dr,$(filter $(dir $@),$(foreach ddr,$(TDIRS),$(ddr)/)),-I$(dr)) -ggdb -c -o $@ $<

$(LIB): $(OBJS)
	echo "$(TXTARC)$@"
	ar cr $(LIB) $(OBJS)

$(TESTS): $(ATOBJS) $(LIB)
	echo "$(TXTLNK)$@"
	g++ $(LDFLAGS) -ggdb $(filter %$(patsubst tests/%,%,$@).o, $(TOBJS) ) $(patsubst %.cpp,%.o,$(wildcard $(filter %$(patsubst tests/%,%,$@), $(TDIRS))/*.cpp)) -L. -lbu++ -o $@
	
$(UNIT): $(USRCS) $(LIB)
	echo "$(TXTLNK)$@"
	g++ $(LDFLAGS) -ggdb -Isrc -Isrc/unit src/$@.cpp -L. -lbu++ -lcpptest -o $@

tests: $(TESTS)

unit: $(UNIT)

dist: clean depclean
	mkdir libbu++-$(DATE)
	cp -a --target-directory=libbu++-$(DATE) Makefile src
	tar --exclude=\.svn -c libbu++-$(DATE) | bzip2 -9 > libbu++-$(DATE).tar.bz2
	rm -Rf libbu++-$(DATE)

install: libbu++.a
	cat src/*.h | grep -v "#include \"" - > libbu++.h
	cp -a libbu++.a $(PREFIX)/lib
	cp -a libbu++.h $(PREFIX)/include

cleanapi:
	-rm -Rf api

api: $(SRC)
	-rm -Rf api
	doxygen
	make -C api/latex

#tests: $(TOBJS) $(LIB)
#	for file in $(patsubst src/test/%.o,%,$(TOBJS)); \
#	do g++ -o $$file src/test/$$file.o -L. -lbu++; \
#	done