summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMauro Tortonesi <[email protected]>2022-11-03 17:09:14 +0100
committerMauro Tortonesi <[email protected]>2022-11-03 17:09:14 +0100
commit4be10d436233bd7dffc0c91f5c5bd2d0806156ba (patch)
tree1eb7babab534408e4857b9bdede1dc4a751a795e
parent60b8a7e7b06b4f964c07a8e784832883c3073a83 (diff)
Fix sandbox_lib_detect_find_path._find function.
Function sandbox_lib_detect_find_path._find function currently searches the first occurrence of substring path.pattern(path.translate(name)) within filepath. This behavior breaks in case one wants, e.g., to find packages named libsomething. The correct behavior would be to find the last occurrence of substring path.pattern(path.translate(name)) within filepath. Hence this patch.
-rw-r--r--xmake/core/sandbox/modules/import/lib/detect/find_path.lua13
1 files changed, 12 insertions, 1 deletions
diff --git a/xmake/core/sandbox/modules/import/lib/detect/find_path.lua b/xmake/core/sandbox/modules/import/lib/detect/find_path.lua
index d881d1072..98edd8aa4 100644
--- a/xmake/core/sandbox/modules/import/lib/detect/find_path.lua
+++ b/xmake/core/sandbox/modules/import/lib/detect/find_path.lua
@@ -37,7 +37,18 @@ function sandbox_lib_detect_find_path._find(filedir, name)
local filepath = results[1]
if filepath then
-- we need translate name first, https://github.com/xmake-io/xmake-repo/issues/1315
- local p = filepath:find(path.pattern(path.translate(name)))
+ local to_search = path.pattern(path.translate(name))
+
+ -- need to find the last occurrence of substring to_search within filepath
+ local last_index = 0
+ local idx = 0
+ while true do
+ idx = filepath:find(to_search, idx+1)
+ if idx == nil then break end
+ last_index = idx
+ end
+
+ local p = filepath:find(to_search, last_index)
if p then
filepath = path.translate(filepath:sub(1, p - 1))
if os.isdir(filepath) then