PREFIX ?= /usr
CP := cp -r
RM := rm -rf

.PHONY: all
all: lua-5.1-try lua-5.2-try

include findlua.mk

.PHONY: install
install: lua-5.1-try-install lua-5.2-try-install

.PHONY: install-doc
install-doc: doc
	$(INSTALL) -d $(DESTDIR)$(PREFIX)/share/doc/luxio
	$(CP) doc/* $(DESTDIR)$(PREFIX)/share/doc/luxio

.PHONY: doc
doc:
	ldoc .

CFLAGS ?= -O2 -Wall
INSTALL := /usr/bin/install

LUALIBS := $(patsubst %,luxio/%.lua, event simple subprocess)

.PHONY: clean
clean:
	$(RM) *.so *.o luxio_constants.inc luxio-5.1 luxio-5.2 doc

luxio_constants.inc: luxio_constants.inc.in const-proc.lua
	$(LUA_REPL) ./const-proc.lua < $^ > $@

.PHONY: lua-5.1
lua-5.1: luxio-5.1.so luxio-5.1
	ln -s -f luxio-5.1.so luxio.so

LUA_BINDIR ?= $(DESTDIR)$(PREFIX)/bin

.PHONY: lua-5.1-install
lua-5.1-install: INST_LIBDIR ?= $(DESTDIR)$(LUA51_CMOD_INST)
lua-5.1-install: INST_LUADIR ?= $(DESTDIR)$(LUA51_LMOD_INST)
lua-5.1-install: lua-5.1
	$(INSTALL) -d $(INST_LIBDIR)
	$(INSTALL) -m 755 luxio-5.1.so $(INST_LIBDIR)/luxio.so
	$(INSTALL) -d $(INST_LUADIR)/luxio
	$(INSTALL) -m 644 $(LUALIBS) $(INST_LUADIR)/luxio/
	$(INSTALL) -d $(LUA_BINDIR)
	$(INSTALL) luxio-5.1 $(LUA_BINDIR)/luxio-5.1

luxio-5.1.so: luxio-5.1.o
	$(CC) $(LDFLAGS) -shared $(EXTRA_LIBS) -o luxio-5.1.so $^

luxio-5.1: lua-5.1.c luxio-5.1.o
	$(CC) -o luxio-5.1 $(CFLAGS) $(LUA51_INC) $(LDFLAGS) $(EXTRA_LIBS) lua-5.1.c luxio-5.1.o $(LUA51_LIB)

.PHONY: lua-5.2
lua-5.2: luxio-5.2.so luxio-5.2
	ln -s -f luxio-5.2.so luxio.so

.PHONY: lua-5.2-install
lua-5.2-install: INST_LIBDIR ?= $(DESTDIR)$(LUA52_CMOD_INST)
lua-5.2-install: INST_LUADIR ?= $(DESTDIR)$(LUA52_LMOD_INST)
lua-5.2-install: lua-5.2
	$(INSTALL) -d $(INST_LIBDIR)
	$(INSTALL) -m 755 luxio-5.2.so $(INST_LIBDIR)/luxio.so
	$(INSTALL) -d $(INST_LUADIR)/luxio
	$(INSTALL) -m 644 $(LUALIBS) $(INST_LUADIR)/luxio/
	$(INSTALL) -d $(LUA_BINDIR)
	$(INSTALL) luxio-5.2 $(LUA_BINDIR)/luxio-5.2

luxio-5.2.so: luxio-5.2.o
	$(CC) $(LDFLAGS) -shared $(EXTRA_LIBS) -o luxio-5.2.so $^

luxio-5.2: lua-5.2.c luxio-5.2.o
	$(CC) -o luxio-5.2 $(CFLAGS) $(LDFLAGS) $(EXTRA_LIBS) $(LUA52_INC) lua-5.2.c luxio-5.2.o $(LUA52_LIB)

###

luxio-5.1.o: luxio.c luxio_constants.inc
	$(CC) $(CFLAGS) -fPIC $(LUA51_INC) -c $< -o $@

luxio-5.2.o: luxio.c luxio_constants.inc
	$(CC) $(CFLAGS) -fPIC $(LUA52_INC) -c $< -o $@
