summaryrefslogtreecommitdiff
path: root/xmake/plugins/check
diff options
context:
space:
mode:
authorruki <[email protected]>2023-02-21 09:54:49 +0800
committerGitHub <[email protected]>2023-02-21 09:54:49 +0800
commit8ea58baa753ebcbfce5cd434a92e3dd369da0e0d (patch)
tree70a852b2c674ea283b873732dbbb44969a47d987 /xmake/plugins/check
parent775cc38c761e02fa3ff4825eabca344b98c75b78 (diff)
parent0fc0959c413b6cb1900f59fee403502f7b8ae2e8 (diff)
Merge pull request #3397 from xmake-io/check
Improve check and add devlink checker
Diffstat (limited to 'xmake/plugins/check')
-rw-r--r--xmake/plugins/check/checker.lua103
-rw-r--r--xmake/plugins/check/checkers/api/api_checker.lua128
-rw-r--r--xmake/plugins/check/checkers/api/target/asflags.lua33
-rw-r--r--xmake/plugins/check/checkers/api/target/cflags.lua33
-rw-r--r--xmake/plugins/check/checkers/api/target/configfiles.lua32
-rw-r--r--xmake/plugins/check/checkers/api/target/cxflags.lua33
-rw-r--r--xmake/plugins/check/checkers/api/target/cxxflags.lua33
-rw-r--r--xmake/plugins/check/checkers/api/target/exceptions.lua26
-rw-r--r--xmake/plugins/check/checkers/api/target/files.lua32
-rw-r--r--xmake/plugins/check/checkers/api/target/fpmodels.lua26
-rw-r--r--xmake/plugins/check/checkers/api/target/frameworkdirs.lua31
-rw-r--r--xmake/plugins/check/checkers/api/target/headerfiles.lua33
-rw-r--r--xmake/plugins/check/checkers/api/target/includedirs.lua31
-rw-r--r--xmake/plugins/check/checkers/api/target/installfiles.lua33
-rw-r--r--xmake/plugins/check/checkers/api/target/kind.lua26
-rw-r--r--xmake/plugins/check/checkers/api/target/languages.lua40
-rw-r--r--xmake/plugins/check/checkers/api/target/ldflags.lua35
-rw-r--r--xmake/plugins/check/checkers/api/target/linkdirs.lua31
-rw-r--r--xmake/plugins/check/checkers/api/target/optimize.lua26
-rw-r--r--xmake/plugins/check/checkers/api/target/packages.lua32
-rw-r--r--xmake/plugins/check/checkers/api/target/shflags.lua35
-rw-r--r--xmake/plugins/check/checkers/api/target/strip.lua26
-rw-r--r--xmake/plugins/check/checkers/api/target/symbols.lua33
-rw-r--r--xmake/plugins/check/checkers/api/target/vectorexts.lua26
-rw-r--r--xmake/plugins/check/checkers/api/target/version.lua41
-rw-r--r--xmake/plugins/check/checkers/api/target/warnings.lua26
-rw-r--r--xmake/plugins/check/checkers/clang/tidy.lua179
-rw-r--r--xmake/plugins/check/main.lua4
-rw-r--r--xmake/plugins/check/xmake.lua2
29 files changed, 3 insertions, 1166 deletions
diff --git a/xmake/plugins/check/checker.lua b/xmake/plugins/check/checker.lua
deleted file mode 100644
index a6b8bb995..000000000
--- a/xmake/plugins/check/checker.lua
+++ /dev/null
@@ -1,103 +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, 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."},
- ["api.target.strip"] = {description = "Check strip configuration in target."},
- ["api.target.optimize"] = {description = "Check optimize configuration in target."},
- ["api.target.symbols"] = {description = "Check symbols configuration in target."},
- ["api.target.fpmodels"] = {description = "Check fpmodels configuration in target."},
- ["api.target.warnings"] = {description = "Check warnings configuration in target."},
- ["api.target.languages"] = {description = "Check languages configuration in target."},
- ["api.target.vectorexts"] = {description = "Check vectorexts configuration in target."},
- ["api.target.exceptions"] = {description = "Check exceptions configuration in target."},
- ["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."},
- ["api.target.includedirs"] = {description = "Check includedirs configuration in target."},
- ["api.target.frameworkdirs"] = {description = "Check frameworkdirs configuration in target."},
- ["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."},
- -- 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
diff --git a/xmake/plugins/check/checkers/api/api_checker.lua b/xmake/plugins/check/checkers/api/api_checker.lua
deleted file mode 100644
index 60bdeac8c..000000000
--- a/xmake/plugins/check/checkers/api/api_checker.lua
+++ /dev/null
@@ -1,128 +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, TBOOX Open Source Group.
---
--- @author ruki
--- @file api_checker.lua
---
-
--- imports
-import("core.base.option")
-import("core.base.hashset")
-import("core.project.project")
-import("..checker")
-
--- get the most probable value
-function _get_most_probable_value(value, valueset)
- local result
- local mindist
- for v in valueset:keys() do
- local dist = value:levenshtein(v)
- if not mindist or dist < mindist then
- mindist = dist
- result = v
- end
- end
- return result
-end
-
--- show result
-function _show(apiname, value, target, opt)
- opt = opt or {}
-
- -- match level? verbose: note/warning/error, default: warning/error
- local level = opt.level
- if not option.get("verbose") and level == "note" then
- return
- end
-
- -- get source information
- local sourceinfo = target:sourceinfo(apiname, value) or {}
- local sourcetips = sourceinfo.file or ""
- if sourceinfo.line then
- sourcetips = sourcetips .. ":" .. (sourceinfo.line or -1) .. ": "
- end
- if #sourcetips == 0 then
- sourcetips = string.format("target(%s)", target:name())
- end
-
- -- do show
- local level_tips = "note"
- if level == "warning" then
- level_tips = "${color.warning}${text.warning}${clear}"
- elseif level == "error" then
- level_tips = "${color.error}${text.error}${clear}"
- end
- if apiname:endswith("s") then
- apiname = apiname:sub(1, #apiname - 1)
- end
- _g.showed = _g.showed or {}
- local showed = _g.showed
- local infostr
- if opt.showstr then
- infostr = string.format("%s%s: %s", sourcetips, level_tips, opt.showstr)
- else
- infostr = string.format("%s%s: unknown %s value '%s'", sourcetips, level_tips, apiname, value)
- end
- if opt.valueset then
- local probable_value = _get_most_probable_value(value, opt.valueset)
- if probable_value then
- infostr = string.format("%s, it may be '%s'", infostr, probable_value)
- end
- end
- if not showed[infostr] then
- cprint(infostr)
- showed[infostr] = true
- return true
- end
-end
-
--- check api configuration in targets
-function check_targets(apiname, opt)
- opt = opt or {}
- local level = opt.level or "warning"
- local valueset
- if opt.values and type(opt.values) ~= "function" then
- valueset = hashset.from(opt.values)
- else
- valueset = hashset.new()
- end
- for _, target in pairs(project.targets()) do
- local target_valueset = valueset
- if type(opt.values) == "function" then
- local target_values = opt.values(target)
- if target_values then
- target_valueset = hashset.from(target_values)
- end
- end
- local values = target:get(apiname)
- for _, value in ipairs(values) do
- if opt.check then
- local ok, errors = opt.check(target, value)
- if not ok then
- local reported = _show(apiname, value, target, {showstr = errors, level = level})
- if reported then
- checker.update_stats(level)
- end
- end
- elseif not target_valueset:has(value) then
- local reported = _show(apiname, value, target, {valueset = target_valueset, level = level})
- if reported then
- checker.update_stats(level)
- end
- end
- end
- end
-end
diff --git a/xmake/plugins/check/checkers/api/target/asflags.lua b/xmake/plugins/check/checkers/api/target/asflags.lua
deleted file mode 100644
index ad98a329b..000000000
--- a/xmake/plugins/check/checkers/api/target/asflags.lua
+++ /dev/null
@@ -1,33 +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, TBOOX Open Source Group.
---
--- @author ruki
--- @file asflags.lua
---
-
--- imports
-import("core.tool.compiler")
-import(".api_checker")
-
-function main()
- api_checker.check_targets("asflags", {check = function(target, value)
- local compinst = target:compiler("as")
- if not compinst:has_flags(value) then
- return false, string.format("%s: unknown assembler flag '%s'", compinst:name(), value)
- end
- return true
- end})
-end
diff --git a/xmake/plugins/check/checkers/api/target/cflags.lua b/xmake/plugins/check/checkers/api/target/cflags.lua
deleted file mode 100644
index df9a34830..000000000
--- a/xmake/plugins/check/checkers/api/target/cflags.lua
+++ /dev/null
@@ -1,33 +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, TBOOX Open Source Group.
---
--- @author ruki
--- @file cflags.lua
---
-
--- imports
-import("core.tool.compiler")
-import(".api_checker")
-
-function main()
- api_checker.check_targets("cflags", {check = function(target, value)
- local compinst = target:compiler("cc")
- if not compinst:has_flags(value) then
- return false, string.format("%s: unknown c compiler flag '%s'", compinst:name(), value)
- end
- return true
- end})
-end
diff --git a/xmake/plugins/check/checkers/api/target/configfiles.lua b/xmake/plugins/check/checkers/api/target/configfiles.lua
deleted file mode 100644
index 5819278c0..000000000
--- a/xmake/plugins/check/checkers/api/target/configfiles.lua
+++ /dev/null
@@ -1,32 +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, TBOOX Open Source Group.
---
--- @author ruki
--- @file configfiles.lua
---
-
--- imports
-import(".api_checker")
-
-function main()
- api_checker.check_targets("configfiles", {check = function(target, value)
- local configfiles = os.files(value)
- if not configfiles or #configfiles == 0 then
- return false, string.format("configfiles '%s' not found", value)
- end
- return true
- end})
-end
diff --git a/xmake/plugins/check/checkers/api/target/cxflags.lua b/xmake/plugins/check/checkers/api/target/cxflags.lua
deleted file mode 100644
index 9c8df747a..000000000
--- a/xmake/plugins/check/checkers/api/target/cxflags.lua
+++ /dev/null
@@ -1,33 +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, TBOOX Open Source Group.
---
--- @author ruki
--- @file cxflags.lua
---
-
--- imports
-import("core.tool.compiler")
-import(".api_checker")
-
-function main()
- api_checker.check_targets("cxflags", {check = function(target, value)
- local compinst = target:compiler("cxx")
- if not compinst:has_flags(value) then
- return false, string.format("%s: unknown c/c++ compiler flag '%s'", compinst:name(), value)
- end
- return true
- end})
-end
diff --git a/xmake/plugins/check/checkers/api/target/cxxflags.lua b/xmake/plugins/check/checkers/api/target/cxxflags.lua
deleted file mode 100644
index 6756b07d4..000000000
--- a/xmake/plugins/check/checkers/api/target/cxxflags.lua
+++ /dev/null
@@ -1,33 +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, TBOOX Open Source Group.
---
--- @author ruki
--- @file cxxflags.lua
---
-
--- imports
-import("core.tool.compiler")
-import(".api_checker")
-
-function main()
- api_checker.check_targets("cxxflags", {check = function(target, value)
- local compinst = target:compiler("cxx")
- if not compinst:has_flags(value) then
- return false, string.format("%s: unknown c++ compiler flag '%s'", compinst:name(), value)
- end
- return true
- end})
-end
diff --git a/xmake/plugins/check/checkers/api/target/exceptions.lua b/xmake/plugins/check/checkers/api/target/exceptions.lua
deleted file mode 100644
index 551595e7b..000000000
--- a/xmake/plugins/check/checkers/api/target/exceptions.lua
+++ /dev/null
@@ -1,26 +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, TBOOX Open Source Group.
---
--- @author ruki
--- @file exceptions.lua
---
-
--- imports
-import(".api_checker")
-
-function main()
- api_checker.check_targets("exceptions", {values = {"none", "cxx", "objc", "no-cxx", "no-objc"}})
-end
diff --git a/xmake/plugins/check/checkers/api/target/files.lua b/xmake/plugins/check/checkers/api/target/files.lua
deleted file mode 100644
index dfc4eda89..000000000
--- a/xmake/plugins/check/checkers/api/target/files.lua
+++ /dev/null
@@ -1,32 +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, TBOOX Open Source Group.
---
--- @author ruki
--- @file files.lua
---
-
--- imports
-import(".api_checker")
-
-function main()
- api_checker.check_targets("files", {check = function(target, value)
- local files = os.files(value)
- if not files or #files == 0 then
- return false, string.format("files '%s' not found", value)
- end
- return true
- end})
-end
diff --git a/xmake/plugins/check/checkers/api/target/fpmodels.lua b/xmake/plugins/check/checkers/api/target/fpmodels.lua
deleted file mode 100644
index 25c6c239b..000000000
--- a/xmake/plugins/check/checkers/api/target/fpmodels.lua
+++ /dev/null
@@ -1,26 +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, TBOOX Open Source Group.
---
--- @author ruki
--- @file fpmodels.lua
---
-
--- imports
-import(".api_checker")
-
-function main()
- api_checker.check_targets("fpmodels", {values = {"none", "precise", "fast", "strict", "except", "noexcept"}})
-end
diff --git a/xmake/plugins/check/checkers/api/target/frameworkdirs.lua b/xmake/plugins/check/checkers/api/target/frameworkdirs.lua
deleted file mode 100644
index f21629fe5..000000000
--- a/xmake/plugins/check/checkers/api/target/frameworkdirs.lua
+++ /dev/null
@@ -1,31 +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, TBOOX Open Source Group.
---
--- @author ruki
--- @file frameworkdirs.lua
---
-
--- imports
-import(".api_checker")
-
-function main()
- api_checker.check_targets("frameworkdirs", {check = function(target, value)
- if not os.isdir(value) then
- return false, string.format("frameworkdir '%s' not found", value)
- end
- return true
- end})
-end
diff --git a/xmake/plugins/check/checkers/api/target/headerfiles.lua b/xmake/plugins/check/checkers/api/target/headerfiles.lua
deleted file mode 100644
index 5777f27f8..000000000
--- a/xmake/plugins/check/checkers/api/target/headerfiles.lua
+++ /dev/null
@@ -1,33 +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, TBOOX Open Source Group.
---
--- @author ruki
--- @file headerfiles.lua
---
-
--- imports
-import(".api_checker")
-
-function main()
- api_checker.check_targets("headerfiles", {check = function(target, value)
- value = value:gsub("[()]", "")
- local headerfiles = os.files(value)
- if not headerfiles or #headerfiles == 0 then
- return false, string.format("headerfiles '%s' not found", value)
- end
- return true
- end})
-end
diff --git a/xmake/plugins/check/checkers/api/target/includedirs.lua b/xmake/plugins/check/checkers/api/target/includedirs.lua
deleted file mode 100644
index 5fcafef0f..000000000
--- a/xmake/plugins/check/checkers/api/target/includedirs.lua
+++ /dev/null
@@ -1,31 +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, TBOOX Open Source Group.
---
--- @author ruki
--- @file includedirs.lua
---
-
--- imports
-import(".api_checker")
-
-function main()
- api_checker.check_targets("includedirs", {check = function(target, value)
- if not os.isdir(value) then
- return false, string.format("includedir '%s' not found", value)
- end
- return true
- end})
-end
diff --git a/xmake/plugins/check/checkers/api/target/installfiles.lua b/xmake/plugins/check/checkers/api/target/installfiles.lua
deleted file mode 100644
index cdf0a927e..000000000
--- a/xmake/plugins/check/checkers/api/target/installfiles.lua
+++ /dev/null
@@ -1,33 +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, TBOOX Open Source Group.
---
--- @author ruki
--- @file installfiles.lua
---
-
--- imports
-import(".api_checker")
-
-function main()
- api_checker.check_targets("installfiles", {check = function(target, value)
- value = value:gsub("[()]", "")
- local installfiles = os.files(value)
- if not installfiles or #installfiles == 0 then
- return false, string.format("installfiles '%s' not found", value)
- end
- return true
- end})
-end
diff --git a/xmake/plugins/check/checkers/api/target/kind.lua b/xmake/plugins/check/checkers/api/target/kind.lua
deleted file mode 100644
index e84bf890d..000000000
--- a/xmake/plugins/check/checkers/api/target/kind.lua
+++ /dev/null
@@ -1,26 +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, TBOOX Open Source Group.
---
--- @author ruki
--- @file kind.lua
---
-
--- imports
-import(".api_checker")
-
-function main()
- api_checker.check_targets("kind", {values = {"object", "binary", "static", "shared", "headeronly", "phony"}})
-end
diff --git a/xmake/plugins/check/checkers/api/target/languages.lua b/xmake/plugins/check/checkers/api/target/languages.lua
deleted file mode 100644
index 9831bc2f5..000000000
--- a/xmake/plugins/check/checkers/api/target/languages.lua
+++ /dev/null
@@ -1,40 +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, TBOOX Open Source Group.
---
--- @author ruki
--- @file languages.lua
---
-
--- imports
-import(".api_checker")
-
-function main()
- local values = {
- "ansi", "c89", "c90", "c99", "c11", "c17", "clatest",
- "cxx98", "cxx11", "cxx14", "cxx17", "cxx1z", "cxx20", "cxx2a", "cxx23", "cxx2b", "cxxlatest"
- }
- local languages = {}
- for _, value in ipairs(values) do
- table.insert(languages, value)
- if value:find("xx", 1, true) then
- table.insert(languages, (value:gsub("xx", "++")))
- end
- if value:startswith("c") then
- table.insert(languages, "gnu" .. value:sub(2))
- end
- end
- api_checker.check_targets("languages", {values = languages})
-end
diff --git a/xmake/plugins/check/checkers/api/target/ldflags.lua b/xmake/plugins/check/checkers/api/target/ldflags.lua
deleted file mode 100644
index efe176aa5..000000000
--- a/xmake/plugins/check/checkers/api/target/ldflags.lua
+++ /dev/null
@@ -1,35 +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, TBOOX Open Source Group.
---
--- @author ruki
--- @file ldflags.lua
---
-
--- imports
-import("core.tool.compiler")
-import(".api_checker")
-
-function main()
- api_checker.check_targets("ldflags", {check = function(target, value)
- if target:is_binary() then
- local linker = target:linker()
- if not linker:has_flags(value) then
- return false, string.format("%s: unknown linker flag '%s'", linker:name(), value)
- end
- end
- return true
- end})
-end
diff --git a/xmake/plugins/check/checkers/api/target/linkdirs.lua b/xmake/plugins/check/checkers/api/target/linkdirs.lua
deleted file mode 100644
index 3980f2eae..000000000
--- a/xmake/plugins/check/checkers/api/target/linkdirs.lua
+++ /dev/null
@@ -1,31 +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, TBOOX Open Source Group.
---
--- @author ruki
--- @file linkdirs.lua
---
-
--- imports
-import(".api_checker")
-
-function main()
- api_checker.check_targets("linkdirs", {check = function(target, value)
- if not os.isdir(value) then
- return false, string.format("linkdir '%s' not found", value)
- end
- return true
- end})
-end
diff --git a/xmake/plugins/check/checkers/api/target/optimize.lua b/xmake/plugins/check/checkers/api/target/optimize.lua
deleted file mode 100644
index c8bc6eb60..000000000
--- a/xmake/plugins/check/checkers/api/target/optimize.lua
+++ /dev/null
@@ -1,26 +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, TBOOX Open Source Group.
---
--- @author ruki
--- @file optimize.lua
---
-
--- imports
-import(".api_checker")
-
-function main()
- api_checker.check_targets("optimize", {values = {"none", "fast", "faster", "fastest", "smallest", "aggressive"}})
-end
diff --git a/xmake/plugins/check/checkers/api/target/packages.lua b/xmake/plugins/check/checkers/api/target/packages.lua
deleted file mode 100644
index e34f602db..000000000
--- a/xmake/plugins/check/checkers/api/target/packages.lua
+++ /dev/null
@@ -1,32 +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, TBOOX Open Source Group.
---
--- @author ruki
--- @file packages.lua
---
-
--- imports
-import("core.project.project")
-import(".api_checker")
-
-function main()
- local packages = {}
- local requires = project.required_packages()
- if requires then
- table.join2(packages, table.orderkeys(requires))
- end
- api_checker.check_targets("packages", {values = packages, level = "note"})
-end
diff --git a/xmake/plugins/check/checkers/api/target/shflags.lua b/xmake/plugins/check/checkers/api/target/shflags.lua
deleted file mode 100644
index bb518015a..000000000
--- a/xmake/plugins/check/checkers/api/target/shflags.lua
+++ /dev/null
@@ -1,35 +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, TBOOX Open Source Group.
---
--- @author ruki
--- @file shflags.lua
---
-
--- imports
-import("core.tool.compiler")
-import(".api_checker")
-
-function main()
- api_checker.check_targets("shflags", {check = function(target, value)
- if target:is_shared() then
- local linker = target:linker()
- if not linker:has_flags(value) then
- return false, string.format("%s: unknown linker flag '%s'", linker:name(), value)
- end
- end
- return true
- end})
-end
diff --git a/xmake/plugins/check/checkers/api/target/strip.lua b/xmake/plugins/check/checkers/api/target/strip.lua
deleted file mode 100644
index cf14c607b..000000000
--- a/xmake/plugins/check/checkers/api/target/strip.lua
+++ /dev/null
@@ -1,26 +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, TBOOX Open Source Group.
---
--- @author ruki
--- @file strip.lua
---
-
--- imports
-import(".api_checker")
-
-function main()
- api_checker.check_targets("strip", {values = {"none", "debug", "all"}})
-end
diff --git a/xmake/plugins/check/checkers/api/target/symbols.lua b/xmake/plugins/check/checkers/api/target/symbols.lua
deleted file mode 100644
index 8f4472a9b..000000000
--- a/xmake/plugins/check/checkers/api/target/symbols.lua
+++ /dev/null
@@ -1,33 +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, TBOOX Open Source Group.
---
--- @author ruki
--- @file symbols.lua
---
-
--- imports
-import(".api_checker")
-
-function main()
- api_checker.check_targets("symbols", {values = function (target)
- local values = {"none", "debug", "hidden", "hidden_cxx"}
- if target:is_plat("windows") and (target:has_tool("cc", "cl") or target:has_tool("cxx", "cl")) then
- table.insert(values, "edit")
- table.insert(values, "embed")
- end
- return values
- end})
-end
diff --git a/xmake/plugins/check/checkers/api/target/vectorexts.lua b/xmake/plugins/check/checkers/api/target/vectorexts.lua
deleted file mode 100644
index dc6a1a755..000000000
--- a/xmake/plugins/check/checkers/api/target/vectorexts.lua
+++ /dev/null
@@ -1,26 +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, TBOOX Open Source Group.
---
--- @author ruki
--- @file vectorexts.lua
---
-
--- imports
-import(".api_checker")
-
-function main()
- api_checker.check_targets("vectorexts", {values = {"none", "sse", "sse2", "sse3", "ssse3", "avx", "avx2", "neon"}})
-end
diff --git a/xmake/plugins/check/checkers/api/target/version.lua b/xmake/plugins/check/checkers/api/target/version.lua
deleted file mode 100644
index e476cd8d4..000000000
--- a/xmake/plugins/check/checkers/api/target/version.lua
+++ /dev/null
@@ -1,41 +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, TBOOX Open Source Group.
---
--- @author ruki
--- @file version.lua
---
-
--- imports
-import("core.base.semver")
-import(".api_checker")
-
-function main()
- api_checker.check_targets("version", {check = function(target, value)
- local errors
- local ok = try {
- function()
- semver.new(value)
- return true
- end,
- catch {
- function (errs)
- errors = errs
- end
- }
- }
- return ok, errors
- end, level = "error"})
-end
diff --git a/xmake/plugins/check/checkers/api/target/warnings.lua b/xmake/plugins/check/checkers/api/target/warnings.lua
deleted file mode 100644
index 2d2159e91..000000000
--- a/xmake/plugins/check/checkers/api/target/warnings.lua
+++ /dev/null
@@ -1,26 +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, TBOOX Open Source Group.
---
--- @author ruki
--- @file warnings.lua
---
-
--- imports
-import(".api_checker")
-
-function main()
- api_checker.check_targets("warnings", {values = {"none", "less", "more", "all", "allextra", "everything", "error"}})
-end
diff --git a/xmake/plugins/check/checkers/clang/tidy.lua b/xmake/plugins/check/checkers/clang/tidy.lua
deleted file mode 100644
index 9b0d9b21e..000000000
--- a/xmake/plugins/check/checkers/clang/tidy.lua
+++ /dev/null
@@ -1,179 +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, TBOOX Open Source Group.
---
--- @author ruki
--- @file tidy.lua
---
-
--- imports
-import("core.base.option")
-import("core.base.task")
-import("core.project.config")
-import("core.project.project")
-import("lib.detect.find_tool")
-import("private.async.runjobs")
-import("private.action.require.impl.packagenv")
-import("private.action.require.impl.install_packages")
-
--- the clang.tidy options
-local options = {
- {"l", "list", "k", nil, "Show the clang-tidy checks list."},
- {'j', "jobs", "kv", tostring(os.default_njob()),
- "Set the number of parallel check jobs."},
- {nil, "create", "k", nil, "Create a .clang-tidy file."},
- {nil, "configfile", "kv", nil, "Specify the path of .clang-tidy or custom config file"},
- {nil, "checks", "kv", nil, "Set the given checks.",
- "e.g.",
- " - xmake check clang.tidy --checks=\"*\""},
- {'f', "files", "v", nil, "Set files path with pattern",
- "e.g.",
- " - xmake check clang.tidy -f src/main.c",
- " - xmake check clang.tidy -f 'src/*.c" .. path.envsep() .. "src/**.cpp'"},
- {nil, "target", "v", nil, "Check the sourcefiles of the given target.",
- ".e.g",
- " - xmake check clang.tidy",
- " - xmake check clang.tidy [target]"}
-}
-
--- show checks list
-function _show_list(clang_tidy)
- os.execv(clang_tidy, {"--list-checks"})
-end
-
--- create .clang-tidy config file
-function _create_config(clang_tidy, opt)
- local projectdir = project.directory()
- local argv = {"--dump-config"}
- if opt.checks then
- table.insert(argv, "--checks=" .. opt.checks)
- end
- os.execv(clang_tidy, argv, {stdout = path.join(projectdir, ".clang-tidy"), curdir = projectdir})
-end
-
--- add sourcefiles in target
-function _add_target_files(sourcefiles, target)
- table.join2(sourcefiles, (target:sourcefiles()))
-end
-
--- check sourcefile
-function _check_sourcefile(clang_tidy, sourcefile, opt)
- opt = opt or {}
- local projectdir = project.directory()
- local argv = {}
- if opt.checks then
- table.insert(argv, "--checks=" .. opt.checks)
- end
- if opt.compdbfile then
- table.insert(argv, "-p")
- table.insert(argv, opt.compdbfile)
- end
- if opt.configfile then
- table.insert(argv, "--config-file=" .. opt.configfile)
- end
- if not path.is_absolute(sourcefile) then
- sourcefile = path.absolute(sourcefile, projectdir)
- end
- table.insert(argv, sourcefile)
- os.execv(clang_tidy, argv, {curdir = projectdir})
-end
-
--- do check
-function _check(clang_tidy, opt)
- opt = opt or {}
-
- -- generate compile_commands.json first
- local filename = "compile_commands.json"
- local filepath = filename
- if not os.isfile(filepath) then
- local outputdir = os.tmpfile() .. ".dir"
- filepath = outputdir and path.join(outputdir, filename) or filename
- task.run("project", {quiet = true, kind = "compile_commands", lsp = "clangd", outputdir = outputdir})
- end
- opt.compdbfile = filepath
-
- -- get sourcefiles
- local sourcefiles = {}
- if opt.files then
- local files = path.splitenv(opt.files)
- for _, file in ipairs(files) do
- for _, filepath in ipairs(os.files(file)) do
- table.insert(sourcefiles, filepath)
- end
- end
- else
- local targetname = opt.target
- if targetname then
- _add_target_files(sourcefiles, project.target(targetname))
- else
- for _, target in ipairs(project.ordertargets()) do
- _add_target_files(sourcefiles, target)
- end
- end
- end
-
- -- check files
- local jobs = tonumber(opt.jobs or "1")
- runjobs("check_files", function (index)
- local sourcefile = sourcefiles[index]
- if sourcefile then
- _check_sourcefile(clang_tidy, sourcefile, opt)
- end
- end, {total = #sourcefiles,
- comax = jobs,
- isolate = true})
-end
-
-function main(argv)
-
- -- parse arguments
- local args = option.parse(argv or {}, options, "Use clang-tidy to check project code."
- , ""
- , "Usage: xmake check clang.tidy [options]")
-
- -- enter the environments of llvm
- local oldenvs = packagenv.enter("llvm")
-
- -- find clang-tidy
- local packages = {}
- local clang_tidy = find_tool("clang-tidy")
- if not clang_tidy then
- table.join2(packages, install_packages("llvm"))
- end
-
- -- enter the environments of installed packages
- for _, instance in ipairs(packages) do
- instance:envs_enter()
- end
-
- -- we need force to detect and flush detect cache after loading all environments
- if not clang_tidy then
- clang_tidy = find_tool("clang-tidy", {force = true})
- end
- assert(clang_tidy, "clang-tidy not found!")
-
- -- list checks
- if args.list then
- _show_list(clang_tidy.program)
- elseif args.create then
- _create_config(clang_tidy.program, args)
- else
- _check(clang_tidy.program, args)
- end
-
- -- done
- os.setenvs(oldenvs)
-end
-
diff --git a/xmake/plugins/check/main.lua b/xmake/plugins/check/main.lua
index 9ec6d03fd..5ee89ae3e 100644
--- a/xmake/plugins/check/main.lua
+++ b/xmake/plugins/check/main.lua
@@ -22,7 +22,7 @@
import("core.base.option")
import("core.base.text")
import("core.project.config")
-import("checker")
+import("private.check.checker")
-- show checkers list
function _show_list()
@@ -80,7 +80,7 @@ function _check(group_or_name, arguments)
if showstats == nil and info and info.showstats ~= nil then
showstats = info.showstats
end
- import("checkers." .. name, {anonymous = true})(arguments)
+ import("private.check.checkers." .. name, {anonymous = true})(arguments)
end
if showstats ~= false then
checker.show_stats()
diff --git a/xmake/plugins/check/xmake.lua b/xmake/plugins/check/xmake.lua
index d4a7dc19a..08b4cf87d 100644
--- a/xmake/plugins/check/xmake.lua
+++ b/xmake/plugins/check/xmake.lua
@@ -35,7 +35,7 @@ task("check")
"",
"The supported checkers list:",
values = function (complete, opt)
- return import("plugins.check.checker", {rootdir = os.programdir()}).complete(complete, opt)
+ return import("private.check.checker").complete(complete, opt)
end},
{nil, "arguments", "vs", nil, "Set the checker arguments.",
"e.g.",