Commit Graph

23448 Commits

Author SHA1 Message Date
Sebastian Holtermann
3f22374339 Autogen: Read relative paths from rcc output 2017-09-21 09:58:23 +02:00
Sebastian Holtermann
8bee55bce1 Autogen: In VERBOSE mode print why files are (re)generated 2017-09-20 23:21:01 +02:00
Sebastian Holtermann
15346bec19 Autogen: Refactor cmQtAutoGenerators
The refactoring of cmQtAutoGenerators serializes the program flow and
makes it less jumpy in terms of function calling.
Instead of keeping and passing multiple std::vectors and std::maps in
function arguments, single lists with job descriptions are used,
one job list for MOC, UIC, RCC respectively.
Several utility functions and methods were replaced with scoped lambdas
and the remaining methods were sorted by their scope (MOC, UIC, RCC).

Error and warning messages were refactored to be more verbose
about the problem at hand.

The source parsing algorithms were rewritten in large parts.
In the process a lack of functionality of CMAKE_AUTOMOC_DEPEND_FILTERS
was discovered and fixed. CMAKE_AUTOMOC_DEPEND_FILTERS did not extract
dependency file names from headers that were not in the target sources
but were registered to AUTOMOC by a `#include "moc_<NAME>.cpp"` statement.
A test for this use case is provided in a follow up commit.
2017-09-20 23:21:01 +02:00
Brad King
95df03a1d4 Merge topic 'CTest-cov-string'
062776e7 CTest: pass std::string to cmCTestCoverageHandler::ShouldIDoCoverage()

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !1290
2017-09-20 13:21:58 -04:00
Brad King
1490466bf9 Merge topic 'ninja-performance'
7374cb85 Ninja: Cache ConvertToNinjaPath results to avoid repeat work
ed19e813 Ninja: Improve performance with deeply-dependent custom targets

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !1217
2017-09-20 13:20:46 -04:00
Brad King
be475daa8f Merge topic 'tidy-modernize-loop-convert'
706b37b7 Enable clang-tidy modernize-loop-convert lint

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !1287
2017-09-20 13:18:28 -04:00
Brad King
cb36e91eff Merge topic 'cxx11-nullptr'
a5279ae5 Use C++11 nullptr (cont.)

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !1283
2017-09-20 13:17:25 -04:00
Brad King
c8826fe04f Merge topic 'cxx-checks-tolerate-unused-flag'
71b65abc C++ feature checks: Filter out warnings caused by user flags
eb3abf8b C++ feature checks: Prepare for multiple check output filters

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !1286
2017-09-20 13:16:11 -04:00
Brad King
4f971e700a Merge topic 'CTest-crash-missing-glob'
6db63012 CTest: fix crash if source file for coverage cannot be found

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !1289
2017-09-20 07:46:09 -04:00
Kitware Robot
33ead73d73 CMake Nightly Date Stamp 2017-09-20 00:01:05 -04:00
Matthias Maennich
a5279ae553 Use C++11 nullptr (cont.)
Fix remaining occurrences of the issue addressed in commit 5962db4389
(Use C++11 nullptr, 2017-08-22) that are only showing up on macOS.

Signed-off-by: Matthias Maennich <matthias@maennich.net>
2017-09-19 11:44:21 -04:00
Rolf Eike Beer
062776e75b CTest: pass std::string to cmCTestCoverageHandler::ShouldIDoCoverage()
Avoid needless conversion back and forth.
2017-09-19 17:41:41 +02:00
Rolf Eike Beer
6db6301205 CTest: fix crash if source file for coverage cannot be found
The opened XML elements were not closed, so an assert was triggered when the
file was finally closed. If CMake is built with assertions disabled then an
invalid XML file will be produced.
2017-09-19 17:37:29 +02:00
Matthias Maennich
7374cb857c Ninja: Cache ConvertToNinjaPath results to avoid repeat work
Calls to this method may dominate generation time in some cases.
Measurements for configuring cmake itself show a cache hit rate of ~57%
(7753 total calls, 4453 cache hits).  For a larger project (that also
makes use of custom targets as prerequisite for all compile targets),
the measured cache hit ratio is ~96% (2530827 total calls, 2433124 cache
hits).  For this project the observable cmake runtime could be reduced
from 40s to 30s.

Signed-off-by: Matthias Maennich <matthias@maennich.net>
2017-09-19 11:21:36 -04:00
Matthias Maennich
ed19e8136d Ninja: Improve performance with deeply-dependent custom targets
The commit v3.7.0-rc1~339^2 (Ninja: Fix inter-target order-only
dependencies of custom command, 2016-07-20) might cause performance
degradations for larger projects.  Especially when using custom
commands as an input for each compilation rule (e.g. generated headers).

For reference in the following I am referring to
  Source/cmGlobalNinjaGenerator.cxx:
    -> cmGlobalNinjaGenerator::AppendTargetDependsClosure
    -> cmGlobalNinjaGenerator::ComputeTargetDependsClosure

It turned out that the mentioned commit is doing (indirectly) some
redundant work that might impact performance when generating large
projects.

