cppcheck/tools
Dmitry Marakasov 94d39f6e91 Fix matchcompiler failure in case of parallel build
During parallel build, multiple processes will try to create build_dir
in parallel, so the build will fail. Fix that by calling makedirs
unconditionally and ignoring errors from it. If there's actual
problem with directory creation, it'll be caught later by isdir()
check.
2017-05-20 23:25:52 +02:00
..
ci.py PEP8 fixes. 2015-04-20 21:11:45 +03:00
daca2-addons.py Skip another package in daca2 (gcc-arm) to avoid timeouts 2016-04-25 20:48:11 +02:00
daca2-download.py daca2-download.py: minor tweaks 2016-05-22 16:39:02 +02:00
daca2-report.py Raise file size limit for daca2 from 100kb to 1mb 2016-01-31 21:18:50 +01:00
daca2.py daca2: Use logging module instead of opening/closing results file 2016-12-08 21:18:16 +07:00
dmake.cpp Make tags target phony. Add entry to gitignore 2017-05-20 22:27:49 +02:00
dmake.vcproj Tools: Update VS project file. 2011-08-11 23:40:10 +03:00
extract_and_run_more_tests.sh Testing: extract testcases, edit comparisons, run cppcheck, compare results 2015-07-22 09:52:24 +02:00
extracttests.py Cleanup Copyrights. Now all should be just for Cppcheck team. 2016-01-01 23:04:16 +01:00
generate_and_run_more_tests.sh generate_and_run_more_tests: Add testuninitvar 2015-07-26 11:29:02 +02:00
git-pre-commit-cppcheck git-pre-commit-cppcheck: check only added or modified source files 2016-05-07 19:09:13 +02:00
listErrorsWithoutCWE.py added python script to list in CSV format all errors without a CWE 2016-08-09 23:21:03 +01:00
matchcompiler.py Fix matchcompiler failure in case of parallel build 2017-05-20 23:25:52 +02:00
parse-glibc.py PEP8 fixes. 2015-04-20 21:11:45 +03:00
readme.md PEP8 fixes. 2015-08-21 11:59:52 +03:00
reduce.cpp reduce: fix build, adapt settings. 2017-04-11 12:09:18 +02:00
reduce.py Ran autopep8. 2016-07-25 13:16:55 +03:00
run_more_tests.sh generate_and_run_more_tests.sh: Refactoring 2015-07-22 13:44:08 +02:00
rundaca2.py daca: skip virtuoso-opensource for now since it hangs 2016-10-17 09:48:02 +02:00
test_matchcompiler.py matchcompiler: --show-skipped: print locations of skipped patterns in file:line notation. 2016-11-24 00:36:23 +01:00
test_showtimetop5.sh Correct script 2017-05-03 21:09:20 +02:00
testrunnerify_code.sh fix a couple of issues in shell scripts found by codacy. 2016-12-25 00:43:47 +01:00
times-tags.sh fix a couple of issues in shell scripts found by codacy. 2016-12-25 00:43:47 +01:00
times-vs.py Ran autopep8. 2016-07-25 13:16:55 +03:00
times.c tools/times: modified script to allow longer dataseries 2013-07-21 13:16:34 +02:00
times.sh fix a couple of issues in shell scripts found by codacy. 2016-12-25 00:43:47 +01:00

readme.md

Cppcheck developer and build tools

* tools/matchcompiler.py

The matchcompiler.py is a build script that performs a few code transformations to .cpp files under the lib directory. These transformations are related to the use of Token::Match() function and are intended to improve code performance. The transformed files are saved on the build directory. This tool is silently used when building the code with SRCDIR=build, that is:

$ cd path/to/cppcheck
$ make SRCDIR=build

Here is a simple example of the matchcompiler.py optimization. Suppose there is a file example.cpp under lib/:

// lib/example.cpp
void f1() {
    Token::Match(tok, "abc");
}

void f2() {
    const char *abc = "abc";
    Token::Match(tok, abc);
}

If you manually run matchcompiler.py from the main directory:

$ cd path/to/cppcheck
$ python tools/matchcompiler.py

A file example.cpp will be generated on the build directory:

// build/example.cpp
#include "token.h"
#include "errorlogger.h"
#include <string>
#include <cstring>
static const std::string matchStr1("abc");
// pattern: abc
static bool match1(const Token* tok) {
    if (!tok || !(tok->str()==matchStr1)/* abc */)
        return false;
    return true;
}
void f1() {
    match1(tok);
}

void f2() {
    const char *abc = "abc";
    Token::Match(tok, abc);
}

From this we can see that the usage of Token::Match() in f1() has been optimized, whereas the one in f2() couldn't be optimized (the string wasn't inline on the Token::Match() call). The developer doesn't need to use this tool during development but should be aware of these optimizations. Building with this optimization, cppcheck can get a boost of 2x of speed-up.

* tools/dmake.cpp

Automatically generates the main Makefile for Cppcheck (the main Makefile should not be modified manually). To build and run the dmake tool execute:

$ cd path/to/cppcheck
$ make dmake
$ ./dmake

* tools/reduce.cpp

Cppcheck tool that reduces code for a hang/false positive. To build the tool run:

$ cd path/to/cppcheck
$ make reduce

* tools/times.sh

Script to generate a times.log file that contains timing information of the last 20 revisions.