#
# Makefile to generate a lua binding for fox using srtti
#
# Vincent Penne 2004
#

# Set this to 0 if you're using LUA 4 instead of LUA 5
LUA5		= 1

# Path to lua 5 library
LUA5PATH	= ../lua

# You can precise the lua interpreter used to execute srtti
LUABIN		= lua-5.0

# Command to launch srtti
SRTTI 		= $(LUABIN) /home/zig/Dev/srtti/srtti.lua

ifeq ($(WIN32),1)
objsuf		= .ow32
libsuf		= .aw32
isuf		= .i32
else
objsuf		= .o
libsuf		= .a
isuf		= .i
endif

AR		= ar
RANLIB		= ranlib
CC		= gcc
CXX		= g++

ifeq ($(LUA5),1)

TARGET		= lua5-fox
LIB		= lua5-fox$(libsuf)

BIND_LANGUAGE	= lua5
LUA_CXXFLAGS	= -DLUA5
LUA_CXXFLAGS	+= -I$(LUA5PATH)/include
LUA_LDPATH	+= -L$(LUA5PATH)/lib

else

TARGET		= lua-fox
LIB		= lua-fox$(libsuf)

BIND_LANGUAGE	= lua

endif

CFLAGS =

ifeq ($(CROSSWIN32),1)
FOX_CFLAGS="-I/usr/local/cross-tools/i386-mingw32msvc/include/fox"
else
FOX_CFLAGS="-I/usr/local/include/fox"
FOX_LDFLAGS+="-L/usr/local/lib"
endif

ifeq ($(WIN32),1)
FOX_CFLAGS += -mno-cygwin
FOX_LDFLAGS += -mno-cygwin
FOX_LDFLAGS+=-lFOX -mwindows -lole32 -luuid -lcomctl32 -lwinspool -lws2_32 -lwsock32 -lopengl32 -lglu32 -lglut32 #-ljpeg -lz -lpng
else
FOX_LDFLAGS="-lFOX"
endif

CXXFLAGS	= -g $(FOX_CFLAGS) $(LUA_CXXFLAGS)

LDFLAGS		= -g $(FOX_LDFLAGS) $(LUA_LDPATH) -llua -llualib


#CPP_FLAGS	= "-Dasm(...)=" "-D__asm__(...)=" \
#	-D__extension__="" -D__const=const "-D__attribute__(...)=" \
#	-D__size="unsigned int" -Dptrdiff_t=int -D__restrict="" \
#	-D__inline="" -D__mode__="" -Dexplicit=""
CPP_FLAGS	= -Dasm\(...\)\= -D__asm__\(...\)\= \
	-D__extension__="" -D__const=const -D__attribute__\(...\)\= \
	-D__size="unsigned int" -Dptrdiff_t=int -D__restrict="" \
	-D__inline="" -D__inline__="" -D__mode__="" -Dexplicit=""


LOBJS		= bind-fox-ext$(objsuf)

OBJS		= tbind-fox$(objsuf)

BINDFILE	= bind-fox.cxx

all : $(TARGET)

bind-fox-ext$(objsuf) : $(BINDFILE)

$(TARGET): $(LIB) $(OBJS)
	@echo [linking $@ from $^]
	$(CXX) $(OBJS) $(LIB) $(LDFLAGS) -o $@

$(LIB) : $(LOBJS)
	@echo [building library $@]
	@rm -f $@
	@$(AR) crs $@ $^ 
	@$(RANLIB) $@

.PHONY : clean
clean :
	@echo [cleaning]
	rm -f $(LOBJS) $(OBJS) $(LIB) $(BINDFILE)

.SUFFIXES : .cxx .c $(objsuf) $(isuf)
.PRECIOUS: %$(isuf)

.cxx$(isuf):
	@echo [preprocessing $<]
	@$(CXX) -E -dD $(CPP_FLAGS) $(CXXFLAGS) $< > $@

.c$(isuf):
	@echo [preprocessing $<]
	@$(CC) -E -dD $(CPP_FLAGS) $(CFLAGS) $< > $@

bind-%.cxx : %$(isuf)
	@echo [generating binding from $<]
	@$(SRTTI) --module bind --bind-language $(BIND_LANGUAGE) \
	--bind-config $(@:.cxx=.bind) \
	--bind-lua-config $(@:.cxx=.bind-lua) \
	--bind-lua-out $@ \
	--bind-lua-outh $(@:.cxx=.h) $<

.cxx$(objsuf):
	@echo [compiling $<]
	@$(CXX) $(CXXFLAGS) -c $< -o $@
