[Cmake-commits] CMake branch, next, updated. v3.5.2-1457-g5a82892

Brad King brad.king at kitware.com
Tue May 17 10:17:16 EDT 2016


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "CMake".

The branch, next has been updated
       via  5a82892855a34228ebc2315f55400fb8539a440b (commit)
       via  edcccde7d65944b3744c4567bd1d452211829702 (commit)
      from  48d6c426e5a5634f9897ef6ecc6d8e9918fdd405 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=5a82892855a34228ebc2315f55400fb8539a440b
commit 5a82892855a34228ebc2315f55400fb8539a440b
Merge: 48d6c42 edcccde
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Tue May 17 10:17:15 2016 -0400
Commit:     CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Tue May 17 10:17:15 2016 -0400

    Merge topic 'file-glob-sort' into next
    
    edcccde7 file: Sort GLOB results to make it deterministic (#14491)


https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=edcccde7d65944b3744c4567bd1d452211829702
commit edcccde7d65944b3744c4567bd1d452211829702
Author:     Reiner Herrmann <reiner at reiner-h.de>
AuthorDate: Sat May 14 12:30:36 2016 +0200
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Tue May 17 10:12:11 2016 -0400

    file: Sort GLOB results to make it deterministic (#14491)
    
    Even though the `file(GLOB)` documentation specifically warns against
    using it to collect a list of source files, projects often do it anyway.
    Since it uses `readdir()`, the list of files will be unsorted.
    This list is often passed directly to add_executable / add_library.
    Linking binaries with an unsorted list will make it unreproducible,
    which means that the produced binary will differ depending on the
    unpredictable `readdir()` order.
    
    To solve those reproducibility issues in a lot of programs (which don't
    explicitly `list(SORT)` the list manually), sort the resulting list of
    the `file(GLOB)` command.
    
    A more detailed rationale about reproducible builds is available
    [here](https://reproducible-builds.org/).

diff --git a/Help/command/file.rst b/Help/command/file.rst
index 96ac6c7..256d16d 100644
--- a/Help/command/file.rst
+++ b/Help/command/file.rst
@@ -103,8 +103,9 @@ Generate a list of files that match the ``<globbing-expressions>`` and
 store it into the ``<variable>``.  Globbing expressions are similar to
 regular expressions, but much simpler.  If ``RELATIVE`` flag is
 specified, the results will be returned as relative paths to the given
-path.  No specific order of results is defined.  If order is important then
-sort the list explicitly (e.g. using the :command:`list(SORT)` command).
+path.  No specific order of results is defined other than that it is
+deterministic.  If order is important then sort the list explicitly
+(e.g. using the :command:`list(SORT)` command).
 
 By default ``GLOB`` lists directories - directories are omited in result if
 ``LIST_DIRECTORIES`` is set to false.
diff --git a/Source/cmFileCommand.cxx b/Source/cmFileCommand.cxx
index 5363a99..4e72f36 100644
--- a/Source/cmFileCommand.cxx
+++ b/Source/cmFileCommand.cxx
@@ -823,6 +823,7 @@ bool cmFileCommand::HandleGlobCommand(std::vector<std::string> const& args,
 
     std::vector<std::string>::size_type cc;
     std::vector<std::string>& files = g.GetFiles();
+    std::sort(files.begin(), files.end());
     for (cc = 0; cc < files.size(); cc++) {
       if (!first) {
         output += ";";
diff --git a/Tests/RunCMake/file/GLOB.cmake b/Tests/RunCMake/file/GLOB.cmake
index 3d577e3..c524e42 100644
--- a/Tests/RunCMake/file/GLOB.cmake
+++ b/Tests/RunCMake/file/GLOB.cmake
@@ -12,17 +12,14 @@ file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/test/dir 2/non_empty_dir/dir 2 subdir fi
 file(GLOB CONTENT_LIST "${CMAKE_CURRENT_BINARY_DIR}/test/*/*")
 list(LENGTH CONTENT_LIST CONTENT_COUNT)
 message("content: ${CONTENT_COUNT} ")
-list(SORT CONTENT_LIST)
 message("${CONTENT_LIST}")
 
 file(GLOB CONTENT_LIST LIST_DIRECTORIES true "${CMAKE_CURRENT_BINARY_DIR}/test/*/*")
 list(LENGTH CONTENT_LIST CONTENT_COUNT)
 message("content: ${CONTENT_COUNT} ")
-list(SORT CONTENT_LIST)
 message("${CONTENT_LIST}")
 
 file(GLOB CONTENT_LIST LIST_DIRECTORIES false "${CMAKE_CURRENT_BINARY_DIR}/test/*/*")
 list(LENGTH CONTENT_LIST CONTENT_COUNT)
 message("content: ${CONTENT_COUNT} ")
-list(SORT CONTENT_LIST)
 message("${CONTENT_LIST}")
diff --git a/Tests/RunCMake/file/GLOB_RECURSE-cyclic-recursion.cmake b/Tests/RunCMake/file/GLOB_RECURSE-cyclic-recursion.cmake
index a8c6784..fb8be42 100644
--- a/Tests/RunCMake/file/GLOB_RECURSE-cyclic-recursion.cmake
+++ b/Tests/RunCMake/file/GLOB_RECURSE-cyclic-recursion.cmake
@@ -7,17 +7,14 @@ execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink "${CMAKE_CURRENT_BINA
 file(GLOB_RECURSE CONTENT_LIST FOLLOW_SYMLINKS "${CMAKE_CURRENT_BINARY_DIR}/test/*")
 list(LENGTH CONTENT_LIST CONTENT_COUNT)
 message("content: ${CONTENT_COUNT} ")
-list(SORT CONTENT_LIST)
 message("${CONTENT_LIST}")
 
 file(GLOB_RECURSE CONTENT_LIST LIST_DIRECTORIES false FOLLOW_SYMLINKS "${CMAKE_CURRENT_BINARY_DIR}/test/*")
 list(LENGTH CONTENT_LIST CONTENT_COUNT)
 message("content: ${CONTENT_COUNT} ")
-list(SORT CONTENT_LIST)
 message("${CONTENT_LIST}")
 
 file(GLOB_RECURSE CONTENT_LIST LIST_DIRECTORIES true FOLLOW_SYMLINKS "${CMAKE_CURRENT_BINARY_DIR}/test/*")
 list(LENGTH CONTENT_LIST CONTENT_COUNT)
 message("content: ${CONTENT_COUNT} ")
-list(SORT CONTENT_LIST)
 message("${CONTENT_LIST}")
diff --git a/Tests/RunCMake/file/GLOB_RECURSE.cmake b/Tests/RunCMake/file/GLOB_RECURSE.cmake
index 6db377b..530930f 100644
--- a/Tests/RunCMake/file/GLOB_RECURSE.cmake
+++ b/Tests/RunCMake/file/GLOB_RECURSE.cmake
@@ -12,17 +12,14 @@ file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/test/dir 2/non_empty_dir/dir 2 subdir fi
 file(GLOB_RECURSE CONTENT_LIST "${CMAKE_CURRENT_BINARY_DIR}/test/*/*")
 list(LENGTH CONTENT_LIST CONTENT_COUNT)
 message("content: ${CONTENT_COUNT} ")
-list(SORT CONTENT_LIST)
 message("${CONTENT_LIST}")
 
 file(GLOB_RECURSE CONTENT_LIST LIST_DIRECTORIES false "${CMAKE_CURRENT_BINARY_DIR}/test/*/*")
 list(LENGTH CONTENT_LIST CONTENT_COUNT)
 message("content: ${CONTENT_COUNT} ")
-list(SORT CONTENT_LIST)
 message("${CONTENT_LIST}")
 
 file(GLOB_RECURSE CONTENT_LIST LIST_DIRECTORIES true "${CMAKE_CURRENT_BINARY_DIR}/test/*/*")
 list(LENGTH CONTENT_LIST CONTENT_COUNT)
 message("content: ${CONTENT_COUNT} ")
-list(SORT CONTENT_LIST)
 message("${CONTENT_LIST}")

-----------------------------------------------------------------------

Summary of changes:
 Help/command/file.rst                                   |    5 +++--
 Source/cmFileCommand.cxx                                |    1 +
 Tests/RunCMake/file/GLOB.cmake                          |    3 ---
 Tests/RunCMake/file/GLOB_RECURSE-cyclic-recursion.cmake |    3 ---
 Tests/RunCMake/file/GLOB_RECURSE.cmake                  |    3 ---
 5 files changed, 4 insertions(+), 11 deletions(-)


hooks/post-receive
-- 
CMake


More information about the Cmake-commits mailing list