summaryrefslogtreecommitdiff
path: root/xmake/modules/package/manager/find_package.lua
diff options
context:
space:
mode:
authorruki <[email protected]>2019-01-22 22:39:25 +0800
committerruki <[email protected]>2019-01-22 09:56:36 +0800
commitde29dc88bc3b7d39d4206d6e2bd034d15b232ca2 (patch)
treef247b2624aafd5a30c0a100de93aaeaf50ff7dce /xmake/modules/package/manager/find_package.lua
parentc92d87e3b872cd303356112a22190d4858a9fcb3 (diff)
find package from xmake repo and package directories
Diffstat (limited to 'xmake/modules/package/manager/find_package.lua')
-rw-r--r--xmake/modules/package/manager/find_package.lua61
1 files changed, 55 insertions, 6 deletions
diff --git a/xmake/modules/package/manager/find_package.lua b/xmake/modules/package/manager/find_package.lua
index bcade1f95..4d6cc5299 100644
--- a/xmake/modules/package/manager/find_package.lua
+++ b/xmake/modules/package/manager/find_package.lua
@@ -29,6 +29,12 @@ import("core.project.config")
import("lib.detect.cache")
-- find package
+--
+-- opt.system:
+-- nil: find local or system packages
+-- true: only find system package
+-- false: only find local packages
+--
function _find_package(manager_name, package_name, opt)
-- get managers
@@ -36,22 +42,65 @@ function _find_package(manager_name, package_name, opt)
if manager_name then
table.insert(managers, manager_name)
else
- if not is_host("windows") then
- table.insert(managers, "brew")
+
+ -- we cannot find it from xmake repo and package directories if only find system packages
+ if opt.system ~= true then
+ table.insert(managers, "xmake")
+ end
+
+ -- find system package if be not disabled
+ if opt.system ~= false then
+
+ -- find it from homebrew
+ if not is_host("windows") then
+ table.insert(managers, "brew")
+ end
+
+ -- find it from vcpkg
+ table.insert(managers, "vcpkg")
+
+ -- find it from conan
+ table.insert(managers, "conan")
+
+ -- find it from pkg-config
+ table.insert(managers, "pkg-config")
+
+ -- find it from system
+ table.insert(managers, "system")
end
- table.insert(managers, "vcpkg")
- table.insert(managers, "conan")
end
assert(#managers > 0, "no suitable package manager!")
-- find package from the given package manager
+ local result = nil
for _, manager_name in ipairs(managers) do
dprint("finding %s from %s ..", package_name, manager_name)
- local result = import("package.manager." .. manager_name .. ".find_package", {anonymous = true})(package_name, opt)
+ result = import("package.manager." .. manager_name .. ".find_package", {anonymous = true})(package_name, opt)
if result then
- return result
+ break
+ end
+ end
+
+ -- found?
+ if result then
+
+ -- remove repeat
+ result.linkdirs = table.unique(result.linkdirs)
+ result.includedirs = table.unique(result.includedirs)
+
+ -- check valid version
+ if result.version then
+ local version = semver.new(result.version)
+ if version then
+ result.version = version:rawstr()
+ else
+ result.version = nil
+ end
end
end
+
+ -- ok?
+ return result
end
-- find package using the package manager