diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/luarocks/deps.lua | 49 |
1 files changed, 33 insertions, 16 deletions
diff --git a/src/luarocks/deps.lua b/src/luarocks/deps.lua index b7d2b236..d9a88c2b 100644 --- a/src/luarocks/deps.lua +++ b/src/luarocks/deps.lua | |||
| @@ -266,13 +266,10 @@ local function get_external_deps_dirs(mode) | |||
| 266 | return dirs | 266 | return dirs |
| 267 | end | 267 | end |
| 268 | 268 | ||
| 269 | local function check_external_dependency_at(extdir, name, ext_files, vars, dirs, err_files) | 269 | local function resolve_prefix(prefix, dirs) |
| 270 | local fs = require("luarocks.fs") | 270 | if type(prefix) == "string" then |
| 271 | local prefix = vars[name.."_DIR"] | 271 | return prefix |
| 272 | if not prefix then | 272 | elseif type(prefix) == "table" then |
| 273 | prefix = extdir | ||
| 274 | end | ||
| 275 | if type(prefix) == "table" then | ||
| 276 | if prefix.bin then | 273 | if prefix.bin then |
| 277 | dirs.BINDIR.subdir = prefix.bin | 274 | dirs.BINDIR.subdir = prefix.bin |
| 278 | end | 275 | end |
| @@ -284,8 +281,14 @@ local function check_external_dependency_at(extdir, name, ext_files, vars, dirs, | |||
| 284 | if prefix.lib then | 281 | if prefix.lib then |
| 285 | dirs.LIBDIR.subdir = prefix.lib | 282 | dirs.LIBDIR.subdir = prefix.lib |
| 286 | end | 283 | end |
| 287 | prefix = prefix.prefix | 284 | return prefix.prefix |
| 288 | end | 285 | end |
| 286 | end | ||
| 287 | |||
| 288 | local function check_external_dependency_at(prefix, name, ext_files, vars, dirs, err_files, cache) | ||
| 289 | local fs = require("luarocks.fs") | ||
| 290 | cache = cache or {} | ||
| 291 | |||
| 289 | for dirname, dirdata in util.sortedpairs(dirs) do | 292 | for dirname, dirdata in util.sortedpairs(dirs) do |
| 290 | local paths | 293 | local paths |
| 291 | local path_var_value = vars[name.."_"..dirname] | 294 | local path_var_value = vars[name.."_"..dirname] |
| @@ -331,7 +334,10 @@ local function check_external_dependency_at(extdir, name, ext_files, vars, dirs, | |||
| 331 | 334 | ||
| 332 | for _, d in ipairs(paths) do | 335 | for _, d in ipairs(paths) do |
| 333 | if pattern then | 336 | if pattern then |
| 334 | for entry in fs.dir(d) do | 337 | if not cache[d] then |
| 338 | cache[d] = fs.list_dir(d) | ||
| 339 | end | ||
| 340 | for _, entry in ipairs(cache[d]) do | ||
| 335 | if entry:match(pattern) then | 341 | if entry:match(pattern) then |
| 336 | found = true | 342 | found = true |
| 337 | break | 343 | break |
| @@ -366,19 +372,29 @@ local function check_external_dependency_at(extdir, name, ext_files, vars, dirs, | |||
| 366 | return true | 372 | return true |
| 367 | end | 373 | end |
| 368 | 374 | ||
| 369 | local function check_external_dependency(name, ext_files, vars, mode) | 375 | local function check_external_dependency(name, ext_files, vars, mode, cache) |
| 370 | local err_files = {program = {}, header = {}, library = {}} | 376 | local ok |
| 371 | local err_dirname | 377 | local err_dirname |
| 372 | local err_testfile | 378 | local err_testfile |
| 373 | for _, extdir in ipairs(cfg.external_deps_dirs) do | 379 | local err_files = {program = {}, header = {}, library = {}} |
| 374 | local dirs = get_external_deps_dirs(mode) | 380 | |
| 381 | local dirs = get_external_deps_dirs(mode) | ||
| 382 | |||
| 383 | local prefixes | ||
| 384 | if vars[name .. "_DIR"] then | ||
| 385 | prefixes = { vars[name .. "_DIR"] } | ||
| 386 | else | ||
| 387 | prefixes = cfg.external_deps_dirs | ||
| 388 | end | ||
| 389 | |||
| 390 | for _, prefix in ipairs(prefixes) do | ||
| 391 | prefix = resolve_prefix(prefix, dirs) | ||
| 375 | if cfg.is_platform("mingw32") and name == "LUA" then | 392 | if cfg.is_platform("mingw32") and name == "LUA" then |
| 376 | dirs.LIBDIR.pattern = fun.filter(util.deep_copy(dirs.LIBDIR.pattern), function(s) | 393 | dirs.LIBDIR.pattern = fun.filter(util.deep_copy(dirs.LIBDIR.pattern), function(s) |
| 377 | return not s:match("%.a$") | 394 | return not s:match("%.a$") |
| 378 | end) | 395 | end) |
| 379 | end | 396 | end |
| 380 | local ok | 397 | ok, err_dirname, err_testfile = check_external_dependency_at(prefix, name, ext_files, vars, dirs, err_files, cache) |
| 381 | ok, err_dirname, err_testfile = check_external_dependency_at(extdir, name, ext_files, vars, dirs, err_files) | ||
| 382 | if ok then | 398 | if ok then |
| 383 | return true | 399 | return true |
| 384 | end | 400 | end |
| @@ -517,8 +533,9 @@ function deps.check_lua(vars) | |||
| 517 | if cfg.luajit_version then | 533 | if cfg.luajit_version then |
| 518 | table.insert(libnames, 1, "luajit-" .. cfg.lua_version) | 534 | table.insert(libnames, 1, "luajit-" .. cfg.lua_version) |
| 519 | end | 535 | end |
| 536 | local cache = {} | ||
| 520 | for _, libname in ipairs(libnames) do | 537 | for _, libname in ipairs(libnames) do |
| 521 | local ok = check_external_dependency("LUA", { library = libname }, vars, "build") | 538 | local ok = check_external_dependency("LUA", { library = libname }, vars, "build", cache) |
| 522 | if ok then | 539 | if ok then |
| 523 | vars.LUALIB = vars.LUA_LIBDIR_FILE | 540 | vars.LUALIB = vars.LUA_LIBDIR_FILE |
| 524 | return true | 541 | return true |
