diff options
| author | ruki <[email protected]> | 2023-02-21 00:43:15 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2023-02-21 00:43:15 +0800 |
| commit | e0ac2fd899e03be83ad506616e0dab931ea69969 (patch) | |
| tree | 5da4d14711ef983727061071c872ef836f7b960b /xmake/modules/private/check/checker.lua | |
| parent | 559f90b555e5227716a6762d545c9c2171fef55c (diff) | |
move checker
Diffstat (limited to 'xmake/modules/private/check/checker.lua')
| -rw-r--r-- | xmake/modules/private/check/checker.lua | 105 |
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 |
