From c9185f42835c52956b4cb906d765d5b4e6bb3539 Mon Sep 17 00:00:00 2001 From: Hisham Muhammad Date: Mon, 11 Jun 2018 18:11:20 -0300 Subject: builtin: if "libraries" is used but "external_dependencies" is not given, autogenerate it The approach is slightly ugly since it adds builtin-specific knowledge to `luarocks.deps`, but I don't think any other build backends will support this behavior any time soon. --- src/luarocks/build/builtin.lua | 32 ++++++++++++++++++++++++++++++++ src/luarocks/deps.lua | 4 ++++ 2 files changed, 36 insertions(+) (limited to 'src') diff --git a/src/luarocks/build/builtin.lua b/src/luarocks/build/builtin.lua index 4ff59f8b..f414c166 100644 --- a/src/luarocks/build/builtin.lua +++ b/src/luarocks/build/builtin.lua @@ -10,6 +10,38 @@ local util = require("luarocks.util") local cfg = require("luarocks.core.cfg") local dir = require("luarocks.dir") +function builtin.autodetect_external_dependencies(build) + if not build or not build.modules then + return nil + end + local extdeps = {} + local any = false + for _, data in pairs(build.modules) do + if type(data) == "table" and data.libraries then + local libraries = data.libraries + if type(libraries) == "string" then + libraries = { libraries } + end + local incdirs = {} + local libdirs = {} + for _, lib in ipairs(libraries) do + local upper = lib:upper() + any = true + extdeps[upper] = { library = lib } + table.insert(incdirs, "$(" .. upper .. "_INCDIR)") + table.insert(libdirs, "$(" .. upper .. "_LIBDIR)") + end + if not data.incdirs then + data.incdirs = incdirs + end + if not data.libdirs then + data.libdirs = libdirs + end + end + end + return any and extdeps or nil +end + local function autoextract_libs(external_dependencies, variables) if not external_dependencies then return nil, nil, nil diff --git a/src/luarocks/deps.lua b/src/luarocks/deps.lua index 3ec1aa93..bcd6ccf5 100644 --- a/src/luarocks/deps.lua +++ b/src/luarocks/deps.lua @@ -9,6 +9,7 @@ local dir = require("luarocks.dir") local util = require("luarocks.util") local vers = require("luarocks.core.vers") local queries = require("luarocks.queries") +local builtin = require("luarocks.build.builtin") --- Attempt to match a dependency to an installed rock. -- @param dep table: A dependency parsed in table format. @@ -277,6 +278,9 @@ function deps.check_external_deps(rockspec, mode) patterns = cfg.runtime_external_deps_patterns subdirs = cfg.runtime_external_deps_subdirs end + if not rockspec.external_dependencies then + rockspec.external_dependencies = builtin.autodetect_external_dependencies(rockspec.build) + end if rockspec.external_dependencies then for name, ext_files in util.sortedpairs(rockspec.external_dependencies) do local ok = true -- cgit v1.2.3-55-g6feb