1
0
mirror of https://github.com/The-Powder-Toy/The-Powder-Toy.git synced 2025-04-08 00:14:00 +02:00

add lua5.2 support for no particular reason

This commit is contained in:
jacob1 2014-08-22 01:25:34 -04:00
parent f8782338d7
commit 925ff1da3c
30 changed files with 68 additions and 46 deletions

@ -248,13 +248,17 @@ def findLibs(env, conf):
if not GetOption('nolua') and not GetOption('renderer'):
#Look for Lua
luaver = "lua5.1"
if not conf.CheckLib(['lua5.1', 'lua-5.1', 'lua51', 'lua']):
if platform != "Darwin" or not conf.CheckFramework("Lua"):
if conf.CheckLib(['lua5.2', 'lua-5.2', 'lua52']):
env.Append(CPPDEFINES=["LUA_COMPAT_ALL"])
luaver = "lua5.2"
elif platform != "Darwin" or not conf.CheckFramework("Lua"):
FatalError("lua5.1 development library not found or not installed")
if platform == "Linux":
try:
env.ParseConfig('pkg-config --cflags lua5.1')
env.ParseConfig('pkg-config --libs lua5.1')
env.ParseConfig("pkg-config --cflags {0}".format(luaver))
env.ParseConfig("pkg-config --libs {0}".format(luaver))
except:
pass
@ -479,7 +483,7 @@ if GetOption('beta'):
#Generate list of sources to compile
sources = Glob("src/*.cpp") + Glob("src/*/*.cpp") + Glob("src/*/*/*.cpp") + Glob("generated/*.cpp")
if not GetOption('nolua') and not GetOption('renderer'):
sources += Glob("src/lua/socket/*.c")
sources += Glob("src/lua/socket/*.c") + Glob("src/lua/LuaCompat.c")
if platform == "Windows" and not msvc:
sources += env.RES('resources/powder-res.rc')

@ -29,7 +29,7 @@
#define LUA_BITOP_VERSION "1.0.2"
#include "luainc.h"
#include "LuaCompat.h"
#ifdef _MSC_VER
/* MSVC is stuck in the last century and doesn't have C99's stdint.h. */
@ -178,11 +178,11 @@ int luaopen_bit(lua_State *L)
msg = "arithmetic right-shift broken";
luaL_error(L, "bit library self-test failed (%s)", msg);
}
#if LUA_VERSION_NUM < 502
//#if LUA_VERSION_NUM < 502
luaL_register(L, "bit", bit_funcs);
#else
luaL_newlib(L, bit_funcs);
#endif
//#else
// luaL_newlib(L, bit_funcs);
//#endif
return 1;
}
#endif

11
src/lua/LuaCompat.c Normal file

@ -0,0 +1,11 @@
#include "LuaCompat.h"
#if LUA_VERSION_NUM >= 502
//implement missing luaL_typerror function
int luaL_typerror (lua_State *L, int narg, const char *tname)
{
const char *msg = lua_pushfstring(L, "%s expected, got %s", tname, luaL_typename(L, narg));
return luaL_argerror(L, narg, msg);
}
#endif

@ -16,6 +16,13 @@ extern "C"
#include "lualib.h"
#endif
#if LUA_VERSION_NUM >= 502
#define luaL_getn(L,i) lua_rawlen(L, (i))
#define LUA_GLOBALSINDEX LUA_RIDX_GLOBALS
LUALIB_API int (luaL_typerror) (lua_State *L, int narg, const char *tname);
#endif
#ifdef __cplusplus
}
#endif

