
csrc = $(wildcard src/*.c)
ccsrc = $(wildcard src/*.cc)
obj = $(csrc:.c=.o) $(ccsrc:.cc=.o)
dep = $(obj:.o=.d)
name = goat3dgfx
lib_a = lib$(name).a

so_major = 0
so_minor = 1

ifeq ($(shell uname -r), Darwin)
	lib_so = lib$(name).dylib
	shared = -dynamiclib
else
	lib_so = lib$(name).so.$(so_major).$(so_minor)
	soname = lib$(name).so.$(so_major)
	devlink = lib$(name).so
	shared = -shared -Wl,-soname=$(soname)
	pic = -fPIC
endif

warn = -Wall

libs_ldflags = -limago -lanim -lpsys -lvmath

CFLAGS = -pedantic $(warn) $(dbg) $(pic) $(opt) $(inc) $(cfg_cflags) $(libs_cflags)
CXXFLAGS =  $(CFLAGS)
LDFLAGS = $(cfg_ldflags) $(libs_ldflags)

.PHONY: all
all: $(lib_so) $(lib_a)

$(lib_a): $(obj)
	$(AR) rcs $@ $(obj)

$(lib_so): $(obj)
	$(CXX) $(shared) -o $@ $(obj) $(LDFLAGS)

-include $(dep)

%.d: %.c
	@$(CPP) $(CFLAGS) $< -MM -MT $(@:.d=.o) >$@

%.d: %.cc
	@$(CPP) $(CXXFLAGS) $< -MM -MT $(@:.d=.o) >$@

.PHONY: clean
clean:
	rm -f $(obj) $(lib_a) $(lib_so)

.PHONY: cleandep
cleandep:
	rm -f $(dep)

.PHONY: install
install: $(lib_so) $(lib_a)
	mkdir -p $(DESTDIR)$(PREFIX)/lib $(DESTDIR)$(PREFIX)/include/goat3dgfx
	cp src/*.h src/*.inl $(DESTDIR)$(PREFIX)/include/goat3dgfx/
	cp $(lib_a) $(DESTDIR)$(PREFIX)/lib/$(lib_a)
	cp $(lib_so) $(DESTDIR)$(PREFIX)/lib/$(lib_so)
	[ -n "$(devlink)" ] && \
		cd $(DESTDIR)$(PREFIX)/lib && \
		rm -f $(soname) $(devlink) && \
		ln -s $(lib_so) $(soname) && \
		ln -s $(soname) $(devlink) || \
		true

.PHONY: uninstall
uninstall:
	rm -f $(DESTDIR)$(PREFIX)/include/goat3dgfx/*
	rmdir $(DESTDIR)$(PREFIX)/include/goat3dgfx
	rm -f $(DESTDIR)$(PREFIX)/lib/$(lib_so)
	rm -f $(DESTDIR)$(PREFIX)/lib/$(lib_a)
	[ -n "$(devlink)" ] && \
		rm -f $(DESTDIR)$(PREFIX)/lib/$(soname) && \
		rm -f $(DESTDIR)$(PREFIX)/lib/$(devlink) || \
		true
