summaryrefslogtreecommitdiff
path: root/xmake/modules/package/manager/find_package.lua
diff options
context:
space:
mode:
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