Commit Graph

1401 Commits

Author SHA1 Message Date
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
ead879df20 Merge topic 'fphsa-fix-version-exact'
5dc215e0 FPHSA: fix typo in comment
a8f70b32 FPHSA: replace left-over VERSION by _FOUND_VERSION.
549366cb FPHSA: Add (failing) unit test when checking EXACT on full version number

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !1259
2017-09-15 08:42:16 -04:00
Brad King
a7a6ae5edd Tests: Update RunCMake/README.rst to clarify meaning of -result.txt
The content of `-result.txt` files is a regex, but the documentation
didn't make this clear.

Suggested-by: Deniz Bahadir <dbahadir@benocs.com>
2017-09-14 14:15:26 -04:00
Yves Frederix
5dc215e03b FPHSA: fix typo in comment 2017-09-14 08:21:38 -04:00
Yves Frederix
549366cbfc FPHSA: Add (failing) unit test when checking EXACT on full version number
This test detects a regression introduced by commit aec27c152e (FPHSA:
use more localized _FOUND_VERSION instead of VERSION, 2017-09-05).
2017-09-14 08:21:22 -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
Brad King
31f73eb12d get_filename_component: Revise PROGRAM/PROGRAM_ARGS split semantics
The KWSys `SystemTools::SplitProgramFromArgs` implementation goes into
an infinite loop when the value is just " " (a space).  Since the
"program path with unquoted spaces plus command-line arguments"
operation it is trying to provide is poorly defined (string parsing
should not depend on filesystem content), just stop using it.

Instead consider the main two use cases the old approach tried to handle:

* The value is the name or absolute path of a program with no quoting
  or escaping, but also no command-line arguments.  In this case we
  can use the value as given with no parsing, and assume no arguments.

* The value is a command-line string containing the program name/path
  plus arguments.  In this case we now assume that the command line
  is properly quoted or escaped.

Fixes: #17262
2017-09-13 10:47:04 -04:00
Brad King
28adf3833c Merge topic 'vs_improve_custom_command'
9ed24280 VS: only add custom command line if it is not empty
34c4108b add HasOnlyEmptyCommandLines() method to cmCustomCommandGenerator

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !1050
2017-09-11 07:53:18 -04:00
Brad King
bf19bb5609 Merge topic 'timestamp'
014ad298 Timestamp: support %A and %B

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !1228
2017-09-11 07:49:40 -04:00
Bill Hoffman
5b829c89b8 CTest: Weight reported test times by PROCESSORS in summaries
This commit changes the times reported by labels and subprojects to be
weighted by the PROCESSORS property. It is reported with `sec*proc`
instead of just `sec`.
2017-09-08 10:03:01 -04:00
Bill Hoffman
a6e32eb0c2 CTest: Split out labels and subproject labels in summary output
This commit splits out the reporting of labels and labels used for sub
projects. If a label is a sub project label it will not be included in
the label summary.  To implement this the commit creates
PrintLabelOrSubprojectSummary which is able to do the work of both
PrintLabelSummary and PrintSubprojectSummary avoiding code duplication.
2017-09-08 10:02:39 -04:00
Brad King
d4f58a9cd8 Merge topic 'fphsa-version-cleanup'
91935d9e FPHSA: lower-case for cmake_parse_arguments + move config-mode related code
aec27c15 FPHSA: use more localized _FOUND_VERSION instead of VERSION.
0019bfeb FPHSA: Add (failing) unit test in case a cache variable VERSION is present
81844334 FPHSA: add (failing) unit test for found version being equal to 0.

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: Rolf Eike Beer <eike@sf-mail.de>
Merge-request: !1224
2017-09-08 09:48:15 -04:00
Bernhard M. Wiedemann
014ad2989c Timestamp: support %A and %B
These are defined both by [1] and [2] to give full names of a weekday
and month.

