create the history savedir on uci_save() if it does not exist
[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