lua-users home
lua-l archive

Re: LuaJIT2 performance for number crunching

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


Hi Alex,
Wouldn't argv[0] that is given to main() work for Linux?
I guess in the situation where luajit is .so, .dll, or .dylib that won't be easy. But maybe there is a compiler specific global __argv, etc.
Thanks,
Dimiter "malkia" Stanev.
On 2/21/11 5:05 AM, Alex Bradbury wrote:
On 21 February 2011 11:13, T T<t34www@googlemail.com> wrote:
I actually like the Windows way in this case :) Are there patches to
do that on Linux?
The following patch applies to LuaJIT 2 head and is based on the patch
to the base Lua interpreter Steve Donovan did in lua4linux. The built
executable will search for libraries in ../lib relative to the
directory it was placed in.
diff --git a/src/lib_package.c b/src/lib_package.c
--- a/src/lib_package.c
+++ b/src/lib_package.c
@@ -31,6 +31,30 @@
 #include<dlfcn.h>
+#ifdef LUA_DL_EXE_PATH
+
+#include<unistd.h>
+
+#undef setprogdir
+
+#define MAX_PATH 1024
+
+static void setprogdir (lua_State *L) {
+ char buff[MAX_PATH + 1];
+ int n;
+ char *lb;
+ n = readlink("/proc/self/exe", buff, sizeof(buff));
+ if (n == 0 || n == -1 || (lb = strrchr(buff, '/')) == NULL) {
+ perror("readlink");
+ luaL_error(L, "unable to get link to executable");
+ } else {
+ *lb = '0円';
+ luaL_gsub(L, lua_tostring(L, -1), LUA_EXECDIR, buff);
+ lua_remove(L, -2); /* remove original string */
+ }
+}
+#endif
+
 static void ll_unloadlib(void *lib)
 {
 dlclose(lib);
diff --git a/src/luaconf.h b/src/luaconf.h
index 330253e..704be6d 100644
--- a/src/luaconf.h
+++ b/src/luaconf.h
@@ -9,6 +9,11 @@
 #include<limits.h>
 #include<stddef.h>
+/* @@ LUA_DL_EXE_PATH allows for the Lua executable to base
+* its module path on the executable path for Linux systems.
+*/
+#define LUA_DL_EXE_PATH
+
 /* Default path for loading Lua and C modules with require(). */
 #if defined(_WIN32)
 /*
@@ -21,6 +26,14 @@
 ".\\?.lua;" LUA_LDIR"?.lua;" LUA_LDIR"?\\init.lua;"
 #define LUA_CPATH_DEFAULT \
 ".\\?.dll;" LUA_CDIR"?.dll;" LUA_CDIR"loadall.dll"
+#elif defined(LUA_DL_EXE_PATH)
+#define LUA_LDIR "!/../lib/lua/"
+#define LUA_CDIR "!/../lib/lua/"
+#define LUA_PATH_DEFAULT \
+ "./?.lua;" LUA_LDIR"?.lua;" LUA_LDIR"?/init.lua"
+#define LUA_CPATH_DEFAULT \
+ "./?.so;" LUA_CDIR"?.so;" LUA_CDIR"loadall.so"
+
 #else
 #define LUA_ROOT	"/usr/local/"
 #define LUA_LDIR	LUA_ROOT "share/lua/5.1/"

AltStyle によって変換されたページ (->オリジナル) /