ntg-context - mailing list for ConTeXt users
 help / color / mirror / Atom feed
* LuaTeX incompatible with Lua
@ 2019-11-21  7:17 Henri Menke
  2019-11-21  7:43 ` Henri Menke
  2019-11-21  8:18 ` Hans Hagen
  0 siblings, 2 replies; 3+ messages in thread
From: Henri Menke @ 2019-11-21  7:17 UTC (permalink / raw)
  To: mailing list for ConTeXt users

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.

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
___________________________________________________________________________________

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: LuaTeX incompatible with Lua
  2019-11-21  7:17 LuaTeX incompatible with Lua Henri Menke
@ 2019-11-21  7:43 ` Henri Menke
  2019-11-21  8:18 ` Hans Hagen
  1 sibling, 0 replies; 3+ messages in thread
From: Henri Menke @ 2019-11-21  7:43 UTC (permalink / raw)
  To: mailing list for ConTeXt users

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 <lauxlib.h>
#include <lua.h>
#include <lualib.h>

#include <assert.h>
#include <stdio.h>

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	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.
> 
> 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
___________________________________________________________________________________

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: LuaTeX incompatible with Lua
  2019-11-21  7:17 LuaTeX incompatible with Lua Henri Menke
  2019-11-21  7:43 ` Henri Menke
@ 2019-11-21  8:18 ` Hans Hagen
  1 sibling, 0 replies; 3+ messages in thread
From: Hans Hagen @ 2019-11-21  8:18 UTC (permalink / raw)
  To: mailing list for ConTeXt users, Henri Menke

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
___________________________________________________________________________________

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2019-11-21  8:18 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-11-21  7:17 LuaTeX incompatible with Lua Henri Menke
2019-11-21  7:43 ` Henri Menke
2019-11-21  8:18 ` Hans Hagen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).