Commit Graph

20522 Commits

Author SHA1 Message Date
Brad King afca373510 Help clang-format wrap after braces on long initializer lists
Add a long comment inside a few braced initializer lists in order to
convince clang-format to break after the opening brace and format the
list without indenting every value past the opening brace.
2016-05-06 15:54:32 -04:00
Brad King 85425a3e6c Move comments off of class access specifier lines
The clang-format tool may turn this:

   public: // comment about access specifier

     // unrelated comment indented with code
     ...

Into:

   public: // comment about access specifier

           // unrelated comment indented with code
     ...

Avoid this by moving comments off of access specifier lines.
2016-05-06 14:51:26 -04:00
Brad King 64b5520346 Isolate formatted streaming blocks with clang-format off/on
The clang-format tool can do a good job formatting most code, but
well-organized streaming blocks are best left manually formatted.

Find blocks of the form

    os <<
      "...\n"
      "...\n"
      ;

using the command

    $ git ls-files -z -- Source |
      egrep -v -z '^Source/kwsys/' |
      xargs -0 pcregrep -M --color=always -B 1 -A 1 -n \
        '<<[^\n]*\n(^ *("[^\n]*("|<<|;)$|;)\n){2,}'

Find blocks of the form

    os << "...\n"
       << "...\n"
       << "...\n";

using the command

    $ git ls-files -z -- Source |
      egrep -v -z '^Source/kwsys/' |
      xargs -0 pcregrep -M --color=always -B 1 -A 1 -n \
        '<<[^\n]*\n(^ *<<[^\n]*(\\n"|<<|;)$\n){2,}'

Surround such blocks with the pair

    /* clang-format off */
    ...
    /* clang-format on */

in order to protect them from update by clang-format.  Use the C-style
`/*...*/` comments instead of C++-style `//...` comments in order to
prevent them from ever being swallowed by re-formatting of surrounding
comments.
2016-05-06 14:25:55 -04:00
Brad King 73601ff831 Merge topic 'ghs-hash-object-locations'
5e428713 GHS: Shorten long object paths with duplicate source names
2016-05-06 08:22:33 -04:00
Geoff Viola 5e4287131b GHS: Shorten long object paths with duplicate source names
Detect when the resulting object path is too long and compute an
alternative name using a hash.
2016-05-06 08:21:05 -04:00
Kitware Robot eb27154f63 CMake Nightly Date Stamp 2016-05-06 00:01:05 -04:00
Matthew Woehlke f45c16e7ee Fix export file variable pollution
Add missing unset of scratch variables to generated export file for case
that the file was already included. We already unset these when parsing
the file normally, but the multiple inclusion case was leaving them
around.
2016-05-05 11:33:56 -04:00
Kitware Robot 8d7ef6a8b0 CMake Nightly Date Stamp 2016-05-05 00:01:08 -04:00
Kitware Robot cd0af9c5e0 CMake Nightly Date Stamp 2016-05-04 00:01:06 -04:00
Brad King 96c8a4769f Merge topic 'doc-cmake-E-updates'
960afaad Help: Improve 'cmake -E md5sum' documentation
25ee2c86 Help: Add missing space in cmake(1) manual
2016-05-03 10:17:04 -04:00
Brad King 3fc49c50b0 Merge topic 'doc-cmake-policies-manual-improvements'
5f948d2a Help: Add policy summaries to cmake-policies(7)
b74d73e5 Help: Organize cmake-policies(7) manual by version of introduction
de370656 cmRST: Parse toctree lines with Sphinx cross-reference syntax
845cb217 CMP0059: Fix typo in policy description
2016-05-03 10:17:00 -04:00
Brad King a0d31f3bb3 Merge topic 'clang-format-include-order'
54f71cd7 Source: Sort includes the way clang-format would
7b6ffa59 Source: Sort includes of sys/types.h as clang-format would
be14fe48 Source: Stabilize include order of sys/types.h before sys/stat.h
5e871f70 Tests: Sort includes of sys/types.h as clang-format would
a20d7d48 Tests: Fix Plugin test include order
2016-05-03 10:16:55 -04:00
Brad King 54f71cd72c Source: Sort includes the way clang-format would
Re-apply the approach from commit e1c77472 (Format include directive
blocks and ordering with clang-format, 2016-04-29) but this time be
more careful about exclusion of parser generator sources:

    $ git ls-files -z -- \
        '*.c' '*.cc' '*.cpp' '*.cxx' '*.h' '*.hh' '*.hpp' '*.hxx' |
      egrep -z -v '^Source/cmCommandArgumentLexer\.' |
      egrep -z -v '^Source/cmCommandArgumentParser\.' |
      egrep -z -v '^Source/cmDependsJavaLexer\.' |
      egrep -z -v '^Source/cmDependsJavaParser\.' |
      egrep -z -v '^Source/cmExprLexer\.' |
      egrep -z -v '^Source/cmExprParser\.' |
      egrep -z -v '^Source/cmFortranLexer\.' |
      egrep -z -v '^Source/cmFortranParser\.' |
      egrep -z -v '^Source/cmListFileLexer\.' |
      egrep -z -v '^Source/cm_sha2' |
      egrep -z -v '^Source/(kwsys|CursesDialog/form)/' |
      egrep -z -v '^Utilities/(KW|cm).*/' |
      egrep -z -v '^Tests/Module/GenerateExportHeader' |
      egrep -z -v '^Tests/RunCMake/CommandLine/cmake_depends/test_UTF-16LE.h' |
      xargs -0 clang-format -i

