From 4745a6e42598414fb38565c75e84bd13723372ba Mon Sep 17 00:00:00 2001 From: Philipp Janda Date: Thu, 26 Sep 2013 09:02:33 +0200 Subject: support for tables in (runtime_)external_deps_subdirs.* --- Makefile | 4 ++-- configure | 10 +++++----- src/luarocks/cfg.lua | 17 +++++++++++++++++ src/luarocks/deps.lua | 36 +++++++++++++++++++++++++++--------- 4 files changed, 51 insertions(+), 16 deletions(-) diff --git a/Makefile b/Makefile index 16c9d4fc..6e7bee03 100644 --- a/Makefile +++ b/Makefile @@ -80,9 +80,9 @@ src/luarocks/site_config.lua: config.unix echo "LUAROCKS_UNAME_M=[[$(LUAROCKS_UNAME_M)]]" >> src/luarocks/site_config.lua echo "LUAROCKS_DOWNLOADER=[[$(LUAROCKS_DOWNLOADER)]]" >> src/luarocks/site_config.lua echo "LUAROCKS_MD5CHECKER=[[$(LUAROCKS_MD5CHECKER)]]" >> src/luarocks/site_config.lua - if [ -n "$(LUAROCKS_MULTIARCHDIR)" ] ;\ + if [ -n "$(MULTIARCH_SUBDIR)" ] ;\ then \ - echo "LUAROCKS_MULTIARCHDIR=[[$(LUAROCKS_MULTIARCHDIR)]]" >> src/luarocks/site_config.lua ;\ + echo "LUAROCKS_ADD_LIB_SUBDIRS={ [[$(MULTIARCH_SUBDIR)]] }" >> src/luarocks/site_config.lua ;\ fi dev: diff --git a/configure b/configure index ee1106dd..0e64fb55 100755 --- a/configure +++ b/configure @@ -14,7 +14,7 @@ LUA_BINDIR="/usr/bin" LUA_INCDIR="/usr/include" LUA_LIBDIR="/usr/lib" LUA_VERSION="5.1" -MULTIARCHDIR="" +MULTIARCH_SUBDIR="" # ---------------------------------------------------------------------------- # FUNCTION DEFINITIONS @@ -399,10 +399,10 @@ fi if [ "$LUAROCKS_UNAME_S" = Linux ] then - CC_ARCH=`cc -dumpmachine 2>/dev/null` - if [ -n "$CC_ARCH" ] + GCC_ARCH=`gcc -dumpspecs 2>/dev/null | grep -A 1 "^*multilib:$" | tail -1 | cut -d: -f3 | cut -d' ' -f1` + if [ -n "$GCC_ARCH" -a -d "/usr/lib/$GCC_ARCH" ] then - MULTIARCHDIR="/usr/lib/$CC_ARCH" + MULTIARCH_SUBDIR="lib/$GCC_ARCH" fi fi @@ -436,7 +436,7 @@ LUAROCKS_UNAME_S=$LUAROCKS_UNAME_S LUAROCKS_DOWNLOADER=$LUAROCKS_DOWNLOADER LUAROCKS_MD5CHECKER=$LUAROCKS_MD5CHECKER LUAROCKS_ROCKS_SUBDIR=$LUAROCKS_ROCKS_SUBDIR -LUAROCKS_MULTIARCHDIR=$MULTIARCHDIR +MULTIARCH_SUBDIR=$MULTIARCH_SUBDIR EOF diff --git a/src/luarocks/cfg.lua b/src/luarocks/cfg.lua index 8e26bb46..9227db4b 100644 --- a/src/luarocks/cfg.lua +++ b/src/luarocks/cfg.lua @@ -437,6 +437,23 @@ if detected.solaris then defaults.variables.MAKE = "gmake" end +if type(site_config.LUAROCKS_ADD_LIB_SUBDIRS) == "table" and next(site_config.LUAROCKS_ADD_LIB_SUBDIRS) ~= nil then + local lib = defaults.external_deps_subdirs.lib + if type(lib) ~= "table" then + lib = { lib } + end + local rt_lib = defaults.runtime_external_deps_subdirs.lib + if type(rt_lib) ~= "table" then + rt_lib = { rt_lib } + end + for i,v in ipairs(site_config.LUAROCKS_ADD_LIB_SUBDIRS) do + lib[#lib+1] = v + rt_lib[#rt_lib+1] = v + end + defaults.external_deps_subdirs.lib = lib + defaults.runtime_external_deps_subdirs.lib = rt_lib +end + -- Expose some more values detected by LuaRocks for use by rockspec authors. defaults.variables.LIB_EXTENSION = defaults.lib_extension defaults.variables.OBJ_EXTENSION = defaults.obj_extension diff --git a/src/luarocks/deps.lua b/src/luarocks/deps.lua index f24dc507..7f3b44f2 100644 --- a/src/luarocks/deps.lua +++ b/src/luarocks/deps.lua @@ -583,7 +583,19 @@ function check_external_deps(rockspec, mode) prefix = prefix.prefix end for dirname, dirdata in pairs(dirs) do - dirdata.dir = vars[name.."_"..dirname] or dir.path(prefix, dirdata.subdir) + local paths + local path_var_value = vars[name.."_"..dirname] + if path_var_value then + paths = { path_var_value } + elseif type(dirdata.subdir) == "table" then + paths = {} + for i,v in ipairs(dirdata.subdir) do + paths[i] = dir.path(prefix, v) + end + else + paths = { dir.path(prefix, dirdata.subdir) } + end + dirdata.dir = paths[1] local file = files[dirdata.testfile] if file then local files = {} @@ -605,16 +617,22 @@ function check_external_deps(rockspec, mode) if f:match("%.so$") or f:match("%.dylib$") or f:match("%.dll$") then f = f:gsub("%.[^.]+$", "."..cfg.external_lib_extension) end - if f:match("%*") then - local replaced = f:gsub("%.", "%%."):gsub("%*", ".*") - for _, entry in ipairs(fs.list_dir(dirdata.dir)) do - if entry:match(replaced) then - found = true - break + for _, d in ipairs(paths) do + if f:match("%*") then + local replaced = f:gsub("%.", "%%."):gsub("%*", ".*") + for _, entry in ipairs(fs.list_dir(d)) do + if entry:match(replaced) then + found = true + break + end end + else + found = fs.is_file(dir.path(d, f)) + end + if found then + dirdata.dir = d + break end - else - found = fs.is_file(dir.path(dirdata.dir, f)) end if found then break -- cgit v1.2.3-55-g6feb