This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "CMake".

The branch, master has been updated
       via  8c4de819449bbb1710b1cc2440357757e5cb757c (commit)
       via  a40864ae53ad22c369596699cc1bb791f65dc360 (commit)
       via  724359489e03c1c890bea4bc6ba71ca353b048b9 (commit)
       via  6ed4ae4bad3bf3e226e0c8009f9b4057707cfc21 (commit)
       via  fedbd16f352a8202d30332228ca586a69b513c89 (commit)
      from  e3353a0175fb27bc2967c3df78b8be1c0615b21d (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=8c4de819449bbb1710b1cc2440357757e5cb757c
commit 8c4de819449bbb1710b1cc2440357757e5cb757c
Merge: e3353a0 a40864a
Author:     Brad King <brad.k...@kitware.com>
AuthorDate: Thu Feb 14 16:01:34 2019 +0000
Commit:     Kitware Robot <kwro...@kitware.com>
CommitDate: Thu Feb 14 11:01:42 2019 -0500

    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 <kwro...@kitware.com>
    Merge-request: !2959


https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=a40864ae53ad22c369596699cc1bb791f65dc360
commit a40864ae53ad22c369596699cc1bb791f65dc360
Author:     Sebastian Holtermann <sebh...@xwmw.org>
AuthorDate: Wed Feb 13 21:08:49 2019 +0100
Commit:     Sebastian Holtermann <sebh...@xwmw.org>
CommitDate: Wed Feb 13 23:01:46 2019 +0100

    Autogen: Refactor RerunRccDepends test with fixed timestamp comparison
    
    This refactors and simplifies the QtAutogen.RerunRccDepends test.
    Repetitive task are packed into macros.
    By using version strings to store file timestamps, timestamp comparison
    becomes more reliable.  Test status and error messages are improved.

diff --git a/Tests/QtAutogen/RerunRccDepends/CMakeLists.txt 
b/Tests/QtAutogen/RerunRccDepends/CMakeLists.txt
index 80c5cf0..1301550 100644
--- a/Tests/QtAutogen/RerunRccDepends/CMakeLists.txt
+++ b/Tests/QtAutogen/RerunRccDepends/CMakeLists.txt
@@ -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)

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=724359489e03c1c890bea4bc6ba71ca353b048b9
commit 724359489e03c1c890bea4bc6ba71ca353b048b9
Author:     Sebastian Holtermann <sebh...@xwmw.org>
AuthorDate: Wed Feb 13 20:16:46 2019 +0100
Commit:     Sebastian Holtermann <sebh...@xwmw.org>
CommitDate: Wed Feb 13 22:54:32 2019 +0100

    Autogen: Refactor RerunRccConfigChange test
    
    This refactors and simplifies the QtAutogen.RerunRccConfigChange test.
    Repetitive task are packed into macros.
    Test status and error messages are improved.

diff --git a/Tests/QtAutogen/RerunRccConfigChange/CMakeLists.txt 
b/Tests/QtAutogen/RerunRccConfigChange/CMakeLists.txt
index dcb7a79..33c01ac 100644
--- a/Tests/QtAutogen/RerunRccConfigChange/CMakeLists.txt
+++ b/Tests/QtAutogen/RerunRccConfigChange/CMakeLists.txt
@@ -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)

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=6ed4ae4bad3bf3e226e0c8009f9b4057707cfc21
commit 6ed4ae4bad3bf3e226e0c8009f9b4057707cfc21
Author:     Sebastian Holtermann <sebh...@xwmw.org>
AuthorDate: Wed Feb 13 20:04:52 2019 +0100
Commit:     Sebastian Holtermann <sebh...@xwmw.org>
CommitDate: Wed Feb 13 22:54:32 2019 +0100

    Autogen: Refactor RerunMocBasic test with fixed timestamp comparison
    
    This refactors and simplifies the QtAutogen.RerunMocBasic test.
    Repetitive task are packed into macros.
    By using version strings to store file timestamps, timestamp comparison
    becomes more reliable.  Test status and error messages are improved.

diff --git a/Tests/QtAutogen/RerunMocBasic/CMakeLists.txt 
b/Tests/QtAutogen/RerunMocBasic/CMakeLists.txt
index f4b726f..9b32e59 100644
--- a/Tests/QtAutogen/RerunMocBasic/CMakeLists.txt
+++ b/Tests/QtAutogen/RerunMocBasic/CMakeLists.txt
@@ -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()

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=fedbd16f352a8202d30332228ca586a69b513c89
commit fedbd16f352a8202d30332228ca586a69b513c89
Author:     Sebastian Holtermann <sebh...@xwmw.org>
AuthorDate: Wed Feb 13 19:38:11 2019 +0100
Commit:     Sebastian Holtermann <sebh...@xwmw.org>
CommitDate: Wed Feb 13 22:49:20 2019 +0100

    Autogen: Refactor RerunMocPlugin test with fixed timestamp comparison
    
    This refactors and simplifies the QtAutogen.RerunMocPlugin test.
    Repetitive task are packed into macros.
    By using version strings to store file timestamps, timestamp comparison
    becomes more reliable.  Test status and error messages are improved.

diff --git a/Tests/QtAutogen/RerunMocPlugin/CMakeLists.txt 
b/Tests/QtAutogen/RerunMocPlugin/CMakeLists.txt
index b83e994..6ab9538 100644
--- a/Tests/QtAutogen/RerunMocPlugin/CMakeLists.txt
+++ b/Tests/QtAutogen/RerunMocPlugin/CMakeLists.txt
@@ -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}")
-
-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()
+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()
 
+
 # - 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()

-----------------------------------------------------------------------

Summary of changes:
 Tests/QtAutogen/RerunMocBasic/CMakeLists.txt       |  98 ++++++++----
 Tests/QtAutogen/RerunMocPlugin/CMakeLists.txt      | 151 +++++++++++-------
 .../QtAutogen/RerunRccConfigChange/CMakeLists.txt  |  33 ++--
 Tests/QtAutogen/RerunRccDepends/CMakeLists.txt     | 175 +++++++++++----------
 4 files changed, 274 insertions(+), 183 deletions(-)


hooks/post-receive
-- 
CMake
_______________________________________________
Cmake-commits mailing list
Cmake-commits@cmake.org
https://cmake.org/mailman/listinfo/cmake-commits

Reply via email to