summaryrefslogtreecommitdiff
path: root/xmake/modules/package/manager/find_package.lua
diff options
context:
space:
mode:
authorruki <[email protected]>2019-01-21 22:43:26 +0800
committerruki <[email protected]>2019-01-21 10:20:37 +0800
commit8adc05268ed172871aef4a1b3c97dc8f2dcbd8f2 (patch)
tree8cdc64fb209222fe14a51562f664f2f26ce38549 /xmake/modules/package/manager/find_package.lua
parent41d7ccc69187d460c8155ba93e941fe0e85a796e (diff)
improve install_package
Diffstat (limited to 'xmake/modules/package/manager/find_package.lua')
-rw-r--r--xmake/modules/package/manager/find_package.lua50
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