1*06f32e7eSjoerg# CMake script that writes version control information to a header. 2*06f32e7eSjoerg# 3*06f32e7eSjoerg# Input variables: 4*06f32e7eSjoerg# NAMES - A list of names for each of the source directories. 5*06f32e7eSjoerg# <NAME>_SOURCE_DIR - A path to source directory for each name in NAMES. 6*06f32e7eSjoerg# HEADER_FILE - The header file to write 7*06f32e7eSjoerg# 8*06f32e7eSjoerg# The output header will contain macros <NAME>_REPOSITORY and <NAME>_REVISION, 9*06f32e7eSjoerg# where "<NAME>" is substituted with the names specified in the input variables, 10*06f32e7eSjoerg# for each of the <NAME>_SOURCE_DIR given. 11*06f32e7eSjoerg 12*06f32e7eSjoergget_filename_component(LLVM_CMAKE_DIR "${CMAKE_SCRIPT_MODE_FILE}" PATH) 13*06f32e7eSjoerg 14*06f32e7eSjoerglist(APPEND CMAKE_MODULE_PATH "${LLVM_CMAKE_DIR}") 15*06f32e7eSjoerg 16*06f32e7eSjoerginclude(VersionFromVCS) 17*06f32e7eSjoerg 18*06f32e7eSjoerg# Handle strange terminals 19*06f32e7eSjoergset(ENV{TERM} "dumb") 20*06f32e7eSjoerg 21*06f32e7eSjoergfunction(append_info name path) 22*06f32e7eSjoerg if(path) 23*06f32e7eSjoerg get_source_info("${path}" revision repository) 24*06f32e7eSjoerg endif() 25*06f32e7eSjoerg if(revision) 26*06f32e7eSjoerg file(APPEND "${HEADER_FILE}.tmp" 27*06f32e7eSjoerg "#define ${name}_REVISION \"${revision}\"\n") 28*06f32e7eSjoerg else() 29*06f32e7eSjoerg file(APPEND "${HEADER_FILE}.tmp" 30*06f32e7eSjoerg "#undef ${name}_REVISION\n") 31*06f32e7eSjoerg endif() 32*06f32e7eSjoerg if(repository) 33*06f32e7eSjoerg file(APPEND "${HEADER_FILE}.tmp" 34*06f32e7eSjoerg "#define ${name}_REPOSITORY \"${repository}\"\n") 35*06f32e7eSjoerg else() 36*06f32e7eSjoerg file(APPEND "${HEADER_FILE}.tmp" 37*06f32e7eSjoerg "#undef ${name}_REPOSITORY\n") 38*06f32e7eSjoerg endif() 39*06f32e7eSjoergendfunction() 40*06f32e7eSjoerg 41*06f32e7eSjoergforeach(name IN LISTS NAMES) 42*06f32e7eSjoerg if(NOT DEFINED ${name}_SOURCE_DIR) 43*06f32e7eSjoerg message(FATAL_ERROR "${name}_SOURCE_DIR is not defined") 44*06f32e7eSjoerg endif() 45*06f32e7eSjoerg append_info(${name} "${${name}_SOURCE_DIR}") 46*06f32e7eSjoergendforeach() 47*06f32e7eSjoerg 48*06f32e7eSjoerg# Copy the file only if it has changed. 49*06f32e7eSjoergexecute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different 50*06f32e7eSjoerg "${HEADER_FILE}.tmp" "${HEADER_FILE}") 51*06f32e7eSjoergfile(REMOVE "${HEADER_FILE}.tmp") 52