Support for Lua added - patch from Mark Gossage

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@7363 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
William S Fulton 2005-08-15 20:38:34 +00:00
commit e590565fe8
9 changed files with 175 additions and 7 deletions

View file

@ -1,6 +1,14 @@
Version 1.3.26 (in progress)
============================
08/15/2005: wsfulton
[Lua] Support added for Lua. Patch #1242772 from Mark Gossage.
It supports most C/C++ features (functions, struct, classes, arrays, pointers,
exceptions), as well as lots of documentation and a few test cases & examples.
08/14/2005: wsfulton
[Xml] Fix incorrect xml escaping in base class name when base class is a template.
08/13/2005: efuzzyone
[CLISP] Added support for handling enums. Does not adds the return type declaration
to the function definition, if a function returns void.

View file

@ -26,4 +26,5 @@ Pike.html
Python.html
Ruby.html
Tcl.html
Lua.html
Extending.html

View file

@ -863,3 +863,56 @@ csharp_compile: $(SRCS)
csharp_clean:
rm -f *.@OBJEXT@ *@CSHARPSO@ *_wrap* *~ .~* core @EXTRA_CLEAN@ runme runme.exe gc.log `find . -name \*.cs | grep -v runme.cs`
##################################################################
##### LUA ######
##################################################################
# lua flags
LUA_INCLUDE= @LUAINCLUDE@
LUA_LIB = @LUALIB@ -llua -llualib
# Extra specific dynamic linking options
LUA_DLNK = @LUADYNAMICLINKING@
LUA_SO = @LUA_SO@
# Extra code for lua static link
LUA_INTERP = ../lua.c
# ----------------------------------------------------------------
# Build a C dynamically loadable module
# ----------------------------------------------------------------
lua: $(SRCS)
$(SWIG) -lua $(SWIGOPT) $(INTERFACE)
$(CC) -c $(CCSHARED) $(CFLAGS) $(ISRCS) $(SRCS) $(INCLUDES) $(LUA_INCLUDE)
$(LDSHARED) $(OBJS) $(IOBJS) $(LIBS) $(LUA_LIB) -o $(LIBPREFIX)$(TARGET)$(LUA_SO)
# -----------------------------------------------------------------
# Build a C++ dynamically loadable module
# -----------------------------------------------------------------
lua_cpp: $(SRCS)
$(SWIG) -c++ -lua $(SWIGOPT) $(INTERFACE)
$(CXX) -c $(CCSHARED) $(CFLAGS) $(ICXXSRCS) $(SRCS) $(CXXSRCS) $(INCLUDES) $(LUA_INCLUDE)
$(CXXSHARED) $(OBJS) $(IOBJS) $(LIBS) $(LUA_LIB) $(CPP_DLLIBS) -o $(LIBPREFIX)$(TARGET)$(LUA_SO)
# -----------------------------------------------------------------
# Build statically linked Lua interpreter
# -----------------------------------------------------------------
lua_static: $(SRCS)
$(SWIG) -lua -module example $(SWIGOPT) $(INTERFACE)
$(CC) $(CFLAGS) $(ISRCS) $(SRCS) $(LUA_INTERP) $(INCLUDES) \
$(LUA_INCLUDE) $(LIBS) $(LUA_LIB) -o $(TARGET)
lua_static_cpp: $(SRCS)
$(SWIG) -c++ -lua -module example $(SWIGOPT) $(INTERFACE)
$(CXX) $(CFLAGS) $(ICXXSRCS) $(SRCS) $(CXXSRCS) $(LUA_INTERP) $(INCLUDES) \
$(LUA_INCLUDE) $(LIBS) $(LUA_LIB) -o $(TARGET)
# -----------------------------------------------------------------
# Cleaning the lua examples
# -----------------------------------------------------------------
lua_clean:
rm -f *.@OBJEXT@ *$(SO) *_wrap* *~ .~* core @EXTRA_CLEAN@ mylua@EXEEXT@

View file

@ -178,6 +178,7 @@ CPP_TEST_CASES += \
namespace_virtual_method \
newobject1 \
ordering \
operator_overload \
overload_copy \
overload_extend \
overload_rename \

View file

