mirror of
https://github.com/lua/lua.git
synced 2025-01-28 06:03:00 +08:00
Option '-l' discards version sufix from file name
Like 'require', the command-line option '-l' discards an optional version suffix (everything after an hyphen) from a file name when creating the module name.
This commit is contained in:
parent
c197885cb0
commit
09f3c2372f
@ -24,15 +24,6 @@
|
|||||||
#include "lualib.h"
|
#include "lualib.h"
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
** LUA_IGMARK is a mark to ignore all before it when building the
|
|
||||||
** luaopen_ function name.
|
|
||||||
*/
|
|
||||||
#if !defined (LUA_IGMARK)
|
|
||||||
#define LUA_IGMARK "-"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** LUA_CSUBSEP is the character that replaces dots in submodule names
|
** LUA_CSUBSEP is the character that replaces dots in submodule names
|
||||||
** when searching for a C loader.
|
** when searching for a C loader.
|
||||||
|
12
lua.c
12
lua.c
@ -210,12 +210,17 @@ static int dostring (lua_State *L, const char *s, const char *name) {
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
** Receives 'globname[=modname]' and runs 'globname = require(modname)'.
|
** Receives 'globname[=modname]' and runs 'globname = require(modname)'.
|
||||||
|
** If there is no explicit modname and globname contains a '-', cut
|
||||||
|
** the sufix after '-' (the "version") to make the global name.
|
||||||
*/
|
*/
|
||||||
static int dolibrary (lua_State *L, char *globname) {
|
static int dolibrary (lua_State *L, char *globname) {
|
||||||
int status;
|
int status;
|
||||||
|
char *suffix = NULL;
|
||||||
char *modname = strchr(globname, '=');
|
char *modname = strchr(globname, '=');
|
||||||
if (modname == NULL) /* no explicit name? */
|
if (modname == NULL) { /* no explicit name? */
|
||||||
modname = globname; /* module name is equal to global name */
|
modname = globname; /* module name is equal to global name */
|
||||||
|
suffix = strchr(modname, *LUA_IGMARK); /* look for a suffix mark */
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
*modname = '\0'; /* global name ends here */
|
*modname = '\0'; /* global name ends here */
|
||||||
modname++; /* module name starts after the '=' */
|
modname++; /* module name starts after the '=' */
|
||||||
@ -223,8 +228,11 @@ static int dolibrary (lua_State *L, char *globname) {
|
|||||||
lua_getglobal(L, "require");
|
lua_getglobal(L, "require");
|
||||||
lua_pushstring(L, modname);
|
lua_pushstring(L, modname);
|
||||||
status = docall(L, 1, 1); /* call 'require(modname)' */
|
status = docall(L, 1, 1); /* call 'require(modname)' */
|
||||||
if (status == LUA_OK)
|
if (status == LUA_OK) {
|
||||||
|
if (suffix != NULL) /* is there a suffix mark? */
|
||||||
|
*suffix = '\0'; /* remove sufix from global name */
|
||||||
lua_setglobal(L, globname); /* globname = require(modname) */
|
lua_setglobal(L, globname); /* globname = require(modname) */
|
||||||
|
}
|
||||||
return report(L, status);
|
return report(L, status);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -257,6 +257,15 @@
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
** LUA_IGMARK is a mark to ignore all after it when building the
|
||||||
|
** module name (e.g., used to build the luaopen_ function name).
|
||||||
|
** Typically, the sufix after the mark is the module version,
|
||||||
|
** as in "mod-v1.2.so".
|
||||||
|
*/
|
||||||
|
#define LUA_IGMARK "-"
|
||||||
|
|
||||||
/* }================================================================== */
|
/* }================================================================== */
|
||||||
|
|
||||||
|
|
||||||
|
@ -225,6 +225,13 @@ prepfile("print(str.upper'alo alo', m.max(10, 20))")
|
|||||||
RUN("lua -l 'str=string' '-lm=math' -e 'print(m.sin(0))' %s > %s", prog, out)
|
RUN("lua -l 'str=string' '-lm=math' -e 'print(m.sin(0))' %s > %s", prog, out)
|
||||||
checkout("0.0\nALO ALO\t20\n")
|
checkout("0.0\nALO ALO\t20\n")
|
||||||
|
|
||||||
|
|
||||||
|
-- test module names with version sufix ("libs/lib2-v2")
|
||||||
|
RUN("env LUA_CPATH='./libs/?.so' lua -l lib2-v2 -e 'print(lib2.id())' > %s",
|
||||||
|
out)
|
||||||
|
checkout("true\n")
|
||||||
|
|
||||||
|
|
||||||
-- test 'arg' table
|
-- test 'arg' table
|
||||||
local a = [[
|
local a = [[
|
||||||
assert(#arg == 3 and arg[1] == 'a' and
|
assert(#arg == 3 and arg[1] == 'a' and
|
||||||
|
Loading…
x
Reference in New Issue
Block a user