Also drop use of custom sorting for `sys/types.h`.
2016-05-03 10:08:41 -04:00
Brad King 7b6ffa59b1 Source: Sort includes of sys/types.h as clang-format would
When this header is included in blocks where order does not matter, just
place it in lexicographic order as clang-format would by default.
2016-05-03 10:08:41 -04:00
Brad King be14fe4857 Source: Stabilize include order of sys/types.h before sys/stat.h
Include the two headers in an isolated block with a comment separating
them so that tools that re-order includes do not re-order these.
2016-05-03 10:08:41 -04:00
Kitware Robot 4d59471a7e CMake Nightly Date Stamp 2016-05-03 00:01:08 -04:00
Brad King de37065661 cmRST: Parse toctree lines with Sphinx cross-reference syntax 2016-05-02 15:16:07 -04:00
Brad King 845cb217a7 CMP0059: Fix typo in policy description 2016-05-02 15:16:07 -04:00
Bartosz Kosiorek 960afaad7f Help: Improve 'cmake -E md5sum' documentation 2016-05-02 10:02:12 -04:00
Brad King 067b21b675 Merge topic 'clang-format-include-order'
e1c77472 Format include directive blocks and ordering with clang-format
180538c7 Source: Stabilize include order
0e7bca92 Utilities/Release: Stabilize include order in WiX custom action
eb817be0 Tests: Stabilize include order in MFC, VSXaml, and VSWinStorePhone
eda313b4 Tests: Stabilize include order in StringFileTest
7110b754 CursesDialog: add missing cmState include
d7a5f255 Modules: Remove unused CMakeTestWatcomVersion.c file
2016-05-02 09:24:21 -04:00
Kitware Robot 2e6684c65d CMake Nightly Date Stamp 2016-05-02 00:01:16 -04:00
Kitware Robot ffbac71e07 CMake Nightly Date Stamp 2016-05-01 00:01:05 -04:00
Kitware Robot c9423a44de CMake Nightly Date Stamp 2016-04-30 00:01:08 -04:00
Brad King e1c7747253 Format include directive blocks and ordering with clang-format
Sort include directives within each block (separated by a blank line) in
lexicographic order (except to prioritize `sys/types.h` first).  First
run `clang-format` with the config file:

    ---
    SortIncludes: false
    ...

Commit the result temporarily.  Then run `clang-format` again with:

    ---
    SortIncludes: true
    IncludeCategories:
      - Regex:    'sys/types.h'
        Priority: -1
    ...

Commit the result temporarily.  Start a new branch and cherry-pick the
second commit.  Manually resolve conflicts to preserve indentation of
re-ordered includes.  This cleans up the include ordering without
changing any other style.

Use the following command to run `clang-format`:

    $ git ls-files -z -- \
        '*.c' '*.cc' '*.cpp' '*.cxx' '*.h' '*.hh' '*.hpp' '*.hxx' |
      egrep -z -v '(Lexer|Parser|ParserHelper)\.' |
      egrep -z -v '^Source/cm_sha2' |
      egrep -z -v '^Source/(kwsys|CursesDialog/form)/' |
      egrep -z -v '^Utilities/(KW|cm).*/' |
      egrep -z -v '^Tests/Module/GenerateExportHeader' |
      egrep -z -v '^Tests/RunCMake/CommandLine/cmake_depends/test_UTF-16LE.h' |
      xargs -0 clang-format -i

This selects source files that do not come from a third-party.

