add feature flags for the build process, improve automatic rebuild
[project/uci.git] / Makefile
1 VERSION=0.3
2
3 # optional features
4 PLUGIN_SUPPORT=1
5 DEBUG=0
6 DEBUG_TYPECAST=0
7
8 COPTS=-O2
9 WOPTS=-pedantic -Wno-unused -Werror
10 FPIC=-fPIC
11 CFLAGS=$(COPTS) $(WOPTS) -Wall -std=gnu99
12
13 AR=ar
14 LD=ld
15 CC=gcc
16 LIBS=-lc
17 RANLIB=ranlib
18
19 ifeq ($(DEBUG),1)
20 COPTS = -O0
21 CFLAGS += -g3
22 endif
23 OS=$(shell uname)
24 ifeq ($(OS),Darwin)
25 LINK=$(LD)
26 SHLIB_EXT=dylib
27 SHLIB_FLAGS=-dylib
28 else
29 LINK=$(CC)
30 SHLIB_EXT=so
31 SHLIB_FLAGS=-shared -Wl,-soname,$(SHLIB_FILE)
32 endif
33 SHLIB_FILE=libuci.$(SHLIB_EXT).$(VERSION)
34
35 define add_feature
36 @echo "$(if $(findstring 1,$($(1))),#define UCI_$(1) 1,#undef UCI_$(1))" >> $@.tmp
37 endef
38
39 LIBUCI_DEPS=file.c history.c list.c util.c uci.h uci_config.h uci_internal.h
40
41 all: uci-static uci libuci.$(SHLIB_EXT)
42
43 cli.o: cli.c uci.h uci_config.h
44
45 uci_config.h: FORCE
46 @rm -f "$@.tmp"
47 $(call add_feature,PLUGIN_SUPPORT)
48 $(call add_feature,DEBUG)
49 $(call add_feature,DEBUG_TYPECAST)
50 @if [ \! -f "$@" ] || ! cmp "$@.tmp" "$@" >/dev/null; then \
51 mv "$@.tmp" "$@"; \
52 else \
53 rm -f "$@.tmp"; \
54 fi
55
56 uci: cli.o libuci.$(SHLIB_EXT)
57 $(CC) -o $@ $< -L. -luci
58
59 uci-static: cli.o libuci.a
60 $(CC) $(CFLAGS) -o $@ $^
61
62 libuci-static.o: libuci.c $(LIBUCI_DEPS)
63 $(CC) $(CFLAGS) -c -o $@ $<
64
65 libuci-shared.o: libuci.c $(LIBUCI_DEPS)
66 $(CC) $(CFLAGS) $(FPIC) -c -o $@ $<
67
68 libuci.a: libuci-static.o
69 rm -f $@
70 $(AR) rc $@ $^
71 $(RANLIB) $@
72
73 libuci.$(SHLIB_EXT): libuci-shared.o
74 $(LINK) $(SHLIB_FLAGS) -o $(SHLIB_FILE) $^ $(LIBS)
75 ln -sf $(SHLIB_FILE) $@
76
77 clean:
78 rm -f uci uci-static *.[oa] *.so* *.dylib* uci_config.h
79
80 FORCE: ;
81 .PHONY: FORCE