diff options
| author | ruki <[email protected]> | 2019-01-22 22:39:25 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2019-01-22 09:56:36 +0800 |
| commit | de29dc88bc3b7d39d4206d6e2bd034d15b232ca2 (patch) | |
| tree | f247b2624aafd5a30c0a100de93aaeaf50ff7dce /xmake/modules/package/manager/find_package.lua | |
| parent | c92d87e3b872cd303356112a22190d4858a9fcb3 (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.lua | 61 |
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 |
