Commit Graph

27060 Commits

Author SHA1 Message Date
Stephen Kelly 1c7c35c372 cmListCommand: Replace remove duplicates loop with algorithm. 2015-02-15 20:47:51 +01:00
Stephen Kelly cebeed2486 cmAlgorithms: Add cmRemoveDuplicates algorithm.
Start by creating a vector to hold a unique values of the input range.  We
expect that in most cases, there will be relatively few duplicates, so
reserving enough memory for a complete copy is worthwhile.  Unlike a solution
involving a std::set, this algorithm allocates all the memory it needs
in one go and in one place, so it is more cache friendly.

Populate the unique copy with a lower_bound insert algorithm and record the
indices of duplicates.  This is the same complexity as the std::set insert
algorithm, but without the need to allocate memory on the heap and other
disadvantages of std::set.

Remove the duplicates with the cmRemoveIndices algorithm.
2015-02-15 20:46:25 +01:00
Stephen Kelly 3cfe7a4ca8 cmListCommand: Implement REMOVE_ITEM in terms of cmRemoveMatching. 2015-02-15 19:56:09 +01:00
Stephen Kelly 050958a328 cmAlgorithms: Add cmRemoveMatching algorithm.
Implement it in terms of std::remove_if with a binary search through
a matching range.
2015-02-15 19:56:08 +01:00
Stephen Kelly a77af8f130 cmListCommand: Replace joining loop with cmJoin algorithm. 2015-02-15 19:56:07 +01:00
Stephen Kelly 6a22e40147 cmListCommand: Use cmRemoveIndices for REMOVE_AT subcommand.
Avoid repeatedly looping over the indices to process elements (even
without breaking out of the loop when the element is found).
2015-02-15 19:55:28 +01:00
Stephen Kelly 0b5cf0dabd cmAlgorithms: Implement algorithm for removing indexes.
Implement ContainerAlgorithms::RemoveN to remove N elements to the
end of a container by rotating.  The rotate is implemented in terms
of the efficient swap algorithm, optimized even more in the standard
library implementation when the compiler supports the rvalue-references
feature to move elements.  Implement cmRemoveN with a Range API
for completeness.

std::rotate in C++11 is specified to return an iterator, but
c++98 specifies it to return void.  libstdc++ 5.0 will be the first
version to have the correct return type.  Implement
ContainerAlgorithms::Rotate in terms of std::rotate and return the
correct iterator from it.  While std::rotate requires forward iterators,
 this workaround means cmRotate requires bidirectional iterators.  As
most of CMake uses random access iterators anyway, this should not
be a problem.

Implement cmRemoveIndices in terms of the RemoveN algorithm, such
that each element which is not removed is rotated only once.  This
can not use the cmRemoveN range-API algorithm because that would
require creating a new range, but the range must be taken by reference
and so it can't be a temporary.