Imagine the dependency tree of custom targets:

    A
     \
      C - D - E
     /
    B

For each target the transitive closure is calculated recursively, but as
the TargetDependsClosures are only cached on the top most level, everything
downstream has to be recalculated. I.e.

    A->C->D->E
    B->C->D->E

This ultimately leads to a lot of redundant calls to AppendTargetOutputs.
The recursive nature of the algorithm itself is not significant to the
problem, but reducing the work to actually to be done work, eliminates the
performance problem.

This patch changes the way, intermediate results are cached. Rather than
caching the closure of targets, we cache the closure of outputs. Such that
in the example above at B->C the cache already would kick in.

Caching the outputs has one disadvantage that the patch takes care of.
In case of such a structure

    A       E
     \     / \
      C - D   G
     /     \ /
    B       F

the calling order for A would be

    A->C->D->E->G  (at which time G is seen to the recursion)

then the recursion returns until it reaches

    A->C->D->F     (at which the seen G would prevent to recurse down to G)

But this would poison the cache for F with a wrong value (without G).
Hence we use a local result set to ensure the cache is still consistently
populated.

For a large C++ project with around 25k targets this reduced the CMake
configure / generate time from ~40s to ~29s.

Signed-off-by: Matthias Maennich <matthias@maennich.net>
2017-09-19 11:19:34 -04:00
Brad King
706b37b7f5 Enable clang-tidy modernize-loop-convert lint
Fix remaining diagnostics by this lint and remove it from our list of
disabled lints.
2017-09-19 09:32:25 -04:00
Brad King
71b65abca2 C++ feature checks: Filter out warnings caused by user flags
Filter out `-Winvalid-command-line-argument` warnings from Clang (that
can be caused by user-specified flags) so that they do not break our
checks for C++ feature availability.
2017-09-19 09:25:30 -04:00
Brad King
eb3abf8b2b C++ feature checks: Prepare for multiple check output filters 2017-09-19 09:22:54 -04:00
Brad King
4547d9a830 Merge topic 'ranged-for'
f43baf69 Meta: modernize old-fashioned loops to range-based `for` (CPack).

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !1274
2017-09-19 09:07:48 -04:00
Brad King
7c28081c14 Merge topic 'string-clear'
5db3aac1 Meta: replace empty-string assignments with `clear()`.

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !1276
2017-09-19 08:27:00 -04:00
Brad King
8fee054eca Merge topic 'vs-manifestuac-flag-map'
3232f84c VS: Fix MANIFESTUAC link flag map to .vcxproj elements

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !526
2017-09-19 08:25:22 -04:00
Pavel Solodovnikov
f43baf6981 Meta: modernize old-fashioned loops to range-based for (CPack).
Changes done via `clang-tidy` with some manual fine-tuning
for the variable naming and `auto` type deduction
where appropriate.
2017-09-19 08:06:08 -04:00
Kitware Robot
2bfb434e84 CMake Nightly Date Stamp 2017-09-19 00:01:05 -04:00
comicfans
3232f84c19 VS: Fix MANIFESTUAC link flag map to .vcxproj elements
Add special parsing of the flags given in `/MANIFESTUAC:"..."` in order
to map them correctly to `.vcxproj` elements.

Keep the old incorrect flag table entries for `uiAccess` and `level`
flags for compatibility even though they do not really exist.

Fixes: #16563
2017-09-18 11:53:22 -04:00
Brad King
a1cdf537ff Merge topic 'ctest-runcommand'
67529aab Doc: document that CoverageExtraFlags will come first
69fac3c3 pass arguments as vector to cmCTest::RunCommand()

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !1261
2017-09-18 10:16:08 -04:00
Brad King
836f42b3c0 Merge topic 'cmake-gui-high-dpi'
6fb36572 cmake-gui: Enable High DPI scaling

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !1271
2017-09-18 10:08:59 -04:00
Brad King
dd77a2ed4d Merge topic 'libuv-bootstrap'
714ce728 bootstrap: Make libuv available during bootstrap
6a2d967d bootstrap: Require compiler mode aware of C99 on Solaris

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !1131
2017-09-18 10:08:07 -04:00
Brad King
ce4f635409 Merge topic 'cxx11-override'
98530d3c cm_codecvt: Tell IWYU to keep cmConfigure.h
4e14498f Drop now-unused definition of CM_OVERRIDE
0b33aee4 Use C++11 override instead of CM_OVERRIDE

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !1265
2017-09-18 10:06:47 -04:00
Kitware Robot
14ffd3b7e9 CMake Nightly Date Stamp 2017-09-18 00:01:03 -04:00
Brad King
714ce72882 bootstrap: Make libuv available during bootstrap
On UNIX, build only the parts of libuv we need for the filesystem,
process, and poll abstractions using the POSIX poll() backend.  This
avoids many platform-specific conditions.  On Windows, build all of
libuv; there are no conditional alternatives anyway.
2017-09-17 11:10:18 -04:00
Kitware Robot
214d0ce170 CMake Nightly Date Stamp 2017-09-17 00:01:03 -04:00
Kitware Robot
db86cf4e7e CMake Nightly Date Stamp 2017-09-16 00:01:03 -04:00
Pavel Solodovnikov
5db3aac111 Meta: replace empty-string assignments with clear(). 2017-09-16 02:26:49 +03:00
Rolf Eike Beer
69fac3c3d5 pass arguments as vector to cmCTest::RunCommand()
The only 2 callers took care to construct a properly escaped string, but not
using the documented way, and that string was passed only to be immediately
split into tokens again. Start with a vector and join it only for logging,
avoiding needless quotes during that.
2017-09-15 17:50:56 +02:00
Brad King
98530d3c14 cm_codecvt: Tell IWYU to keep cmConfigure.h
We no longer need it explicitly for `CM_OVERRIDE`, but we still need to
include it first everywhere.
2017-09-15 11:41:49 -04:00
Luis Caro
6fb36572dc cmake-gui: Enable High DPI scaling
This Qt flag enables UI scaling based on scale factor provided by the
operating system.  Only supported on versions of Qt >= 5.6.

