PROJECT = angelscript-addon

ANGELSCRIPT_SRCDIR := angelscript/projects/gnuc
ANGELSCRIPT_OUTDIR := angelscript/lib
ANGELSCRIPT_LIB := angelscript/lib/libangelscript.so

MULTIARCH ?= $(shell $(CC) --print-multiarch)

PREFIX ?= /usr
INCLUDEDIR ?= "$(PREFIX)/include/angelscript"
LIBDIR ?= "$(PREFIX)/lib/$(MULTIARCH)"

OUTDIR := angelscript/lib

CPPFLAGS += -Iangelscript/include -DAS_USE_NAMESPACE
CXXFLAGS += -fPIC

HEADERS := $(wildcard add_on/*/*.h)
SRCS := $(wildcard add_on/*/*.cpp)
OBJS := $(sort $(SRCS:.cpp=.o))

LIB_NAME := lib$(PROJECT).so
SO_NAME := $(LIB_NAME).$(VERSION)
REAL_NAME := $(LIB_NAME).$(VERSION)

ARLIB := lib$(PROJECT).a
SHLIB := $(SO_NAME)
PCFILE := debian/$(PROJECT).pc

.PHONY: all
all: $(OUTDIR)/$(ARLIB) $(OUTDIR)/$(SHLIB)

$(OUTDIR)/$(ARLIB): $(OBJS)
	mkdir -p $(OUTDIR)
	$(AR) rcs $@ $^

$(OUTDIR)/$(SHLIB): $(OBJS) $(ANGELSCRIPT_LIB)
	mkdir -p $(OUTDIR)
	$(CXX) -shared -Wl,-soname,$(SO_NAME) -o $@ $^ $(LDFLAGS)

$(OUTDIR)/$(PCFILE): $(PCFILE).in
	sed 's|@prefix@|$(PREFIX)|; s|@libdir@|$(LIBDIR)|; s|@includedir@|$(INCLUDEDIR)|; s|@version@|$(VERSION)|' $< > $@

$(ANGELSCRIPT_LIB):
	+$(MAKE) -C "$(ANGELSCRIPT_SRCDIR)" CXXFLAGS="$(CXXFLAGS) $(CPPFLAGS)" LDFLAGS="$(LDFLAGS) -lpthread"

.PHONY: clean
clean:
	rm -f $(ARLIB) $(SHLIB) $(OBJS)
	+$(MAKE) -C "$(ANGELSCRIPT_SRCDIR)" clean

.PHONY: install-shared
install-shared: $(OUTDIR)/$(SHLIB)
	install -d $(DESTDIR)$(LIBDIR) || true
	install -m 0644 $< $(DESTDIR)$(LIBDIR)/$(REAL_NAME)
	#rm -f $(DESTDIR)$(LIBDIR)/$(SO_NAME)
	#ln -s $(REAL_NAME) $(DESTDIR)$(LIBDIR)/$(SO_NAME)
	rm -f $(DESTDIR)$(LIBDIR)/$(LIB_NAME)
	ln -s $(SO_NAME) $(DESTDIR)$(LIBDIR)/$(LIB_NAME)

.PHONY: install-static
install-static: $(OUTDIR)/$(ARLIB)
	install -d $(DESTDIR)$(LIBDIR) || true
	install -m 0644 $< $(DESTDIR)$(LIBDIR)/

.PHONY: install-header
install-header: $(HEADERS)
	install -d $(DESTDIR)$(INCLUDEDIR) || true
	install -m 0644 $^ $(DESTDIR)$(INCLUDEDIR)/

.PHONY: install
install: install-shared install-static install-header
	+$(MAKE) -C "$(ANGELSCRIPT_SRCDIR)" install PREFIX="$(PREFIX)" LIBDIR_DEST="$(LIBDIR)"
