From 3606a42c525b7f04fec4f6d2b814ac6af30c49c0 Mon Sep 17 00:00:00 2001 From: "Bernhard M. Wiedemann" Date: Sun, 22 Jan 2017 16:54:24 +0000 Subject: [PATCH 1/2] make build reproducible by allowing build systems to use a constant date instead of the current one 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 This call is designed to work with GNU date. If BSD support is a concern, it can be added. --- cmake/today.cmake | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/cmake/today.cmake b/cmake/today.cmake index 51d0031a8..8d008525c 100644 --- a/cmake/today.cmake +++ b/cmake/today.cmake @@ -7,7 +7,11 @@ MACRO (TODAY RESULT) EXECUTE_PROCESS(COMMAND "cmd" " /C date +%Y-%m-%d" OUTPUT_VARIABLE ${RESULT}) string(REGEX REPLACE "(..)/(..)/..(..).*" "\\1/\\2/\\3" ${RESULT} ${${RESULT}}) ELSEIF(UNIX) - EXECUTE_PROCESS(COMMAND "date" "+%Y-%m-%d" OUTPUT_VARIABLE ${RESULT}) + if (DEFINED ENV{SOURCE_DATE_EPOCH}) + EXECUTE_PROCESS(COMMAND "date" "-u" "-d" "@$ENV{SOURCE_DATE_EPOCH}" "+%Y-%m-%d" OUTPUT_VARIABLE ${RESULT}) + else () + EXECUTE_PROCESS(COMMAND "date" "+%Y-%m-%d" OUTPUT_VARIABLE ${RESULT}) + endif () string(REGEX REPLACE "(..)/(..)/..(..).*" "\\1/\\2/\\3" ${RESULT} ${${RESULT}}) ELSE (WIN32) MESSAGE(SEND_ERROR "date not implemented") From 00d71f62169b2739b43715670e3d83eb0205e4cc Mon Sep 17 00:00:00 2001 From: Armin Novak Date: Mon, 23 Jan 2017 11:25:29 +0100 Subject: [PATCH 2/2] Use CMake TIMESTAMP, remove newline from TODAY --- cmake/today.cmake | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/cmake/today.cmake b/cmake/today.cmake index 8d008525c..d2f5eaa87 100644 --- a/cmake/today.cmake +++ b/cmake/today.cmake @@ -3,18 +3,10 @@ # YYYY-MM-DD # MACRO (TODAY RESULT) - IF (WIN32) - EXECUTE_PROCESS(COMMAND "cmd" " /C date +%Y-%m-%d" OUTPUT_VARIABLE ${RESULT}) - string(REGEX REPLACE "(..)/(..)/..(..).*" "\\1/\\2/\\3" ${RESULT} ${${RESULT}}) - ELSEIF(UNIX) - if (DEFINED ENV{SOURCE_DATE_EPOCH}) - EXECUTE_PROCESS(COMMAND "date" "-u" "-d" "@$ENV{SOURCE_DATE_EPOCH}" "+%Y-%m-%d" OUTPUT_VARIABLE ${RESULT}) - else () - EXECUTE_PROCESS(COMMAND "date" "+%Y-%m-%d" OUTPUT_VARIABLE ${RESULT}) - endif () - string(REGEX REPLACE "(..)/(..)/..(..).*" "\\1/\\2/\\3" ${RESULT} ${${RESULT}}) - ELSE (WIN32) - MESSAGE(SEND_ERROR "date not implemented") - SET(${RESULT} 000000) - ENDIF (WIN32) + if (DEFINED ENV{SOURCE_DATE_EPOCH} AND NOT WIN32) + EXECUTE_PROCESS(COMMAND "date" "-u" "-d" "@$ENV{SOURCE_DATE_EPOCH}" "+%Y-%m-%d" + OUTPUT_VARIABLE ${RESULT} OUTPUT_STRIP_TRAILING_WHITESPACE) + else() + STRING(TIMESTAMP ${RESULT} "%Y-%m-%d" UTC) + endif() ENDMACRO (TODAY)