diff options
| author | ruki <[email protected]> | 2019-01-21 22:43:26 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2019-01-21 10:20:37 +0800 |
| commit | 8adc05268ed172871aef4a1b3c97dc8f2dcbd8f2 (patch) | |
| tree | 8cdc64fb209222fe14a51562f664f2f26ce38549 /xmake/modules/package/manager/find_package.lua | |
| parent | 41d7ccc69187d460c8155ba93e941fe0e85a796e (diff) | |
improve install_package
Diffstat (limited to 'xmake/modules/package/manager/find_package.lua')
| -rw-r--r-- | xmake/modules/package/manager/find_package.lua | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/xmake/modules/package/manager/find_package.lua b/xmake/modules/package/manager/find_package.lua index 8de7c483f..3cf608ee3 100644 --- a/xmake/modules/package/manager/find_package.lua +++ b/xmake/modules/package/manager/find_package.lua @@ -22,6 +22,37 @@ -- @file find_package.lua -- +-- imports +import("core.base.semver") +import("core.project.config") +import("lib.detect.cache") + +-- find package +function _find(manager_name, package_name, opt) + + -- get managers + local managers = {} + if manager_name then + table.insert(managers, manager_name) + else + if not is_host("windows") then + table.insert(managers, "brew") + end + table.insert(managers, "vcpkg") + table.insert(managers, "conan") + end + assert(#managers > 0, "no suitable package manager!") + + -- find package from the given package manager + for _, manager_name in ipairs(managers) do + vprint("finding %s from %s ..", package_name, manager_name) + local result = import("package.manager." .. manager_name .. ".find_package", {anonymous = true})(package_name, opt) + if result then + return result + end + end +end + -- find package using the package manager -- -- @param name the package name, e.g. zlib 1.12.x (try all), XMAKE::zlib 1.12.x, BREW::zlib, VCPKG::zlib, CONAN::OpenSSL/1.0.2n@conan/stable @@ -30,4 +61,23 @@ -- function main(name, opt) + -- get the copied options + opt = table.copy(opt) + + -- get package manager name + local manager_name, package_name = unpack(name:split("::", true)) + if package_name == nil then + package_name = manager_name + manager_name = nil + else + manager_name = manager_name:lower():trim() + end + + -- get package name and require version + local require_version = nil + package_name, require_version = unpack(package_name:trim():split("%s+")) + opt.version = require_version or opt.version + + + _find(manager_name, package_name, opt) end |
