summaryrefslogtreecommitdiff
path: root/xmake/modules/private
diff options
context:
space:
mode:
authorruki <[email protected]>2026-06-18 21:00:07 +0800
committerruki <[email protected]>2026-06-18 21:00:07 +0800
commit43a4e2c277d003251f476e8aa5b2f0efbe2f3ae7 (patch)
tree140c4f0a1376cfde9cef98b33dd66361183661c6 /xmake/modules/private
parent80f6dba52aa17a4900a51f76da7f05cf3d5fa73c (diff)
improve to check multiple targets
Diffstat (limited to 'xmake/modules/private')
-rw-r--r--xmake/modules/private/action/utils.lua4
-rw-r--r--xmake/modules/private/detect/check_targetname.lua56
-rw-r--r--xmake/modules/private/detect/check_targetnames.lua39
3 files changed, 36 insertions, 63 deletions
diff --git a/xmake/modules/private/action/utils.lua b/xmake/modules/private/action/utils.lua
index 24a5e3a46..39045d204 100644
--- a/xmake/modules/private/action/utils.lua
+++ b/xmake/modules/private/action/utils.lua
@@ -74,9 +74,9 @@ end
function get_targets(targetnames, opt)
opt = opt or {}
- -- select the explicitly given targets
+ -- select the explicitly given targets (table.wrap to always get a list back)
if type(targetnames) == "table" or (type(targetnames) == "string" and not targetnames:startswith("__")) then
- return assert(check_targetnames(targetnames))
+ return assert(check_targetnames(table.wrap(targetnames)))
end
-- otherwise select the default/all/group targets
diff --git a/xmake/modules/private/detect/check_targetname.lua b/xmake/modules/private/detect/check_targetname.lua
deleted file mode 100644
index 13a04c580..000000000
--- a/xmake/modules/private/detect/check_targetname.lua
+++ /dev/null
@@ -1,56 +0,0 @@
---!A cross-platform build utility based on Lua
---
--- Licensed under the Apache License, Version 2.0 (the "License");
--- you may not use this file except in compliance with the License.
--- You may obtain a copy of the License at
---
--- http://www.apache.org/licenses/LICENSE-2.0
---
--- Unless required by applicable law or agreed to in writing, software
--- distributed under the License is distributed on an "AS IS" BASIS,
--- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
--- See the License for the specific language governing permissions and
--- limitations under the License.
---
--- Copyright (C) 2015-present, Xmake Open Source Community.
---
--- @author Shiffted
--- @file check_targetname.lua
---
-
--- imports
-import("core.project.project")
-import("private.detect.find_similar_targetnames")
-
--- check if a target name is valid
---
--- @param targetname the target name to check for
--- @param opt the argument options, e.g. {find_similar = false, max_similar = 5}
--- @return target or nil, errors
---
--- @code
---
--- local target, errors = check_targetname("mytarget")
--- local target, errors = check_targetname("mytarget", {find_similar = false})
---
--- @endcode
---
-function main(targetname, opt)
- opt = opt or {}
-
- local target = project.target(targetname)
- if target then
- return target
- end
-
- local errors = "'" .. targetname .. "' is not a valid target name for this project."
- if opt.find_similar ~= false then
- local matching_targetnames = find_similar_targetnames(targetname)
- if #matching_targetnames > 0 then
- local max_index = math.min(#matching_targetnames, opt.max_similar or 14)
- errors = errors .. "\nValid target names closest to input:\n - "
- .. table.concat(matching_targetnames, '\n - ', 1, max_index)
- end
- end
- return nil, errors
-end
diff --git a/xmake/modules/private/detect/check_targetnames.lua b/xmake/modules/private/detect/check_targetnames.lua
index 7c7f1b56a..a4d3c3fc8 100644
--- a/xmake/modules/private/detect/check_targetnames.lua
+++ b/xmake/modules/private/detect/check_targetnames.lua
@@ -19,29 +19,58 @@
--
-- imports
-import("private.detect.check_targetname")
+import("core.project.project")
+import("private.detect.find_similar_targetnames")
+
+-- check if a single target name is valid
+function _check_targetname(targetname, opt)
+ local target = project.target(targetname)
+ if target then
+ return target
+ end
+
+ local errors = "'" .. targetname .. "' is not a valid target name for this project."
+ if opt.find_similar ~= false then
+ local matching_targetnames = find_similar_targetnames(targetname)
+ if #matching_targetnames > 0 then
+ local max_index = math.min(#matching_targetnames, opt.max_similar or 14)
+ errors = errors .. "\nValid target names closest to input:\n - "
+ .. table.concat(matching_targetnames, '\n - ', 1, max_index)
+ end
+ end
+ return nil, errors
+end
-- check if the given target names are valid
--
+-- it accepts either a single target name or a list of target names. for a single
+-- target name (string), it returns the single matching target; for a list, it
+-- returns the matching targets as a list.
+--
-- @param targetnames a single target name or a list of target names to check for
-- @param opt the argument options, e.g. {find_similar = false, max_similar = 5}
--- @return targets or nil, errors
+-- @return target(s) or nil, errors
--
-- @code
--
--- local targets, errors = check_targetnames("mytarget")
--- local targets, errors = check_targetnames({"target1", "target2"})
+-- local target = assert(check_targetnames("mytarget"))
+-- local targets = assert(check_targetnames({"target1", "target2"}))
--
-- @endcode
--
function main(targetnames, opt)
+ opt = opt or {}
local targets = {}
for _, targetname in ipairs(table.wrap(targetnames)) do
- local target, errors = check_targetname(targetname, opt)
+ local target, errors = _check_targetname(targetname, opt)
if not target then
return nil, errors
end
table.insert(targets, target)
end
+ -- unwrap to a single target if a single target name is given
+ if type(targetnames) ~= "table" then
+ return targets[1]
+ end
return targets
end