You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

59 lines
1.8 KiB

macro(getFileMetadata_ FILE RESULT_VAR)
if(GENERATOR_TYPE STREQUAL "TGZ")
# getPackageContent defined for archives omit the metadata (non-verbose)
execute_process(COMMAND ${CMAKE_COMMAND} -E env TZ=Etc/UTC ${CMAKE_COMMAND} -E tar -xtvf ${FILE}
OUTPUT_VARIABLE ${RESULT_VAR}
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE)
else()
getPackageContent("${FILE}" ${RESULT_VAR})
endif()
endmacro()
function(checkContentTimestamp FILE REGEX)
getFileMetadata_("${FILE}" METADATA_)
if(NOT METADATA_ MATCHES "${REGEX}")
string(REPLACE "\n" "\n " metadata_indented "${METADATA_}")
message(FATAL_ERROR
"Wrong timestamps in file:\n"
" ${FILE}\n"
"Expected timestamps to match:\n"
" ${REGEX}\n"
"Actual timestamps:\n"
" ${metadata_indented}")
endif()
endfunction()
function(checkTimestamp FILE_NAME)
file(READ ${FILE_NAME} ACTUAL_TIMESTAMP OFFSET 4 LIMIT 4 HEX)
if(NOT ACTUAL_TIMESTAMP STREQUAL "00000000")
message(FATAL_ERROR "${FILE_NAME} contains a timestamp [0x${ACTUAL_TIMESTAMP}]")
endif()
endfunction()
# Expected timestamp is UNIX time 123456789
if(GENERATOR_TYPE STREQUAL "TGZ")
set(EXPECTED_TIMESTAMP "29 Nov +1973")
set(EXPECTED_FILES foo/ foo/CMakeLists.txt)
else()
set(EXPECTED_TIMESTAMP "1973-11-29 21:33")
set(EXPECTED_FILES ./usr/ ./usr/foo/ ./usr/foo/CMakeLists.txt)
endif()
set(EXPECTED_METADATA)
foreach(FILE ${EXPECTED_FILES})
list(APPEND EXPECTED_METADATA ".* ${EXPECTED_TIMESTAMP} ${FILE}")
endforeach()
list(JOIN EXPECTED_METADATA ".*" EXPECTED_REGEX)
checkContentTimestamp("${FOUND_FILE_1}" "${EXPECTED_REGEX}")
if(GENERATOR_TYPE STREQUAL "TGZ")
checkTimestamp("${FOUND_FILE_1}")
else()
execute_process(COMMAND ${CMAKE_COMMAND} -E tar xf "${FOUND_FILE_1}")
checkTimestamp("data.tar.gz")
checkTimestamp("control.tar.gz")
endif()