#######################################################################
# Makefile for lua test-suite
#######################################################################

LANGUAGE     = lua
LUA          = @LUABIN@
SCRIPTSUFFIX = _runme.lua

srcdir       = @srcdir@
top_srcdir   = @top_srcdir@
top_builddir = @top_builddir@

# sorry, currently very few test cases work/have been written

CPP_TEST_CASES += \
	lua_no_module_global \
	lua_inherit_getitem  \


C_TEST_CASES += \
	lua_no_module_global \


include $(srcdir)/../common.mk

# Overridden variables here
LIBS       = -L.

# Custom tests - tests with additional commandline options
lua_no_module_global.%: SWIGOPT += -nomoduleglobal

# Rules for the different types of tests
%.cpptest:
	$(setup)
	+$(swig_and_compile_cpp)
	$(run_testcase)

%.ctest:
	$(setup)
	+$(swig_and_compile_c)
	$(run_testcase)

%.multicpptest:
	$(setup)
	+$(swig_and_compile_multi_cpp)
	$(run_testcase)

# Runs the testcase. A testcase is only run if
# a file is found which has _runme.lua appended after the testcase name.
run_testcase = \
	if [ -f $(SCRIPTDIR)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then \
	  env LUA_PATH="$(srcdir)/?.lua;" $(RUNTOOL) $(LUA) $(SCRIPTDIR)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX); \
	fi

# Clean: (does nothing, we dont generate extra lua code)
%.clean:
	@exit 0

clean:
	$(MAKE) -f $(top_builddir)/$(EXAMPLES)/Makefile SRCDIR='$(SRCDIR)' lua_clean
