[Pkg-cmake-commits] [cmake] 02/03: Backport patch to make file(GLOB) order deterministic.

Felix Geyer fgeyer at moszumanska.debian.org
Tue Jun 28 18:32:20 UTC 2016


This is an automated email from the git hooks/post-receive script.

fgeyer pushed a commit to branch master
in repository cmake.

commit 2e9e55ed25c1d2675e191026037fcf73a301f496
Author: Felix Geyer <fgeyer at debian.org>
Date:   Tue Jun 28 19:39:45 2016 +0200

    Backport patch to make file(GLOB) order deterministic.
    
    * Backport patch to make file(GLOB) order deterministic. (Closes: #824263)
      - Add file_Sort_GLOB_results_to_make_it_deterministic.patch
---
 debian/changelog                                   |   2 +
 ...ort_GLOB_results_to_make_it_deterministic.patch | 121 +++++++++++++++++++++
 debian/patches/series                              |   1 +
 3 files changed, 124 insertions(+)

diff --git a/debian/changelog b/debian/changelog
index 0d9e64e..ac2938c 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -2,6 +2,8 @@ cmake (3.5.2-2) UNRELEASED; urgency=medium
 
   * Make FindLibArchive compatible with libarchive 3.2. (Closes: #828092)
     - Add FindLibArchive_Support_libarchive_3.2.patch
+  * Backport patch to make file(GLOB) order deterministic. (Closes: #824263)
+    - Add file_Sort_GLOB_results_to_make_it_deterministic.patch
 
  -- Felix Geyer <fgeyer at debian.org>  Tue, 28 Jun 2016 19:33:54 +0200
 
diff --git a/debian/patches/file_Sort_GLOB_results_to_make_it_deterministic.patch b/debian/patches/file_Sort_GLOB_results_to_make_it_deterministic.patch
new file mode 100644
index 0000000..229fa76
--- /dev/null
+++ b/debian/patches/file_Sort_GLOB_results_to_make_it_deterministic.patch
@@ -0,0 +1,121 @@
+From edcccde7d65944b3744c4567bd1d452211829702 Mon Sep 17 00:00:00 2001
+From: Reiner Herrmann <reiner at reiner-h.de>
+Date: Sat, 14 May 2016 12:30:36 +0200
+Subject: [PATCH] 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/).
+---
+ 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(-)
+
+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
+@@ -1028,6 +1028,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 )
+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}")
diff --git a/debian/patches/series b/debian/patches/series
index 6043478..09e89d2 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -2,3 +2,4 @@ FindBoost_add_-lpthread_#563479.diff
 qt_import_dir_variable.diff
 fix-ftbfs-on-kfreebsd.patch
 FindLibArchive_Support_libarchive_3.2.patch
+file_Sort_GLOB_results_to_make_it_deterministic.patch

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-cmake/cmake.git



More information about the Pkg-cmake-commits mailing list