9f5b3139f5e5ea7ec16bffcbe9d17858344f2d4a
[project/uci.git] / Makefile
1 VERSION=0.8
2
3 # optional features
4 PLUGIN_SUPPORT=1
5 DEBUG=0
6 DEBUG_TYPECAST=0
7
8 include Makefile.inc
9
10 LIBS=-lc -ldl
11 SHLIB_FILE=libuci.$(SHLIB_EXT).$(VERSION)
12
13 define add_feature
14         @echo "$(if $(findstring 1,$($(1))),#define UCI_$(1) 1,#undef UCI_$(1))" >> $@.tmp
15 endef
16
17 define add_dep
18 $(1).shared.o: $(2)
19 $(1).static.o: $(2)
20 endef
21
22 SOURCES = libuci.c file.c ucimap.c util.c
23
24 all: uci libuci.$(SHLIB_EXT) uci-static ucimap-example
25
26 $(eval $(call add_dep,libuci,delta.c list.c uci.h uci_config.h uci_internal.h))
27 $(eval $(call add_dep,ucimap,uci.h uci_config.h ucimap.h))
28
29 cli.o: cli.c uci.h uci_config.h
30
31 uci_config.h: FORCE
32         @rm -f "$@.tmp"
33         @echo "#define UCI_PREFIX \"$(prefix)\"" > "$@.tmp"
34         $(call add_feature,PLUGIN_SUPPORT)
35         $(call add_feature,DEBUG)
36         $(call add_feature,DEBUG_TYPECAST)
37         @if [ \! -f "$@" ] || ! cmp "$@.tmp" "$@" >/dev/null; then \
38                 mv "$@.tmp" "$@"; \
39         else \
40                 rm -f "$@.tmp"; \
41         fi
42
43 %.o: %.c
44         $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $<
45
46 %.static.o: %.c
47         $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $<
48
49 %.shared.o: %.c
50         $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(FPIC) $<
51
52 uci: cli.o libuci.$(SHLIB_EXT)
53         $(CC) -o $@ $< -L. -luci $(LIBS)
54
55 uci-static: cli.o libuci.a
56         $(CC) $(CFLAGS) -o $@ $^ $(LIBS)
57
58 ucimap.c: ucimap.h uci.h
59
60 libuci.a: $(patsubst %.c,%.static.o, $(SOURCES))
61         rm -f $@
62         $(AR) rc $@ $^
63         $(RANLIB) $@
64
65 libuci.$(SHLIB_EXT): $(patsubst %.c,%.shared.o, $(SOURCES))
66         $(LINK) $(SHLIB_FLAGS) -o $(SHLIB_FILE) $^ $(LIBS)
67         ln -sf $(SHLIB_FILE) $@
68
69 ucimap-example.c: list.h
70 ucimap-example: ucimap-example.o libuci.a
71         $(CC) $(CFLAGS) -o $@ $^ $(LIBS)
72
73 clean:
74         rm -f uci uci-static *.[oa] *.so* *.dylib* uci_config.h ucimap-example
75
76 install: install-bin install-dev
77
78 install-dev: all
79         $(MKDIR) -p $(DESTDIR)$(prefix)/$(LIBDIRNAME)
80         $(MKDIR) -p $(DESTDIR)$(prefix)/include
81         $(INSTALL) -m0644 libuci.a $(DESTDIR)$(prefix)/$(LIBDIRNAME)/
82         $(INSTALL) -m0644 uci_config.h uci.h ucimap.h $(DESTDIR)$(prefix)/include/
83
84 install-bin: all
85         $(MKDIR) -p $(DESTDIR)$(prefix)/$(LIBDIRNAME)
86         $(INSTALL) -m0755 $(SHLIB_FILE) $(DESTDIR)$(prefix)/$(LIBDIRNAME)/
87         ln -sf $(SHLIB_FILE) $(DESTDIR)$(prefix)/$(LIBDIRNAME)/libuci.$(SHLIB_EXT)
88         $(MKDIR) -p $(DESTDIR)$(prefix)/bin
89         $(INSTALL) -m0755 uci $(DESTDIR)$(prefix)/bin/
90
91 test: all ucimap-example
92         make -C test
93
94 FORCE: ;
95 .PHONY: FORCE