[1] http://pubs.opengroup.org/onlinepubs/009695399/functions/strftime.html
[2] https://msdn.microsoft.com/de-de/library/fe06s4ak.aspx
2017-09-07 13:36:11 -04:00
Yves Frederix
0019bfebc9 FPHSA: Add (failing) unit test in case a cache variable VERSION is present 2017-09-05 21:20:00 +02:00
Yves Frederix
8184433428 FPHSA: add (failing) unit test for found version being equal to 0. 2017-09-05 21:18:34 +02:00
Brad King
20e5f7a9c9 Merge topic 'ExternalProject-command'
15617484 ExternalProject: Prevent COMMAND from being treated as a true keyword

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !1178
2017-09-05 09:31:06 -04:00
Michael Stürmer
9ed2428078 VS: only add custom command line if it is not empty 2017-09-04 11:42:35 +02:00
Craig Scott
1561748496 ExternalProject: Prevent COMMAND from being treated as a true keyword
The known keywords for each function are obtained by scraping the
documentation for lines matching a particular regular expression. In
commit 8842a027 (ExternalProject: Improve documentation, 2017-07-09),
the docs were overhauled and the COMMAND docs subsequently matched the
regular expression when they shouldn't have. This made COMMAND appear as
a true keyword, which thwarted the special handling logic elsewhere for
the intended use of COMMAND arguments.

This commit contains a workaround for issue #17229 to force a dependency
of the patch step on the update step to ensure a predictable step order.

Fixes: #17198
2017-09-02 17:53:16 +10:00
Brad King
b568a18997 Merge topic 'tll-global-unknown-lib'
a47a8533 target_link_libraries: Allow linking to UNKNOWN IMPORTED GLOBAL libs

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !1220
2017-09-01 10:26:08 -04:00
Brad King
bd77717800 Merge topic 'fix-genex-SOURCES'
068cc545 Genex: Fix TARGET_PROPERTY value of SOURCES

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !1218
2017-09-01 10:25:08 -04:00
Brad King
068cc545d9 Genex: Fix TARGET_PROPERTY value of SOURCES
Refactoring in commit v3.8.0-rc1~445^2~2 (cmTarget: Move sanity checks
and computed property access to callers, 2016-10-13) exposed a typo in
commit v3.8.0-rc1~445^2~3 (cmGeneratorTarget: Implement
cmTargetPropertyComputer interface, 2016-10-13).  Together they broke
the `$<TARGET_PROPERTY:mytgt,SOURCES>` generator expression in the case
that the `SOURCES` target property is populated in part by the
`target_sources` command.  Add the missing `;`-separator.

Fixes: #17243
2017-09-01 10:23:37 -04:00
Brad King
a47a853376 target_link_libraries: Allow linking to UNKNOWN IMPORTED GLOBAL libs
This combination was accidentally rejected.  Allow it and add a test.

Fixes: #17245
2017-08-31 13:10:26 -04:00
Brad King
96c882dcba Merge topic 'lexer-null'
14d9a11b ListFileLexer: fix heap-buffer-overflow on malicious input

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !1153
2017-08-31 10:08:18 -04:00
Matthias Maennich
14d9a11be9 ListFileLexer: fix heap-buffer-overflow on malicious input
In case a list file contains a null terminated string that is continued
until a later space, the lexer token information got inconsistent:

e.g. an argument   "TEST\0FOOBAR"    is passed by the lexer as a token

char* = "TEST\0FOOBAR" and length 11
             ^^ note: ascii 0x00

Using strdup in cmListFileLexer leads lexer->token.text to be allocated
with size 5 and lexer->token.length to be set to 11

A subsequent call to this function with an argument of  5 < length <= 11
wrongly assumed a sufficiently sized buffer and therefore corrupted the
heap buffer. The program might crash due to this corruption.
The case "NullTerminatedArgument" is intentionally using a quite large
'rest' to increase the chance to actually hit the issue. It will reliably
crash with address sanitizer enabled though.

This fix addresses all rules where arbitrary characters are matched to
ignore \0 in order to fall through to the rule that matches an arbitrary
character as BadCharacter.

