| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 | 
							- #
 
- # Functions and utilities for build reproducibility
 
- #
 
- # Set a target to be reproducible
 
- function(set_reproducible_target target)
 
-   # properties for static libraries
 
-   set_target_properties(${target} PROPERTIES STATIC_LIBRARY_OPTIONS "-D")
 
-   # properties on executables
 
-   target_link_options(${target} PRIVATE -fdebug-prefix-map=${CMAKE_SOURCE_DIR}=)
 
-   target_link_options(${target} PRIVATE -fdebug-prefix-map=${CMAKE_BINARY_DIR}=)
 
-   if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "8")
 
-     target_compile_options(${target} PRIVATE -ffile-prefix-map=${CMAKE_SOURCE_DIR}=)
 
-   endif()
 
-   # properties on sources
 
-   get_target_property(sources ${target} SOURCES)
 
-   get_target_property(source_dir ${target} SOURCE_DIR)
 
-   foreach(file IN LISTS sources)
 
-     cmake_path(ABSOLUTE_PATH file BASE_DIRECTORY ${source_dir})
 
-     cmake_path(RELATIVE_PATH file BASE_DIRECTORY ${CMAKE_SOURCE_DIR} OUTPUT_VARIABLE rpath)
 
-     set_property(
 
-       SOURCE ${file}
 
-       DIRECTORY ${source_dir}
 
-       APPEND
 
-       PROPERTY COMPILE_OPTIONS "-frandom-seed=${rpath}"
 
-       )
 
-   endforeach()
 
- endfunction()
 
- # Get the list of targets for all directories
 
- function(get_all_targets _result _dir)
 
-   get_property(
 
-     _subdirs
 
-     DIRECTORY "${_dir}"
 
-     PROPERTY SUBDIRECTORIES
 
-     )
 
-   foreach(_subdir IN LISTS _subdirs)
 
-     get_all_targets(${_result} "${_subdir}")
 
-   endforeach()
 
-   get_directory_property(_sub_targets DIRECTORY "${_dir}" BUILDSYSTEM_TARGETS)
 
-   set(${_result}
 
-       ${${_result}} ${_sub_targets}
 
-       PARENT_SCOPE
 
-       )
 
- endfunction()
 
- # Make every target reproducible
 
- function(set_all_targets_reproducible)
 
-   get_all_targets(targets ${CMAKE_SOURCE_DIR})
 
-   foreach(target IN LISTS targets)
 
-     set_reproducible_target(${target})
 
-   endforeach()
 
- endfunction()
 
- # Set source epoch
 
- function(set_source_epoch epoch)
 
-   set(ENV{SOURCE_DATE_EPOCH} ${epoch})
 
-   if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "8")
 
-     string(TIMESTAMP SOURCE_DATE_EPOCH "%Y-%m-%d")
 
-     add_compile_definitions(SOURCE_DATE_EPOCH="${SOURCE_DATE_EPOCH}")
 
-     string(TIMESTAMP SOURCE_TIME_EPOCH "%H:%M:%S")
 
-     add_compile_definitions(SOURCE_TIME_EPOCH="${SOURCE_TIME_EPOCH}")
 
-   endif()
 
- endfunction()
 
 
  |