[lxc-devel] [PATCH] update lua binding to support both 5.2 and 5.1
Natanael Copa
ncopa at alpinelinux.org
Thu Sep 5 14:19:33 UTC 2013
On Thu, 5 Sep 2013 09:41:12 -0400
Dwight Engen <dwight.engen at oracle.com> wrote:
> fix a bug in the parsing of /proc/mounts (from Natanael Copa
> <ncopa at alpinelinux.org>)
>
> remove lxc subdir in cgroup paths
>
> remove extraneous debug printfs
>
> remove extra call to stats_clear
>
> Tested lxc-top, and apitest.lua on both lua 5.1 and 5.2
>
> Signed-off-by: Dwight Engen <dwight.engen at oracle.com>
> ---
> configure.ac | 10 +++++++++-
> src/lua-lxc/Makefile.am | 4 ++--
> src/lua-lxc/lxc.lua | 50 ++++++++++++++++++++++---------------------------
> src/lxc/lxc-top | 14 ++++++++++----
> 4 files changed, 43 insertions(+), 35 deletions(-)
>
> diff --git a/configure.ac b/configure.ac
> index df9a44b..f6f067d 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -164,9 +164,17 @@ AC_ARG_ENABLE([lua],
> AM_CONDITIONAL([ENABLE_LUA], [test "x$enable_lua" = "xyes"])
>
> AM_COND_IF([ENABLE_LUA],
> - [PKG_CHECK_MODULES([LUA], [$LUAPKGCONFIG >= 5.1],[],[AC_MSG_ERROR([You must install lua-devel for lua 5.1])])
> + [AC_CHECK_PROG([LUA],[lua],[lua],[no])
> + PKG_CHECK_MODULES([LUADEVEL], [$LUAPKGCONFIG >= 5.1],[],[AC_MSG_ERROR([You must install lua-devel])])
> AC_DEFINE_UNQUOTED([ENABLE_LUA], 1, [Lua is available])])
>
> +AS_IF([test "x$LUA" != "xno"],
> + [AC_MSG_CHECKING([for lua version])
> + LUA_VERSION=`$LUA -e 'print(_VERSION)' | awk '{print $2}'`
> + AC_MSG_RESULT([$LUA_VERSION])
> + AC_SUBST([LUA_VERSION])])
> +
> +
> # Optional test binaries
> AC_ARG_ENABLE([tests],
> [AC_HELP_STRING([--enable-tests], [build test/example binaries])],
What if you have both lua 5.1 and 5.2 installed (eg debian/ubuntu) and
want build against lua 5.1? On Ubuntu I get:
lua -e 'print(_VERSION)' | awk '{print $2}'
5.2
but i might want use the lua5.1.pc
And what happens if you cross-compile? (cross-compiling is a new can of
worms that i don't think we should worry too much about)
This is why i dropped the idea of running lua binary and try to rely on
pkg-config info only.
Even if fedora does not provide INSTALL_[CL]MOD it provides V:
[ncopa at localhost ~]$ uname -a
Linux localhost.localdomain 3.9.5-301.fc19.x86_64 #1 SMP Tue Jun 11 19:39:38 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
[ncopa at localhost ~]$ pkg-config --variable V lua
5.1
We can fallback to this in case INSTALL_[CL]MOD is missing.
INSTALL_[CL]MOD appears to be available on Ubuntu(/Debian?), Arch Linux
and Alpine Linux. Suse I don't know.
> diff --git a/src/lxc/lxc-top b/src/lxc/lxc-top
> index 31aaecf..969f1f7 100755
> --- a/src/lxc/lxc-top
> +++ b/src/lxc/lxc-top
> @@ -97,9 +97,16 @@ end
>
> function usleep(n)
> if (n ~= 0) then
> - ret = os.execute("usleep " .. tonumber(n))
> - if (ret ~= 0) then
> - os.exit(0)
> + local ret = os.execute("usleep " .. tonumber(n))
> + if (string.sub(_VERSION, 5) == "5.2") then
> + if (ret == nil) then
> + os.exit(0)
> + end
> + end
> + if (string.sub(_VERSION, 5) == "5.1") then
> + if (ret ~= 0) then
> + os.exit(0)
> + end
> end
> end
> end
How about implement a tiny usleep in core in C instead:
diff --git a/src/lua-lxc/core.c b/src/lua-lxc/core.c
index d404707..504e147 100644
--- a/src/lua-lxc/core.c
+++ b/src/lua-lxc/core.c
@@ -27,11 +27,13 @@
#include <lauxlib.h>
#include <assert.h>
#include <string.h>
+#include <unistd.h>
#include <lxc/lxccontainer.h>
#if LUA_VERSION_NUM < 502
#define luaL_newlib(L,l) (lua_newtable(L), luaL_register(L,NULL,l))
#define luaL_setfuncs(L,l,n) (assert(n==0), luaL_register(L,NULL,l))
+#define luaL_checkunsigned(L,n) luaL_checknumber(L,n)
#endif
#ifdef NO_CHECK_UDATA
@@ -379,10 +381,17 @@ static int lxc_default_config_path_get(lua_State *L) {
return 1;
}
+/* utility functions */
+static int lxc_util_usleep(lua_State *L) {
+ usleep((useconds_t)luaL_checkunsigned(L, 1));
+ return 0;
+}
+
static luaL_Reg lxc_lib_methods[] = {
{"version_get", lxc_version_get},
{"default_config_path_get", lxc_default_config_path_get},
{"container_new", container_new},
+ {"usleep", lxc_util_usleep},
{NULL, NULL}
};
diff --git a/src/lxc/lxc-top b/src/lxc/lxc-top
index 31aaecf..8e8bafb 100755
--- a/src/lxc/lxc-top
+++ b/src/lxc/lxc-top
@@ -22,6 +22,7 @@
--
local lxc = require("lxc")
+local core = require("lxc.core")
local getopt = require("alt_getopt")
local lfs = require("lfs")
@@ -95,15 +96,6 @@ function strsisize(size, width)
return string.format("%3d.00 ", size)
end
-function usleep(n)
- if (n ~= 0) then
- ret = os.execute("usleep " .. tonumber(n))
- if (ret ~= 0) then
- os.exit(0)
- end
- end
-end
-
function tty_lines()
local rows = 25
local f = assert(io.popen("stty -a | head -n 1"))
@@ -238,5 +230,5 @@ do
end
stats_print(string.format("TOTAL (%-2d)", #containers), stats_total)
io.flush()
- usleep(optarg["d"] * 1000000)
+ core.usleep(optarg["d"] * 1000000)
end
More information about the lxc-devel
mailing list