@ -41,6 +41,7 @@ skip-pike = test -n "@SKIP_PIKE@"
skip-chicken = test -n "@SKIP_CHICKEN@"
skip-csharp = test -n "@SKIP_CSHARP@"
skip-modula3 = test -n "@SKIP_MODULA3@"
skip-lua = test -n "@SKIP_LUA@"
#####################################################################
# CHECK
@ -71,6 +72,7 @@ check-aliveness:
@$(skip-chicken) || ./$(TARGET) -chicken -help
@$(skip-csharp) || ./$(TARGET) -csharp -help
@$(skip-modula3) || ./$(TARGET) -modula3 -help
@$(skip-lua) || ./$(TARGET) -lua -help
check-examples: \
check-tcl-examples \
@ -85,7 +87,8 @@ check-examples: \
check-pike-examples \
check-chicken-examples \
check-csharp-examples \
check-modula3-examples
check-modula3-examples \
check-lua-examples
check-%-examples:
@passed=true; \
@ -119,6 +122,7 @@ check-test-suite: \
check-pike-test-suite \
check-csharp-test-suite \
check-modula3-test-suite \
check-lua-test-suite \
# check-chicken-test-suite
check-%-test-suite:
@ -150,6 +154,7 @@ check-gifplot: \
check-php4-gifplot \
check-pike-gifplot \
check-chicken-gifplot \
# check-lua-gifplot \
# check-csharp-gifplot \
# check-modula3-gifplot
@ -191,6 +196,7 @@ all-test-suite: \
all-pike-test-suite \
all-csharp-test-suite \
all-modula3-test-suite \
all-lua-test-suite \
# all-chicken-test-suite
all-%-test-suite:
@ -214,6 +220,7 @@ broken-test-suite: \
broken-pike-test-suite \
broken-csharp-test-suite \
broken-modula3-test-suite \
broken-lua-test-suite \
# broken-chicken-test-suite
broken-%-test-suite:
@ -283,6 +290,7 @@ noskip-test-suite: \
noskip-php4-test-suite \
noskip-pike-test-suite \
noskip-csharp-test-suite \
noskip-lua-test-suite \
noskip-chicken-test-suite
noskip-%-test-suite:
@ -315,7 +323,7 @@ install-main:
@$(INSTALL_PROGRAM) $(TARGET) $(DESTDIR)$(BIN_DIR)/$(TARGET)
lib-languages = tcl perl5 python guile java mzscheme ruby php4 ocaml \
pike chicken csharp modula3 allegrocl clisp
pike chicken csharp modula3 allegrocl clisp lua
lib-modules = std

View file

@ -47,6 +47,7 @@ eswig_SOURCES = CParse/cscanner.c \
Modules/guile.cxx \
Modules/java.cxx \
Modules/lang.cxx \
Modules/lua.cxx \
Modules/main.cxx \
Modules/modula3.cxx \
Modules/module.cxx \

View file

