diff --git a/cmake.changes b/cmake.changes index b5dfc31..3a955a5 100644 --- a/cmake.changes +++ b/cmake.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Wed Mar 29 14:59:26 UTC 2017 - bwiedemann@suse.com + +- Add reproducible.patch and reproducible2.patch + to allow for reproducible builds of freerdp and other packages + ------------------------------------------------------------------- Tue Mar 28 09:14:23 UTC 2017 - pgajdos@suse.com diff --git a/cmake.spec b/cmake.spec index 65160ec..876e5d2 100644 --- a/cmake.spec +++ b/cmake.spec @@ -38,6 +38,10 @@ Patch4: form.patch Patch5: system-libs.patch # PATCH-FIX-UPSTREAM cmake-ImageMagick7.patch -- find also ImageMagick 7 Patch6: cmake-ImageMagick7.patch +# PATCH-FIX-UPSTREAM reproducible.patch -- https://gitlab.kitware.com/cmake/cmake/merge_requests/432 +Patch7: reproducible.patch +# PATCH-FIX-UPSTREAM reproducible2.patch -- https://gitlab.kitware.com/cmake/cmake/merge_requests/446 +Patch8: reproducible2.patch BuildRequires: curl-devel BuildRequires: fdupes BuildRequires: gcc-c++ @@ -78,6 +82,8 @@ echo "`grep %{name}-%{version}.tar.gz %{SOURCE5} | grep -Eo '^[0-9a-f]+'` %{SOU %patch4 -p1 %patch5 -p1 %patch6 -p1 +%patch7 -p1 +%patch8 -p1 %build export CFLAGS="%{optflags}" diff --git a/reproducible.patch b/reproducible.patch new file mode 100644 index 0000000..32ecf14 --- /dev/null +++ b/reproducible.patch @@ -0,0 +1,167 @@ +commit 243aed525a2fd8e5fe32139fd0f8d0cc0e40cc33 +Author: Bernhard M. Wiedemann +Date: Wed Jan 25 07:15:40 2017 +0100 + + cmTimestamp: Support SOURCE_DATE_EPOCH to override current time + + See https://reproducible-builds.org/ for why this is good and + https://reproducible-builds.org/specs/source-date-epoch/ for the + definition of this variable. + +diff --git a/Help/command/string.rst b/Help/command/string.rst +index 77538f6..2c7847a 100644 +--- a/Help/command/string.rst ++++ b/Help/command/string.rst +@@ -329,6 +329,12 @@ If no explicit ```` is given it will default to: + + Write a string which can be used as an identifier in C. + ++.. note:: ++ ++ If the ``SOURCE_DATE_EPOCH`` environment variable is set, ++ its value will be used instead of the current time. ++ See https://reproducible-builds.org/specs/source-date-epoch/ for details. ++ + UUID + """" + +diff --git a/Help/release/dev/SOURCE_DATE_EPOCH.rst b/Help/release/dev/SOURCE_DATE_EPOCH.rst +new file mode 100644 +index 0000000..576e1da +--- /dev/null ++++ b/Help/release/dev/SOURCE_DATE_EPOCH.rst +@@ -0,0 +1,5 @@ ++SOURCE_DATE_EPOCH ++----------------- ++ ++* The :command:`string(TIMESTAMP)` will now honor the ``SOURCE_DATE_EPOCH`` ++ environment variable and use its value instead of the current time. +diff --git a/Source/cmTimestamp.cxx b/Source/cmTimestamp.cxx +index 4a97114..1e5ac5b 100644 +--- a/Source/cmTimestamp.cxx ++++ b/Source/cmTimestamp.cxx +@@ -12,6 +13,16 @@ std::string cmTimestamp::CurrentTime(const std::string& formatString, + bool utcFlag) + { + time_t currentTimeT = time(CM_NULLPTR); ++ std::string source_date_epoch; ++ cmSystemTools::GetEnv("SOURCE_DATE_EPOCH", source_date_epoch); ++ if (!source_date_epoch.empty()) { ++ std::istringstream iss(source_date_epoch); ++ iss >> currentTimeT; ++ if (iss.fail() || !iss.eof()) { ++ cmSystemTools::Error("Cannot parse SOURCE_DATE_EPOCH as integer"); ++ exit(27); ++ } ++ } + if (currentTimeT == time_t(-1)) { + return std::string(); + } +diff --git a/Tests/RunCMake/string/RunCMakeTest.cmake b/Tests/RunCMake/string/RunCMakeTest.cmake +index 8067d9d..38a77b0 100644 +--- a/Tests/RunCMake/string/RunCMakeTest.cmake ++++ b/Tests/RunCMake/string/RunCMakeTest.cmake +@@ -6,6 +6,11 @@ run_cmake(AppendNoArgs) + run_cmake(Concat) + run_cmake(ConcatNoArgs) + ++run_cmake(Timestamp) ++run_cmake(TimestampEmpty) ++run_cmake(TimestampInvalid) ++run_cmake(TimestampInvalid2) ++ + run_cmake(Uuid) + run_cmake(UuidMissingNamespace) + run_cmake(UuidMissingNamespaceValue) +diff --git a/Tests/RunCMake/string/Timestamp-result.txt b/Tests/RunCMake/string/Timestamp-result.txt +new file mode 100644 +index 0000000..573541a +--- /dev/null ++++ b/Tests/RunCMake/string/Timestamp-result.txt +@@ -0,0 +1 @@ ++0 +diff --git a/Tests/RunCMake/string/Timestamp-stderr.txt b/Tests/RunCMake/string/Timestamp-stderr.txt +new file mode 100644 +index 0000000..c12b070 +--- /dev/null ++++ b/Tests/RunCMake/string/Timestamp-stderr.txt +@@ -0,0 +1 @@ ++RESULT=2005-08-07 23:19:49 Sun Aug 05 day=219 wd=0 week=32 %%I=11 +diff --git a/Tests/RunCMake/string/Timestamp.cmake b/Tests/RunCMake/string/Timestamp.cmake +new file mode 100644 +index 0000000..1232300 +--- /dev/null ++++ b/Tests/RunCMake/string/Timestamp.cmake +@@ -0,0 +1,3 @@ ++set(ENV{SOURCE_DATE_EPOCH} "1123456789") ++string(TIMESTAMP RESULT "%Y-%m-%d %H:%M:%S %a %b %y day=%j wd=%w week=%U %%I=%I" UTC) ++message("RESULT=${RESULT}") +diff --git a/Tests/RunCMake/string/TimestampEmpty-result.txt b/Tests/RunCMake/string/TimestampEmpty-result.txt +new file mode 100644 +index 0000000..573541a +--- /dev/null ++++ b/Tests/RunCMake/string/TimestampEmpty-result.txt +@@ -0,0 +1 @@ ++0 +diff --git a/Tests/RunCMake/string/TimestampEmpty-stderr.txt b/Tests/RunCMake/string/TimestampEmpty-stderr.txt +new file mode 100644 +index 0000000..35cbd3c +--- /dev/null ++++ b/Tests/RunCMake/string/TimestampEmpty-stderr.txt +@@ -0,0 +1 @@ ++RESULT=2 +diff --git a/Tests/RunCMake/string/TimestampEmpty.cmake b/Tests/RunCMake/string/TimestampEmpty.cmake +new file mode 100644 +index 0000000..21b770f +--- /dev/null ++++ b/Tests/RunCMake/string/TimestampEmpty.cmake +@@ -0,0 +1,3 @@ ++set(ENV{SOURCE_DATE_EPOCH} "") ++string(TIMESTAMP RESULT "%Y-%m-%d %H:%M:%S" UTC) ++message("RESULT=${RESULT}") +diff --git a/Tests/RunCMake/string/TimestampInvalid-result.txt b/Tests/RunCMake/string/TimestampInvalid-result.txt +new file mode 100644 +index 0000000..f64f5d8 +--- /dev/null ++++ b/Tests/RunCMake/string/TimestampInvalid-result.txt +@@ -0,0 +1 @@ ++27 +diff --git a/Tests/RunCMake/string/TimestampInvalid-stderr.txt b/Tests/RunCMake/string/TimestampInvalid-stderr.txt +new file mode 100644 +index 0000000..75566da +--- /dev/null ++++ b/Tests/RunCMake/string/TimestampInvalid-stderr.txt +@@ -0,0 +1 @@ ++CMake Error: Cannot parse SOURCE_DATE_EPOCH as integer +diff --git a/Tests/RunCMake/string/TimestampInvalid.cmake b/Tests/RunCMake/string/TimestampInvalid.cmake +new file mode 100644 +index 0000000..ab36270 +--- /dev/null ++++ b/Tests/RunCMake/string/TimestampInvalid.cmake +@@ -0,0 +1,3 @@ ++set(ENV{SOURCE_DATE_EPOCH} "invalid-integer") ++string(TIMESTAMP RESULT "%Y-%m-%d %H:%M:%S" UTC) ++message("RESULT=${RESULT}") +diff --git a/Tests/RunCMake/string/TimestampInvalid2-result.txt b/Tests/RunCMake/string/TimestampInvalid2-result.txt +new file mode 100644 +index 0000000..f64f5d8 +--- /dev/null ++++ b/Tests/RunCMake/string/TimestampInvalid2-result.txt +@@ -0,0 +1 @@ ++27 +diff --git a/Tests/RunCMake/string/TimestampInvalid2-stderr.txt b/Tests/RunCMake/string/TimestampInvalid2-stderr.txt +new file mode 100644 +index 0000000..75566da +--- /dev/null ++++ b/Tests/RunCMake/string/TimestampInvalid2-stderr.txt +@@ -0,0 +1 @@ ++CMake Error: Cannot parse SOURCE_DATE_EPOCH as integer +diff --git a/Tests/RunCMake/string/TimestampInvalid2.cmake b/Tests/RunCMake/string/TimestampInvalid2.cmake +new file mode 100644 +index 0000000..5cc61b8 +--- /dev/null ++++ b/Tests/RunCMake/string/TimestampInvalid2.cmake +@@ -0,0 +1,3 @@ ++set(ENV{SOURCE_DATE_EPOCH} "123trailing-garbage") ++string(TIMESTAMP RESULT "%Y-%m-%d %H:%M:%S" UTC) ++message("RESULT=${RESULT}") diff --git a/reproducible2.patch b/reproducible2.patch new file mode 100644 index 0000000..0c661c0 --- /dev/null +++ b/reproducible2.patch @@ -0,0 +1,37 @@ +commit 5181f1f86a4d4c2ac09a540285c938fe2c2fa262 +Author: Bernhard M. Wiedemann +Date: Sun Jan 29 11:52:55 2017 +0100 + + Tests: make tests pass with SOURCE_DATE_EPOCH set + + Fix tests to account for commit 243aed52 (cmTimestamp: Support + SOURCE_DATE_EPOCH to override current time, 2017-01-25). + + In openSUSE we are running the test-suite as part of the build and that + failed in these two places when building everything with + `SOURCE_DATE_EPOCH` set. + +diff --git a/Tests/CMakeTests/File-TIMESTAMP-NotBogus.cmake b/Tests/CMakeTests/File-TIMESTAMP-NotBogus.cmake +index d0e5fe3..f1aa390 100644 +--- a/Tests/CMakeTests/File-TIMESTAMP-NotBogus.cmake ++++ b/Tests/CMakeTests/File-TIMESTAMP-NotBogus.cmake +@@ -1,6 +1,7 @@ + set(STAMP_FILENAME "${CMAKE_CURRENT_BINARY_DIR}/FileTimestamp-Stamp") + set(STAMP_FORMAT "%Y-%m-%d") + ++unset(ENV{SOURCE_DATE_EPOCH}) + string(TIMESTAMP timestamp1 "${STAMP_FORMAT}") + + file(WRITE "${STAMP_FILENAME}" "foo") +diff --git a/Tests/CTestTestStopTime/GetDate.cmake b/Tests/CTestTestStopTime/GetDate.cmake +index 1f4cb24..46ab2fb 100644 +--- a/Tests/CTestTestStopTime/GetDate.cmake ++++ b/Tests/CTestTestStopTime/GetDate.cmake +@@ -49,6 +49,7 @@ macro(GET_DATE) + # 01/12/2006 08:55:12 + # mm/dd/YYYY HH:MM:SS + # ++ unset(ENV{SOURCE_DATE_EPOCH}) + string(TIMESTAMP "${GD_PREFIX}OV" "%m/%d/%Y %H:%M:%S") + + if(${GD_PREFIX}VERBOSE)