diff --git a/CHANGES.current b/CHANGES.current index 5d3f4902e..f78d4de7c 100644 --- a/CHANGES.current +++ b/CHANGES.current @@ -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. diff --git a/Doc/Manual/chapters b/Doc/Manual/chapters index d6bfcae90..93a7fa5af 100644 --- a/Doc/Manual/chapters +++ b/Doc/Manual/chapters @@ -26,4 +26,5 @@ Pike.html Python.html Ruby.html Tcl.html +Lua.html Extending.html diff --git a/Examples/Makefile.in b/Examples/Makefile.in index 4b8bb719b..6ff472542 100644 --- a/Examples/Makefile.in +++ b/Examples/Makefile.in @@ -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@ diff --git a/Examples/test-suite/common.mk b/Examples/test-suite/common.mk index ef14c1c11..c2ec608bb 100644 --- a/Examples/test-suite/common.mk +++ b/Examples/test-suite/common.mk @@ -178,6 +178,7 @@ CPP_TEST_CASES += \ namespace_virtual_method \ newobject1 \ ordering \ + operator_overload \ overload_copy \ overload_extend \ overload_rename \ diff --git a/Makefile.in b/Makefile.in index 5ec9078bf..5bb1ca29d 100644 --- a/Makefile.in +++ b/Makefile.in @@ -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 diff --git a/Source/Makefile.am b/Source/Makefile.am index cd9da21f2..0025732dd 100644 --- a/Source/Makefile.am +++ b/Source/Makefile.am @@ -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 \ diff --git a/Source/Modules/main.cxx b/Source/Modules/main.cxx index 7784f29ae..dfddc8fe4 100644 --- a/Source/Modules/main.cxx +++ b/Source/Modules/main.cxx @@ -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); diff --git a/Source/Modules/swigmain.cxx b/Source/Modules/swigmain.cxx index f8d8df87f..55af1ec0b 100644 --- a/Source/Modules/swigmain.cxx +++ b/Source/Modules/swigmain.cxx @@ -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 #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++); } diff --git a/configure.in b/configure.in index b4d4d222d..36873c2da 100644 --- a/configure.in +++ b/configure.in @@ -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 ], , LUAINCLUDE="") +AC_PREPROC_IFELSE([AC_LANG_SOURCE([[#include ]])], , 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