summaryrefslogtreecommitdiffstats
path: root/Tests/QtAutogen/RerunRccDepends/CMakeLists.txt
blob: 52e2488b80c201f638327c477b699b5132244b4b (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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
cmake_minimum_required(VERSION 3.10)
project(RerunRccDepends)
include("../AutogenTest.cmake")

# Tests rcc rebuilding when a resource file changes

# Dummy executable to generate a clean target
add_executable(dummy dummy.cpp)

# When a .qrc or a file listed in a .qrc file changes,
# the target must be rebuilt
set(timeformat "%Y%j%H%M%S")
set(rccDepSD "${CMAKE_CURRENT_SOURCE_DIR}/RccDepends")
set(rccDepBD "${CMAKE_CURRENT_BINARY_DIR}/RccDepends")

# Initial build
configure_file(${rccDepSD}/resPlainA.qrc.in ${rccDepBD}/resPlain.qrc COPYONLY)
configure_file(${rccDepSD}/resGenA.qrc.in ${rccDepBD}/resGen.qrc.in COPYONLY)
try_compile(RCC_DEPENDS
  "${rccDepBD}"
  "${rccDepSD}"
  RccDepends
  CMAKE_FLAGS "-DQT_TEST_VERSION=${QT_TEST_VERSION}"
              "-DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE}"
  OUTPUT_VARIABLE output
)
if (NOT RCC_DEPENDS)
  message(SEND_ERROR "Initial build of rccDepends failed. Output: ${output}")
endif()

# Get name of the output binaries
file(STRINGS "${rccDepBD}/targetPlain.txt" targetListPlain ENCODING UTF-8)
file(STRINGS "${rccDepBD}/targetGen.txt" targetListGen ENCODING UTF-8)
list(GET targetListPlain 0 rccDepBinPlain)
list(GET targetListGen 0 rccDepBinGen)
message("Target that uses a plain .qrc file is:\n  ${rccDepBinPlain}")
message("Target that uses a GENERATED .qrc file is:\n  ${rccDepBinGen}")


message("Changing a resource files listed in the .qrc file")
# - Acquire binary timestamps before the build
file(TIMESTAMP "${rccDepBinPlain}" rdPlainBefore "${timeformat}")
file(TIMESTAMP "${rccDepBinGen}" rdGenBefore "${timeformat}")
# - Ensure that the timestamp will change
# - Change a resource files listed in the .qrc file
# - Rebuild
execute_process(COMMAND "${CMAKE_COMMAND}" -E sleep 1)
file(TOUCH "${rccDepBD}/resPlain/input.txt" "${rccDepBD}/resGen/input.txt")
execute_process(COMMAND "${CMAKE_COMMAND}" --build . WORKING_DIRECTORY "${rccDepBD}" RESULT_VARIABLE result)
if (result)
  message(SEND_ERROR "Second build of rccDepends failed.")
endif()
# - Acquire binary timestamps after the build
file(TIMESTAMP "${rccDepBinPlain}" rdPlainAfter "${timeformat}")
file(TIMESTAMP "${rccDepBinGen}" rdGenAfter "${timeformat}")
# - Test if timestamps changed
if (NOT rdPlainAfter GREATER rdPlainBefore)
  message(SEND_ERROR "Plain .qrc binary ${rccDepBinPlain}) should have changed!")
endif()
if (NOT rdGenAfter GREATER rdGenBefore)
  message(SEND_ERROR "GENERATED .qrc binary ${rccDepBinGen} should have changed!")
endif()


message("Changing the .qrc file")
# - Acquire binary timestamps before the build
file(TIMESTAMP "${rccDepBinPlain}" rdPlainBefore "${timeformat}")
file(TIMESTAMP "${rccDepBinGen}" rdGenBefore "${timeformat}")
# - Ensure that the timestamp will change
# - Change the .qrc file
# - Rebuild
execute_process(COMMAND "${CMAKE_COMMAND}" -E sleep 1)
configure_file(${rccDepSD}/resPlainB.qrc.in ${rccDepBD}/resPlain.qrc COPYONLY)
configure_file(${rccDepSD}/resGenB.qrc.in ${rccDepBD}/resGen.qrc.in COPYONLY)
execute_process(COMMAND "${CMAKE_COMMAND}" --build . WORKING_DIRECTORY "${rccDepBD}" RESULT_VARIABLE result)
if (result)
  message(SEND_ERROR "Third build of rccDepends failed.")
endif()
# - Acquire binary timestamps after the build
file(TIMESTAMP "${rccDepBinPlain}" rdPlainAfter "${timeformat}")
file(TIMESTAMP "${rccDepBinGen}" rdGenAfter "${timeformat}")
# - Test if timestamps changed
if (NOT rdPlainAfter GREATER rdPlainBefore)
  message(SEND_ERROR "Plain .qrc binary ${rccDepBinPlain}) should have changed!")
endif()
if (NOT rdGenAfter GREATER rdGenBefore)
  message(SEND_ERROR "GENERATED .qrc binary ${rccDepBinGen} should have changed!")
endif()


message("Changing a newly added resource files listed in the .qrc file")
# - Acquire binary timestamps before the build
file(TIMESTAMP "${rccDepBinPlain}" rdPlainBefore "${timeformat}")
file(TIMESTAMP "${rccDepBinGen}" rdGenBefore "${timeformat}")
# - Ensure that the timestamp will change
# - Change a newly added resource files listed in the .qrc file
# - Rebuild
execute_process(COMMAND "${CMAKE_COMMAND}" -E sleep 1)
file(TOUCH "${rccDepBD}/resPlain/inputAdded.txt" "${rccDepBD}/resGen/inputAdded.txt")
execute_process(COMMAND "${CMAKE_COMMAND}" --build . WORKING_DIRECTORY "${rccDepBD}" RESULT_VARIABLE result)
if (result)
  message(SEND_ERROR "Fourth build of rccDepends failed.")
endif()
# - Acquire binary timestamps after the build
file(TIMESTAMP "${rccDepBinPlain}" rdPlainAfter "${timeformat}")
file(TIMESTAMP "${rccDepBinGen}" rdGenAfter "${timeformat}")
# - Test if timestamps changed
if (NOT rdPlainAfter GREATER rdPlainBefore)
  message(SEND_ERROR "Plain .qrc binary ${rccDepBinPlain}) should have changed!")
endif()
if (NOT rdGenAfter GREATER rdGenBefore)
  message(SEND_ERROR "GENERATED .qrc binary ${rccDepBinGen} should have changed!")
endif()


message("Changing nothing in the .qrc file")
# - Acquire binary timestamps before the build
file(TIMESTAMP "${rccDepBinPlain}" rdPlainBefore "${timeformat}")
file(TIMESTAMP "${rccDepBinGen}" rdGenBefore "${timeformat}")
# - Ensure that the timestamp will change
# - Change nothing
# - Rebuild
execute_process(COMMAND "${CMAKE_COMMAND}" -E sleep 1)
execute_process(COMMAND "${CMAKE_COMMAND}" --build . WORKING_DIRECTORY "${rccDepBD}" RESULT_VARIABLE result)
if (result)
  message(SEND_ERROR "Fifth build of rccDepends failed.")
endif()
# - Acquire binary timestamps after the build
file(TIMESTAMP "${rccDepBinPlain}" rdPlainAfter "${timeformat}")
file(TIMESTAMP "${rccDepBinGen}" rdGenAfter "${timeformat}")
# - Test if timestamps changed
if (rdPlainAfter GREATER rdPlainBefore)
  message(SEND_ERROR "Plain .qrc binary ${rccDepBinPlain}) should NOT have changed!")
endif()
if (rdGenAfter GREATER rdGenBefore)
  message(SEND_ERROR "GENERATED .qrc binary ${rccDepBinGen} should NOT have changed!")
endif()