Signed-off-by: Matthias Maennich <matthias@maennich.net>
2017-08-30 11:28:51 -04:00
Bill Hoffman
311b7b1a70 Add properties to run cppcheck along with the compiler
Create a `<LANG>_CPPCHECK` target property (initialized by a
`CMAKE_<LANG>_CPPCHECK` variable) to specify a `cppcheck` command line
to be run along with the compiler.
2017-08-30 10:23:46 -04:00
Brad King
ebc91a4452 Avoid CRLF newlines in Git repo blobs
In commit 8ed03baa76 (gitattributes: prefer `eol=crlf` to `-crlf`,
2017-08-23) we left a few CRLF blobs in the repository.  Some Git
versions get confused by text files with CRLF blobs.  Convert them
to LF blobs.  Use the `eol=crlf` attribute to tell Git to use CRLF
on checkout.
2017-08-30 08:29:43 -04:00
Brad King
ce602febf0 Tests: Fix RunCMake.BuildDepends on VS 2017 with v90 toolset
The MSVC toolsets v100 and below forget to re-link when a manifest
changes.  Exclude this part of the test case for them.
2017-08-25 09:55:50 -04:00
Domen Vrankar
80047bd611 CPack: extend testing framework
Some CPack tests require running
commands after the inclusion of
CPack.cmake and this patch enables
such tests to declare run_after_include_cpack
function which is run after the
inclusion.
2017-08-19 22:41:14 +02:00
Sylvain Joubert
d8ecc25457 Add PREPEND sub-command to string command 2017-08-11 13:26:33 +02:00
Brad King
8c0afd2c75 Merge branch 'find-package_root-disable' into release-3.9
Merge-request: !1116
2017-08-10 09:27:19 -04:00
Brad King
311f338ddc Merge topic 'find-package_root-test-regex'
e574bce1 Tests: Simplify RunCMake.find_package PackageRoot case regexes

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: Chuck Atkins <chuck.atkins@kitware.com>
Merge-request: !1115
2017-08-10 09:22:17 -04:00
Brad King
f4e66b41d8 Merge topic 'find-package_root-disable'
578d95f8 find_*: Disable the PACKAGE_ROOT search path group for CMake 3.9

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !1116
2017-08-10 09:22:02 -04:00
Brad King
578d95f87d find_*: Disable the PACKAGE_ROOT search path group for CMake 3.9
Disable the feature added by commit v3.9.0-rc1~71^2~2 (find_*: Add a new
PackageRoot search path group, 2017-05-03) and remove documentation
added by commit v3.9.0-rc1~71^2 (find_*: Add docs for PackageRoot search
path group, 2017-05-03).  Unfortunately the name `<pkg>_ROOT` may
already be set by projects for their own incompatible purposes.  Disable
the behavior change for now to fix the regression for CMake 3.9.  We can
restore it later with a policy.

In order to keep the implementation and tests working, add an
undocumented variable we can use in the tests to enable the behavior
before the policy is introduced.

Fixes: #17144
2017-08-08 11:52:28 -04:00
Brad King
db6ea482f6 Merge topic 'gtest-dynamic-discovery'
bfcda401 Add dynamic test discovery for for Google Test

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !1056
2017-08-08 09:29:48 -04:00
Brad King
e574bce15b Tests: Simplify RunCMake.find_package PackageRoot case regexes 2017-08-08 08:23:57 -04:00
Brad King
49640d3629 HP-UX: Drop support for building CMake on HP-UX
CMake will soon require both C++11 and libuv to build.  Neither of
these works on HP-UX, so unfortunately we need to drop support for
the platform until someone can get them working.

