summaryrefslogtreecommitdiff
path: root/xmake/core/package/package.lua
diff options
context:
space:
mode:
Diffstat (limited to 'xmake/core/package/package.lua')
-rw-r--r--xmake/core/package/package.lua23
1 files changed, 18 insertions, 5 deletions
diff --git a/xmake/core/package/package.lua b/xmake/core/package/package.lua
index 88a5d07fb..379d1ddea 100644
--- a/xmake/core/package/package.lua
+++ b/xmake/core/package/package.lua
@@ -486,7 +486,7 @@ end
-- is local package?
-- we will use local installdir and cachedir in current project
function _instance:is_local()
- return self:is_embed()
+ return self:is_embed() or self:is_thirdparty()
end
-- is debug package? (deprecated)
@@ -570,10 +570,15 @@ function _instance:cachedir()
cachedir = self:get("cachedir")
if not cachedir then
local name = self:name():lower():gsub("::", "_")
+ local version_str = self:version_str()
+ if self:is_thirdparty() then
+ -- strip `>= <=`
+ version_str = version_str:gsub("[>=<]", "")
+ end
if self:is_local() then
- cachedir = path.join(config.buildir({absolute = true}), ".packages", name:sub(1, 1):lower(), name, self:version_str(), "cache")
+ cachedir = path.join(config.buildir({absolute = true}), ".packages", name:sub(1, 1):lower(), name, version_str, "cache")
else
- cachedir = path.join(package.cachedir(), name:sub(1, 1):lower(), name, self:version_str())
+ cachedir = path.join(package.cachedir(), name:sub(1, 1):lower(), name, version_str)
end
end
self._CACHEDIR = cachedir
@@ -593,8 +598,13 @@ function _instance:installdir(...)
else
installdir = path.join(package.installdir(), name:sub(1, 1):lower(), name)
end
- if self:version_str() then
- installdir = path.join(installdir, self:version_str())
+ local version_str = self:version_str()
+ if version_str then
+ if self:is_thirdparty() then
+ -- strip `>= <=`
+ version_str = version_str:gsub("[>=<]", "")
+ end
+ installdir = path.join(installdir, version_str)
end
installdir = path.join(installdir, self:buildhash())
end
@@ -1054,6 +1064,9 @@ function _instance:buildhash()
-- We cannot directly deserialize the table, so the result may be different each time
local configs_order = {}
for k, v in pairs(table.wrap(configs)) do
+ if type(v) == "table" then
+ v = string.serialize(v, {strip = true, indent = false, orderkeys = true})
+ end
table.insert(configs_order, k .. "=" .. tostring(v))
end
table.sort(configs_order)