mirror of
https://github.com/reactos/CMake.git
synced 2024-11-28 14:01:21 +00:00
Merge topic 'autogen_refactor_rerun_tests'
a40864ae53
Autogen: Refactor RerunRccDepends test with fixed timestamp comparison724359489e
Autogen: Refactor RerunRccConfigChange test6ed4ae4bad
Autogen: Refactor RerunMocBasic test with fixed timestamp comparisonfedbd16f35
Autogen: Refactor RerunMocPlugin test with fixed timestamp comparison Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !2959
This commit is contained in:
commit
8c4de81944
@ -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()
|
||||
|
@ -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()
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user