summaryrefslogtreecommitdiff
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
parent80f6dba52aa17a4900a51f76da7f05cf3d5fa73c (diff)
improve to check multiple targets
-rw-r--r--xmake/actions/run/main.lua4
-rw-r--r--xmake/modules/cli/amalgamate.lua4
-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
-rw-r--r--xmake/plugins/show/info/depgraph.lua4
-rw-r--r--xmake/plugins/show/info/target.lua4
7 files changed, 44 insertions, 71 deletions
diff --git a/xmake/actions/run/main.lua b/xmake/actions/run/main.lua
index d9b5e83d3..f6baa4253 100644
--- a/xmake/actions/run/main.lua
+++ b/xmake/actions/run/main.lua
@@ -29,7 +29,7 @@ import("devel.debugger")
import("async.runjobs")
import("private.action.run.runenvs")
import("private.service.remote_build.action", {alias = "remote_build_action"})
-import("private.detect.check_targetname")
+import("private.detect.check_targetnames")
import("lib.detect.find_tool")
import("private.action.utils", {alias = "action_utils"})
@@ -232,7 +232,7 @@ function _check_targets(targetname, group_pattern)
-- get targets
local targets = {}
if targetname then
- local target = assert(check_targetname(targetname))
+ local target = assert(check_targetnames(targetname))
table.insert(targets, target)
else
for _, target in ipairs(project.ordertargets()) do
diff --git a/xmake/modules/cli/amalgamate.lua b/xmake/modules/cli/amalgamate.lua
index b76f60b6e..293b0c445 100644
--- a/xmake/modules/cli/amalgamate.lua
+++ b/xmake/modules/cli/amalgamate.lua
@@ -24,7 +24,7 @@ import("core.base.graph")
import("core.project.config")
import("core.project.task")
import("core.project.project")
-import("private.detect.check_targetname")
+import("private.detect.check_targetnames")
-- the options
local options =
@@ -160,7 +160,7 @@ function main(...)
-- generate amalgamate code
args.outputdir = args.outputdir or config.builddir()
if args.target then
- local target = assert(check_targetname(args.target))
+ local target = assert(check_targetnames(args.target))
_generate_amalgamate_code(target, args)
else
for _, target in ipairs(project.ordertargets()) do
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
diff --git a/xmake/plugins/show/info/depgraph.lua b/xmake/plugins/show/info/depgraph.lua
index 2c73f3abc..b8107a558 100644
--- a/xmake/plugins/show/info/depgraph.lua
+++ b/xmake/plugins/show/info/depgraph.lua
@@ -23,7 +23,7 @@ import("core.base.option")
import("core.base.json")
import("core.project.config")
import("core.project.project")
-import("private.detect.check_targetname")
+import("private.detect.check_targetnames")
function _collect_target_entry(target)
local deps = {}
@@ -135,7 +135,7 @@ function main(name)
local root_target
if name then
- root_target = assert(check_targetname(name))
+ root_target = assert(check_targetnames(name))
end
local graph = _collect_target_graph(root_target)
diff --git a/xmake/plugins/show/info/target.lua b/xmake/plugins/show/info/target.lua
index 75f31f9a5..099a0419d 100644
--- a/xmake/plugins/show/info/target.lua
+++ b/xmake/plugins/show/info/target.lua
@@ -24,7 +24,7 @@ import("core.base.json")
import("core.base.hashset")
import("core.project.config")
import("core.language.language")
-import("private.detect.check_targetname")
+import("private.detect.check_targetnames")
-- get source info data
function _get_sourceinfo(target, name, item, opt)
@@ -371,7 +371,7 @@ function main(name)
end
assert(name, "please specify the target name, e.g. xmake show --info=target --target=xxx")
- local target = assert(check_targetname(name))
+ local target = assert(check_targetnames(name))
local info = _collect_target_info(target)
if format == "json" then