Merge topic 'autogen_refactor_rerun_tests'

a40864ae53 Autogen: Refactor RerunRccDepends test with fixed timestamp comparison
724359489e Autogen: Refactor RerunRccConfigChange test
6ed4ae4bad Autogen: Refactor RerunMocBasic test with fixed timestamp comparison
fedbd16f35 Autogen: Refactor RerunMocPlugin test with fixed timestamp comparison

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !2959
This commit is contained in:
Brad King 2019-02-14 16:01:34 +00:00 committed by Kitware Robot
commit 8c4de81944
4 changed files with 274 additions and 183 deletions

View File

@ -5,10 +5,48 @@ include("../AutogenCoreTest.cmake")
# Dummy executable to generate a clean target
add_executable(dummy dummy.cpp)
set(timeformat "%Y%j%H%M%S")
# Utility variables
set(timeformat "%Y.%j.%H.%M%S")
set(mocBasicSrcDir "${CMAKE_CURRENT_SOURCE_DIR}/MocBasic")
set(mocBasicBinDir "${CMAKE_CURRENT_BINARY_DIR}/MocBasic")
# Utility macros
macro(sleep)
message(STATUS "Sleeping for a few seconds.")
execute_process(COMMAND "${CMAKE_COMMAND}" -E sleep 1)
endmacro()
macro(acquire_timestamp When)
file(TIMESTAMP "${mocBasicBin}" time${When} "${timeformat}")
endmacro()
macro(rebuild buildName)
message(STATUS "Starting build ${buildName}.")
execute_process(COMMAND "${CMAKE_COMMAND}" --build . WORKING_DIRECTORY "${mocBasicBinDir}" RESULT_VARIABLE result)
if (result)
message(FATAL_ERROR "Build ${buildName} failed.")
else()
message(STATUS "Build ${buildName} finished.")
endif()
endmacro()
macro(require_change)
if (timeAfter VERSION_GREATER timeBefore)
message(STATUS "As expected the file ${mocBasicBin} changed.")
else()
message(SEND_ERROR "Unexpectedly the file ${mocBasicBin} did not change!\nTimestamp pre: ${timeBefore}\nTimestamp aft: ${timeAfter}\n")
endif()
endmacro()
macro(require_change_not)
if (timeAfter VERSION_GREATER timeBefore)
message(SEND_ERROR "Unexpectedly the file ${mocBasicBin} changed!\nTimestamp pre: ${timeBefore}\nTimestamp aft: ${timeAfter}\n")
else()
message(STATUS "As expected the file ${mocBasicBin} did not change.")
endif()
endmacro()
# Initial build
configure_file("${mocBasicSrcDir}/test1a.h.in" "${mocBasicBinDir}/test1.h" COPYONLY)
try_compile(MOC_RERUN
@ -21,46 +59,44 @@ try_compile(MOC_RERUN
OUTPUT_VARIABLE output
)
if (NOT MOC_RERUN)
message(SEND_ERROR "Initial build of mocBasic failed. Output: ${output}")
message(FATAL_ERROR "Initial build of mocBasic failed. Output: ${output}")
endif()
# Get name of the output binary
file(STRINGS "${mocBasicBinDir}/mocBasic.txt" mocBasicList ENCODING UTF-8)
list(GET mocBasicList 0 mocBasicBin)
message("Changing the header content for a MOC rerun")
# - Acquire binary timestamps before the build
file(TIMESTAMP "${mocBasicBin}" timeBefore "${timeformat}")
# To avoid a race condition where the binary has the same timestamp
# as a source file and therefore gets rebuild
# - sleep to ensure a timestamp change
# - touch binary to ensure it has a new timestamp
acquire_timestamp(Before)
sleep()
message(STATUS "Touching binary file to ensure a new timestamps")
file(TOUCH_NOCREATE "${mocBasicBin}")
acquire_timestamp(After)
require_change()
# - Ensure that the timestamp will change
# - Change header file content and rebuild
# - Change header file content
# - Rebuild
execute_process(COMMAND "${CMAKE_COMMAND}" -E sleep 1)
acquire_timestamp(Before)
sleep()
message(STATUS "Changing the header content for a MOC re-run")
configure_file("${mocBasicSrcDir}/test1b.h.in" "${mocBasicBinDir}/test1.h" COPYONLY)
execute_process(COMMAND "${CMAKE_COMMAND}" --build . WORKING_DIRECTORY "${mocBasicBinDir}" RESULT_VARIABLE result )
if (result)
message(SEND_ERROR "Second build of mocBasic failed.")
endif()
# - Acquire binary timestamps after the build
file(TIMESTAMP "${mocBasicBin}" timeAfter "${timeformat}")
# - Test if timestamps changed
if (NOT timeAfter GREATER timeBefore)
message(SEND_ERROR "File (${mocBasicBin}) should have changed!")
endif()
sleep()
rebuild(2)
acquire_timestamp(After)
require_change()
message("Changing nothing for a MOC rerun")
# - Acquire binary timestamps before the build
file(TIMESTAMP "${mocBasicBin}" timeBefore "${timeformat}")
# - Ensure that the timestamp would change
# - Change nothing
# - Rebuild
execute_process(COMMAND "${CMAKE_COMMAND}" -E sleep 1)
execute_process(COMMAND "${CMAKE_COMMAND}" --build . WORKING_DIRECTORY "${mocBasicBinDir}" RESULT_VARIABLE result )
if (result)
message(SEND_ERROR "Third build of mocBasic failed.")
endif()
# - Acquire binary timestamps after the build
file(TIMESTAMP "${mocBasicBin}" timeAfter "${timeformat}")
# - Test if timestamps changed
if (timeAfter GREATER timeBefore)
message(SEND_ERROR "File (${mocBasicBin}) should not have changed!")
endif()
acquire_timestamp(Before)
sleep()
message(STATUS "Changing nothing for no MOC re-run")
rebuild(3)
acquire_timestamp(After)
require_change_not()

View File

@ -9,10 +9,53 @@ include("../AutogenCoreTest.cmake")
add_executable(dummy dummy.cpp)
# Utility variables
set(timeformat "%Y%j%H%M%S")
set(timeformat "%Y.%j.%H.%M%S")
set(mocPlugSrcDir "${CMAKE_CURRENT_SOURCE_DIR}/MocPlugin")
set(mocPlugBinDir "${CMAKE_CURRENT_BINARY_DIR}/MocPlugin")
# Utility macros
macro(sleep)
message(STATUS "Sleeping for a few seconds.")
execute_process(COMMAND "${CMAKE_COMMAND}" -E sleep 1)
endmacro()
macro(rebuild buildName)
message(STATUS "Starting build ${buildName}.")
execute_process(COMMAND "${CMAKE_COMMAND}" --build . WORKING_DIRECTORY "${mocPlugBinDir}" RESULT_VARIABLE result)
if (result)
message(FATAL_ERROR "Build ${buildName} failed.")
else()
message(STATUS "Build ${buildName} finished.")
endif()
endmacro()
macro(require_change PLG)
if (pl${PLG}After VERSION_GREATER pl${PLG}Before)
message(STATUS "As expected the file ${pl${PLG}File} changed.")
else()
message(SEND_ERROR
"Unexpectedly the file ${pl${PLG}File} did not change!\nTimestamp pre: ${pl${PLG}Before}\nTimestamp aft: ${pl${PLG}After}\n")
endif()
endmacro()
macro(require_change_not PLG)
if (pl${PLG}After VERSION_GREATER pl${PLG}Before)
message(SEND_ERROR
"Unexpectedly the file ${pl${PLG}File} changed!\nTimestamp pre: ${pl${PLG}Before}\nTimestamp aft: ${pl${PLG}After}\n")
else()
message(STATUS "As expected the file ${pl${PLG}File} did not change.")
endif()
endmacro()
macro(acquire_timestamps When)
file(TIMESTAMP "${plAFile}" plA${When} "${timeformat}")
file(TIMESTAMP "${plBFile}" plB${When} "${timeformat}")
file(TIMESTAMP "${plCFile}" plC${When} "${timeformat}")
file(TIMESTAMP "${plDFile}" plD${When} "${timeformat}")
file(TIMESTAMP "${plEFile}" plE${When} "${timeformat}")
endmacro()
# Initial build
try_compile(MOC_PLUGIN
"${mocPlugBinDir}"
@ -24,83 +67,75 @@ try_compile(MOC_PLUGIN
OUTPUT_VARIABLE output
)
if (NOT MOC_PLUGIN)
message(SEND_ERROR "Initial build of mocPlugin failed. Output: ${output}")
message(FATAL_ERROR "Initial build of mocPlugin failed. Output: ${output}")
endif()
# Get names of the output binaries
find_library(plAFile "PlugA" PATHS "${mocPlugBinDir}/Debug" "${mocPlugBinDir}" NO_DEFAULT_PATH)
find_library(plBFile "PlugB" PATHS "${mocPlugBinDir}/Debug" "${mocPlugBinDir}" NO_DEFAULT_PATH)
find_library(plCFile "PlugC" PATHS "${mocPlugBinDir}/Debug" "${mocPlugBinDir}" NO_DEFAULT_PATH)
find_library(plDFile "PlugD" PATHS "${mocPlugBinDir}/Debug" "${mocPlugBinDir}" NO_DEFAULT_PATH)
find_library(plEFile "PlugE" PATHS "${mocPlugBinDir}/Debug" "${mocPlugBinDir}" NO_DEFAULT_PATH)
# To avoid a race condition where the library has the same timestamp
# as a source file and therefore gets rebuild
# - sleep to ensure a timestamp change
# - touch library to ensure it has a new timestamp
acquire_timestamps(Before)
sleep()
message(STATUS "Touching library files to ensure new timestamps")
file(TOUCH_NOCREATE "${plAFile}" "${plBFile}" "${plCFile}" "${plDFile}" "${plEFile}")
acquire_timestamps(After)
require_change(A)
require_change(B)
require_change(C)
require_change(D)
require_change(E)
# - Ensure that the timestamp will change.
# - Change the json files referenced by Q_PLUGIN_METADATA
# - Rebuild
file(TIMESTAMP "${plAFile}" plABefore "${timeformat}")
file(TIMESTAMP "${plBFile}" plBBefore "${timeformat}")
file(TIMESTAMP "${plCFile}" plCBefore "${timeformat}")
file(TIMESTAMP "${plDFile}" plDBefore "${timeformat}")
file(TIMESTAMP "${plEFile}" plEBefore "${timeformat}")
execute_process(COMMAND "${CMAKE_COMMAND}" -E sleep 1)
acquire_timestamps(Before)
sleep()
message(STATUS "Changing json files")
configure_file("${mocPlugSrcDir}/jsonIn/StyleD.json" "${mocPlugBinDir}/jsonFiles/StyleC.json")
configure_file("${mocPlugSrcDir}/jsonIn/StyleE.json" "${mocPlugBinDir}/jsonFiles/sub/StyleD.json")
configure_file("${mocPlugSrcDir}/jsonIn/StyleC.json" "${mocPlugBinDir}/jsonFiles/StyleE.json")
execute_process(COMMAND "${CMAKE_COMMAND}" --build . WORKING_DIRECTORY "${mocPlugBinDir}")
sleep()
rebuild(2)
acquire_timestamps(After)
# Test changes
require_change_not(A)
require_change_not(B)
require_change(C)
require_change(D)
# There's a bug in Ninja on Windows:
# https://gitlab.kitware.com/cmake/cmake/issues/16776
if(NOT ("${CMAKE_GENERATOR}" MATCHES "Ninja"))
require_change(E)
endif()
file(TIMESTAMP "${plAFile}" plAAfter "${timeformat}")
file(TIMESTAMP "${plBFile}" plBAfter "${timeformat}")
file(TIMESTAMP "${plCFile}" plCAfter "${timeformat}")
file(TIMESTAMP "${plDFile}" plDAfter "${timeformat}")
file(TIMESTAMP "${plEFile}" plEAfter "${timeformat}")
if (plAAfter GREATER plABefore)
message(SEND_ERROR "file (${plAFile}) should not have changed!")
endif()
if (plBAfter GREATER plBBefore)
message(SEND_ERROR "file (${plBFile}) should not have changed!")
endif()
if (NOT plCAfter GREATER plCBefore)
message(SEND_ERROR "file (${plCFile}) should have changed!")
endif()
if (NOT plDAfter GREATER plDBefore)
message(SEND_ERROR "file (${plDFile}) should have changed!")
endif()
if (NOT plEAfter GREATER plEBefore)
# There's a bug in Ninja on Windows
# https://gitlab.kitware.com/cmake/cmake/issues/16776
if(NOT ("${CMAKE_GENERATOR}" MATCHES "Ninja"))
message(SEND_ERROR "file (${plEFile}) should have changed!")
endif()
endif()
# - Ensure that the timestamp will change.
# - Change the json files referenced by A_CUSTOM_MACRO
# - Rebuild
file(TIMESTAMP "${plCFile}" plCBefore "${timeformat}")
file(TIMESTAMP "${plDFile}" plDBefore "${timeformat}")
file(TIMESTAMP "${plEFile}" plEBefore "${timeformat}")
execute_process(COMMAND "${CMAKE_COMMAND}" -E sleep 1)
acquire_timestamps(Before)
sleep()
message(STATUS "Changing json files")
configure_file("${mocPlugSrcDir}/jsonIn/StyleE.json" "${mocPlugBinDir}/jsonFiles/StyleC_Custom.json")
configure_file("${mocPlugSrcDir}/jsonIn/StyleC.json" "${mocPlugBinDir}/jsonFiles/sub/StyleD_Custom.json")
configure_file("${mocPlugSrcDir}/jsonIn/StyleD.json" "${mocPlugBinDir}/jsonFiles/StyleE_Custom.json")
execute_process(COMMAND "${CMAKE_COMMAND}" --build . WORKING_DIRECTORY "${mocPlugBinDir}")
file(TIMESTAMP "${plCFile}" plCAfter "${timeformat}")
file(TIMESTAMP "${plDFile}" plDAfter "${timeformat}")
file(TIMESTAMP "${plEFile}" plEAfter "${timeformat}")
if (NOT plCAfter GREATER plCBefore)
message(SEND_ERROR "file (${plCFile}) should have changed!")
endif()
if (NOT plDAfter GREATER plDBefore)
message(SEND_ERROR "file (${plDFile}) should have changed!")
endif()
if (NOT plEAfter GREATER plEBefore)
# There's a bug in Ninja on Windows
# https://gitlab.kitware.com/cmake/cmake/issues/16776
if(NOT ("${CMAKE_GENERATOR}" MATCHES "Ninja"))
message(SEND_ERROR "file (${plEFile}) should have changed!")
endif()
sleep()
rebuild(3)
acquire_timestamps(After)
# Test changes
require_change_not(A)
require_change_not(B)
require_change(C)
require_change(D)
# There's a bug in Ninja on Windows
# https://gitlab.kitware.com/cmake/cmake/issues/16776
if(NOT ("${CMAKE_GENERATOR}" MATCHES "Ninja"))
require_change(E)
endif()

View File

@ -9,10 +9,23 @@ 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}/RccConfigChange")
set(rccDepBD "${CMAKE_CURRENT_BINARY_DIR}/RccConfigChange")
# Rebuild macro
macro(rebuild CFG)
message(STATUS "Rebuilding rccConfigChange in ${CFG} configuration.")
execute_process(
COMMAND "${CMAKE_COMMAND}" --build . --config "${CFG}"
WORKING_DIRECTORY "${rccDepBD}"
RESULT_VARIABLE result)
if (result)
message(FATAL_ERROR "${CFG} build of rccConfigChange failed.")
else()
message(STATUS "${CFG} build of rccConfigChange finished.")
endif()
endmacro()
# Initial build
try_compile(RCC_DEPENDS
"${rccDepBD}"
@ -24,19 +37,11 @@ try_compile(RCC_DEPENDS
OUTPUT_VARIABLE output
)
if (NOT RCC_DEPENDS)
message(SEND_ERROR "Initial build of rccConfigChange failed. Output: ${output}")
message(FATAL_ERROR "Initial build of rccConfigChange failed. Output: ${output}")
endif()
# - Rebuild Release
message("Rebuilding rccConfigChange in Release configuration")
execute_process(COMMAND "${CMAKE_COMMAND}" --build . --config Release WORKING_DIRECTORY "${rccDepBD}" RESULT_VARIABLE result)
if (result)
message(SEND_ERROR "Release build of rccConfigChange failed.")
endif()
# Rebuild: Release
rebuild(Release)
# - Rebuild Debug
message("Rebuilding rccConfigChange in Debug configuration")
execute_process(COMMAND "${CMAKE_COMMAND}" --build . --config Debug WORKING_DIRECTORY "${rccDepBD}" RESULT_VARIABLE result)
if (result)
message(SEND_ERROR "Debug build of rccConfigChange failed.")
endif()
# Rebuild: Debug
rebuild(Debug)

View File

@ -3,19 +3,63 @@ project(RerunRccDepends)
include("../AutogenCoreTest.cmake")
# Tests rcc rebuilding when a resource file changes
# When a .qrc or a file listed in a .qrc file changes,
# the target must be rebuilt
# 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")
# Utility variables
set(timeformat "%Y.%j.%H.%M%S")
set(rccDepSD "${CMAKE_CURRENT_SOURCE_DIR}/RccDepends")
set(rccDepBD "${CMAKE_CURRENT_BINARY_DIR}/RccDepends")
# Initial build
# Utility macros
macro(sleep)
message(STATUS "Sleeping for a few seconds.")
execute_process(COMMAND "${CMAKE_COMMAND}" -E sleep 1)
endmacro()
macro(acquire_timestamps When)
file(TIMESTAMP "${rccDepBinPlain}" rdPlain${When} "${timeformat}")
file(TIMESTAMP "${rccDepBinGenerated}" rdGenerated${When} "${timeformat}")
endmacro()
macro(rebuild buildName)
message(STATUS "Starting build ${buildName} of rccDepends.")
execute_process(
COMMAND "${CMAKE_COMMAND}" --build .
WORKING_DIRECTORY "${rccDepBD}"
RESULT_VARIABLE result)
if (result)
message(FATAL_ERROR "Build ${buildName} of rccDepends failed.")
else()
message(STATUS "Build ${buildName} of rccDepends finished.")
endif()
endmacro()
macro(require_change type)
if (rd${type}After VERSION_GREATER rd${type}Before)
message(STATUS "As expected the ${type} .qrc file ${rccDepBin${type}} changed.")
else()
message(SEND_ERROR "Unexpectedly the ${type} .qrc file ${rccDepBin${type}} did not change!\nTimestamp pre: ${rd${type}Before}\nTimestamp aft: ${rd${type}After}\n")
endif()
endmacro()
macro(require_change_not type)
if (rd${type}After VERSION_GREATER rd${type}Before)
message(SEND_ERROR "Unexpectedly the ${type} .qrc file ${rccDepBin${type}} changed!\nTimestamp pre: ${rd${type}Before}\nTimestamp aft: ${rd${type}After}\n")
else()
message(STATUS "As expected the ${type} .qrc file ${rccDepBin${type}} did not change.")
endif()
endmacro()
# Initial configuration
configure_file(${rccDepSD}/resPlainA.qrc.in ${rccDepBD}/resPlain.qrc COPYONLY)
configure_file(${rccDepSD}/resGenA.qrc.in ${rccDepBD}/resGen.qrc.in COPYONLY)
# Initial build
try_compile(RCC_DEPENDS
"${rccDepBD}"
"${rccDepSD}"
@ -26,113 +70,84 @@ try_compile(RCC_DEPENDS
OUTPUT_VARIABLE output
)
if (NOT RCC_DEPENDS)
message(SEND_ERROR "Initial build of rccDepends failed. Output: ${output}")
message(FATAL_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}")
list(GET targetListGen 0 rccDepBinGenerated)
message(STATUS "Target that uses a plain .qrc file is:\n ${rccDepBinPlain}")
message(STATUS "Target that uses a GENERATED .qrc file is:\n ${rccDepBinGenerated}")
# To avoid a race condition where the binary has the same timestamp
# as a source file and therefore gets rebuild
# - sleep to ensure a timestamp change
# - touch binary to ensure it has a new timestamp
acquire_timestamps(Before)
sleep()
message(STATUS "Touching binary files to ensure new timestamps")
file(TOUCH_NOCREATE "${rccDepBinPlain}" "${rccDepBinGenerated}")
acquire_timestamps(After)
require_change(Plain)
require_change(Generated)
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)
acquire_timestamps(Before)
sleep()
message(STATUS "Changing a resource file listed in the .qrc file")
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}")
sleep()
rebuild(2)
acquire_timestamps(After)
# - 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()
require_change(Plain)
require_change(Generated)
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)
acquire_timestamps(Before)
sleep()
message(STATUS "Changing the .qrc file")
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}")
sleep()
rebuild(3)
acquire_timestamps(After)
# - 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()
require_change(Plain)
require_change(Generated)
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)
acquire_timestamps(Before)
sleep()
message(STATUS "Changing a newly added resource file listed in the .qrc file")
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}")
sleep()
rebuild(4)
acquire_timestamps(After)
# - 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()
require_change(Plain)
require_change(Generated)
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}")
acquire_timestamps(Before)
sleep()
message(STATUS "Changing nothing in the .qrc file")
rebuild(5)
acquire_timestamps(After)
# - 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()
require_change_not(Plain)
require_change_not(Generated)