@ -338,7 +338,7 @@ void SWIG_getoptions(int argc, char *argv[])
int includecount = 0;
// Get options
for (i = 1; i < argc; i++) {
if (argv[i]) {
if (argv[i] && !Swig_check_marked(i)) {
if (strncmp(argv[i],"-I-",3) == 0) {
// Don't push/pop directories
Swig_set_push_dir(0);

View file

@ -4,7 +4,7 @@
* swigmain.cxx
*
* This file is the main entry point to SWIG. It collects the command
* line options, registers built-in language modules, and instantiates
* line options, registers built-in language modules, and instantiates
* a module for code generation. If adding new language modules
* to SWIG, you would modify this file.
*
@ -25,7 +25,7 @@ char cvsroot_swigmain_cxx[] = "$Header$";
#include <ctype.h>
#include "swigmod.h"
/* Module factories. These functions are used to instantiate
/* Module factories. These functions are used to instantiate
the built-in language modules. If adding a new language
module to SWIG, place a similar function here. Make sure
the function has "C" linkage. This is required so that modules
@ -48,6 +48,7 @@ extern "C" {
Language *swig_chicken(void);
Language *swig_csharp(void);
Language *swig_allegrocl(void);
Language *swig_lua(void);
Language *swig_clisp(void);
Language *swig_uffi(void);
}
@ -62,13 +63,14 @@ struct swig_module {
Place an entry for new language modules here, keeping the
list sorted alphabetically. */
swig_module modules[] = {
swig_module modules[] = {
{"-allegrocl", swig_allegrocl, "ALLEGROCL"},
{"-chicken", swig_chicken, "CHICKEN"},
{"-clisp", swig_clisp, "CLISP"},
{"-csharp", swig_csharp, "C#"},
{"-guile", swig_guile, "Guile"},
{"-java", swig_java, "Java"},
{"-lua", swig_lua, "Lua"},
{"-modula3", swig_modula3, "Modula 3"},
{"-mzscheme", swig_mzscheme, "Mzscheme"},
{"-ocaml", swig_ocaml, "Ocaml"},
@ -123,7 +125,7 @@ void SWIG_merge_envopt(const char *env, int oargc, char *oargv[],
if (*c) {
argv[argc] = b;
++argc;
}
}
while ((b != be) && *c && !isspace(*c)) {
*(b++) = *(c++);
}

View file

@ -260,6 +260,12 @@ case $host in
*) TCL_CXXSHARED=$TRYLINKINGWITHCXX;;
esac
AC_SUBST(LUA_SO)
case $host in
*-*-darwin*) LUA_SO=.so;;
*) LUA_SO=$SO;;
esac
# Optional CFLAGS used to silence compiler warnings on some platforms.
AC_SUBST(PLATFLAGS)
@ -1490,6 +1496,87 @@ AC_SUBST(CSHARPLIBRARYPREFIX) # Is this going to be used?
AC_SUBST(CSHARPCFLAGS)
AC_SUBST(CSHARPSO)
#----------------------------------------------------------------
# Look for Lua
#----------------------------------------------------------------
LUABIN=
LUAINCLUDE=
LUALIB=
AC_ARG_WITH(lua, AS_HELP_STRING([--without-lua], [Disable Lua])
AS_HELP_STRING([--with-lua=path], [Set location of Lua executable]),[ LUABIN="$withval"], [LUABIN=])
AC_ARG_WITH(luaincl,[ --with-luaincl=path Set location of Lua include directory],[
LUAINCLUDE="$ISYSTEM$withval"], [LUAINCLUDE=])
AC_ARG_WITH(lualib,[ --with-lualib=path Set location of Lua library directory],[
LUALIB="-L$withval"], [LUALIB=])
# First, check for "--without-lua" or "--with-lua=no".
if test x"${LUABIN}" = xno -o x"${with_alllang}" = xno ; then
AC_MSG_NOTICE([Disabling Lua])
else
# can we find lua?
if test -z "$LUABIN"; then
AC_PATH_PROG(LUABIN, lua)
fi
# look for the header files
AC_MSG_CHECKING(for Lua header files)
if test -z "$LUAINCLUDE"; then
#AC_TRY_CPP([#include <lua.h>], , LUAINCLUDE="")
AC_PREPROC_IFELSE([AC_LANG_SOURCE([[#include <lua.h>]])], , LUAINCLUDE="")
if test -z "$LUAINCLUDE"; then
dirs="/usr/local/include /usr/include /opt/local/include"
for i in $dirs ; do
if test -r $i/tcl.h; then
AC_MSG_RESULT($i)
LUAINCLUDE="$ISYSTEM$i"
break
fi
done
fi
fi
if test -z "$LUAINCLUDE"; then
AC_MSG_RESULT(not found)
else
AC_MSG_RESULT($LUAINCLUDE)
fi
# look for the library files
AC_MSG_CHECKING(for Lua library)
if test -z "$LUALIB"; then
dirs="/usr/local/lib /usr/lib /opt/local/lib"
for i in $dirs ; do
if test -r $i/liblua.a; then
AC_MSG_RESULT($i)
LUALIB="-L$i"
break
fi
done
fi
if test -z "$LUALIB"; then
AC_MSG_RESULT(not found)
else
AC_MSG_RESULT($LUALIB)
fi
# copied from PYTHON code, but I think this is not needed for lua...
# Cygwin (Windows) needs the library for dynamic linking
#case $host in
#*-*-cygwin* | *-*-mingw*) LUADYNAMICLINKING="-L$LUALIB $PYLINK"
# PYINCLUDE="-DUSE_DL_IMPORT $PYINCLUDE"
# ;;
#*)LUADYNAMICLINKING="";;
#esac
fi # if not disabled
AC_SUBST(LUADYNAMICLINKING)
AC_SUBST(LUAINCLUDE)
AC_SUBST(LUALIB)
AC_SUBST(LUABIN)
#----------------------------------------------------------------
# Determine which languages to use for examples/test-suite
#----------------------------------------------------------------
@ -1590,6 +1677,12 @@ AC_SUBST(SKIP_CSHARP)
SKIP_MODULA3="1" # Always skipped!
AC_SUBST(SKIP_MODULA3)
SKIP_LUA=
# do we really need the LUABIN?
if test -z "$LUABIN" || test -z "$LUAINCLUDE" || test -z "$LUALIB" ; then
SKIP_LUA="1"
fi
AC_SUBST(SKIP_LUA)
#----------------------------------------------------------------
# Miscellaneous
@ -1648,6 +1741,7 @@ AC_CONFIG_FILES([ \
Examples/test-suite/python/Makefile \
Examples/test-suite/ruby/Makefile \
Examples/test-suite/tcl/Makefile \
Examples/test-suite/lua/Makefile \
])
AC_CONFIG_FILES([preinst-swig], [chmod +x preinst-swig])
AC_OUTPUT