Issue: #17137
2017-08-07 09:16:09 -04:00
Brad King
51f08783c2 Merge topic 'genex-error-grammar'
e49c9eec cmGeneratorExpressionNode: add some missing commas

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !1102
2017-08-04 09:17:24 -04:00
Brad King
18cbf898f8 Merge topic 'add-package_root-to-find_package'
4a207116 find_package: Split PACKAGE_ROOT tests to work with smaller regex
9722ff5a find_package: Fix PACKAGE_ROOT test to check find_pacakge(CONFIG) mode.
c5d2b99c find_package: Add missing PACKAGE_ROOT_PATH search path implementation.

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !1082
2017-08-04 09:09:59 -04:00
Ben Boeckel
e49c9eec27 cmGeneratorExpressionNode: add some missing commas 2017-08-03 13:39:58 -04:00
Chuck Atkins
4a20711690 find_package: Split PACKAGE_ROOT tests to work with smaller regex 2017-08-02 12:03:52 -04:00
Chuck Atkins
9722ff5a6f find_package: Fix PACKAGE_ROOT test to check find_pacakge(CONFIG) mode. 2017-07-28 10:49:13 -04:00
Matthew Woehlke
bfcda4013a Add dynamic test discovery for for Google Test
Add a new gtest_discover_tests function to GoogleTest.cmake,
implementing dynamic test discovery (i.e. tests are discovered by
actually running the test executable and asking for the list of
available tests, which is used to dynamically declare the tests) rather
than the source-parsing approach used by gtest_add_tests. Compared to
the source-parsing approach, this has the advantage of being robust
against users declaring tests in unusual ways, and much better support
for advanced features such as parameterized tests.

A unit test, modeled after the TEST_INCLUDE_DIR[S] test, is also
included. Note that the unit test does not actually require that Google
Test is available. The new functionality does not actually depend on
Google Test as such; it only requires that the test executable lists
tests in the expected format when invoked with --gtest_list_tests, which
the unit test can fake readily.
2017-07-27 09:47:28 -04:00
Brad King
81005ff16b Merge topic 'string-clear-intermediate-matches'
b7941641 cmStringCommand: clear intermediate matches

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !1065
2017-07-21 10:16:26 -04:00
Brad King
43383fa922 Merge topic 'docsExternalProject'
8842a027 ExternalProject: Improve documentation

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !1037
2017-07-21 10:12:33 -04:00
Ben Boeckel
b794164143 cmStringCommand: clear intermediate matches
When `string(REGEX REPLACE)` or `string(REGEX MATCHALL)` loop
internally, they store their matches, but they do not clear the previous
match from an earlier iteration. This can leave the contents of
`CMAKE_MATCH_<N>` with bogus values for later matches in the string if
they have groups which earlier matched a non-empty string, but now match
an empty string.

Fixes #17079.
2017-07-21 09:09:56 -04:00
Brad King
407c7415f4 Merge topic 'cmake-E-sha'
c4de0a25 Add sha1sum, sha224sum, sha256sum, sha384sum and sha512sum to command mode
c4647d84 Change ComputeFileMD5 to ComputeFileHash
501a4fee Add some unit tests for md5sum

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !1021
2017-07-18 11:12:57 -04:00
Brad King
787017451c Merge topic 'objlib-own-target-objs'
d89e10cd Diagnose object library self-reference

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !1053
2017-07-18 11:12:00 -04:00
Craig Scott
8842a0272b ExternalProject: Improve documentation
- Added clearer structure by grouping the options into logical sections.
- Expanded the details for many of the options.
- Added Examples section to show how to use the various commands.
- Specifically highlighted that the contents of SOURCE_DIR may be lost
  if a download method is also provided.
- Updated argument-matching regex to be more robust and account for the
  varying leading spaces before keywords in the docs.
- Updated tests to account for slightly changed error messages.
2017-07-18 08:39:39 +10:00
Brad King
b97878643b Merge branch 'objlib-own-target-objs' into release-3.9 2017-07-17 11:42:18 -04:00
Brad King
d89e10cd58 Diagnose object library self-reference
The code

    add_library(A OBJECT a.c)
    target_sources(A PRIVATE $<TARGET_OBJECTS:A>)

used to crash CMake via infinite recursion while evaluating the
generator expression.  Then the change in commit v3.9.0-rc1~266^2~1
(cmGeneratorTarget: Replace source classifier implementation,
2017-04-07) avoided the infinite recursion because GetKindedSources now
creates a map entry and initializes it once.  If it is called again on
the same target during that initialization, the partially computed
results are returned.  This is still wrong but does not crash.
Detect and diagnose this case instead.

Co-Author: Ben Boeckel <ben.boeckel@kitware.com>
Fixes: #16578
2017-07-14 14:05:22 -04:00