summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2021-04-24 00:49:25 +0800
committerruki <[email protected]>2021-04-24 00:49:25 +0800
commitbe945c59d6dd0dbd576b9c94b38a491f018bd940 (patch)
treeb0ca2a8d13a6e617c4a9630f8fab5ad9ec094a00
parentef43f7e4fce4b57469c14d932e83d6d23348bd05 (diff)
fix fetch package
-rw-r--r--xmake/core/package/package.lua37
1 files changed, 25 insertions, 12 deletions
diff --git a/xmake/core/package/package.lua b/xmake/core/package/package.lua
index af88f5cdf..7a1c44d7a 100644
--- a/xmake/core/package/package.lua
+++ b/xmake/core/package/package.lua
@@ -1045,15 +1045,17 @@ end
function _instance:_fetch_tool(opt)
opt = opt or {}
local fetchinfo
- local require_version = opt.require_version
- if require_version and not require_version:find(".", 1, true) then
- require_version = nil
- end
local on_fetch = self:script("fetch")
if on_fetch then
fetchinfo = on_fetch(self, {force = opt.force,
system = opt.system,
- require_version = require_version})
+ require_version = opt.require_version})
+ if opt.require_version and not opt.require_version:find(".", 1, true) then
+ local version = type(fetchinfo) == "table" and fetchinfo.version
+ if not (version and (version == opt.require_version or semver.satisfies(version, opt.require_version))) then
+ fetchinfo = nil
+ end
+ end
end
if fetchinfo == nil then
self._find_tool = self._find_tool or sandbox_module.import("lib.detect.find_tool", {anonymous = true})
@@ -1069,7 +1071,7 @@ function _instance:_fetch_tool(opt)
end
end
else
- fetchinfo = self:find_tool(self:name(), {require_version = require_version,
+ fetchinfo = self:find_tool(self:name(), {require_version = opt.require_version,
cachekey = "fetch_package_xmake",
norun = true, -- we need not run it to check for xmake/packages, @see https://github.com/xmake-io/xmake-repo/issues/66
force = opt.force})
@@ -1090,16 +1092,27 @@ end
function _instance:_fetch_library(opt)
opt = opt or {}
local fetchinfo
- local require_version = opt.require_version
- if require_version and not require_version:find(".", 1, true) then
- require_version = nil
- end
local on_fetch = self:script("fetch")
if on_fetch then
fetchinfo = on_fetch(self, {force = opt.force,
system = opt.system,
external = opt.external,
- require_version = require_version})
+ require_version = opt.require_version})
+ if opt.require_version and not opt.require_version:find(".", 1, true) then
+ local version = fetchinfo and fetchinfo.version
+ if not (version and (version == opt.require_version or semver.satisfies(version, opt.require_version))) then
+ fetchinfo = nil
+ end
+ end
+ if fetchinfo then
+ if opt.external then
+ fetchinfo.sysincludedirs = fetchinfo.sysincludedirs or fetchinfo.includedirs
+ fetchinfo.includedirs = nil
+ else
+ fetchinfo.includedirs = fetchinfo.includedirs or fetchinfo.sysincludedirs
+ fetchinfo.sysincludedirs = nil
+ end
+ end
end
if fetchinfo == nil then
if opt.system then
@@ -1115,7 +1128,7 @@ function _instance:_fetch_library(opt)
end
else
fetchinfo = self:find_package("xmake::" .. self:name(), {
- require_version = require_version,
+ require_version = opt.require_version,
cachekey = "fetch_package_xmake",
external = opt.external,
force = opt.force})