These remove algorithms are not part of the STL and I couldn't find them
anywhere else either.
2015-02-15 19:04:31 +01:00
Stephen Kelly 069f2440c4 cmListCommand: Convert loop to find algorithm. 2015-02-15 19:04:30 +01:00
Stephen Kelly 67a26764b5 cmListCommand: Implement REVERSE subcommand with std::reverse. 2015-02-15 18:57:23 +01:00
Stephen Kelly 1cecd3a531 cmListCommand: Use std::find algorithm for FIND subcommand.
Use a ostringstream to account for the input being a variable of type
size_t as a result of using std::distance.  There is no single
format string which portably accepts a size_t.
2015-02-15 14:28:50 +01:00
Kitware Robot fd8112ea7c CMake Nightly Date Stamp 2015-02-15 00:01:08 -05:00
Kitware Robot feb76254c5 CMake Nightly Date Stamp 2015-02-14 00:01:14 -05:00
Brad King be3d4b665f Merge branch 'release' 2015-02-13 15:04:45 -05:00
Brad King 8206e8b431 Merge topic 'doc-3.2-relnotes-fixup'
6d19ef9b Help: In 3.2 relnotes move OpenGL/X11 to deprecated/removed section
2015-02-13 15:04:06 -05:00
Brad King 9457bf9f40 Merge branch 'doc-3.2-relnotes-fixup' into release 2015-02-13 13:49:50 -05:00
Brad King 6d19ef9b7c Help: In 3.2 relnotes move OpenGL/X11 to deprecated/removed section
It is a possibly incompatible change.
2015-02-13 13:45:15 -05:00
Brad King d891d47434 Tests: Consolidate detection of 'rpmbuild'
Several tests use slight variations of the same logic to enable CPack
RPM tests.  Consolidate this logic into one check before any tests are
added.  Look for 'rpmbuild' only on Linux and only when the test build
tree does not have spaces in the path.  In particular, this will make
the result available in time for the RunCMake.CPackRPM test to be
activated even if CMake is configured exactly once.
2015-02-13 11:50:38 -05:00
Brad King 0304e54528 Merge topic 'doc-configure_file-output-location'
029d38fa Help: Revise configure_file documentation (#15403)
2015-02-13 11:03:03 -05:00
Brad King d6616181c8 Merge topic 'clean-up-cmFunctionCommand'
78757e7f cmFunctionCommand: Replace loops with cmJoin.
fc1cf265 cmFunctionCommand: Remove counting variable.
e5ebeae7 cmFunctionCommand: Split loop in two.
2015-02-13 11:03:00 -05:00
Brad King cc90fd58ec Merge topic 'xcode-attribute-genex'
bf8f9c29 Xcode: Teach XCODE_ATTRIBUTE target properties about generator expressions
2015-02-13 11:02:58 -05:00
Nils Gladitz a2ccbffd8b CPackWIX: Extend the patching mechanism to allow adding content to <Product>. 2015-02-13 12:09:40 +01:00
Kitware Robot 8d38ff05e2 CMake Nightly Date Stamp 2015-02-13 00:01:16 -05:00
Brad King 481ec779ab Merge branch 'doc-configure_file-output-location' into release 2015-02-12 16:22:15 -05:00
Brad King 029d38fa61 Help: Revise configure_file documentation (#15403)
Format the documentation with better reST markup.  Revise the
wording to clarify how relative paths are handled.  Also add
an example section.
2015-02-12 16:20:32 -05:00
Stephen Kelly 78757e7ffc cmFunctionCommand: Replace loops with cmJoin. 2015-02-12 20:25:21 +01:00
Stephen Kelly fc1cf2654d cmFunctionCommand: Remove counting variable.
Start iteration at correct starting point directly.
2015-02-12 20:25:21 +01:00
Stephen Kelly e5ebeae768 cmFunctionCommand: Split loop in two. 2015-02-12 20:25:20 +01:00
Gregor Jasny bf8f9c29e7 Xcode: Teach XCODE_ATTRIBUTE target properties about generator expressions
Signed-off-by: Gregor Jasny <gjasny@googlemail.com>
2015-02-12 13:35:31 -05:00
Brad King 0ec1f45a13 Merge branch 'release' 2015-02-12 12:53:35 -05:00
Brad King 8e05ba274f Merge branch 'release-3.1' 2015-02-12 12:45:22 -05:00
Brad King 32821bb319 Merge topic 'clean-up-cmMacroCommand'
b5f98e50 cmMacroCommand: Manipulate target string directly.
83414d5a cmMacroCommand: Move computation of ARGV%n names out of double loop.
9a1f8f35 cmMacroCommand: Move ARGV replacement out of condition.
4aa7bd2a cmMacroCommand: Remove condition around ARGN replacement.
6774c92b cmMacroCommand: Declare tmps in the scope that it's used.
2c4a7298 cmMacroCommand: Declare arg in the scope that it is used.
a551851a cmMacroCommand: Inline variable computation.
f79c0f76 cmMacroCommand: Compute variables outside of two loops.
8e0827b6 cmMacroCommand: Remove intermediate arg variables.
f2c49f59 cmMacroCommand: Remove condition around ARGN computation.
3250a7e5 cmMacroCommand: Remove conditional append of semicolon.
081a13f7 cmMacroCommand: Declare arg variables where used and initialized.
17b5ebd3 cmMacroCommand: Join the args strings outside of the loops.
2015-02-12 11:53:11 -05:00
Brad King e6ae3c6ae0 Merge topic 'use-cmRange'
7c3f6376 Convert loop into two algorithms.
8a399c8c Convert loop to the common pattern.
abfca975 Move loop inside of condition.
0b61b86d Handle last element outside of the loop.
e21f7829 cmTarget: Use a sorted vector in place of a set.
559dc155 cmSet: Replace loop with cmJoin.
0ea71932 cmFindBase: Replace loop with cmJoin on range.
9380e85f Convert loops to cmJoin algorithm with cmRange.
bb10012f cmStringCommand: Accumulate with cmJoin and range adaptors.
0c12f1ea cmAlgorithms: Add a range adaptor and API for adjusting a range.
27c6f017 Use cmJoin to accumulate string ranges.
4e78ebbd cmAlgorithms: Add a Range container and adaptor method.
89102249 Replace common loop pattern with cmJoin
7b8725bf Convert loops populating maybe-empty content into the common pattern.
7ee56f03 Convert loops into the commonly used pattern.
0a4e5674 cmMacroCommand: Remove counting variable.
...
2015-02-12 11:53:04 -05:00
Brad King fc7e15691a Merge topic 'install-DESTINATION-genex'
f30022eb install: Allow generator expressions in TARGETS DESTINATION (#14317)
7607c3d1 cmInstallGenerator: Pass destination explicitly to AddInstallRule
ebd556ca cmInstallGenerator: Fix check for absolute install destinations
290ca8e2 cmInstallGenerator: Refactor computation of absolute install dest
f99991db cmInstallGenerator: Move GetDestination to subclasses that need it
2015-02-12 11:53:02 -05:00
Brad King 8c59928f3a Merge topic 'FindCoin3D-drop-link'
e2a8984c FindCoin3D: Drop link to project homepage
2015-02-12 11:53:00 -05:00
Brad King a4a6b55f08 Merge topic 'cpack_rpm_mulit_prefix_fixup'
be36bfd6 CPackRPM: Do not run file(GLOB_RECURSE) without CMP0009 set to NEW
2015-02-12 11:52:58 -05:00
Kitware Robot 09cdcc5430 CMake Nightly Date Stamp 2015-02-12 00:01:15 -05:00
Stephen Kelly b5f98e5012 cmMacroCommand: Manipulate target string directly.
Avoid copying a string from the source, manipulating it, and then
copying it back.  Manipulate it in place instead.
2015-02-11 22:58:34 +01:00
Stephen Kelly 83414d5a07 cmMacroCommand: Move computation of ARGV%n names out of double loop. 2015-02-11 22:58:34 +01:00
Stephen Kelly 9a1f8f35f4 cmMacroCommand: Move ARGV replacement out of condition. 2015-02-11 22:58:34 +01:00
Stephen Kelly 4aa7bd2ac1 cmMacroCommand: Remove condition around ARGN replacement.
There is none for ARGC replacement, so no reason to conditionalize the
replacement.  The computation is already done.
2015-02-11 22:58:34 +01:00
Stephen Kelly 6774c92b58 cmMacroCommand: Declare tmps in the scope that it's used.
We don't particularly need to reuse the string memory here, and this
pattern is not common in CMake.
2015-02-11 22:58:34 +01:00
Stephen Kelly 2c4a7298fc cmMacroCommand: Declare arg in the scope that it is used.
It can make sense to declare objects outside of loops if
the size required by the object can grow (eg std::string when
using getline), but that is not the case here.
2015-02-11 22:58:34 +01:00
Stephen Kelly a551851ab3 cmMacroCommand: Inline variable computation. 2015-02-11 22:58:33 +01:00
Stephen Kelly f79c0f7697 cmMacroCommand: Compute variables outside of two loops.
Avoid computing them from scratch for each argument of each
function.
2015-02-11 22:58:33 +01:00
Stephen Kelly 8e0827b646 cmMacroCommand: Remove intermediate arg variables. 2015-02-11 22:58:33 +01:00
Stephen Kelly f2c49f59d8 cmMacroCommand: Remove condition around ARGN computation.
An empty string is appended if the condition is false, which is
ok for this commit.
2015-02-11 22:58:33 +01:00
Stephen Kelly 3250a7e535 cmMacroCommand: Remove conditional append of semicolon.
The conditions are never true.
2015-02-11 22:58:33 +01:00
Stephen Kelly 081a13f7c0 cmMacroCommand: Declare arg variables where used and initialized.
Make the initialization by population with the expanded* content
unconditional.
2015-02-11 22:58:33 +01:00
Stephen Kelly 17b5ebd383 cmMacroCommand: Join the args strings outside of the loops.
This means that we compute the strings even if not used in the macro
but this shouldn't be expensive and it simplifies the code.
2015-02-11 22:58:31 +01:00
Stephen Kelly 7c3f637680 Convert loop into two algorithms. 2015-02-11 22:58:09 +01:00