Re: [NTG-context] LuaTeX incompatible with Lua

2019-11-21 Thread Hans Hagen

On 11/21/2019 8:17 AM, Henri Menke wrote:

Dear list,

The following Lua script behaves differently when executed in Lua vs.
LuaTeX.

     print(os.execute("date"))

It seems that the definition of os_execute in loslibext.c was copied
over from Lua 5.1 and not adapted to newer versions.

     $ lua5.1 test.lua
     0
     $ lua5.2 test.lua
     true    exit    0
     $ lua5.3 test.lua
     true    exit    0
     $ texlua test.lua
     0
     $ luajit test.lua
     0
     $ texluajit test.lua
     0

As you can see from the example, this comes with the additional
complication that LuaJIT has Lua 5.1 behaviour and should also retain
that.
Indeed, the old interface was kept (also for compatibility reasons as 
lua is used for scripts in texlive etc).


If one used lua as well as luatex as lua engine for the same script one 
can write a wrapper if needed (I have been thinking of that on context 
but again it would also mean adapting older scripts laying around.)


Hans

-
  Hans Hagen | PRAGMA ADE
  Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
   tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl
-
___
If your question is of interest to others as well, please add an entry to the 
Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://context.aanhet.net
archive  : https://bitbucket.org/phg/context-mirror/commits/
wiki : http://contextgarden.net
___


Re: [NTG-context] LuaTeX incompatible with Lua

2019-11-20 Thread Henri Menke

Below I include a suggestion on how to do this sort of version agnostic.

Cheers, Henri

Live example on Wandbox:

https://wandbox.org/permlink/jEn9kNnPB0t5rwjP

---

#include 
#include 
#include 

#include 
#include 

static int (*lua_os_execute)(lua_State *L) = NULL;

static int os_execute(lua_State *L) {
// Do whatever
printf("Hello Hans!\n");

// Safeguard
assert(lua_os_execute != NULL);

// Return wrapped
return lua_os_execute(L);
}

LUAMOD_API int luaopen_oslibext(lua_State *L) {
lua_getglobal(L, "os");

// Get the address of the original function
if (lua_os_execute == NULL) {
lua_getfield(L, -1, "execute");
lua_os_execute = lua_tocfunction(L, -1);
lua_pop(L, 1);
}

// Push the new function to overwrite the old one
lua_pushcfunction(L, os_execute);
lua_setfield(L, -2, "execute");
return 1;
}

int main(void) {
lua_State *L = luaL_newstate();
luaL_openlibs(L);
luaopen_oslibext(L);

if (luaL_dostring(L, "os.execute([[date]])") != 0) {
fprintf(stderr, "%s", lua_tostring(L, -1));
lua_pop(L, 1);
}

lua_close(L);
}

On 11/21/19 8:17 PM, Henri Menke wrote:

Dear list,

The following Lua script behaves differently when executed in Lua vs.
LuaTeX.

  print(os.execute("date"))

It seems that the definition of os_execute in loslibext.c was copied
over from Lua 5.1 and not adapted to newer versions.

  $ lua5.1 test.lua
  0
  $ lua5.2 test.lua
  true  exit0
  $ lua5.3 test.lua
  true  exit0
  $ texlua test.lua
  0
  $ luajit test.lua
  0
  $ texluajit test.lua
  0

As you can see from the example, this comes with the additional
complication that LuaJIT has Lua 5.1 behaviour and should also retain
that.

Cheers, Henri


___
If your question is of interest to others as well, please add an entry to the 
Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://context.aanhet.net
archive  : https://bitbucket.org/phg/context-mirror/commits/
wiki : http://contextgarden.net
___


[NTG-context] LuaTeX incompatible with Lua

2019-11-20 Thread Henri Menke

Dear list,

The following Lua script behaves differently when executed in Lua vs.
LuaTeX.

print(os.execute("date"))

It seems that the definition of os_execute in loslibext.c was copied
over from Lua 5.1 and not adapted to newer versions.

$ lua5.1 test.lua
0
$ lua5.2 test.lua
trueexit0
$ lua5.3 test.lua
trueexit0
$ texlua test.lua
0
$ luajit test.lua
0
$ texluajit test.lua
0

As you can see from the example, this comes with the additional
complication that LuaJIT has Lua 5.1 behaviour and should also retain
that.

Cheers, Henri
___
If your question is of interest to others as well, please add an entry to the 
Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://context.aanhet.net
archive  : https://bitbucket.org/phg/context-mirror/commits/
wiki : http://contextgarden.net
___