summaryrefslogtreecommitdiff
path: root/xmake/modules/private/check/checker.lua
diff options
context:
space:
mode:
authorruki <[email protected]>2023-02-21 00:43:15 +0800
committerruki <[email protected]>2023-02-21 00:43:15 +0800
commite0ac2fd899e03be83ad506616e0dab931ea69969 (patch)
tree5da4d14711ef983727061071c872ef836f7b960b /xmake/modules/private/check/checker.lua
parent559f90b555e5227716a6762d545c9c2171fef55c (diff)
move checker
Diffstat (limited to 'xmake/modules/private/check/checker.lua')
-rw-r--r--xmake/modules/private/check/checker.lua105
1 files changed, 105 insertions, 0 deletions
diff --git a/xmake/modules/private/check/checker.lua b/xmake/modules/private/check/checker.lua
new file mode 100644
index 000000000..f599b69ca
--- /dev/null
+++ b/xmake/modules/private/check/checker.lua
@@ -0,0 +1,105 @@
+--!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, TBOOX Open Source Group.
+--
+-- @author ruki
+-- @file checker.lua
+--
+
+-- imports
+import("core.base.option")
+
+-- get all checkers
+function checkers()
+ local checkers = _g._CHECKERS
+ if not checkers then
+ checkers = {
+ -- target api checkers
+ ["api.target.version"] = {description = "Check version configuration in target."},
+ ["api.target.kind"] = {description = "Check kind configuration in target.", timely = true},
+ ["api.target.strip"] = {description = "Check strip configuration in target.", timely = true},
+ ["api.target.optimize"] = {description = "Check optimize configuration in target.", timely = true},
+ ["api.target.symbols"] = {description = "Check symbols configuration in target.", timely = true},
+ ["api.target.fpmodels"] = {description = "Check fpmodels configuration in target.", timely = true},
+ ["api.target.warnings"] = {description = "Check warnings configuration in target.", timely = true},
+ ["api.target.languages"] = {description = "Check languages configuration in target.", timely = true},
+ ["api.target.vectorexts"] = {description = "Check vectorexts configuration in target.", timely = true},
+ ["api.target.exceptions"] = {description = "Check exceptions configuration in target.", timely = true},
+ ["api.target.packages"] = {description = "Check packages configuration in target."},
+ ["api.target.files"] = {description = "Check files configuration in target."},
+ ["api.target.headerfiles"] = {description = "Check header files configuration in target."},
+ ["api.target.installfiles"] = {description = "Check install files configuration in target."},
+ ["api.target.configfiles"] = {description = "Check config files configuration in target."},
+ ["api.target.linkdirs"] = {description = "Check linkdirs configuration in target.", timely = true},
+ ["api.target.includedirs"] = {description = "Check includedirs configuration in target.", timely = true},
+ ["api.target.frameworkdirs"] = {description = "Check frameworkdirs configuration in target.", timely = true},
+ ["api.target.cflags"] = {description = "Check c compiler flags configuration in target."},
+ ["api.target.cxflags"] = {description = "Check c/c++ compiler flags configuration in target."},
+ ["api.target.cxxflags"] = {description = "Check c++ compiler flags configuration in target."},
+ ["api.target.asflags"] = {description = "Check assembler flags configuration in target."},
+ ["api.target.ldflags"] = {description = "Check binary linker flags configuration in target."},
+ ["api.target.shflags"] = {description = "Check shared library linker flags configuration in target."},
+ -- cuda checkers
+ ["cuda.devlink"] = {description = "Check devlink for targets.", timely = true},
+ -- clang tidy checker
+ ["clang.tidy"] = {description = "Check project code using clang-tidy.", showstats = false}
+ }
+ _g._CHECKERS = checkers
+ end
+ return checkers
+end
+
+-- complete checkers
+function complete(complete, opt)
+ return try
+ {
+ function ()
+ local list = {}
+ local groupstats = {}
+ for name, _ in table.orderpairs(checkers()) do
+ local groupname = name:split(".", {plain = true})[1]
+ groupstats[groupname] = (groupstats[groupname] or 0) + 1
+ if not complete then
+ local limit = 16
+ if groupstats[groupname] < limit then
+ table.insert(list, name)
+ elseif groupstats[groupname] == limit then
+ table.insert(list, "...")
+ end
+ elseif name:startswith(complete) then
+ table.insert(list, name)
+ end
+ end
+ return list
+ end
+ }
+end
+
+-- update stats
+function update_stats(level, count)
+ local stats = _g.stats
+ if not stats then
+ stats = {}
+ _g.stats = stats
+ end
+ count = count or 1
+ stats[level] = (stats[level] or 0) + count
+end
+
+-- show stats
+function show_stats()
+ local stats = _g.stats or {}
+ cprint("${bright}%d${clear} notes, ${color.warning}%d${clear} warnings, ${color.error}%d${clear} errors", stats.note or 0, stats.warning or 0, stats.error or 0)
+end