Inspired-by: Daniel Pfeifer <daniel@pfeifer-mail.de>
2016-04-29 13:58:54 -04:00
Brad King 180538c706 Source: Stabilize include order
Each source file has a logical first include file.  Include it in an
isolated block so that tools that sort includes do not move them.
2016-04-29 13:58:31 -04:00
Brad King 9d2e306e98 Merge topic 'vs71-deprecate'
ce82e0a5 Deprecate Visual Studio 7 .NET 2003 generator
6a501b65 Tests: Drop test for VS 7.0 generator deprecation warnings
2016-04-29 13:28:33 -04:00
Brad King 43e21ce923 Merge topic 'clang-tidy-argv0'
304ab71d Clang-Tidy: Give entire compiler command line to clant-tidy tool
2016-04-29 13:28:28 -04:00
Daniel Pfeifer 7110b754fe CursesDialog: add missing cmState include 2016-04-29 09:12:32 -04:00
Kitware Robot aa304cbeb2 CMake Nightly Date Stamp 2016-04-29 00:01:10 -04:00
Brad King ce82e0a53f Deprecate Visual Studio 7 .NET 2003 generator
Update documentation to mark the generator deprecated.  Add a warning at
the end of generation plus an option to turn off the warning.
2016-04-28 10:09:20 -04:00
Daniel Pfeifer 304ab71db0 Clang-Tidy: Give entire compiler command line to clant-tidy tool
The tool expects the entire compiler command, including `cc`.  It
will automatically skip that and extract the options it needs.
2016-04-28 09:42:31 -04:00
Brad King 3c189bbb33 Merge topic 'clang-tidy-output-cleanup'
04d74a7f Clang-Tidy: copy stdout to sterr; ignore original stderr
2016-04-28 09:26:03 -04:00
Kitware Robot a2de7f372c CMake Nightly Date Stamp 2016-04-28 00:01:07 -04:00
Brad King edf1c8e37d Merge topic 'ghs-duplicate-objects'
1703a6d2 GHS: Fix handling of duplicate source filenames (#16046)
2016-04-27 14:32:12 -04:00
Brad King 3c93436209 Merge topic 'autogen-message-cleanup'
9647af3f Autogen: Message tweaks: Compiler type (moc/qrc/ui) added to progress messages
9b58190c Autogen: Message cleanups: Compose messages in std::stringstream
2016-04-27 09:15:22 -04:00
Brad King 8a00c16b59 Merge topic 'vs-old-express-no-folders'
571bedec VS: Ignore USE_FOLDER property on VS versions that do not support it
0c58d2d0 VS: Detect VS 8 and 9 Express editions
2016-04-27 09:15:20 -04:00
Daniel Pfeifer 04d74a7f89 Clang-Tidy: copy stdout to sterr; ignore original stderr
Clang-Tidy writes the number of warnings, the number of suppressed
warnings, and instructions on how to suppress warnings to stderr.  Since
each source file is checked individually, this repetitive information is
disturbing and should be suppressed.

The actual warning messages are written to stdout.  Some IDEs (eg.
QtCreator) analyze only stderr for issues.  Redirecting Clang-Tidy's
stdout to stderr makes sure the warnings are correctly displayed.
2016-04-27 09:06:47 -04:00
Kitware Robot a594b79b3c CMake Nightly Date Stamp 2016-04-27 00:01:05 -04:00
Brad King 571bedec29 VS: Ignore USE_FOLDER property on VS versions that do not support it
Solution folders are supported on VS 8 and above in the full versions
and on VS 11 and above in the express versions.
2016-04-26 08:22:27 -04:00
Brad King 0c58d2d0fd VS: Detect VS 8 and 9 Express editions 2016-04-26 08:16:19 -04:00
Kitware Robot b8a8dfec36 CMake Nightly Date Stamp 2016-04-26 00:01:06 -04:00
Geoff Viola 1703a6d2c4 GHS: Fix handling of duplicate source filenames (#16046)
Green Hills MULTI project files must specify explicitly distinct object
file names for source files with the same name.
2016-04-25 10:46:09 -04:00
Sebastian Holtermann 9647af3f4c Autogen: Message tweaks: Compiler type (moc/qrc/ui) added to progress messages 2016-04-25 10:38:58 -04:00
Sebastian Holtermann 9b58190c8f Autogen: Message cleanups: Compose messages in std::stringstream
To avoid Race conditions with other processes writing to stdout/stderr compose
the whole message in a std::stringstream then submit the single complete message.
2016-04-25 10:38:58 -04:00
Kitware Robot 657a446175 CMake Nightly Date Stamp 2016-04-25 00:01:04 -04:00
Kitware Robot 4417f91379 CMake Nightly Date Stamp 2016-04-24 00:01:05 -04:00
Kitware Robot 38d1c67c4d CMake Nightly Date Stamp 2016-04-23 00:01:05 -04:00
Brad King 76e793b9ad Merge topic 'autogen-updates'
84946c73 Tests: QtAutogen: Same source name in different directories test
9c6fa684 Autogen: Generate qrc_NAME.cpp files in subdirectories
488ea8c7 Autogen: Generate not included moc files in subdirectories (#12873)
66caae45 Autogen: Check added for name collisions of generated qrc_NAME.cpp files
663d093d Autogen: Check added for name collisions of generated ui_NAME.h files
8295d437 Autogen: Check added for name collisions of generated moc files
d350308a Help: Improve AUTOMOC documentation layout
2016-04-22 09:02:03 -04:00
Brad King eb87407068 Merge topic 'xcode-c_str'
2263949b cmGlobalXCodeGenerator: do not pass char* to cmSystemTools::CollapseFullPath()
2b25ce30 make cmGlobalXCodeGenerator::XCodeEscapePath() take a std::string&
ffedf352 make cmGlobalXCodeGenerator::BuildObjectListOrString::Add() take a string&
6100bdff cmGlobalXCodeGenerator: directly call CreateString() with std::string
2016-04-22 09:01:33 -04:00
Brad King e5a9a437fb Merge topic 'addcachedefinitions-convert'
068358e1 cmMakefile::AddCacheDefinition: avoid conversions between char* and string
2016-04-22 09:01:22 -04:00
Sebastian Holtermann 9c6fa684e7 Autogen: Generate qrc_NAME.cpp files in subdirectories
A qrc_NAME.cpp file generated from NAME.qrc in the directory
CMAKE_CURRENT_SOURCE_DIR/SUBDIR
will be generated in the directory
CMAKE_CURRENT_BINARY_DIR/TARGETNAME_automoc.dir/SUBDIR
2016-04-22 08:54:25 -04:00
Sebastian Holtermann 488ea8c709 Autogen: Generate not included moc files in subdirectories (#12873)
Not included moc files generated from a source file in
CMAKE_CURRENT_SOURCE_DIR/SUBDIR
will be generated in the directory
CMAKE_CURRENT_BINARY_DIR/TARGETNAME_automoc.dir/SUBDIR/
2016-04-22 08:49:22 -04:00
Sebastian Holtermann 66caae45f6 Autogen: Check added for name collisions of generated qrc_NAME.cpp files 2016-04-22 08:49:22 -04:00
Sebastian Holtermann 663d093d45 Autogen: Check added for name collisions of generated ui_NAME.h files 2016-04-22 08:49:21 -04:00
Sebastian Holtermann 8295d43713 Autogen: Check added for name collisions of generated moc files
The test exits with an error if two or more source files
would generate the same moc file.
2016-04-22 08:49:21 -04:00
Kitware Robot 02f663f15c CMake Nightly Date Stamp 2016-04-22 00:01:05 -04:00
Kitware Robot 9b5929da22 CMake Nightly Date Stamp 2016-04-21 00:01:05 -04:00
Rolf Eike Beer 2263949b78 cmGlobalXCodeGenerator: do not pass char* to cmSystemTools::CollapseFullPath()
This takes a std::string&, so directly pass the object to it instead of
converting back and forth.
2016-04-20 23:35:01 +02:00
Rolf Eike Beer 2b25ce30ca make cmGlobalXCodeGenerator::XCodeEscapePath() take a std::string&
All callers already have one, and it was immediately converted to one
internally. Just keep the old one around, and only modify it when needed.
2016-04-20 23:35:01 +02:00
Rolf Eike Beer ffedf3527d make cmGlobalXCodeGenerator::BuildObjectListOrString::Add() take a string&
All callers already have these objects, and it is only passed to other methods
taking such, so avoid all conversions in between.
2016-04-20 23:34:57 +02:00
Rolf Eike Beer 6100bdff38 cmGlobalXCodeGenerator: directly call CreateString() with std::string
This function already takes a const std::string&, no need to convert the input
to a char* before passing it in.
2016-04-20 23:34:05 +02:00
Rolf Eike Beer 068358e1ed cmMakefile::AddCacheDefinition: avoid conversions between char* and string
Running the testsuite this function is entered more than 126,000 times. Reorder
the code flow so that a conversion from char* to std::string is only done when
the cache entry is a path one, which happens only ~50 times during the
testsuite.
2016-04-20 23:33:17 +02:00
Brad King f223652790 Merge topic 'autogen-cleanups'
840b830b Autogen: Qrc processing: Generate single map with final input / output names
bc4c7751 Autogen: Ui processing: Generate single map with final input / output names
47e60bc5 Autogen: Split out UI file generation code to dedicated method
cf679ea8 Autogen: Split out moc file generation code to dedicated method
3ea1d090 Autogen: Rename method GenerateQrc{ => Files}
8ced8bb9 Autogen: New logCommand method. It prints commands using std::cout.
95064a6d Autogen: Rename header extension Join method to JoinExts
7a73c404 Autogen: Use SystemTools string functions instead of rolling out own
2016-04-20 09:52:34 -04:00
Kitware Robot 0a05b2bd41 CMake Nightly Date Stamp 2016-04-20 00:01:05 -04:00
Sebastian Holtermann 840b830bc6 Autogen: Qrc processing: Generate single map with final input / output names 2016-04-19 12:59:13 -04:00
Sebastian Holtermann bc4c7751ab Autogen: Ui processing: Generate single map with final input / output names
The single map allows name collision testing (in a later commit)
2016-04-19 12:59:06 -04:00
Sebastian Holtermann 47e60bc5a0 Autogen: Split out UI file generation code to dedicated method 2016-04-19 12:52:36 -04:00
Sebastian Holtermann cf679ea8dc Autogen: Split out moc file generation code to dedicated method 2016-04-19 12:51:26 -04:00
Sebastian Holtermann 3ea1d09082 Autogen: Rename method GenerateQrc{ => Files} 2016-04-19 12:49:47 -04:00
Sebastian Holtermann 8ced8bb95a Autogen: New logCommand method. It prints commands using std::cout. 2016-04-19 12:49:22 -04:00
Sebastian Holtermann 95064a6d35 Autogen: Rename header extension Join method to JoinExts
While at it, simplify the signature and avoid a trailing separator.
2016-04-19 12:48:05 -04:00
Sebastian Holtermann 7a73c404dd Autogen: Use SystemTools string functions instead of rolling out own 2016-04-19 12:44:08 -04:00
Kitware Robot 7d4c99a957 CMake Nightly Date Stamp 2016-04-19 00:01:05 -04:00
Brad King fa4ae9fb12 Merge topic 'refactor-cmListFileBacktrace'
0f96ef00 Remove unused cmake::IssueMessage overload
563bf9dd cmState: Remove unused entry point fields from snapshot data
7c36d206 cmListFileBacktrace: Refactor storage to provide efficient value semantics
1f6bd8a9 cmState: Avoid accumulating snapshot storage for backtraces
18b6676b cmState: Add Snapshot method to get bottom of call stack
2016-04-18 11:07:07 -04:00
Brad King ef713503c8 Merge topic 'minor-cleanups'
2faa8b36 Add call stack to unused/uninitialized variable warnings
da07c506 cmLocalGenerator: Simplify IssueMessage implementation
cc7aed77 cmLocalGenerator: Use own IssueMessage method
c50285de cmOutputConverter: Assert construction with a valid snapshot
b6ed71b1 cmMakefile: Move cmMakefileCall to .cxx file
a559f0f6 cmWhileCommand: Simplify context construction
7503deb2 cmIfCommand: Simplify execution context construction
2016-04-18 11:07:04 -04:00
Brad King 0f96ef00cb Remove unused cmake::IssueMessage overload
All callers now pass a full backtrace so we do not need the alternative
that takes a cmListFileContext directly.  Drop this overload to remove
the code duplication.
2016-04-18 09:21:19 -04:00
Brad King 563bf9dd8a cmState: Remove unused entry point fields from snapshot data
This information is now kept in cmMakefile::Backtrace.
2016-04-18 09:21:19 -04:00
Brad King 7c36d2067b cmListFileBacktrace: Refactor storage to provide efficient value semantics
Since commit v3.4.0-rc1~321^2~2 (Genex: Store a backtrace, not a pointer
to one, 2015-07-08) we treat cmListFileBacktrace instances as
lightweight values.  This was true at the time only because the
backtrace information was kept in the cmState snapshot hierarchy.
However, that forced us to accumulate a lot of otherwise short-lived
snapshots just to have the backtrace fields available for reference by
cmListFileBacktrace instances.  Recent refactoring made backtrace
instances independent of the snapshot hierarchy to avoid accumulating
short-lived snapshots.  This came at the cost of making backtrace values
heavy again, leading to lots of string coying and slower execution.

Fix this by refactoring cmListFileBacktrace to provide value semantics
with efficient shared storage underneath.  Teach cmMakefile to maintain
its call stack using an instance of cmListFileBacktrace.  This approach
allows the current backtrace to be efficiently saved whenever it is
needed.

Also teach cmListFileBacktrace the notion of a file-level scope.  This
is useful for messages about the whole file (e.g. during parsing) that
are not specific to any line within it.  Push the CMakeLists.txt scope
for each directory and never pop it.  This ensures that we always have
some context information and simplifies cmMakefile::IssueMessage.
Push/pop a file-level scope as each included file is processed.  This
supersedes cmParseFileScope and improves diagnostic message context
information in a few places.  Fix the corresponding test cases to expect
the improved output.
2016-04-18 09:21:19 -04:00
Brad King 0256ea55ab Merge topic 'cmPolicies-missing-include'
cc684857 cmPolicies.cxx: Add missing include <ctype.h> for isdigit (#16066)
2016-04-18 08:57:37 -04:00
Brad King f5c8a46808 Merge topic 'cmake-host-solaris'
5dc6cfd6 Solaris: Add a CMAKE_HOST_SOLARIS variable (#16061)
2016-04-18 08:57:29 -04:00
Brad King 0f6a8f7a46 Merge topic 'cmake-gui-osx-install-mkdir'
32d569af cmake-gui: Teach --install make destination directory (#16064)
2016-04-18 08:57:27 -04:00
Kitware Robot 49c4d665dc CMake Nightly Date Stamp 2016-04-18 00:01:05 -04:00
Kitware Robot 6f139d31ca CMake Nightly Date Stamp 2016-04-17 00:01:05 -04:00
Kitware Robot 94179ecf22 CMake Nightly Date Stamp 2016-04-16 00:01:08 -04:00
Brad King cc684857c2 cmPolicies.cxx: Add missing include <ctype.h> for isdigit (#16066) 2016-04-15 13:46:15 -04:00
Stafen Teleman 5dc6cfd6ea Solaris: Add a CMAKE_HOST_SOLARIS variable (#16061) 2016-04-15 13:25:45 -04:00
Brad King 32d569af9a cmake-gui: Teach --install make destination directory (#16064)
Ensure the destination directory exists before creating symlinks in it.
2016-04-15 13:23:41 -04:00
Brad King 1f6bd8a93f cmState: Avoid accumulating snapshot storage for backtraces
Changes during post-3.3/pre-3.4 development refactored storage of most
configure-time information, including variable bindings and function
scopes.  All scopes (even short-lived) were kept persistently for
possible future debugging features, causing huge accumulated memory
usage.  This was mostly addressed by commit v3.4.1~4^2 (cmState: Avoid
accumulating snapshot storage for short-lived scopes, 2015-11-24).

Since then we still keep short-lived scopes when they are needed for a
backtrace.  This is because since commit v3.4.0-rc1~378^2
(cmListFileBacktrace: Implement in terms of cmState::Snapshot,
2015-05-29) backtraces have been lightweight objects that simply point
into the snapshot tree.  While the intention of this approach was to
avoid duplicating the call stack file path strings, the cost turned out
to be holding on to the entire call stack worth of scope snapshots,
which is much worse.

Furthermore, since commit v3.4.0-rc2~1^2 (cmIfCommand: Issue CMP0054
warning with appropriate context, 2015-10-20) all conditions used in
`if()` commands hold a backtrace for use in diagnostic messages.  Even
though the backtrace is short-lived it still causes the scope snapshot
to be kept.  This means that code like

    function(foo)
      if(0)
      endif()
    endfunction()

    foreach(i RANGE 1000000)
      foo()
    endforeach()

accumulates storage for the function call scope snapshots.

Fix this by partially reverting commit v3.4.0-rc1~378^2 and saving the
entire call stack during cmListFileBacktrace construction.  This way
we can avoid keeping short-lived scope snapshot storage in all cases.
2016-04-15 10:31:39 -04:00
Brad King 18b6676bff cmState: Add Snapshot method to get bottom of call stack
The bottom of the call stack is always a long-lived snapshot and can be
saved for later use with cmOutputConverter.
2016-04-15 10:31:39 -04:00
Brad King 2faa8b3620 Add call stack to unused/uninitialized variable warnings
In commit v2.8.4~32^2~14 (Use cmake::IssueMessage for warnings,
2010-12-07) these warnings became formatted.  It is more informative to
give the full call stack with such warnings.  Also it is easier to
implement warnings with a full call stack because we do not have to
construct a custom backtrace with only the top.
2016-04-15 10:13:12 -04:00
Brad King da07c506b9 cmLocalGenerator: Simplify IssueMessage implementation
This method was added by commit v3.4.0-rc1~424^2~6 (cmLocalGenerator:
Add IssueMessage method, 2015-06-13) in order to reduce callers'
dependency on cmMakefile.  Currently the implementation of
cmLocalGenerator::IssueMessage is just a copy of the post-configure code
path in cmMakefile::IssueMessage.  De-duplicate the implementation by
simply calling the cmMakefile copy for now.  This will simplify upcoming
refactoring of backtraces.  The dependency on cmMakefile can be removed
by future work once that is done.
2016-04-15 10:13:08 -04:00
Brad King cc7aed77a8 cmLocalGenerator: Use own IssueMessage method 2016-04-15 08:34:05 -04:00
Brad King c50285dee6 cmOutputConverter: Assert construction with a valid snapshot
We unconditionally use information from the snapshot so it must be
valid.
2016-04-15 08:34:05 -04:00
Brad King b6ed71b17c cmMakefile: Move cmMakefileCall to .cxx file 2016-04-15 08:32:15 -04:00
Brad King a559f0f6b0 cmWhileCommand: Simplify context construction 2016-04-15 08:31:59 -04:00
Brad King 7503deb2c5 cmIfCommand: Simplify execution context construction 2016-04-15 08:29:42 -04:00
Kitware Robot c42aa3ed8b CMake Nightly Date Stamp 2016-04-15 00:01:05 -04:00
Kitware Robot 003d4e5752 CMake Nightly Date Stamp 2016-04-14 00:01:06 -04:00
Brad King f5da19edd0 Merge topic 'cmState-rename-include-snapshot'
c54ed781 cmState: Rename CallStack snapshots to IncludeFile
2016-04-13 09:58:21 -04:00
Brad King eae4cee0b5 Merge topic 'try_compile-config-flags'
bd581a37 try_compile: Honor CMAKE_<LANG>_FLAGS_<CONFIG> changes (#16054)
82ef90fc cmCoreTryCompile: Factor out config lookup for re-use
2016-04-13 09:58:18 -04:00
Brad King 1dc78fecc7 Merge topic 'clang-tidy'
5e62444c Add options to run clang-tidy with the compiler
2016-04-13 09:58:08 -04:00
Daniel Pfeifer 5e62444cff Add options to run clang-tidy with the compiler
Create a <LANG>_CLANG_TIDY target property (initialized by a
CMAKE_<LANG>_CLANG_TIDY variable) to specify a clang-tidy command line
to be run along with the compiler.
2016-04-13 09:56:10 -04:00
Kitware Robot d0b2ec3e71 CMake Nightly Date Stamp 2016-04-13 00:01:05 -04:00
Brad King c54ed7813f cmState: Rename CallStack snapshots to IncludeFile 2016-04-12 16:08:24 -04:00
Kitware Robot a2ce4e81d5 CMake Nightly Date Stamp 2016-04-12 00:01:07 -04:00
Brad King bd581a3733 try_compile: Honor CMAKE_<LANG>_FLAGS_<CONFIG> changes (#16054)
In the `try_compile` source file signature we propagate the caller's
value of `CMAKE_<LANG>_FLAGS` into the test project.  Extend this to
propagate `CMAKE_<LANG>_FLAGS_<CONFIG>` too instead of always using the
default value in the test project.  This will be useful, for example, to
allow the MSVC runtime library to be changed (e.g. `-MDd` => `-MTd`).
2016-04-11 11:25:08 -04:00
Brad King 82ef90fcfc cmCoreTryCompile: Factor out config lookup for re-use
Store the lookup of CMAKE_TRY_COMPILE_CONFIGURATION in a local variable
so we can re-use it.
2016-04-11 10:39:04 -04:00
Brad King 3a556f005d Merge topic 'preallocate-condition-keywords'
aff4a5fa cmConditionEvaluator: Use pre-allocated keywords in more places
2016-04-11 09:38:58 -04:00
Kitware Robot 7c3fe7e45f CMake Nightly Date Stamp 2016-04-11 00:01:05 -04:00
Kitware Robot 0547e4d509 CMake Nightly Date Stamp 2016-04-10 00:01:04 -04:00
Kitware Robot e2e2461a0d CMake Nightly Date Stamp 2016-04-09 00:01:15 -04:00
Brad King aff4a5fab5 cmConditionEvaluator: Use pre-allocated keywords in more places
Inspired-by: Harry Mallon <Harry@codexdigital.com>
2016-04-08 10:45:43 -04:00
Brad King f6c5958047 Merge topic 'ninja-restat-custom-command-byproducts'
add7abc8 Ninja: Restat custom command byproducts even with a SYMBOLIC output (#16049)
ff805113 Ninja: Fix detection of custom command symbolic outputs
2016-04-08 09:03:59 -04:00
Brad King 2369f19a7a Merge topic 'ninja-object-rsp'
7731e44f Ninja: Honor CMAKE_NINJA_FORCE_RESPONSE_FILE for compile rules
f9644a2d cmGlobalNinjaGenerator: Clarify logic for forcing use of response files
24c9106b cmNinjaTargetGenerator: Factor out helper for forced response file check
2016-04-08 09:01:50 -04:00
Kitware Robot 2f76effd0a CMake Nightly Date Stamp 2016-04-08 00:01:07 -04:00
Dmitry Ivanov 7731e44f87 Ninja: Honor CMAKE_NINJA_FORCE_RESPONSE_FILE for compile rules 2016-04-07 09:45:29 -04:00
Dmitry Ivanov f9644a2d1b cmGlobalNinjaGenerator: Clarify logic for forcing use of response files
Update the WriteBuild method to use a negative command line length limit
to specify that we should force use of response files.
2016-04-07 09:45:29 -04:00
Dmitry Ivanov 24c9106b7b cmNinjaTargetGenerator: Factor out helper for forced response file check 2016-04-07 09:45:26 -04:00
Kitware Robot 8de04f6334 CMake Nightly Date Stamp 2016-04-07 00:01:05 -04:00
Brad King ae2fa89f74 Merge topic 'fortran-line-directives-no-dirs'
f831d752 cmFortranParser: Skip #line directives that do not name files
2016-04-06 09:30:03 -04:00
Kitware Robot 8898a92505 CMake Nightly Date Stamp 2016-04-06 00:01:08 -04:00
Brad King add7abc835 Ninja: Restat custom command byproducts even with a SYMBOLIC output (#16049)
The change in commit v3.5.0-rc1~198^2 (Ninja: Always re-run custom
commands that have symbolic dependencies, 2015-11-19) broke the
byproducts feature added by commit v3.2.0-rc1~340^2~2 (Add an option for
explicit BYPRODUCTS of custom commands, 2014-11-13) when SYMBOLIC
outputs also appear.  This case occurs with AUTORCC-generated custom
targets because the output is SYMBOLIC (to always run) and the generated
file is a byproduct (for restat so dependents do not run unnecessarily).

The two use cases conflict because Ninja does not support per-output
restat.  Favor restat whenever byproducts are present because it is
required for byproducts to work correctly.  In use cases where we want
an always-run chain we simply will not be able to also use byproducts.
2016-04-05 16:20:28 -04:00
Brad King ff805113c7 Ninja: Fix detection of custom command symbolic outputs
Fix logic introduced by commit v3.5.0-rc1~198^2 (Ninja: Always re-run
custom commands that have symbolic dependencies, 2015-11-19) to not
consider only the last output.  We need to know if any output is
SYMBOLIC, so stop checking as soon as one is found.
2016-04-05 16:19:52 -04:00
Brad King f831d752ae cmFortranParser: Skip #line directives that do not name files
Since commit v3.5.0-rc1~241^2~1 (cmFortranParser: Parse #line
directives, 2015-11-02) our Fortran dependency scanner parses `#line`
directives to extract the named files.  However, some compilers produce
`#line` directives that name directories instead of files.  Work around
such cases by verifying that the extracted path names a file and not a
directory.
2016-04-05 12:59:45 -04:00
Brad King fd40b0f875 Merge topic 'ctest-run-submodule-sync'
c18d91ad Help: add release notes for topic 'ctest-run-submodule-sync'
7f560743 cmCTestGIT: run `git submodule sync` before updating submodules
06b310b5 cmCTestGIT: add an option to initialize submodules on update
56c1ea40 cmCTestGIT: fix git version references
2016-04-05 09:38:06 -04:00
Brad King 25a38ecfe7 Merge topic 'cobertura_off_by_one'
398b8800 cmParseCoberturaCoverage: Remove extra coverage line
2016-04-05 09:38:04 -04:00
Brad King adea45e15a Merge topic 'fix-target-alias-in-subdir'
0e44f489 Rename local target lookup methods to clarify purpose
bc30f8b5 Fix lookup of an ALIAS target outside aliased target's directory (#16044)
2016-04-05 09:37:59 -04:00
Kitware Robot 6c60f116cb CMake Nightly Date Stamp 2016-04-05 00:01:05 -04:00
Kitware Robot ff6211e635 CMake Nightly Date Stamp 2016-04-04 00:01:05 -04:00
Kitware Robot 2e8837d00d CMake Nightly Date Stamp 2016-04-03 00:01:04 -04:00
Kitware Robot 228801b9c8 CMake Nightly Date Stamp 2016-04-02 00:01:05 -04:00
Ben Boeckel 7f5607439e cmCTestGIT: run `git submodule sync` before updating submodules
If the URL of a submodule changes upstream, the commits referenced at
the old URL may not be available and will cause an update failure.
2016-04-01 15:50:31 -04:00
Ben Boeckel 06b310b5d5 cmCTestGIT: add an option to initialize submodules on update
Currently, CTest will not initialize any submodules within the already
checked out source tree. Add an option to do so. The use case for not
doing so is that some submodules may not be necessary for the current
test and keeping network usage down may be important.
2016-04-01 15:50:31 -04:00
Ben Boeckel 56c1ea40c5 cmCTestGIT: fix git version references
Git does not use a 4-component version number.
2016-04-01 15:50:27 -04:00
Brad King 0e44f4894f Rename local target lookup methods to clarify purpose
Rename methods:

* `cmMakefile::Find{ => LocalNonAlias}Target`
* `cmLocalGenerator::Find{ => LocalNonAlias}GeneratorTarget`

These names clarify that they are for directory-local target names
and do not consider alias targets.
2016-04-01 15:44:16 -04:00
Brad King bc30f8b5e6 Fix lookup of an ALIAS target outside aliased target's directory (#16044)
Refactoring in commit v3.5.0-rc1~272^2~11 (cmTarget: Implement ALIAS in
terms of name mapping, 2015-10-25) accidentally introduced logic that
assumes ALIAS targets always reference targets in their own directory.
Fix this and add a test case.

The configure-step fix is that `cmMakefile::FindTarget` should not consider
aliases.  The purpose of this method is just to look up targets local to
a directory.  Since ALIAS and normal targets share a namespace we know a
locally defined target will never collide with an ALIAS target anyway.
The method has 3 call sites, and this change is safe for all of them:

* `cmInstallCommand::HandleTargetsMode`: Rejects aliases before the call.
* `cmFLTKWrapUICommand::FinalPass`: Should never have considered aliases.
* `cmMakefile::FindTargetToUse`: Falls back to a global lookup anyway.

The generate-step fix is that `cmLocalGenerator::FindGeneratorTarget`
should not consider aliases.  This method is the generate-step
equivalent to the above.  The method has 2 call sites, and this change
is safe for both of them:

* `cmInstallTargetGenerator::Compute`: Never uses an alias target name.
* `cmLocalGenerator::FindGeneratorTargetToUse`: Falls back to global lookup.

Reported-by: Matteo Settenvini <matteo@member.fsf.org>
2016-04-01 15:44:16 -04:00
Brad King de7f2ae3f1 Merge topic 'eclipse-source-groups'
4828a78c Eclipse: Implement traversal of nested source groups (#15701)
2016-04-01 10:01:58 -04:00
Brad King e8c1363ee8 Merge topic 'update-kwsys'
168e44e2 Merge branch 'upstream-KWSys' into update-kwsys
731ad172 KWSys 2016-03-31 (3392da1d)
2016-04-01 10:01:52 -04:00
Kitware Robot 9e33f02bd9 CMake Nightly Date Stamp 2016-04-01 00:01:07 -04:00
Patrik Lehmann 4828a78c10 Eclipse: Implement traversal of nested source groups (#15701) 2016-03-31 09:34:14 -04:00
Brad King 168e44e202 Merge branch 'upstream-KWSys' into update-kwsys
* upstream-KWSys:
  KWSys 2016-03-31 (3392da1d)
2016-03-31 08:46:50 -04:00
Brad King 0aa736e625 Merge topic 'fix-spelling-typos'
49e82c15 Fix spelling typos in comments and documentation (#16037)
2016-03-31 08:46:03 -04:00
Brad King dea0b6b718 Merge topic 'update-kwsys'
dc333a71 Merge branch 'upstream-KWSys' into update-kwsys
735c41dd KWSys 2016-03-29 (b51abb30)
2016-03-31 08:46:01 -04:00
Brad King e2465c19c6 Merge topic 'preallocate-condition-keywords'
5c324294 cmConditionEvaluator: Pre-allocate keyword strings
2016-03-31 08:45:56 -04:00
Brad King 91d91d9d5d Merge topic 'simplify-condition-context'
2379b3ae cmConditionEvaluator: Remove GetConditionContext method
02fce523 cmConditionEvaluator: Drop unnecessary path conversion
2016-03-31 08:45:54 -04:00
Brad King e0917f29a4 Merge topic 'vs-fortran-MP'
729f5f01 VS: Map Intel Fortran `/MP` flag for multi-processor compilation (#15990)
2016-03-31 08:45:51 -04:00
Kitware Robot b290ddf925 CMake Nightly Date Stamp 2016-03-31 00:01:05 -04:00
Zack Galbreath 398b8800e3 cmParseCoberturaCoverage: Remove extra coverage line
Fix off-by-one error in cmParseCoberturaCoverage that added an
extra blank line to the end of source file being covered.
2016-03-30 14:22:07 -04:00
Kitware Robot 00e4d1220b CMake Nightly Date Stamp 2016-03-30 00:01:06 -04:00
Felix Geyer 49e82c15d5 Fix spelling typos in comments and documentation (#16037)
The Debian package checker tool (lintian) detected several typos in
CMake.
2016-03-29 14:31:02 -04:00