Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
..
Failed to load latest commit information.
argparse.py autopep8 formatting
aws.py PEP8 fixes.
ci.py ci.py: minor refactoring
cppcheckdata.py python3 compatibility
daca2-download.py daca: keep files that we can check (see path.cpp).
daca2-report.py daca2-report.py: add missing new line in the generated HTML.
daca2.py Remove iceowl from list of skipped packages. Document the remaining s…
dmake.cpp #6559 Regression/ false positive: Return value of allocation function…
dmake.vcproj Tools: Update VS project file.
extracttests.py Updated copyright year to 2015
matchcompiler.py matchcompiler: pep8 fixes
parse-glibc.py add parse-glibc script that match annotations in system headers again…
readme.md Fixed typo in travis script and tools/readme.md, no functional change.
reduce.cpp Updated copyright year to 2015
test_matchcompiler.py Match compiler: Support match patterns with escaped quotes
test_showtimetop5.sh Trim tailing spaces and convert tabs to spaces.
times-tags.sh make tools/times-tags.sh and tools/times.sh executable (mode 755).
times.c tools/times: modified script to allow longer dataseries
times.sh times.sh: create a variable which can be changed to alter the iterati…
tools.pro Add general PRO file for console builds.

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.

Something went wrong with that request. Please try again.