So far, the cmake files of Cppcheck needed to be patched in order to
use installed tinyxml2 instead of the bundled version of tinyxml2.
- Introduce the CMake option USE_BUNDLED_TINYXML2 with a default value
of ON. This preserves the behavior as in the past and uses the
bundled version under externals/tinyxml2 by default.
- Usage of the installed tinyxml2 version of a system can be enabled
now using -DUSE_BUNDLED_TINYXML2=OFF as a cmake parameter.
- Some Linux distros do not install tinyxml2*.cmake files, which are
required to find tinyxml2 using find_package().
Try first using find_package(tinyxml2 QUIET) and if this fails, try
again using find_library(tinyxml2_LIBRARY tinyxml2)
- Setting _q_readonly disables the timestamp check of the registered
online-help.qch file
- This enables displaying of Contents and Index of the online help,
even if the timestamp of online-help.qch is slightly different.
Differences in the timestamp can result from packing online-help.qch
in a cab file, when building the installer (1 or 2 seconds) or from
installing the file under a different timezone under Linux etc.
- Remark: Qt 5.14 or newer is required to display Contents or Index,
when the help files are readonly
- getAddonFilePath is used with getDataDir, this works fine
for a local build cppcheck, but not for a system installed one.
As getDataDir reports the location relative to the executable (/usr/bin/)
and the addons are localed in FILESDIR (/usr/share/cppcheck).
Extend the search path by FILESDIR/addons to also make it work for
the installed cppcheck version.
- gui.pro: Update the path of the output file, so that it is also built
inside the help sub-directory (add $$PWD/help/ to the path):
-o $$PWD/help/online-help.qhc
- Use qcollectiongenerator in case of Qt version < 5.12, otherwise
qhelpgenerator
- appveyor.yml: Add %QTDIR%\bin to PATH. This allows qhelpgenerator
or qcollectiongenerator to be found
* compileroptions.cmake: moved common warnings to proper scope and aligned them with other build systems / fixed some -Wrange-loop-construct clang warnings
* compileroptions.cmake: use check_cxx_compiler_flag() via add_compile_options_safe() helper to avoid compiler version checks
* cleaned up compiler options related code in CMake
* moved cmake_minimum_required() and raised to latest 2.8.x version
* use proper compiler version check / print compiler version
* fixed linking of sanitized builds
* added proper version checks to newer Clang warnings and enabled them / moved tinyxml_objs flags to proper compiler
* disabled -Wdeprecated-declarations for Clang
* compileroptions.cmake: removed unnecessary check for clang++ existence - CMAKE_CXX_COMPILER_ID is determined by CMake
* printInfo.cmake: removed unnecessary message for ANALYZE_ADDRESS - LSAN is part of ASAN and enabled by default
* cleaned up if() comparisons in CMake
* added/adjusted TODOs
* add support for selected Visual Studio configurations in the UI and the project file
* skip VS configurations that don't match the one in the project file
* rename xml tags
* disable selected VS config textbox if all VS configs should be analyzed
* on importing a VS project/solution also read all configurations
* add QListWidget for VS configurations
* auto select these configs that were loaded from the cppcheck file
* fine tune UI and handling if no VS solution/project is used
Co-authored-by: Daniel Marjamäki <daniel.marjamaki@gmail.com>
This adds an entry to the "Analysis Log" and prints a message via
`qWarning()` when the execution of an addon fails because either the
process failed to finish normally (for example if python binary is not
found) or because the script has issues (for example because of an
unhandled exception).
The Korean language file was missing the "language" attribute, so it was
no longer updated before.
The Russian language file had the attribute "sourcelanguage" set to
"ru_RU" which does not make sense and led to some wrong/strange entries.
The France and Korean translation files were missing the "location"
entries, so the GUI-preview with the translated text was not shown and
there were no references to the source-code.
All these errors are fixed.
For the German file I translated the new hint about addons requiring
Python being installed.
* cppcheck.cpp: Check for JSON error when parsing addon .json files
This fixes that errors in JSON files given via `--addon=*.json` are
silently ignored and maybe only a part of the JSON file is used.
Now the error message which picojson can return is checked and a
corresponding error message is returned again by getAddonInfo().
* naming.json: Fix missing comma
* CLI: Fix naming violations detected by addon naming.py via naming.json
* Addon naming: Add argument for validating names of constants
* LIB: Rename functions/variables so they are valid, loosen naming rules
* GUI: Fix naming violations
This fixes https://trac.cppcheck.net/ticket/9456 (Tell the user that the
addons require Python) regarding the GUI. Whether it is useful/necessary
to add something similar for the CLI must still be checked.
* Add impossible category
* Replace values
* Try to adjust known values
* Add ! for impossible values
* Add impossible with possible values
* Remove contradictions
* Add values when the branch is not dead
* Only copy possible values
* Dont bail on while loops
* Load std lib in valueflow
* Check for function calls
* Fix stl errors
* Fix incorrect impossible check
* Fix heap-after-use error
* Remove impossible values when they are lowered
* Show the bound and remove overlaps
* Infer conditions
* Dont push pointer values through dynamic_cast
* Add test for dynamic_cast issue
* Add shifttoomanybits test
* Add test for div by zero
* Add a test for issue 9315
* Dont make impossible value inconclusive
* Fix FP with shift operator
* Improve handleKnownValuesInLoop for impossible values
* Fix cppcheck warning
* Fix impossible values for ctu
* Bailout for streams
* Check equality conditions
* Fix overflows
* Add regression test for 9332
* Remove duplicate conditions
* Skip impossible values for invalid value
* Check for null
* Rename bound to range
* Formatting
Previous commit had updated declarations in Code Editor Style Dialog to use
const QColor& and const QFont::Weight& variables. This change was not totally
complete as const usage was not propagated to Signal/Slot connect statements.
This commit corrects that oversight.
* add MATCHCOMPILER=yes flag into readme in Japanese
* remove Donations from readmeja.md
* add cmake instructions in Japanese
* minor improvement in Japanese
* add Japanese translation on gui/cppcheck_ja.ts
Further to pull request #1938. Changes were missed in previous commit.
Resolve warnings `warning: zero as null pointer constant` in code by
using C++ 11 recommended `nullptr`.
Sources were built with Clang but with increased verbosity of error detection.
A number of syntax and semantic warnings were encountered. Commit adds
changes to correct these warnings.
Some changes involve removing extra, and unncessary, semi-colons at EOL
(e.g. at end of switch clause).
Project astyle settings are not currently setup to detect if a file is to
have an extra carriage return after the last line of data. Two files were
altered to ensure an extra carriage return.
An advisory to enhance code was encountered in triage code. Clang advisory
on a for-loop interation value suggested that:
`use reference type 'const QString &' to prevent copying`
Building with enhanced clang warnings indicated a large number of
instances with the warning:
`warning: zero as null pointer constant`
Recommended practice in C++11 is to use `nullptr` as value for
a NULL or empty pointer value. All instances where this warning
was encountered were corrected in this commit.
Where warning was encountered in dependency code (i.e. external library)
no chnages were made. Patching will be offered upstream.
Functionality for `copy` and `select all` text already exists as part
of widget construction. Commit adds connection of those existing
functions to execution with keyboard shortcuts user would normally expect.
(e.g. CTRL+C for copy text)
Qt does translation of keyboard shortcuts for platform
(i.e. Mac OS uses command key rather than control).
Building on #1874, commit adds user controls to choose
or edit style in cppcheck-gui ONLY. Commit does not
address CodeEditor style usage in triage app at this time.
Code Editor style can be altered from the added "Code Editor"
tab in the user preferences. The user has the option to select
default light, default dark, or to customize.
If user leaves the style set to light or dark defaults, this
will be reflected in the choices shown in the preferences
dialog.
User choice for Code Editor Style is saved in the cppcheck-gui
preferences under the heading "EditorStyle".
* CodeEditor Widget Styling
With profileration of Qt5 styling methods, problems with presentation
can occur when using cppcheck-gui and user choosen themes. With a dark
theme, a highlighted line in the CodeEditor appears with white text on
a light background or dark colors on a dark background.
Commit makes changes to enforce a default style on the Code Editor widget.
Mechanism is provided, if desired, where a user defined styling can
be provided to CodeEditor widget.
* CodeEditor Widget Styling
With profileration of Qt5 styling methods, problems with presentation
can occur when using cppcheck-gui and user choosen themes. With a dark
theme, a highlighted line in the CodeEditor appears with white text on
a light background or dark colors on a dark background.
Commit makes changes to enforce a default style on the Code Editor widget.
Mechanism is provided, if desired, where a user defined styling can
be provided to CodeEditor widget.
2nd commit - remove declarations in gui/codeeditorstyle.h to possibly
resolve appveyor window builds.
Compile of gui would result in repeated warnings from two conditions:
1) gui/erroritem.h:104:30: warning: extra ‘;’ [-Wpedantic]
Message points to Qt Macro Q_DECLARE_METATYPE usage.
Semi Colon at EOL removed.
2) gui/resultstree.h:201:10: warning [-Woverloaded-virtual]
Message is indicating that function ResultsTree::selectionChanged
is being iterpreted as overloading function of the same name
in base clase (QTreeView::selectionChanged).
Refactored - function renamed to ResultsTree::treeSelectionChanged
Update CMake search for Qt5 componets to be consistent
with recommended practice from Kitware.
(see https://blog.kitware.com/cmake-finding-qt5-the-right-way/)
Incorporate ability to build cppcheck-gui with Qt Charts
via CMake switch. Option "WITH_QCHARTS" will enable
search for Qt Charts to Qt5 component search and add
build flag "HAVE_QCHART".
- CLI: Save the libraries that should be loaded to a list and load them
after the std.cfg has been loaded.
- GUI: Load std.cfg (and windows.cfg / posix.cfg when applicable) before
setting other options and loading the other libraries.
In the project-file-dialog the std.cfg is searched first. If some
other library fails to load is is retried with first loading std.cfg.
- boost.cfg: Enable containers that depend on std containers.
The function “QListWidget::takeItem” is documented in the way
that a null pointer can be returned. This result was not checked
by the function “ProjectFileDialog::removeSuppression” so far.
Thus add a corresponding check so that an inappropriate pointer access
should not happen any more here.
Link: https://sourceforge.net/p/cppcheck/discussion/development/thread/d1d0b65245/#a1bf
Link: https://trac.cppcheck.net/ticket/8814
Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>
Dynamic memory allocation was used for a XmlReportV2 object
in the function “ResultsView::readErrorsXml”.
This object was put on the stack instead so that this software
became a bit safer and more efficient.
Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>
[gui/projectfiledialog.h:283]: (performance) Function parameter 'shortText' should be passed by const reference.
[gui/projectfiledialog.cpp:675]: (performance) Function parameter 'shortText' should be passed by const reference.
also run dmake
* Allow selecting bcb6 projects in "Analyze" -> "Files..."
This change also splits the filters for files which can be analyzed into multiple entries and includes a helper class to construct filter strings.
* move FilterStringBuilder to its own class and document it
* add new files to .pro
* add missing include for Q_DECLARE_TR_FUNCTIONS macro
* re-run astyle
* allow to import bcb6 project when creating a new cppcheck project
exchange class FilterStringBuilder with a toFilterString() helper method
* add missing include
Since the slots (functions) are not existent in the class MainWindow and
Qt complains that it can not connect the slots i guess it has been
forgotten to change the receiver.
The ResultsView class (from which mUI.mResults is an instance) contains
these slots, so i guess they should be connected there.
When starting the application Qt prints this message:
QObject::connect: No such slot CodeEditor::highlightCurrentLine() in
..\gui\codeeditor.cpp:141
And this function really does not exist, i guess it is some relict. If
it is planned to implement it this PR can just be closed.
Platform::loadPlatformFile needs the path to the binary not only the
path to the directory where the binary is in. Otherwise the last
directory could get stripped away and the platform files maybe will not
be found.
When using an absolute path for import project, prepending the current
directory results in an invalid path and the analysis (silently, no
error shown in the GUI) fails.
The checked state of the addon checkboxes is already set in the
updateAddonCheckBox function directly above the removed code. I do not
see any reason to set it again and only for three of the four
checkboxes.
* GUI: Add context menu entry for copying line nr
As requested in ticket 7947 (https://trac.cppcheck.net/ticket/7947) also
copying the line nr is implemented.
* Use early return for the new function and similar ones