fixed copying of library links in install target
[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 def = -DGPH_NAMESPACE
16
17 CFLAGS = $(warn_flags) $(opt_flags) $(dbg_flags) $(pic) $(def)
18 CXXFLAGS = $(warn_flags) $(opt_flags) $(dbg_flags) $(pic) $(def)
19
20 sys = $(shell uname -s | sed 's/MINGW.*/MINGW/')
21 ifeq ($(sys), Darwin)
22         alib = lib$(name).a
23         solib = lib$(name).dylib
24         shared = -dynamiclib
25
26 else ifeq ($(sys), MINGW)
27         alib = $(name).lib
28         solib = $(name).dll
29         shared = -shared
30
31 else
32         alib = lib$(name).a
33         solib = lib$(name).so.$(so_major).$(so_minor)
34         soname = lib$(name).so.$(so_major)
35         ldname = lib$(name).so
36         shared = -shared -Wl,-soname=$(soname)
37         pic = -fPIC
38 endif
39
40 .PHONY: all
41 all: $(alib) $(solib)
42
43 $(alib): $(obj) Makefile
44         $(AR) rcs $@ $(obj)
45
46 $(solib): $(obj) Makefile
47         $(CXX) -o $@ $(shared) $(obj) $(LDFLAGS)
48         [ -n "$(soname)" ] && \
49                 rm -f $(soname) $(ldname) && \
50                 ln -s $(solib) $(soname) && \
51                 ln -s $(soname) $(ldname) || true
52
53 -include $(dep)
54
55 %.d: %.c
56         @$(CPP) $(CFLAGS) $< -MM -MT $(@:.d=.o) >$@
57
58 %.d: %.cc
59         @$(CPP) $(CXXFLAGS) $< -MM -MT $(@:.d=.o) >$@
60
61 .PHONY: clean
62 clean:
63         rm -f $(obj) $(alib) $(solib)
64
65 .PHONY: cleandep
66 cleandep:
67         rm -f $(dep)
68
69 .PHONY: install
70 install: $(alib) $(solib)
71         mkdir -p $(DESTDIR)$(PREFIX)/include/$(name) $(DESTDIR)$(PREFIX)/lib
72         cp src/*.h src/*.inl $(DESTDIR)$(PREFIX)/include/$(name)/
73         cp $(alib) $(DESTDIR)$(PREFIX)/lib/$(alib)
74         cp $(solib) $(DESTDIR)$(PREFIX)/lib/$(solib)
75         [ -n "$(soname)" ] && \
76                 rm -f $(DESTDIR)$(PREFIX)/lib/$(soname) $(DESTDIR)$(PREFIX)/lib/$(ldname) && \
77                 cp -a $(soname) $(DESTDIR)$(PREFIX)/lib/$(soname) && \
78                 cp -a $(ldname) $(DESTDIR)$(PREFIX)/lib/$(ldname) || true
79
80 .PHONY: uninstall
81 uninstall:
82         rm -f $(DESTDIR)$(PREFIX)/include/$(name)/*.h $(DESTDIR)$(PREFIX)/include/$(name)/*.inl
83         rm -f $(DESTDIR)$(PREFIX)/lib/$(solib)
84         [ -n "$(soname)" ] && \
85                 rm -f $(DESTDIR)$(PREFIX)/lib/$(soname) && \
86                 rm -f $(DESTDIR)$(PREFIX)/lib/$(ldname) || true