initial commit
[gph-math] / Makefile
1 # build options
2 PREFIX ?= /usr/local
3 warn_flags = -pedantic -Wall
4 opt_flags = -O0
5 dbg_flags = -g
6 # -------------
7 name = gmath
8 so_major = 0
9 so_minor = 1
10
11 rootdir ?= .
12 ccsrc = $(wildcard $(rootdir)/src/*.cc)
13 obj = $(ccsrc:.cc=.o) $(csrc:.c=.o)
14 dep = $(obj:.o=.d)
15
16 CFLAGS = $(warn_flags) $(opt_flags) $(dbg_flags) $(pic)
17 CXXFLAGS = $(warn_flags) $(opt_flags) $(dbg_flags) $(pic)
18
19 sys = $(shell uname -s | sed 's/MINGW.*/MINGW/')
20 ifeq ($(sys), Darwin)
21         alib = lib$(name).a
22         solib = lib$(name).dylib
23         shared = -dynamiclib
24
25 else ifeq ($(sys), MINGW)
26         alib = $(name).lib
27         solib = $(name).dll
28         shared = -shared
29
30 else
31         alib = lib$(name).a
32         solib = lib$(name).so.$(so_major).$(so_minor)
33         soname = lib$(name).so.$(so_major)
34         ldname = lib$(name).so
35         shared = -shared -Wl,-soname=$(soname)
36         pic = -fPIC
37 endif
38
39 .PHONY: all
40 all: $(alib) $(solib)
41
42 $(alib): $(obj) Makefile
43         $(AR) rcs $@ $(obj)
44
45 $(solib): $(obj) Makefile
46         $(CXX) -o $@ $(shared) $(obj) $(LDFLAGS)
47         [ -n "$(soname)" ] && \
48                 rm -f $(soname) $(ldname) && \
49                 ln -s $(solib) $(soname) && \
50                 ln -s $(soname) $(ldname) || true
51
52 -include $(dep)
53
54 %.d: %.c
55         @$(CPP) $(CFLAGS) $< -MM -MT $(@:.d=.o) >$@
56
57 %.d: %.cc
58         @$(CPP) $(CXXFLAGS) $< -MM -MT $(@:.d=.o) >$@
59
60 .PHONY: clean
61 clean:
62         rm -f $(obj) $(alib) $(solib)
63
64 .PHONY: cleandep
65 cleandep:
66         rm -f $(dep)
67
68 .PHONY: install
69 install: $(alib) $(solib)
70         mkdir -p $(DESTDIR)$(PREFIX)/include/$(name) $(DESTDIR)$(PREFIX)/lib
71         cp src/*.h src/*.inl $(DESTDIR)$(PREFIX)/include/$(name)/
72         cp $(alib) $(DESTDIR)$(PREFIX)/lib/$(alib)
73         cp $(solib) $(DESTDIR)$(PREFIX)/lib/$(solib)
74         [ -n "$(soname)" ] && \
75                 rm -f $(DESTDIR)$(PREFIX)/lib/$(soname) $(DESTDIR)$(PREFIX)/lib/$(ldname) && \
76                 cp $(soname) $(DESTDIR)$(PREFIX)/lib/$(soname) && \
77                 cp $(ldname) $(DESTDIR)$(PREFIX)/lib/$(ldname) || true
78
79 .PHONY: uninstall
80 uninstall:
81         rm -f $(DESTDIR)$(PREFIX)/include/$(name)/*.h $(DESTDIR)$(PREFIX)/include/$(name)/*.inl
82         rm -f $(DESTDIR)$(PREFIX)/lib/$(solib)
83         [ -n "$(soname)" ] && \
84                 rm -f $(DESTDIR)$(PREFIX)/lib/$(soname) && \
85                 rm -f $(DESTDIR)$(PREFIX)/lib/$(ldname) || true