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
|
# Simple Makefile for libwapcaplet
LIB := libwapcaplet.a
SRCS := libwapcaplet.c
HDRS := libwapcaplet/libwapcaplet.h
PREFIX ?= /usr/local
TESTSRCS := testmain.c basictests.c memorytests.c
TARGET ?= debug
BUILDDIR := build-$(TARGET)
MKDIR ?= mkdir -p
SED ?= sed
INSTALL ?= install
all: $(BUILDDIR)/$(LIB)
test: $(BUILDDIR)/testrunner
$(BUILDDIR)/testrunner
install: all
$(MKDIR) $(PREFIX)/lib/pkgconfig $(PREFIX)/include/libwapcaplet
$(SED) -e 's#PREFIX#$(PREFIX)#' libwapcaplet.pc.in >libwapcaplet.pc
$(INSTALL) -m 644 libwapcaplet.pc $(PREFIX)/lib/pkgconfig
$(INSTALL) -m 644 $(BUILDDIR)/$(LIB) $(PREFIX)/lib/$(LIB)
for F in $(HDRS); do \
$(INSTALL) -m 644 include/$$F $(PREFIX)/include/libwapcaplet; \
done
CFLAGS := -Iinclude -Wall -Werror
ifeq ($(TARGET),debug)
CFLAGS += -O0 -g
else
CFLAGS += -O2 -DNDEBUG
endif
clean:
rm -fr build-*
$(BUILDDIR)/stamp:
mkdir -p $(BUILDDIR)
touch $(BUILDDIR)/stamp
define srcfile
src/$1
endef
define objfile
$(BUILDDIR)/$(1:.c=.o)
endef
define depfile
$(BUILDDIR)/$(1:.c=.d)
endef
DEPS :=
OBJS :=
define _depandbuild
$2: $1 $(BUILDDIR)/stamp
$(CC) -MMD -MP $($5) -o $2 -c $1
$4 += $2
DEPS += $3
endef
define depandbuild
$(call _depandbuild,$(call srcfile,$1),$(call objfile,$1),$(call depfile,$1),OBJS,CFLAGS)
endef
$(eval $(foreach SOURCE,$(SRCS),$(call depandbuild,$(SOURCE))))
ifneq ($(MAKECMDGOALS),clean)
-include $(DEPS)
endif
$(BUILDDIR)/$(LIB): $(BUILDDIR)/stamp $(OBJS)
$(AR) cru $@ $^
define testsrc
test/$1
endef
define depandbuildtest
$(call _depandbuild,$(call testsrc,$1),$(call objfile,test-$1),$(call depfile,test-$1),TOBJS,TESTCFLAGS)
endef
TOBJS :=
TESTCFLAGS := $(CFLAGS) $(shell pkg-config --cflags check)
TESTLDFLAGS := $(LDFLAGS) $(shell pkg-config --libs check)
$(eval $(foreach TESTSRC,$(TESTSRCS),$(call depandbuildtest,$(TESTSRC))))
$(BUILDDIR)/testrunner: $(BUILDDIR)/stamp $(TOBJS) $(BUILDDIR)/$(LIB)
$(CC) -o $@ $(TOBJS) $(BUILDDIR)/$(LIB) $(TESTLDFLAGS)
|