The flag has no effect on macOS, where high DPI support is already
enabled as a setting in the bundle's info.plist.

Fixes: #17026
2017-09-15 10:54:36 -04:00
Brad King
4e14498f4f Drop now-unused definition of CM_OVERRIDE 2017-09-15 10:06:41 -04:00
Brad King
0b33aee48b Use C++11 override instead of CM_OVERRIDE
We now require C++11 support including `override`.  Drop use of
the old compatibility macro.  Convert references as follows:

    git grep -l CM_OVERRIDE -- '*.h' '*.hxx' '*.cxx' |
      xargs sed -i 's/CM_OVERRIDE/override/g'
2017-09-15 10:06:41 -04:00
Brad King
c0c5f924fe Merge topic 'refactor-iwyu-code'
3bbe95f5 Clean up iwyu code to not be one big if statement.

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !1247
2017-09-15 08:54:32 -04:00
Brad King
188cdb98a7 Merge topic 'codeblocks-exclude-external'
fb19b778 CodeBlocks: add option to exclude external files

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !1159
2017-09-15 08:53:04 -04:00
Brad King
4644ab3995 Merge topic 'ranged-for'
63f6fd14 Meta: modernize old-fashioned loops to range-based `for` (CTest).

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !1262
2017-09-15 08:51:03 -04:00
Brad King
f801ec0cf7 Merge topic 'update-kwsys'
f02eced5 Merge branch 'upstream-KWSys' into update-kwsys
38b8017f KWSys 2017-09-14 (d85b17e7)

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !1263
2017-09-15 08:49:33 -04:00
Kitware Robot
6b76615c4e CMake Nightly Date Stamp 2017-09-15 00:01:03 -04:00
Pavel Solodovnikov
63f6fd144e Meta: modernize old-fashioned loops to range-based for (CTest).
Changes done via `clang-tidy` with some manual fine-tuning
for the variable naming and `auto` type deduction
where appropriate.
2017-09-14 16:11:58 +03:00
Brad King
f02eced51d Merge branch 'upstream-KWSys' into update-kwsys
* upstream-KWSys:
  KWSys 2017-09-14 (d85b17e7)
2017-09-14 08:44:26 -04:00
Brad King
01b9d039e7 Merge topic 'get_filename_component-fix-program-split'
31f73eb1 get_filename_component: Revise PROGRAM/PROGRAM_ARGS split semantics

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !1251
2017-09-14 07:39:24 -04:00
Brad King
208ac57531 Merge topic 'vs-fix-config-map'
64e973e9 Merge branch 'backport-vs-fix-config-map' into vs-fix-config-map
c5b5bb27 VS: Do not consider MAP_IMPORTED_CONFIG_<CONFIG> on non-imported targets

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !1256
2017-09-14 07:37:16 -04:00
Alexandr (Sagrer) Gridnev
fb19b7789a CodeBlocks: add option to exclude external files
Add variable `CMAKE_CODEBLOCKS_EXCLUDE_EXTERNAL_FILES` to optionally
exclude files from outside the project root from the project file
written by the CodeBlocks extra generator.  This optionally restores
logic that had been removed by commit v2.8.3~40^2 (CodeBlocks Generator:
Do not omit files in the project file listing, 2010-10-05) in response
to QTCREATORBUG-2250.

Issue: #12110
Fixes: #17188
2017-09-14 13:21:59 +03:00
Kitware Robot
d6b49ee676 CMake Nightly Date Stamp 2017-09-14 00:01:05 -04:00
Bill Hoffman
3bbe95f58a Clean up iwyu code to not be one big if statement.
This commit changes the internal -E__run_iwyu to be -E__run_co_compile. This
is used for co-compile commands. These are tools that want to mirror the
compiler. For each compiler invocation the tool will be invoked first. This
started as a way to implement include what you use (iwyu), but has expanded
to include cpplint, cppcheck and others. Likely there will be more in the
future as well. This commit implements each one in its own function and
provides a way to add additional ones in the future with less work.
2017-09-13 17:44:49 -04:00