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
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()
|