diff options
| author | ruki <[email protected]> | 2023-02-21 09:54:49 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2023-02-21 09:54:49 +0800 |
| commit | 8ea58baa753ebcbfce5cd434a92e3dd369da0e0d (patch) | |
| tree | 70a852b2c674ea283b873732dbbb44969a47d987 /xmake/plugins | |
| parent | 775cc38c761e02fa3ff4825eabca344b98c75b78 (diff) | |
| parent | 0fc0959c413b6cb1900f59fee403502f7b8ae2e8 (diff) | |
Merge pull request #3397 from xmake-io/check
Improve check and add devlink checker
Diffstat (limited to 'xmake/plugins')
31 files changed, 5 insertions, 1168 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.", diff --git a/xmake/plugins/project/cmake/cmakelists.lua b/xmake/plugins/project/cmake/cmakelists.lua index 945b280bd..b3d614985 100644 --- a/xmake/plugins/project/cmake/cmakelists.lua +++ b/xmake/plugins/project/cmake/cmakelists.lua @@ -345,7 +345,7 @@ function _add_target_sources(cmakelists, target, outputdir) cmakelists:print(")") if has_cuda then cmakelists:print("set_target_properties(%s PROPERTIES CUDA_SEPARABLE_COMPILATION ON)", target:name()) - local devlink = target:values("cuda.build.devlink") + local devlink = target:policy("build.cuda.devlink") or target:values("cuda.build.devlink") if devlink ~= nil then cmakelists:print("set_target_properties(%s PROPERTIES CUDA_RESOLVE_DEVICE_SYMBOLS %s)", target:name(), devlink and "ON" or "OFF") end diff --git a/xmake/plugins/project/vstudio/impl/vs201x.lua b/xmake/plugins/project/vstudio/impl/vs201x.lua index 3ba257720..4811a0f74 100644 --- a/xmake/plugins/project/vstudio/impl/vs201x.lua +++ b/xmake/plugins/project/vstudio/impl/vs201x.lua @@ -316,7 +316,7 @@ function _make_targetinfo(mode, arch, target, vcxprojdir) targetinfo.culinkflags = linkinst:linkflags({target = target}) -- save cuda devlink status - targetinfo.cudevlink = target:values("cuda.build.devlink") + targetinfo.cudevlink = target:policy("build.cuda.devlink") or target:values("cuda.build.devlink") end -- save execution dir (when executed from VS) |
