From 3502036b145cf91a1503f0f046c5e90d4ecdfd54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Fri, 5 Mar 2021 08:39:09 +0100 Subject: [PATCH] Usability: Fixed loading of platform file placed in same path as project file --- cli/cmdlineparser.cpp | 2 +- lib/platform.cpp | 2 ++ test/cli/test-more-projects.py | 29 +++++++++++++++++++++++++++++ 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/cli/cmdlineparser.cpp b/cli/cmdlineparser.cpp index 2f9463afb..b0b3f7527 100644 --- a/cli/cmdlineparser.cpp +++ b/cli/cmdlineparser.cpp @@ -624,7 +624,7 @@ bool CmdLineParser::parseFromArgs(int argc, const char* const argv[]) mSettings->platform(Settings::Native); else if (platform == "unspecified" || platform == "Unspecified" || platform == "") ; - else if (!mSettings->loadPlatformFile(argv[0], platform)) { + else if (!mSettings->loadPlatformFile(projectFile.c_str(), platform) && !mSettings->loadPlatformFile(argv[0], platform)) { std::string message("cppcheck: error: unrecognized platform: \""); message += platform; message += "\"."; diff --git a/lib/platform.cpp b/lib/platform.cpp index 3ba2e6f58..a3b8e7582 100644 --- a/lib/platform.cpp +++ b/lib/platform.cpp @@ -162,6 +162,8 @@ bool cppcheck::Platform::loadPlatformFile(const char exename[], const std::strin std::vector filenames; filenames.push_back(filename + ".xml"); if (exename && (std::string::npos != Path::fromNativeSeparators(exename).find('/'))) { + filenames.push_back(Path::getPathFromFilename(Path::fromNativeSeparators(exename)) + filename); + filenames.push_back(Path::getPathFromFilename(Path::fromNativeSeparators(exename)) + filename); filenames.push_back(Path::getPathFromFilename(Path::fromNativeSeparators(exename)) + "platforms/" + filename); filenames.push_back(Path::getPathFromFilename(Path::fromNativeSeparators(exename)) + "platforms/" + filename + ".xml"); } diff --git a/test/cli/test-more-projects.py b/test/cli/test-more-projects.py index 1516333f8..a29f725c3 100644 --- a/test/cli/test-more-projects.py +++ b/test/cli/test-more-projects.py @@ -32,3 +32,32 @@ def test_project_force_U(): ret, stdout, stderr = cppcheck(['--project=' + compile_commands, '--force', '-UMACRO1', '-rp=' + temp_folder, '--template=cppcheck1']) assert stderr == '[bug1.cpp:2]: (error) Division by zero.\n' + +def test_project_custom_platform(): + """ + import cppcheck project that contains a custom platform file + """ + with tempfile.TemporaryDirectory('10018') as temp_folder: + project_file = os.path.join(temp_folder, 'Project.cppcheck') + + with open(project_file, 'wt') as f: + f.write(""" + + + p1.xml + + + + + """) + + with open(os.path.join(temp_folder, 'p1.xml'), 'wt') as f: + f.write('\n') + + with open(os.path.join(temp_folder, '1.c'), 'wt') as f: + f.write("int x;") + + ret, stdout, stderr = cppcheck(['--project=' + project_file, '--template=cppcheck1']) + assert stderr == '' + +