diff options
| author | ruki <[email protected]> | 2021-04-24 00:49:25 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2021-04-24 00:49:25 +0800 |
| commit | be945c59d6dd0dbd576b9c94b38a491f018bd940 (patch) | |
| tree | b0ca2a8d13a6e617c4a9630f8fab5ad9ec094a00 | |
| parent | ef43f7e4fce4b57469c14d932e83d6d23348bd05 (diff) | |
fix fetch package
| -rw-r--r-- | xmake/core/package/package.lua | 37 |
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}) |
