cppcheck/tools
Sebastian 53623ddf6f
daca2-getpackages.py: Fix semver sorting and getting latest package (#2490)
There were two issues:
1. The version was not correctly extracted out of the filename. When
extracting a sub-string in Python one has to specify start index and
end index instead of start index and length.
2. The function `semver.cmp()` does nothing useful. Instead the function
`semver.compare()` must be called when two version should be compared.
See https://github.com/python-semver/python-semver/issues/117#issuecomment-479188221

Because `semver.compare()` now really compares the versions it is
possible that an exception is thrown if a version is not in the semver
version format. In such cases the sorting is aborted and the last
filename in the array is returned. This is often but not always already
the latest version from what I have seen.
2020-01-16 20:02:56 +01:00
..
test daca@home client: Require at least Python 3 from now on (#2491) 2020-01-16 20:01:46 +01:00
triage Make triage work with log-files from test-my-pr.py (#2468) 2020-01-03 19:33:42 +01:00
ci.py
clang-ast.cpp
compare-ast-clang-and-cppcheck.py
compare.cs
daca2-download.py Fix daca2 using latest version of package (#2393) 2019-11-24 13:05:21 +01:00
daca2-getpackages.py daca2-getpackages.py: Fix semver sorting and getting latest package (#2490) 2020-01-16 20:02:56 +01:00
daca2-logs2git.sh
dmake.cpp Sync dmake and Makefile (change missing from 3a71eb834d) 2019-12-04 20:27:48 +01:00
dmake.sln dmake: Update Visual Studio solution and project (#2385) 2019-11-21 19:39:19 +01:00
dmake.vcxproj dmake: Update Visual Studio solution and project (#2385) 2019-11-21 19:39:19 +01:00
donate-cpu-server.py donate-cpu-server.py: Set OLD_VERSION to 1.90 2019-12-21 19:12:41 +01:00
donate-cpu.py daca@home client: Require at least Python 3 from now on (#2491) 2020-01-16 20:01:46 +01:00
donate_cpu_lib.py donate_cpu_lib.py: Enable library detection as planned after 1.90 release 2019-12-21 19:26:31 +01:00
extract_and_run_more_tests.sh
extracttests.py Update Copyright year 2019-12-21 11:23:01 +01:00
generate_and_run_more_tests.sh
generate_cfg_tests.cpp
git-pre-commit-cppcheck
listErrorsWithoutCWE.py
matchcompiler.py Remove 'unsigned' in match compiler 2019-07-15 13:49:35 +02:00
parse-glibc.py
pr.py Use library to track container lifetimes 2019-08-15 20:36:25 +02:00
readme.md Update tools/readme.md (#2300) 2019-10-29 20:05:16 +01:00
reduce.py reduce.py: Allow reducing error messages, print output in case of error (#2179) 2019-10-04 21:22:59 +02:00
run-coverity.sh fix run-coverity.sh script. It will run in the cppcheck-devinfo folder from now on. 2019-09-04 17:12:03 +02:00
run_more_tests.sh Make generate_and_run_more_tests happy 2019-08-18 15:13:00 +02:00
test-my-pr.py test-my-pr: Allow work_path to be relative (#2444) 2019-12-12 16:43:40 +01:00
test_matchcompiler.py
test_showtimetop5.sh
testrunnerify_code.sh
times-tags.sh
times-vs.py
times.c
times.sh Makefile: Add one more flag 'MATCHCOMPILER=yes' 2019-06-23 13:43:09 +02:00
trac-keywords.py

readme.md

Cppcheck developer and build tools

* tools/astyle-client.py

With this tool you can astyle-format arbitrary cpp/header files even if you do not have astyle on your computer.

astyle on a server is used.

Example usage:

python tools/astyle-client.py lib/token.cpp

The file is reformatted and a status message is written that says if there were any changes or not.

This script is a lot slower than running astyle locally on your computer.

* 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 MATCHCOMPILER=yes

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.py

Script that reduces code for a hang/false positive.

* tools/times.sh

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

* tools/donate-cpu.py

Script to donate CPU time to Cppcheck project by checking current Debian packages.

* tools/test-my-pr.py

Script to compare result of working Cppcheck from your branch with master branch.

* tools/triage

This tool lets you comfortably look at Cppcheck analysis results for daca packages. It automatically downloads the package, extracts it and jumps to the corresponding source code for a Cppcheck message.