diff --git a/CMakeLists.txt b/CMakeLists.txt index 24061c42..d80b3d4c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,8 +14,6 @@ set (HS_VERSION ${HS_MAJOR_VERSION}.${HS_MINOR_VERSION}.${HS_PATCH_VERSION}) set (CMAKE_CONFIGURATION_TYPES "Debug;Release;RelWithDebInfo" CACHE STRING "" FORCE) -string (TIMESTAMP BUILD_DATE "%Y-%m-%d") - set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake) include(CheckCCompilerFlag) include(CheckCXXCompilerFlag) @@ -98,6 +96,18 @@ else() message(FATAL_ERROR "No python interpreter found") endif() +# allow for reproducible builds - python for portability +if (DEFINED ENV{SOURCE_DATE_EPOCH}) + execute_process( + COMMAND "${PYTHON}" "${CMAKE_MODULE_PATH}/formatdate.py" "$ENV{SOURCE_DATE_EPOCH}" + OUTPUT_VARIABLE BUILD_DATE + OUTPUT_STRIP_TRAILING_WHITESPACE) +else () + string (TIMESTAMP BUILD_DATE "%Y-%m-%d") +endif () +message(STATUS "Build date: ${BUILD_DATE}") + + if(${RAGEL} STREQUAL "RAGEL-NOTFOUND") message(FATAL_ERROR "Ragel state machine compiler not found") endif() diff --git a/cmake/formatdate.py b/cmake/formatdate.py new file mode 100755 index 00000000..1b9c62d2 --- /dev/null +++ b/cmake/formatdate.py @@ -0,0 +1,18 @@ +#!/usr/bin/env python +from __future__ import print_function +import os +import sys +import datetime + +def usage(): + print("Usage:", os.path.basename(sys.argv[0]), "") + +if len(sys.argv) != 2: + usage() + sys.exit(1) + +ts = sys.argv[1] + +build_date = datetime.datetime.utcfromtimestamp(int(ts)) + +print(build_date.strftime("%Y-%m-%d"))