summaryrefslogtreecommitdiff
path: root/Tests/RunCMake/CPack/tests/TIMESTAMPS/VerifyResult.cmake
blob: e7e2645aaa52eeefa2bb8e6aa7cf20179fe6bbb0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
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()