@ -1,7 +1,7 @@
#pragma once
//http://lua-users.org/wiki/SimplerCppBinding
#include "luainc.h"
#include "LuaCompat.h"
template <typename T> class Luna
{

@ -139,7 +139,7 @@ LuaScriptInterface::LuaScriptInterface(GameController * c, GameModel * m):
int i = 0, j;
char tmpname[12];
int currentElementMeta, currentElement;
const static struct luaL_reg tptluaapi [] = {
const static struct luaL_Reg tptluaapi [] = {
{"test", &luatpt_test},
{"drawtext", &luatpt_drawtext},
{"create", &luatpt_create},
@ -442,7 +442,7 @@ int LuaScriptInterface::tpt_newIndex(lua_State *l)
void LuaScriptInterface::initInterfaceAPI()
{
struct luaL_reg interfaceAPIMethods [] = {
struct luaL_Reg interfaceAPIMethods [] = {
{"showWindow", interface_showWindow},
{"closeWindow", interface_closeWindow},
{"addComponent", interface_addComponent},
@ -535,7 +535,7 @@ int LuaScriptInterface::particlePropertiesCount;
void LuaScriptInterface::initSimulationAPI()
{
//Methods
struct luaL_reg simulationAPIMethods [] = {
struct luaL_Reg simulationAPIMethods [] = {
{"partNeighbours", simulation_partNeighbours},
{"partNeighbors", simulation_partNeighbours},
{"partChangeType", simulation_partChangeType},
@ -1765,7 +1765,7 @@ int LuaScriptInterface::simulation_neighbours(lua_State * l)
void LuaScriptInterface::initRendererAPI()
{
//Methods
struct luaL_reg rendererAPIMethods [] = {
struct luaL_Reg rendererAPIMethods [] = {
{"renderModes", renderer_renderModes},
{"displayModes", renderer_displayModes},
{"colourMode", renderer_colourMode},
@ -1957,7 +1957,7 @@ int LuaScriptInterface::renderer_debugHUD(lua_State * l)
void LuaScriptInterface::initElementsAPI()
{
//Methods
struct luaL_reg elementsAPIMethods [] = {
struct luaL_Reg elementsAPIMethods [] = {
{"allocate", elements_allocate},
{"element", elements_element},
{"property", elements_property},
@ -2474,7 +2474,7 @@ int LuaScriptInterface::elements_free(lua_State * l)
void LuaScriptInterface::initGraphicsAPI()
{
//Methods
struct luaL_reg graphicsAPIMethods [] = {
struct luaL_Reg graphicsAPIMethods [] = {
{"textSize", graphics_textSize},
{"drawText", graphics_drawText},
{"drawLine", graphics_drawLine},
@ -2683,7 +2683,7 @@ int LuaScriptInterface::graphics_getHexColor(lua_State * l)
void LuaScriptInterface::initFileSystemAPI()
{
//Methods
struct luaL_reg fileSystemAPIMethods [] = {
struct luaL_Reg fileSystemAPIMethods [] = {
{"list", fileSystem_list},
{"exists", fileSystem_exists},
{"isFile", fileSystem_isFile},

@ -1,7 +1,7 @@
#ifndef LUASCRIPTINTERFACE_H_
#define LUASCRIPTINTERFACE_H_
#include "luainc.h"
#include "LuaCompat.h"
#include "CommandInterface.h"
#include "simulation/Simulation.h"

@ -24,7 +24,7 @@ int auxiliar_open(lua_State *L) {
* Creates a new class with given methods
* Methods whose names start with __ are passed directly to the metatable.
\*-------------------------------------------------------------------------*/
void auxiliar_newclass(lua_State *L, const char *classname, luaL_reg *func) {
void auxiliar_newclass(lua_State *L, const char *classname, luaL_Reg *func) {
luaL_newmetatable(L, classname); /* mt */
/* create __index table to place methods */
lua_pushstring(L, "__index"); /* mt,"__index" */

@ -31,10 +31,10 @@
* RCS ID: $Id: auxiliar.h,v 1.9 2005/10/07 04:40:59 diego Exp $
\*=========================================================================*/
#include "../luainc.h"
#include "../LuaCompat.h"
int auxiliar_open(lua_State *L);
void auxiliar_newclass(lua_State *L, const char *classname, luaL_reg *func);
void auxiliar_newclass(lua_State *L, const char *classname, luaL_Reg *func);
void auxiliar_add2group(lua_State *L, const char *classname, const char *group);
void auxiliar_setclass(lua_State *L, const char *classname, int objidx);
void *auxiliar_checkclass(lua_State *L, const char *classname, int objidx);

@ -222,7 +222,7 @@ static int recvline(p_buffer buf, luaL_Buffer *b) {
pos = 0;
while (pos < count && data[pos] != '\n') {
/* we ignore all \r's */
if (data[pos] != '\r') luaL_putchar(b, data[pos]);
if (data[pos] != '\r') luaL_addchar(b, data[pos]);
pos++;
}
if (pos < count) { /* found '\n' */

@ -17,7 +17,7 @@
*
* RCS ID: $Id: buffer.h,v 1.12 2005/10/07 04:40:59 diego Exp $
\*=========================================================================*/
#include "../luainc.h"
#include "../LuaCompat.h"
#include "io.h"
#include "timeout.h"

@ -18,7 +18,7 @@ static int finalize(lua_State *L);
static int do_nothing(lua_State *L);
/* except functions */
static luaL_reg func[] = {
static luaL_Reg func[] = {
{"newtry", global_newtry},
{"protect", global_protect},
{NULL, NULL}

@ -28,7 +28,7 @@
* RCS ID: $Id: except.h,v 1.2 2005/09/29 06:11:41 diego Exp $
\*=========================================================================*/
#include "../luainc.h"
#include "../LuaCompat.h"
int except_open(lua_State *L);

@ -18,7 +18,7 @@ static void inet_pushresolved(lua_State *L, struct hostent *hp);
static int inet_global_gethostname(lua_State *L);
/* DNS functions */
static luaL_reg func[] = {
static luaL_Reg func[] = {
{ "toip", inet_global_toip },
{ "tohostname", inet_global_tohostname },
{ "gethostname", inet_global_gethostname},

@ -16,7 +16,7 @@
*
* RCS ID: $Id: inet.h,v 1.16 2005/10/07 04:40:59 diego Exp $
\*=========================================================================*/
#include "../luainc.h"
#include "../LuaCompat.h"
#include "socket.h"
#include "timeout.h"

@ -15,7 +15,7 @@
* RCS ID: $Id: io.h,v 1.11 2005/10/07 04:40:59 diego Exp $
\*=========================================================================*/
#include <stdio.h>
#include "../luainc.h"
#include "../LuaCompat.h"
#include "timeout.h"

@ -37,7 +37,7 @@ static int base_open(lua_State *L);
/*-------------------------------------------------------------------------*\
* Modules and functions
\*-------------------------------------------------------------------------*/
static const luaL_reg mod[] = {
static const luaL_Reg mod[] = {
{"auxiliar", auxiliar_open},
{"except", except_open},
{"timeout", timeout_open},
@ -49,7 +49,7 @@ static const luaL_reg mod[] = {
{NULL, NULL}
};
static luaL_reg func[] = {
static luaL_Reg func[] = {
{"skip", global_skip},
{"__unload", global_unload},
{NULL, NULL}

@ -8,7 +8,7 @@
*
* RCS ID: $Id: luasocket.h,v 1.25 2007/06/11 23:44:54 diego Exp $
\*=========================================================================*/
#include "../luainc.h"
#include "../LuaCompat.h"
/*-------------------------------------------------------------------------*\
* Current socket library version

@ -10,7 +10,7 @@
* RCS ID: $Id: options.h,v 1.4 2005/10/07 04:40:59 diego Exp $
\*=========================================================================*/
#include "../luainc.h"
#include "../LuaCompat.h"
#include "socket.h"
/* option registry */

@ -24,7 +24,7 @@ static void make_assoc(lua_State *L, int tab);
static int global_select(lua_State *L);
/* functions in library namespace */
static luaL_reg func[] = {
static luaL_Reg func[] = {
{"select", global_select},
{NULL, NULL}
};

@ -1,6 +1,6 @@
#ifdef LUACONSOLE
// socket.lua from luasocket compiled into a cpp file
#include "../luainc.h"
#include "../LuaCompat.h"
void luaopen_socket(lua_State *l){
int socket_luac_sz=4061;
const char* socket_luac="-----------------------------------------------------------------------------\012-- LuaSocket helper module\012-- Author: Diego Nehab\012-- RCS ID: $Id: socket.lua,v 1.22 2005/11/22 08:33:29 diego Exp $\012-----------------------------------------------------------------------------\012\012-----------------------------------------------------------------------------\012-- Declare module and import dependencies\012-----------------------------------------------------------------------------\012local base = _G\012local string = require(\042string\042)\012local math = require(\042math\042)\012local socket = require(\042socket.core\042)\012module(\042socket\042)\012\012-----------------------------------------------------------------------------\012-- Exported auxiliar functions\012-----------------------------------------------------------------------------\012function connect(address, port, laddress, lport)\012 local sock, err = socket.tcp()\012 if not sock then return nil, err end\012 if laddress then\012 local res, err = sock:bind(laddress, lport, -1)\012 if not res then return nil, err end\012 end\012 local res, err = sock:connect(address, port)\012 if not res then return nil, err end\012 return sock\012end\012\012function bind(host, port, backlog)\012 local sock, err = socket.tcp()\012 if not sock then return nil, err end\012 sock:setoption(\042reuseaddr\042, true)\012 local res, err = sock:bind(host, port)\012 if not res then return nil, err end\012 res, err = sock:listen(backlog)\012 if not res then return nil, err end\012 return sock\012end\012\012try = newtry()\012\012function choose(table)\012 return function(name, opt1, opt2)\012 if base.type(name) ~= \042string\042 then\012 name, opt1, opt2 = \042default\042, name, opt1\012 end\012 local f = table[name or \042nil\042]\012 if not f then base.error(\042unknown key (\042.. base.tostring(name) ..\042)\042, 3)\012 else return f(opt1, opt2) end\012 end\012end\012\012-----------------------------------------------------------------------------\012-- Socket sources and sinks, conforming to LTN12\012-----------------------------------------------------------------------------\012-- create namespaces inside LuaSocket namespace\012sourcet = {}\012sinkt = {}\012\012BLOCKSIZE = 2048\012\012sinkt[\042close-when-done\042] = function(sock)\012 return base.setmetatable({\012 getfd = function() return sock:getfd() end,\012 dirty = function() return sock:dirty() end\012 }, {\012 __call = function(self, chunk, err)\012 if not chunk then\012 sock:close()\012 return 1\012 else return sock:send(chunk) end\012 end\012 })\012end\012\012sinkt[\042keep-open\042] = function(sock)\012 return base.setmetatable({\012 getfd = function() return sock:getfd() end,\012 dirty = function() return sock:dirty() end\012 }, {\012 __call = function(self, chunk, err)\012 if chunk then return sock:send(chunk)\012 else return 1 end\012 end\012 })\012end\012\012sinkt[\042default\042] = sinkt[\042keep-open\042]\012\012sink = choose(sinkt)\012\012sourcet[\042by-length\042] = function(sock, length)\012 return base.setmetatable({\012 getfd = function() return sock:getfd() end,\012 dirty = function() return sock:dirty() end\012 }, {\012 __call = function()\012 if length <= 0 then return nil end\012 local size = math.min(socket.BLOCKSIZE, length)\012 local chunk, err = sock:receive(size)\012 if err then return nil, err end\012 length = length - string.len(chunk)\012 return chunk\012 end\012 })\012end\012\012sourcet[\042until-closed\042] = function(sock)\012 local done\012 return base.setmetatable({\012 getfd = function() return sock:getfd() end,\012 dirty = function() return sock:dirty() end\012 }, {\012 __call = function()\012 if done then return nil end\012 local chunk, err, partial = sock:receive(socket.BLOCKSIZE)\012 if not err then return chunk\012 elseif err == \042closed\042 then\012 sock:close()\012 done = 1\012 return partial\012 else return nil, err end\012 end\012 })\012end\012\012\012sourcet[\042default\042] = sourcet[\042until-closed\042]\012\012source = choose(sourcet)\012\012";

@ -1,2 +1,2 @@
#include "../luainc.h"
#include "../LuaCompat.h"
void luaopen_socket(lua_State *l);

@ -35,7 +35,7 @@ static int meth_setfd(lua_State *L);
static int meth_dirty(lua_State *L);
/* tcp object methods */
static luaL_reg tcp[] = {
static luaL_Reg tcp[] = {
{"__gc", meth_close},
{"__tostring", auxiliar_tostring},
{"accept", meth_accept},
@ -70,7 +70,7 @@ static t_opt opt[] = {
};
/* functions in library namespace */
static luaL_reg func[] = {
static luaL_Reg func[] = {
{"tcp", global_create},
{NULL, NULL}
};

@ -16,7 +16,7 @@
*
* RCS ID: $Id: tcp.h,v 1.7 2005/10/07 04:40:59 diego Exp $
\*=========================================================================*/
#include "../luainc.h"
#include "../LuaCompat.h"
#include "buffer.h"
#include "timeout.h"

@ -30,7 +30,7 @@
static int timeout_lua_gettime(lua_State *L);
static int timeout_lua_sleep(lua_State *L);
static luaL_reg func[] = {
static luaL_Reg func[] = {
{ "gettime", timeout_lua_gettime },
{ "sleep", timeout_lua_sleep },
{ NULL, NULL }

@ -6,7 +6,7 @@
*
* RCS ID: $Id: timeout.h,v 1.14 2005/10/07 04:40:59 diego Exp $
\*=========================================================================*/
#include "../luainc.h"
#include "../LuaCompat.h"
/* timeout control structure */
typedef struct t_timeout_ {

@ -40,7 +40,7 @@ static int meth_setfd(lua_State *L);
static int meth_dirty(lua_State *L);
/* udp object methods */
static luaL_reg udp[] = {
static luaL_Reg udp[] = {
{"__gc", meth_close},
{"__tostring", auxiliar_tostring},
{"close", meth_close},
@ -73,7 +73,7 @@ static t_opt opt[] = {
};
/* functions in library namespace */
static luaL_reg func[] = {
static luaL_Reg func[] = {
{"udp", global_create},
{NULL, NULL}
};

@ -14,7 +14,7 @@
*
* RCS ID: $Id: udp.h,v 1.10 2005/10/07 04:40:59 diego Exp $
\*=========================================================================*/
#include "../luainc.h"
#include "../LuaCompat.h"
#include "timeout.h"
#include "socket.h"

@ -37,7 +37,7 @@ static const char *unix_tryconnect(p_unix un, const char *path);
static const char *unix_trybind(p_unix un, const char *path);
/* unix object methods */
static luaL_reg un[] = {
static luaL_Reg un[] = {
{"__gc", meth_close},
{"__tostring", auxiliar_tostring},
{"accept", meth_accept},
@ -69,7 +69,7 @@ static t_opt opt[] = {
};
/* our socket creation function */
static luaL_reg func[] = {
static luaL_Reg func[] = {
{"unix", global_create},
{NULL, NULL}
};

@ -10,7 +10,7 @@
*
* RCS ID: $Id: unix.h,v 1.9 2006/03/13 07:16:39 diego Exp $
\*=========================================================================*/
#include "../luainc.h"
#include "../LuaCompat.h"
#include "buffer.h"
#include "timeout.h"