421c2d9c27f7141015c205e860f6e83eadd28f5a
[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 prefix=/usr
9 DESTDIR=
10
11 COPTS=-O2
12 WOPTS=-pedantic -Wno-unused -Werror
13 FPIC=-fPIC
14 CFLAGS=$(COPTS) $(WOPTS) -Wall -std=gnu99
15
16 AR=ar
17 LD=ld
18 CC=gcc
19 LIBS=-lc
20 RANLIB=ranlib
21 INSTALL=install
22
23 ifeq ($(DEBUG),1)
24   COPTS = -O0
25   CFLAGS += -g3
26 endif
27 OS=$(shell uname)
28 ifeq ($(OS),Darwin)
29   LINK=$(LD)
30   SHLIB_EXT=dylib
31   SHLIB_FLAGS=-dylib
32 else
33   LINK=$(CC)
34   SHLIB_EXT=so
35   SHLIB_FLAGS=-shared -Wl,-soname,$(SHLIB_FILE)
36 endif
37 SHLIB_FILE=libuci.$(SHLIB_EXT).$(VERSION)
38
39 define add_feature
40         @echo "$(if $(findstring 1,$($(1))),#define UCI_$(1) 1,#undef UCI_$(1))" >> $@.tmp
41 endef
42
43 LIBUCI_DEPS=file.c history.c list.c util.c uci.h uci_config.h uci_internal.h
44
45 all: uci-static uci libuci.$(SHLIB_EXT)
46
47 cli.o: cli.c uci.h uci_config.h
48
49 uci_config.h: FORCE
50         @rm -f "$@.tmp"
51         $(call add_feature,PLUGIN_SUPPORT)
52         $(call add_feature,DEBUG)
53         $(call add_feature,DEBUG_TYPECAST)
54         @if [ \! -f "$@" ] || ! cmp "$@.tmp" "$@" >/dev/null; then \
55                 mv "$@.tmp" "$@"; \
56         else \
57                 rm -f "$@.tmp"; \
58         fi
59
60 uci: cli.o libuci.$(SHLIB_EXT)
61         $(CC) -o $@ $< -L. -luci
62
63 uci-static: cli.o libuci.a
64         $(CC) $(CFLAGS) -o $@ $^
65
66 libuci-static.o: libuci.c $(LIBUCI_DEPS)
67         $(CC) $(CFLAGS) -c -o $@ $<
68
69 libuci-shared.o: libuci.c $(LIBUCI_DEPS)
70         $(CC) $(CFLAGS) $(FPIC) -c -o $@ $<
71
72 libuci.a: libuci-static.o
73         rm -f $@
74         $(AR) rc $@ $^
75         $(RANLIB) $@
76
77 libuci.$(SHLIB_EXT): libuci-shared.o
78         $(LINK) $(SHLIB_FLAGS) -o $(SHLIB_FILE) $^ $(LIBS)
79         ln -sf $(SHLIB_FILE) $@
80
81 clean:
82         rm -f uci uci-static *.[oa] *.so* *.dylib* uci_config.h
83
84 install: all
85         $(INSTALL) -m0644 libuci.a $(DESTDIR)$(prefix)/lib/
86         $(INSTALL) -m0755 $(SHLIB_FILE) $(DESTDIR)$(prefix)/lib/
87         ln -sf $(SHLIB_FILE) $(DESTDIR)$(prefix)/lib/libuci.$(SHLIB_EXT)
88         $(INSTALL) -m0755 uci $(DESTDIR)/usr/bin/
89
90 FORCE: ;
91 .PHONY: FORCE