Browse Source

Tests: Add test for Multi-Configuration Ninja generator

Kyle Edwards 6 years ago
parent
commit
e0478cc646
73 changed files with 1717 additions and 6 deletions
  1. 7 6
      Tests/CMakeLists.txt
  2. 7 0
      Tests/RunCMake/CMakeLists.txt
  3. 4 0
      Tests/RunCMake/NinjaMultiConfig/AdditionalCleanFiles-all-clean-ninja-check.cmake
  4. 8 0
      Tests/RunCMake/NinjaMultiConfig/AdditionalCleanFiles-check.cmake
  5. 6 0
      Tests/RunCMake/NinjaMultiConfig/AdditionalCleanFiles-release-clean-build-check.cmake
  6. 3 0
      Tests/RunCMake/NinjaMultiConfig/AdditionalCleanFiles.cmake
  7. 10 0
      Tests/RunCMake/NinjaMultiConfig/AutoMocExecutable.cmake
  8. 3 0
      Tests/RunCMake/NinjaMultiConfig/CMakeLists.txt
  9. 16 0
      Tests/RunCMake/NinjaMultiConfig/Clean-release-build-check.cmake
  10. 7 0
      Tests/RunCMake/NinjaMultiConfig/Clean-release-clean-build-check.cmake
  11. 16 0
      Tests/RunCMake/NinjaMultiConfig/Clean-release-notall-ninja-check.cmake
  12. 17 0
      Tests/RunCMake/NinjaMultiConfig/Clean.cmake
  13. 57 0
      Tests/RunCMake/NinjaMultiConfig/Common.cmake
  14. 38 0
      Tests/RunCMake/NinjaMultiConfig/CustomCommandGenerator-debug-build-check.cmake
  15. 37 0
      Tests/RunCMake/NinjaMultiConfig/CustomCommandGenerator-debug-clean-ninja-check.cmake
  16. 12 0
      Tests/RunCMake/NinjaMultiConfig/CustomCommandGenerator-debug-generated-stdout.txt
  17. 44 0
      Tests/RunCMake/NinjaMultiConfig/CustomCommandGenerator-debug-in-release-graph-build-check.cmake
  18. 36 0
      Tests/RunCMake/NinjaMultiConfig/CustomCommandGenerator-debug-in-release-graph-clean-ninja-check.cmake
  19. 12 0
      Tests/RunCMake/NinjaMultiConfig/CustomCommandGenerator-debug-in-release-graph-generated-stdout.txt
  20. 29 0
      Tests/RunCMake/NinjaMultiConfig/CustomCommandGenerator-release-clean-build-check.cmake
  21. 12 0
      Tests/RunCMake/NinjaMultiConfig/CustomCommandGenerator-release-generated-stdout.txt
  22. 12 0
      Tests/RunCMake/NinjaMultiConfig/CustomCommandGenerator-release-in-debug-graph-generated-stdout.txt
  23. 45 0
      Tests/RunCMake/NinjaMultiConfig/CustomCommandGenerator-release-in-debug-graph-ninja-check.cmake
  24. 46 0
      Tests/RunCMake/NinjaMultiConfig/CustomCommandGenerator-release-ninja-check.cmake
  25. 56 0
      Tests/RunCMake/NinjaMultiConfig/CustomCommandGenerator.cmake
  26. 6 0
      Tests/RunCMake/NinjaMultiConfig/CustomCommandsAndTargets-debug-command-ninja-check.cmake
  27. 8 0
      Tests/RunCMake/NinjaMultiConfig/CustomCommandsAndTargets-debug-in-release-graph-postbuild-build-check.cmake
  28. 8 0
      Tests/RunCMake/NinjaMultiConfig/CustomCommandsAndTargets-debug-target-build-check.cmake
  29. 12 0
      Tests/RunCMake/NinjaMultiConfig/CustomCommandsAndTargets-debug-targetpostbuild-build-check.cmake
  30. 5 0
      Tests/RunCMake/NinjaMultiConfig/CustomCommandsAndTargets-minsizerel-command-ninja-check.cmake
  31. 5 0
      Tests/RunCMake/NinjaMultiConfig/CustomCommandsAndTargets-release-command-build-check.cmake
  32. 11 0
      Tests/RunCMake/NinjaMultiConfig/CustomCommandsAndTargets-release-postbuild-ninja-check.cmake
  33. 7 0
      Tests/RunCMake/NinjaMultiConfig/CustomCommandsAndTargets-release-target-ninja-check.cmake
  34. 13 0
      Tests/RunCMake/NinjaMultiConfig/CustomCommandsAndTargets-release-targetpostbuild-ninja-check.cmake
  35. 39 0
      Tests/RunCMake/NinjaMultiConfig/CustomCommandsAndTargets.cmake
  36. 1 0
      Tests/RunCMake/NinjaMultiConfig/CustomCommandsAndTargetsSubdir/CMakeLists.txt
  37. 31 0
      Tests/RunCMake/NinjaMultiConfig/Install-debug-in-release-graph-install-ninja-check.cmake
  38. 23 0
      Tests/RunCMake/NinjaMultiConfig/Install-release-install-build-check.cmake
  39. 10 0
      Tests/RunCMake/NinjaMultiConfig/Install.cmake
  40. 7 0
      Tests/RunCMake/NinjaMultiConfig/PostfixAndLocation-debug-in-release-graph-build-check.cmake
  41. 5 0
      Tests/RunCMake/NinjaMultiConfig/PostfixAndLocation-release-in-release-graph-build-check.cmake
  42. 18 0
      Tests/RunCMake/NinjaMultiConfig/PostfixAndLocation.cmake
  43. 7 0
      Tests/RunCMake/NinjaMultiConfig/Qt5-debug-in-release-graph-build-check.cmake
  44. 18 0
      Tests/RunCMake/NinjaMultiConfig/Qt5.cmake
  45. 173 0
      Tests/RunCMake/NinjaMultiConfig/RunCMakeTest.cmake
  46. 25 0
      Tests/RunCMake/NinjaMultiConfig/Simple-all-clean-again-ninja-check.cmake
  47. 25 0
      Tests/RunCMake/NinjaMultiConfig/Simple-all-clean-build-check.cmake
  48. 47 0
      Tests/RunCMake/NinjaMultiConfig/Simple-all-configs-build-check.cmake
  49. 49 0
      Tests/RunCMake/NinjaMultiConfig/Simple-all-subdir-build-check.cmake
  50. 56 0
      Tests/RunCMake/NinjaMultiConfig/Simple-all-top-ninja-check.cmake
  51. 53 0
      Tests/RunCMake/NinjaMultiConfig/Simple-debug-in-release-graph-top-build-check.cmake
  52. 31 0
      Tests/RunCMake/NinjaMultiConfig/Simple-debug-subdir-build-check.cmake
  53. 31 0
      Tests/RunCMake/NinjaMultiConfig/Simple-debug-target-build-check.cmake
  54. 33 0
      Tests/RunCMake/NinjaMultiConfig/Simple-debug-target-ninja-check.cmake
  55. 51 0
      Tests/RunCMake/NinjaMultiConfig/Simple-default-build-file-ninja-check.cmake
  56. 51 0
      Tests/RunCMake/NinjaMultiConfig/Simple-minsizerel-top-ninja-check.cmake
  57. 4 0
      Tests/RunCMake/NinjaMultiConfig/Simple-reconfigure-config-ninja-stdout.txt
  58. 4 0
      Tests/RunCMake/NinjaMultiConfig/Simple-reconfigure-noconfig-ninja-stdout.txt
  59. 39 0
      Tests/RunCMake/NinjaMultiConfig/Simple-release-file-ninja-check.cmake
  60. 36 0
      Tests/RunCMake/NinjaMultiConfig/Simple-release-filename-build-check.cmake
  61. 37 0
      Tests/RunCMake/NinjaMultiConfig/Simple-release-in-minsizerel-graph-subdir-ninja-check.cmake
  62. 13 0
      Tests/RunCMake/NinjaMultiConfig/Simple.cmake
  63. 4 0
      Tests/RunCMake/NinjaMultiConfig/SimpleSubdir/CMakeLists.txt
  64. 1 0
      Tests/RunCMake/NinjaMultiConfig/WriteFile.cmake
  65. 7 0
      Tests/RunCMake/NinjaMultiConfig/badmoc.c
  66. 0 0
      Tests/RunCMake/NinjaMultiConfig/empty.c
  67. 101 0
      Tests/RunCMake/NinjaMultiConfig/generator.c
  68. 24 0
      Tests/RunCMake/NinjaMultiConfig/generatorlib.c
  69. 24 0
      Tests/RunCMake/NinjaMultiConfig/generatorobj.c
  70. 4 0
      Tests/RunCMake/NinjaMultiConfig/main.c
  71. 9 0
      Tests/RunCMake/NinjaMultiConfig/qt5.cxx
  72. 5 0
      Tests/RunCMake/NinjaMultiConfig/qt5.h
  73. 6 0
      Tests/RunCMake/NinjaMultiConfig/simplelib.c

+ 7 - 6
Tests/CMakeLists.txt

@@ -211,6 +211,13 @@ if(BUILD_TESTING)
   #---------------------------------------------------------------------------
   #---------------------------------------------------------------------------
   # Add tests below here.
   # Add tests below here.
 
 
+  if(NOT DEFINED CMake_TEST_Qt5)
+    set(CMake_TEST_Qt5 1)
+  endif()
+  if(CMake_TEST_Qt5)
+    find_package(Qt5Widgets QUIET NO_MODULE)
+  endif()
+
   if(NOT CMake_TEST_EXTERNAL_CMAKE)
   if(NOT CMake_TEST_EXTERNAL_CMAKE)
     add_subdirectory(CMakeLib)
     add_subdirectory(CMakeLib)
 
 
@@ -1332,12 +1339,6 @@ ${CMake_SOURCE_DIR}/Utilities/Release/push.bash --dir dev -- '${CMake_BUILD_NIGH
     )
     )
   list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/QtAutomocNoQt")
   list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/QtAutomocNoQt")
 
 
-  if(NOT DEFINED CMake_TEST_Qt5)
-    set(CMake_TEST_Qt5 1)
-  endif()
-  if(CMake_TEST_Qt5)
-    find_package(Qt5Widgets QUIET NO_MODULE)
-  endif()
   if(CMake_TEST_Qt5 AND Qt5Widgets_FOUND)
   if(CMake_TEST_Qt5 AND Qt5Widgets_FOUND)
     add_subdirectory(Qt5Autogen)
     add_subdirectory(Qt5Autogen)
   endif()
   endif()

+ 7 - 0
Tests/RunCMake/CMakeLists.txt

@@ -134,6 +134,13 @@ if(CMAKE_GENERATOR MATCHES "Ninja")
     list(APPEND Ninja_ARGS -DTEST_Fortran=1)
     list(APPEND Ninja_ARGS -DTEST_Fortran=1)
   endif()
   endif()
   add_RunCMake_test(Ninja)
   add_RunCMake_test(Ninja)
+  set(NinjaMultiConfig_ARGS
+    -DCYGWIN=${CYGWIN}
+    )
+  if(CMake_TEST_Qt5 AND Qt5Core_FOUND)
+    list(APPEND NinjaMultiConfig_ARGS -DCMake_TEST_Qt5=1)
+  endif()
+  add_RunCMake_test(NinjaMultiConfig)
 endif()
 endif()
 add_RunCMake_test(CTest)
 add_RunCMake_test(CTest)
 
 

+ 4 - 0
Tests/RunCMake/NinjaMultiConfig/AdditionalCleanFiles-all-clean-ninja-check.cmake

@@ -0,0 +1,4 @@
+check_files("${RunCMake_TEST_BINARY_DIR}"
+  INCLUDE
+    # Intentionally empty
+  )

+ 8 - 0
Tests/RunCMake/NinjaMultiConfig/AdditionalCleanFiles-check.cmake

@@ -0,0 +1,8 @@
+check_files("${RunCMake_TEST_BINARY_DIR}"
+  INCLUDE
+    ${RunCMake_TEST_BINARY_DIR}/global.txt
+    ${RunCMake_TEST_BINARY_DIR}/Debug.txt
+    ${RunCMake_TEST_BINARY_DIR}/Release.txt
+    ${RunCMake_TEST_BINARY_DIR}/MinSizeRel.txt
+    ${RunCMake_TEST_BINARY_DIR}/RelWithDebInfo.txt
+  )

+ 6 - 0
Tests/RunCMake/NinjaMultiConfig/AdditionalCleanFiles-release-clean-build-check.cmake

@@ -0,0 +1,6 @@
+check_files("${RunCMake_TEST_BINARY_DIR}"
+  INCLUDE
+    ${RunCMake_TEST_BINARY_DIR}/Debug.txt
+    ${RunCMake_TEST_BINARY_DIR}/MinSizeRel.txt
+    ${RunCMake_TEST_BINARY_DIR}/RelWithDebInfo.txt
+  )

+ 3 - 0
Tests/RunCMake/NinjaMultiConfig/AdditionalCleanFiles.cmake

@@ -0,0 +1,3 @@
+file(GENERATE OUTPUT $<CONFIG>.txt CONTENT "$<CONFIG>\n")
+file(TOUCH ${CMAKE_BINARY_DIR}/global.txt)
+set_directory_properties(PROPERTIES ADDITIONAL_CLEAN_FILES "$<CONFIG>.txt;global.txt")

+ 10 - 0
Tests/RunCMake/NinjaMultiConfig/AutoMocExecutable.cmake

@@ -0,0 +1,10 @@
+enable_language(C)
+
+add_executable(badmoc badmoc.c)
+target_compile_definitions(badmoc PRIVATE "CONFIG=\"$<CONFIG>\"")
+
+add_executable(exe main.c)
+set_target_properties(exe PROPERTIES
+  AUTOMOC ON
+  AUTOMOC_EXECUTABLE $<TARGET_FILE:badmoc>
+  )

+ 3 - 0
Tests/RunCMake/NinjaMultiConfig/CMakeLists.txt

@@ -0,0 +1,3 @@
+cmake_minimum_required(VERSION 3.16)
+project(${RunCMake_TEST} NONE)
+include(${RunCMake_TEST}.cmake)

+ 16 - 0
Tests/RunCMake/NinjaMultiConfig/Clean-release-build-check.cmake

@@ -0,0 +1,16 @@
+check_files("${RunCMake_TEST_BINARY_DIR}"
+  INCLUDE
+    ${TARGET_FILE_mylib_Release}
+    ${TARGET_LINKER_FILE_mylib_Release}
+    ${TARGET_SONAME_FILE_mylib_Release}
+    ${TARGET_OBJECT_FILES_mylib_Release}
+
+    ${TARGET_OBJECT_FILES_myobj_Release}
+
+    ${TARGET_FILE_exeall_Release}
+    ${TARGET_EXE_FILE_exeall_Release}
+    ${TARGET_OBJECT_FILES_exeall_Release}
+
+  EXCLUDE
+    ${TARGET_OBJECT_FILES_exenotall_Release}
+  )

+ 7 - 0
Tests/RunCMake/NinjaMultiConfig/Clean-release-clean-build-check.cmake

@@ -0,0 +1,7 @@
+check_files("${RunCMake_TEST_BINARY_DIR}"
+  EXCLUDE
+    ${TARGET_OBJECT_FILES_exeall_Release}
+    ${TARGET_OBJECT_FILES_exenotall_Release}
+    ${TARGET_OBJECT_FILES_mylib_Release}
+    ${TARGET_OBJECT_FILES_myobj_Release}
+  )

+ 16 - 0
Tests/RunCMake/NinjaMultiConfig/Clean-release-notall-ninja-check.cmake

@@ -0,0 +1,16 @@
+check_files("${RunCMake_TEST_BINARY_DIR}"
+  INCLUDE
+    ${TARGET_FILE_mylib_Release}
+    ${TARGET_LINKER_FILE_mylib_Release}
+    ${TARGET_SONAME_FILE_mylib_Release}
+    ${TARGET_OBJECT_FILES_mylib_Release}
+
+    ${TARGET_OBJECT_FILES_myobj_Release}
+
+    ${TARGET_FILE_exeall_Release}
+    ${TARGET_EXE_FILE_exeall_Release}
+    ${TARGET_OBJECT_FILES_exeall_Release}
+
+    ${TARGET_FILE_exenotall_Release}
+    ${TARGET_OBJECT_FILES_exenotall_Release}
+  )

+ 17 - 0
Tests/RunCMake/NinjaMultiConfig/Clean.cmake

@@ -0,0 +1,17 @@
+enable_language(C)
+
+add_executable(exeall main.c)
+set_target_properties(exeall PROPERTIES VERSION 1.0.0)
+add_executable(exenotall main.c)
+set_target_properties(exenotall PROPERTIES EXCLUDE_FROM_ALL TRUE)
+
+add_library(mylib SHARED simplelib.c)
+set_target_properties(mylib PROPERTIES
+  VERSION 1.0.0
+  SOVERSION 1
+  )
+
+add_library(myobj OBJECT simplelib.c)
+
+include(${CMAKE_CURRENT_LIST_DIR}/Common.cmake)
+generate_output_files(exeall exenotall mylib myobj)

+ 57 - 0
Tests/RunCMake/NinjaMultiConfig/Common.cmake

@@ -0,0 +1,57 @@
+function(generate_output_files)
+  set(content)
+  foreach(tgt IN LISTS ARGN)
+    get_property(type TARGET ${tgt} PROPERTY TYPE)
+
+    if(NOT type STREQUAL "OBJECT_LIBRARY")
+      set(file " [==[$<TARGET_FILE:${tgt}>]==]")
+      set(filename " [==[$<TARGET_FILE_NAME:${tgt}>]==]")
+    else()
+      set(file)
+      set(filename)
+    endif()
+    string(APPEND content "set(TARGET_FILE_${tgt}_$<CONFIG>${file})\n")
+    string(APPEND content "set(TARGET_FILE_NAME_${tgt}_$<CONFIG>${filename})\n")
+
+    if(type MATCHES "^(STATIC|MODULE|SHARED)_LIBRARY$")
+      set(linker_file " [==[$<TARGET_LINKER_FILE:${tgt}>]==]")
+      set(linker_filename " [==[$<TARGET_LINKER_FILE_NAME:${tgt}>]==]")
+    else()
+      set(linker_file)
+      set(linker_filename)
+    endif()
+    string(APPEND content "set(TARGET_LINKER_FILE_${tgt}_$<CONFIG>${linker_file})\n")
+    string(APPEND content "set(TARGET_LINKER_FILE_NAME_${tgt}_$<CONFIG>${linker_filename})\n")
+
+    if(NOT WIN32 AND NOT CYGWIN AND type MATCHES "^(SHARED_LIBRARY)$")
+      set(soname_file " [==[$<TARGET_SONAME_FILE:${tgt}>]==]")
+      set(soname_filename " [==[$<TARGET_SONAME_FILE_NAME:${tgt}>]==]")
+    else()
+      set(soname_file)
+      set(soname_filename)
+    endif()
+    string(APPEND content "set(TARGET_SONAME_FILE_${tgt}_$<CONFIG>${soname_file})\n")
+    string(APPEND content "set(TARGET_SONAME_FILE_NAME_${tgt}_$<CONFIG>${soname_filename})\n")
+
+    if(type MATCHES "^(EXECUTABLE)$")
+      set(exe_file " [==[$<TARGET_FILE_DIR:${tgt}>/$<TARGET_FILE_PREFIX:${tgt}>$<TARGET_FILE_BASE_NAME:${tgt}>$<TARGET_FILE_SUFFIX:${tgt}>]==]")
+      set(exe_filename " [==[$<TARGET_FILE_PREFIX:${tgt}>$<TARGET_FILE_BASE_NAME:${tgt}>$<TARGET_FILE_SUFFIX:${tgt}>]==]")
+    else()
+      set(exe_file)
+      set(exe_filename)
+    endif()
+    string(APPEND content "set(TARGET_EXE_FILE_${tgt}_$<CONFIG>${exe_file})\n")
+    string(APPEND content "set(TARGET_EXE_FILE_NAME_${tgt}_$<CONFIG>${exe_filename})\n")
+
+    string(APPEND content "set(TARGET_OBJECT_FILES_${tgt}_$<CONFIG> [==[$<TARGET_OBJECTS:${tgt}>]==])\n")
+  endforeach()
+
+  file(GENERATE OUTPUT "${CMAKE_BINARY_DIR}/target_files_$<CONFIG>.cmake" CONTENT "${content}")
+
+  set(content)
+  foreach(config IN LISTS CMAKE_CONFIGURATION_TYPES)
+    string(APPEND content "include(\${CMAKE_CURRENT_LIST_DIR}/target_files_${config}.cmake)\n")
+  endforeach()
+
+  file(WRITE "${CMAKE_BINARY_DIR}/target_files.cmake" "${content}")
+endfunction()

+ 38 - 0
Tests/RunCMake/NinjaMultiConfig/CustomCommandGenerator-debug-build-check.cmake

@@ -0,0 +1,38 @@
+check_files("${RunCMake_TEST_BINARY_DIR}"
+  INCLUDE
+    ${CONFIG_FILES}
+    ${GENERATED_FILES}
+
+    ${TARGET_FILE_generator_Debug}
+    ${TARGET_OBJECT_FILES_generator_Debug}
+
+    ${TARGET_FILE_generated_Debug}
+    ${TARGET_OBJECT_FILES_generated_Debug}
+
+    ${TARGET_FILE_generatorlib_Debug}
+    ${TARGET_LINKER_FILE_generatorlib_Debug}
+    ${TARGET_OBJECT_FILES_generatorlib_Debug}
+
+    ${TARGET_OBJECT_FILES_generatorobj_Debug}
+
+    ${TARGET_OBJECT_FILES_emptyobj_Debug}
+
+  EXCLUDE
+    ${TARGET_OBJECT_FILES_generator_Release}
+    ${TARGET_OBJECT_FILES_generated_Release}
+    ${TARGET_OBJECT_FILES_generatorlib_Release}
+    ${TARGET_OBJECT_FILES_generatorobj_Release}
+    ${TARGET_OBJECT_FILES_emptyobj_Release}
+
+    ${TARGET_OBJECT_FILES_generator_MinSizeRel}
+    ${TARGET_OBJECT_FILES_generated_MinSizeRel}
+    ${TARGET_OBJECT_FILES_generatorlib_MinSizeRel}
+    ${TARGET_OBJECT_FILES_generatorobj_MinSizeRel}
+    ${TARGET_OBJECT_FILES_emptyobj_MinSizeRel}
+
+    ${TARGET_OBJECT_FILES_generator_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_generated_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_generatorlib_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_generatorobj_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_emptyobj_RelWithDebInfo}
+  )

+ 37 - 0
Tests/RunCMake/NinjaMultiConfig/CustomCommandGenerator-debug-clean-ninja-check.cmake

@@ -0,0 +1,37 @@
+check_files("${RunCMake_TEST_BINARY_DIR}"
+  INCLUDE
+    ${CONFIG_FILES}
+
+    ${TARGET_FILE_generator_Release}
+    ${TARGET_OBJECT_FILES_generator_Release}
+
+    ${TARGET_FILE_generated_Release}
+    ${TARGET_OBJECT_FILES_generated_Release}
+
+    ${TARGET_FILE_generatorlib_Release}
+    ${TARGET_LINKER_FILE_generatorlib_Release}
+    ${TARGET_OBJECT_FILES_generatorlib_Release}
+
+    ${TARGET_OBJECT_FILES_generatorobj_Release}
+
+    ${TARGET_OBJECT_FILES_emptyobj_Release}
+
+  EXCLUDE
+    ${TARGET_OBJECT_FILES_generator_Debug}
+    ${TARGET_OBJECT_FILES_generated_Debug}
+    ${TARGET_OBJECT_FILES_generatorlib_Debug}
+    ${TARGET_OBJECT_FILES_generatorobj_Debug}
+    ${TARGET_OBJECT_FILES_emptyobj_Debug}
+
+    ${TARGET_OBJECT_FILES_generator_MinSizeRel}
+    ${TARGET_OBJECT_FILES_generated_MinSizeRel}
+    ${TARGET_OBJECT_FILES_generatorlib_MinSizeRel}
+    ${TARGET_OBJECT_FILES_generatorobj_MinSizeRel}
+    ${TARGET_OBJECT_FILES_emptyobj_MinSizeRel}
+
+    ${TARGET_OBJECT_FILES_generator_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_generated_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_generatorlib_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_generatorobj_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_emptyobj_RelWithDebInfo}
+  )

+ 12 - 0
Tests/RunCMake/NinjaMultiConfig/CustomCommandGenerator-debug-generated-stdout.txt

@@ -0,0 +1,12 @@
+^Generator genex config definition: Debug
+Generator genex config include dir: Debug
+Generator library genex config definition: Debug
+Generator library genex config include dir: Debug
+Generator object genex config definition: Debug
+Generator object genex config include dir: Debug
+Generated genex config definition: Debug
+Generated genex config include dir: Debug
+Generated library genex config definition: Debug
+Generated library genex config include dir: Debug
+Generated object genex config definition: Debug
+Generated object genex config include dir: Debug$

+ 44 - 0
Tests/RunCMake/NinjaMultiConfig/CustomCommandGenerator-debug-in-release-graph-build-check.cmake

@@ -0,0 +1,44 @@
+check_files("${RunCMake_TEST_BINARY_DIR}"
+  INCLUDE
+    ${CONFIG_FILES}
+    ${GENERATED_FILES}
+
+    ${TARGET_FILE_generated_Debug}
+    ${TARGET_OBJECT_FILES_generated_Debug}
+
+    ${TARGET_FILE_generatorlib_Debug}
+    ${TARGET_LINKER_FILE_generatorlib_Debug}
+    ${TARGET_OBJECT_FILES_generatorlib_Debug}
+
+    ${TARGET_OBJECT_FILES_generatorobj_Debug}
+
+    ${TARGET_OBJECT_FILES_emptyobj_Debug}
+
+    ${TARGET_FILE_generator_Release}
+    ${TARGET_OBJECT_FILES_generator_Release}
+
+    ${TARGET_FILE_generatorlib_Release}
+    ${TARGET_LINKER_FILE_generatorlib_Release}
+    ${TARGET_OBJECT_FILES_generatorlib_Release}
+
+    ${TARGET_OBJECT_FILES_generatorobj_Release}
+
+    ${TARGET_OBJECT_FILES_emptyobj_Release}
+
+  EXCLUDE
+    ${TARGET_OBJECT_FILES_generator_Debug}
+
+    ${TARGET_OBJECT_FILES_generated_Release}
+
+    ${TARGET_OBJECT_FILES_generator_MinSizeRel}
+    ${TARGET_OBJECT_FILES_generated_MinSizeRel}
+    ${TARGET_OBJECT_FILES_generatorlib_MinSizeRel}
+    ${TARGET_OBJECT_FILES_generatorobj_MinSizeRel}
+    ${TARGET_OBJECT_FILES_emptyobj_MinSizeRel}
+
+    ${TARGET_OBJECT_FILES_generator_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_generated_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_generatorlib_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_generatorobj_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_emptyobj_RelWithDebInfo}
+  )

+ 36 - 0
Tests/RunCMake/NinjaMultiConfig/CustomCommandGenerator-debug-in-release-graph-clean-ninja-check.cmake

@@ -0,0 +1,36 @@
+check_files("${RunCMake_TEST_BINARY_DIR}"
+  INCLUDE
+    ${CONFIG_FILES}
+
+    ${TARGET_FILE_generator_Release}
+    ${TARGET_OBJECT_FILES_generator_Release}
+
+    ${TARGET_FILE_generatorlib_Release}
+    ${TARGET_LINKER_FILE_generatorlib_Release}
+    ${TARGET_OBJECT_FILES_generatorlib_Release}
+
+    ${TARGET_OBJECT_FILES_generatorobj_Release}
+
+    ${TARGET_OBJECT_FILES_emptyobj_Release}
+
+  EXCLUDE
+    ${TARGET_OBJECT_FILES_generator_Debug}
+    ${TARGET_OBJECT_FILES_generated_Debug}
+    ${TARGET_OBJECT_FILES_generatorlib_Debug}
+    ${TARGET_OBJECT_FILES_generatorobj_Debug}
+    ${TARGET_OBJECT_FILES_emptyobj_Debug}
+
+    ${TARGET_OBJECT_FILES_generated_Release}
+
+    ${TARGET_OBJECT_FILES_generator_MinSizeRel}
+    ${TARGET_OBJECT_FILES_generated_MinSizeRel}
+    ${TARGET_OBJECT_FILES_generatorlib_MinSizeRel}
+    ${TARGET_OBJECT_FILES_generatorobj_MinSizeRel}
+    ${TARGET_OBJECT_FILES_emptyobj_MinSizeRel}
+
+    ${TARGET_OBJECT_FILES_generator_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_generated_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_generatorlib_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_generatorobj_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_emptyobj_RelWithDebInfo}
+  )

+ 12 - 0
Tests/RunCMake/NinjaMultiConfig/CustomCommandGenerator-debug-in-release-graph-generated-stdout.txt

@@ -0,0 +1,12 @@
+^Generator genex config definition: Release
+Generator genex config include dir: Release
+Generator library genex config definition: Release
+Generator library genex config include dir: Release
+Generator object genex config definition: Release
+Generator object genex config include dir: Release
+Generated genex config definition: Debug
+Generated genex config include dir: Debug
+Generated library genex config definition: Debug
+Generated library genex config include dir: Debug
+Generated object genex config definition: Debug
+Generated object genex config include dir: Debug$

+ 29 - 0
Tests/RunCMake/NinjaMultiConfig/CustomCommandGenerator-release-clean-build-check.cmake

@@ -0,0 +1,29 @@
+check_files("${RunCMake_TEST_BINARY_DIR}"
+  INCLUDE
+    ${CONFIG_FILES}
+
+  EXCLUDE
+    ${TARGET_OBJECT_FILES_generator_Debug}
+    ${TARGET_OBJECT_FILES_generated_Debug}
+    ${TARGET_OBJECT_FILES_generatorlib_Debug}
+    ${TARGET_OBJECT_FILES_generatorobj_Debug}
+    ${TARGET_OBJECT_FILES_emptyobj_Debug}
+
+    ${TARGET_OBJECT_FILES_generator_Release}
+    ${TARGET_OBJECT_FILES_generated_Release}
+    ${TARGET_OBJECT_FILES_generatorlib_Release}
+    ${TARGET_OBJECT_FILES_generatorobj_Release}
+    ${TARGET_OBJECT_FILES_emptyobj_Release}
+
+    ${TARGET_OBJECT_FILES_generator_MinSizeRel}
+    ${TARGET_OBJECT_FILES_generated_MinSizeRel}
+    ${TARGET_OBJECT_FILES_generatorlib_MinSizeRel}
+    ${TARGET_OBJECT_FILES_generatorobj_MinSizeRel}
+    ${TARGET_OBJECT_FILES_emptyobj_MinSizeRel}
+
+    ${TARGET_OBJECT_FILES_generator_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_generated_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_generatorlib_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_generatorobj_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_emptyobj_RelWithDebInfo}
+  )

+ 12 - 0
Tests/RunCMake/NinjaMultiConfig/CustomCommandGenerator-release-generated-stdout.txt

@@ -0,0 +1,12 @@
+^Generator genex config definition: Release
+Generator genex config include dir: Release
+Generator library genex config definition: Release
+Generator library genex config include dir: Release
+Generator object genex config definition: Release
+Generator object genex config include dir: Release
+Generated genex config definition: Release
+Generated genex config include dir: Release
+Generated library genex config definition: Release
+Generated library genex config include dir: Release
+Generated object genex config definition: Release
+Generated object genex config include dir: Release$

+ 12 - 0
Tests/RunCMake/NinjaMultiConfig/CustomCommandGenerator-release-in-debug-graph-generated-stdout.txt

@@ -0,0 +1,12 @@
+^Generator genex config definition: Debug
+Generator genex config include dir: Debug
+Generator library genex config definition: Debug
+Generator library genex config include dir: Debug
+Generator object genex config definition: Debug
+Generator object genex config include dir: Debug
+Generated genex config definition: Release
+Generated genex config include dir: Release
+Generated library genex config definition: Release
+Generated library genex config include dir: Release
+Generated object genex config definition: Release
+Generated object genex config include dir: Release$

+ 45 - 0
Tests/RunCMake/NinjaMultiConfig/CustomCommandGenerator-release-in-debug-graph-ninja-check.cmake

@@ -0,0 +1,45 @@
+check_files("${RunCMake_TEST_BINARY_DIR}"
+  INCLUDE
+    ${CONFIG_FILES}
+    ${GENERATED_FILES}
+
+    ${TARGET_FILE_generator_Debug}
+    ${TARGET_OBJECT_FILES_generator_Debug}
+
+    ${TARGET_FILE_generatorlib_Debug}
+    ${TARGET_LINKER_FILE_generatorlib_Debug}
+    ${TARGET_OBJECT_FILES_generatorlib_Debug}
+
+    ${TARGET_OBJECT_FILES_generatorobj_Debug}
+
+    ${TARGET_OBJECT_FILES_emptyobj_Debug}
+
+    ${TARGET_FILE_generator_Release}
+    ${TARGET_OBJECT_FILES_generator_Release}
+
+    ${TARGET_FILE_generated_Release}
+    ${TARGET_OBJECT_FILES_generated_Release}
+
+    ${TARGET_FILE_generatorlib_Release}
+    ${TARGET_LINKER_FILE_generatorlib_Release}
+    ${TARGET_OBJECT_FILES_generatorlib_Release}
+
+    ${TARGET_OBJECT_FILES_generatorobj_Release}
+
+    ${TARGET_OBJECT_FILES_emptyobj_Release}
+
+  EXCLUDE
+    ${TARGET_OBJECT_FILES_generated_Debug}
+
+    ${TARGET_OBJECT_FILES_generator_MinSizeRel}
+    ${TARGET_OBJECT_FILES_generated_MinSizeRel}
+    ${TARGET_OBJECT_FILES_generatorlib_MinSizeRel}
+    ${TARGET_OBJECT_FILES_generatorobj_MinSizeRel}
+    ${TARGET_OBJECT_FILES_emptyobj_MinSizeRel}
+
+    ${TARGET_OBJECT_FILES_generator_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_generated_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_generatorlib_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_generatorobj_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_emptyobj_RelWithDebInfo}
+  )

+ 46 - 0
Tests/RunCMake/NinjaMultiConfig/CustomCommandGenerator-release-ninja-check.cmake

@@ -0,0 +1,46 @@
+check_files("${RunCMake_TEST_BINARY_DIR}"
+  INCLUDE
+    ${CONFIG_FILES}
+    ${GENERATED_FILES}
+
+    ${TARGET_FILE_generator_Debug}
+    ${TARGET_OBJECT_FILES_generator_Debug}
+
+    ${TARGET_FILE_generated_Debug}
+    ${TARGET_OBJECT_FILES_generated_Debug}
+
+    ${TARGET_FILE_generatorlib_Debug}
+    ${TARGET_LINKER_FILE_generatorlib_Debug}
+    ${TARGET_OBJECT_FILES_generatorlib_Debug}
+
+    ${TARGET_OBJECT_FILES_generatorobj_Debug}
+
+    ${TARGET_OBJECT_FILES_emptyobj_Debug}
+
+    ${TARGET_FILE_generator_Release}
+    ${TARGET_OBJECT_FILES_generator_Release}
+
+    ${TARGET_FILE_generated_Release}
+    ${TARGET_OBJECT_FILES_generated_Release}
+
+    ${TARGET_FILE_generatorlib_Release}
+    ${TARGET_LINKER_FILE_generatorlib_Release}
+    ${TARGET_OBJECT_FILES_generatorlib_Release}
+
+    ${TARGET_OBJECT_FILES_generatorobj_Release}
+
+    ${TARGET_OBJECT_FILES_emptyobj_Release}
+
+  EXCLUDE
+    ${TARGET_OBJECT_FILES_generator_MinSizeRel}
+    ${TARGET_OBJECT_FILES_generated_MinSizeRel}
+    ${TARGET_OBJECT_FILES_generatorlib_MinSizeRel}
+    ${TARGET_OBJECT_FILES_generatorobj_MinSizeRel}
+    ${TARGET_OBJECT_FILES_emptyobj_MinSizeRel}
+
+    ${TARGET_OBJECT_FILES_generator_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_generated_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_generatorlib_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_generatorobj_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_emptyobj_RelWithDebInfo}
+  )

+ 56 - 0
Tests/RunCMake/NinjaMultiConfig/CustomCommandGenerator.cmake

@@ -0,0 +1,56 @@
+enable_language(C)
+
+add_library(generatorlib STATIC generatorlib.c)
+add_library(generatorobj OBJECT generatorobj.c)
+add_library(emptyobj OBJECT empty.c)
+add_library(emptyobj2 OBJECT empty.c)
+
+add_executable(generator generator.c $<TARGET_OBJECTS:generatorobj>)
+target_link_libraries(generator PRIVATE generatorlib)
+
+add_custom_command(OUTPUT generated.c COMMAND generator generated.c)
+add_executable(generated ${CMAKE_BINARY_DIR}/generated.c $<TARGET_OBJECTS:generatorobj> $<TARGET_OBJECTS:emptyobj>)
+target_link_libraries(generated PRIVATE generatorlib)
+
+file(GENERATE OUTPUT include/genex/$<CONFIG>/genex_config.h CONTENT
+"#ifndef GENEX_CONFIG_H
+#define GENEX_CONFIG_H
+
+#define GENEX_CONFIG_INCLUDE_DIR \"$<CONFIG>\"
+
+#endif /* GENEX_CONFIG_H */
+")
+file(GENERATE OUTPUT include/intdir/$<CONFIG>/intdir_config.h CONTENT
+"#ifndef INTDIR_CONFIG_H
+#define INTDIR_CONFIG_H
+
+#define INTDIR_CONFIG_INCLUDE_DIR \"$<CONFIG>\"
+
+#endif /* INTDIR_CONFIG_H */
+")
+
+foreach(g generatorlib generatorobj generator generated)
+  target_compile_definitions(${g} PRIVATE
+    "GENEX_CONFIG_DEFINITION=\"$<CONFIG>\""
+  # FIXME Get this working
+  #  "INTDIR_CONFIG_DEFINITION=\"${CMAKE_CFG_INTDIR}\""
+    )
+  target_include_directories(${g} PRIVATE
+    "${CMAKE_BINARY_DIR}/include/genex/$<CONFIG>"
+  # FIXME Get this working
+  #  "${CMAKE_BINARY_DIR}/include/intdir/${CMAKE_CFG_INTDIR}"
+    )
+endforeach()
+
+include(${CMAKE_CURRENT_LIST_DIR}/Common.cmake)
+generate_output_files(generatorlib generatorobj emptyobj generator generated)
+
+file(APPEND "${CMAKE_BINARY_DIR}/target_files.cmake" "set(GENERATED_FILES [==[${CMAKE_BINARY_DIR}/generated.c]==])\n")
+set(genfiles)
+foreach(cfg Debug Release MinSizeRel RelWithDebInfo)
+  list(APPEND genfiles
+    ${CMAKE_BINARY_DIR}/include/genex/${cfg}/genex_config.h
+    ${CMAKE_BINARY_DIR}/include/intdir/${cfg}/intdir_config.h
+    )
+endforeach()
+file(APPEND "${CMAKE_BINARY_DIR}/target_files.cmake" "set(CONFIG_FILES [==[${genfiles}]==])\n")

+ 6 - 0
Tests/RunCMake/NinjaMultiConfig/CustomCommandsAndTargets-debug-command-ninja-check.cmake

@@ -0,0 +1,6 @@
+check_files("${RunCMake_TEST_BINARY_DIR}"
+  INCLUDE
+    ${TARGET_DEPENDS_SubdirCommand}
+    ${TARGET_DEPENDS_TopCommand}
+  )
+check_file_contents("${TARGET_DEPENDS_TopCommand}" "^Genex config: Debug\nINTDIR config: Debug\n$")

+ 8 - 0
Tests/RunCMake/NinjaMultiConfig/CustomCommandsAndTargets-debug-in-release-graph-postbuild-build-check.cmake

@@ -0,0 +1,8 @@
+check_files("${RunCMake_TEST_BINARY_DIR}"
+  INCLUDE
+    ${TARGET_DEPENDS_SubdirCommand}
+    ${TARGET_DEPENDS_TopCommand}
+    ${TARGET_BYPRODUCTS_SubdirTarget}
+    ${TARGET_BYPRODUCTS_TopTarget}
+    ${TARGET_FILE_SubdirPostBuild_Debug}
+  )

+ 8 - 0
Tests/RunCMake/NinjaMultiConfig/CustomCommandsAndTargets-debug-target-build-check.cmake

@@ -0,0 +1,8 @@
+check_files("${RunCMake_TEST_BINARY_DIR}"
+  INCLUDE
+    ${TARGET_DEPENDS_SubdirCommand}
+    ${TARGET_DEPENDS_TopCommand}
+    ${TARGET_BYPRODUCTS_SubdirTarget}
+    ${TARGET_BYPRODUCTS_TopTarget}
+  )
+check_file_contents("${TARGET_BYPRODUCTS_TopTarget}" "^Genex config: Debug\nINTDIR config: Debug\n$")

+ 12 - 0
Tests/RunCMake/NinjaMultiConfig/CustomCommandsAndTargets-debug-targetpostbuild-build-check.cmake

@@ -0,0 +1,12 @@
+check_files("${RunCMake_TEST_BINARY_DIR}"
+  INCLUDE
+    ${TARGET_DEPENDS_SubdirCommand}
+    ${TARGET_DEPENDS_TopCommand}
+    ${TARGET_BYPRODUCTS_SubdirTarget}
+    ${TARGET_BYPRODUCTS_TopTarget}
+    ${TARGET_FILE_SubdirPostBuild_Debug}
+    ${TARGET_FILE_SubdirPostBuild_Release}
+    ${TARGET_BYPRODUCTS_SubdirPostBuild}
+    ${TARGET_BYPRODUCTS_TopTargetPostBuild}
+  )
+check_file_contents("${TARGET_BYPRODUCTS_TopTargetPostBuild}" "^Genex config: Debug\nINTDIR config: Debug\n$")

+ 5 - 0
Tests/RunCMake/NinjaMultiConfig/CustomCommandsAndTargets-minsizerel-command-ninja-check.cmake

@@ -0,0 +1,5 @@
+check_files("${RunCMake_TEST_BINARY_DIR}"
+  INCLUDE
+    ${TARGET_DEPENDS_SubdirCommand}
+  )
+check_file_contents("${TARGET_DEPENDS_SubdirCommand}" "^Genex config: MinSizeRel\nINTDIR config: MinSizeRel\n$")

+ 5 - 0
Tests/RunCMake/NinjaMultiConfig/CustomCommandsAndTargets-release-command-build-check.cmake

@@ -0,0 +1,5 @@
+check_files("${RunCMake_TEST_BINARY_DIR}"
+  INCLUDE
+    ${TARGET_DEPENDS_SubdirCommand}
+  )
+check_file_contents("${TARGET_DEPENDS_SubdirCommand}" "^Genex config: Release\nINTDIR config: Release\n$")

+ 11 - 0
Tests/RunCMake/NinjaMultiConfig/CustomCommandsAndTargets-release-postbuild-ninja-check.cmake

@@ -0,0 +1,11 @@
+check_files("${RunCMake_TEST_BINARY_DIR}"
+  INCLUDE
+    ${TARGET_DEPENDS_SubdirCommand}
+    ${TARGET_DEPENDS_TopCommand}
+    ${TARGET_BYPRODUCTS_SubdirTarget}
+    ${TARGET_BYPRODUCTS_TopTarget}
+    ${TARGET_FILE_SubdirPostBuild_Debug}
+    ${TARGET_FILE_SubdirPostBuild_Release}
+    ${TARGET_BYPRODUCTS_SubdirPostBuild}
+  )
+check_file_contents("${TARGET_BYPRODUCTS_SubdirPostBuild}" "^Genex config: Release\nINTDIR config: Release\n$")

+ 7 - 0
Tests/RunCMake/NinjaMultiConfig/CustomCommandsAndTargets-release-target-ninja-check.cmake

@@ -0,0 +1,7 @@
+check_files("${RunCMake_TEST_BINARY_DIR}"
+  INCLUDE
+    ${TARGET_DEPENDS_SubdirCommand}
+    ${TARGET_DEPENDS_TopCommand}
+    ${TARGET_BYPRODUCTS_SubdirTarget}
+  )
+check_file_contents("${TARGET_BYPRODUCTS_SubdirTarget}" "^Genex config: Release\nINTDIR config: Release\n$")

+ 13 - 0
Tests/RunCMake/NinjaMultiConfig/CustomCommandsAndTargets-release-targetpostbuild-ninja-check.cmake

@@ -0,0 +1,13 @@
+check_files("${RunCMake_TEST_BINARY_DIR}"
+  INCLUDE
+    ${TARGET_DEPENDS_SubdirCommand}
+    ${TARGET_DEPENDS_TopCommand}
+    ${TARGET_BYPRODUCTS_SubdirTarget}
+    ${TARGET_BYPRODUCTS_TopTarget}
+    ${TARGET_FILE_SubdirPostBuild_Debug}
+    ${TARGET_FILE_SubdirPostBuild_Release}
+    ${TARGET_BYPRODUCTS_SubdirPostBuild}
+    ${TARGET_BYPRODUCTS_TopTargetPostBuild}
+    ${TARGET_BYPRODUCTS_SubdirTargetPostBuild}
+  )
+check_file_contents("${TARGET_BYPRODUCTS_SubdirTargetPostBuild}" "^Genex config: Release\nINTDIR config: Release\n$")

+ 39 - 0
Tests/RunCMake/NinjaMultiConfig/CustomCommandsAndTargets.cmake

@@ -0,0 +1,39 @@
+enable_language(C)
+
+file(REMOVE "${CMAKE_BINARY_DIR}/target_files_custom.cmake")
+
+function(get_write_file_command var filename)
+  set(${var} ${CMAKE_COMMAND} -DOUTPUT_FILE=${filename} -DGENEX_CONFIG=$<CONFIG> -DINTDIR_CONFIG=${CMAKE_CFG_INTDIR} -P ${CMAKE_SOURCE_DIR}/WriteFile.cmake PARENT_SCOPE)
+endfunction()
+
+function(create_targets prefix)
+  get_write_file_command(cmd ${prefix}Command.txt)
+  add_custom_command(OUTPUT ${prefix}Command.txt COMMAND ${cmd})
+  add_custom_target(${prefix}Command DEPENDS ${prefix}Command.txt)
+
+  get_write_file_command(cmd ${prefix}Target.txt)
+  add_custom_target(${prefix}Target COMMAND ${cmd} BYPRODUCTS ${prefix}Target.txt)
+
+  get_write_file_command(cmd ${prefix}PostBuild.txt)
+  add_executable(${prefix}PostBuild ${CMAKE_SOURCE_DIR}/main.c)
+  add_custom_command(TARGET ${prefix}PostBuild COMMAND ${cmd} BYPRODUCTS ${prefix}PostBuild.txt)
+
+  get_write_file_command(cmd ${prefix}TargetPostBuild.txt)
+  add_custom_target(${prefix}TargetPostBuild)
+  add_custom_command(TARGET ${prefix}TargetPostBuild COMMAND ${cmd} BYPRODUCTS ${prefix}TargetPostBuild.txt)
+
+  file(APPEND "${CMAKE_BINARY_DIR}/target_files_custom.cmake"
+"set(TARGET_DEPENDS_${prefix}Command [==[${CMAKE_CURRENT_BINARY_DIR}/${prefix}Command.txt]==])
+set(TARGET_BYPRODUCTS_${prefix}Target [==[${CMAKE_CURRENT_BINARY_DIR}/${prefix}Target.txt]==])
+set(TARGET_BYPRODUCTS_${prefix}PostBuild [==[${CMAKE_CURRENT_BINARY_DIR}/${prefix}PostBuild.txt]==])
+set(TARGET_BYPRODUCTS_${prefix}TargetPostBuild [==[${CMAKE_CURRENT_BINARY_DIR}/${prefix}TargetPostBuild.txt]==])
+")
+endfunction()
+
+add_subdirectory(CustomCommandsAndTargetsSubdir)
+
+create_targets(Top)
+
+include(${CMAKE_CURRENT_LIST_DIR}/Common.cmake)
+generate_output_files(TopPostBuild SubdirPostBuild)
+file(APPEND "${CMAKE_BINARY_DIR}/target_files.cmake" "include(\${CMAKE_CURRENT_LIST_DIR}/target_files_custom.cmake)\n")

+ 1 - 0
Tests/RunCMake/NinjaMultiConfig/CustomCommandsAndTargetsSubdir/CMakeLists.txt

@@ -0,0 +1 @@
+create_targets(Subdir)

+ 31 - 0
Tests/RunCMake/NinjaMultiConfig/Install-debug-in-release-graph-install-ninja-check.cmake

@@ -0,0 +1,31 @@
+check_files("${RunCMake_TEST_BINARY_DIR}"
+  INCLUDE
+    ${TARGET_FILE_exe_Debug}
+    ${TARGET_OBJECT_FILES_exe_Debug}
+
+    ${TARGET_FILE_mylib_Release}
+    ${TARGET_LINKER_FILE_mylib_Debug}
+    ${TARGET_OBJECT_FILES_mylib_Debug}
+
+    ${RunCMake_TEST_BINARY_DIR}/install/bin/Debug/${TARGET_FILE_NAME_exe_Debug}
+    ${RunCMake_TEST_BINARY_DIR}/install/lib/Debug/${TARGET_FILE_NAME_mylib_Debug}
+    ${RunCMake_TEST_BINARY_DIR}/install/lib/Debug/${TARGET_LINKER_FILE_NAME_mylib_Debug}
+
+    ${TARGET_FILE_exe_Release}
+    ${TARGET_OBJECT_FILES_exe_Release}
+
+    ${TARGET_FILE_mylib_Release}
+    ${TARGET_LINKER_FILE_mylib_Release}
+    ${TARGET_OBJECT_FILES_mylib_Release}
+
+    ${RunCMake_TEST_BINARY_DIR}/install/bin/Release/${TARGET_FILE_NAME_exe_Release}
+    ${RunCMake_TEST_BINARY_DIR}/install/lib/Release/${TARGET_FILE_NAME_mylib_Release}
+    ${RunCMake_TEST_BINARY_DIR}/install/lib/Release/${TARGET_LINKER_FILE_NAME_mylib_Release}
+
+  EXCLUDE
+    ${TARGET_OBJECT_FILES_exe_MinSizeRel}
+    ${TARGET_OBJECT_FILES_mylib_MinSizeRel}
+
+    ${TARGET_OBJECT_FILES_exe_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_mylib_RelWithDebInfo}
+  )

+ 23 - 0
Tests/RunCMake/NinjaMultiConfig/Install-release-install-build-check.cmake

@@ -0,0 +1,23 @@
+check_files("${RunCMake_TEST_BINARY_DIR}"
+  INCLUDE
+    ${TARGET_FILE_exe_Release}
+    ${TARGET_OBJECT_FILES_exe_Release}
+
+    ${TARGET_FILE_mylib_Release}
+    ${TARGET_LINKER_FILE_mylib_Release}
+    ${TARGET_OBJECT_FILES_mylib_Release}
+
+    ${RunCMake_TEST_BINARY_DIR}/install/bin/Release/${TARGET_FILE_NAME_exe_Release}
+    ${RunCMake_TEST_BINARY_DIR}/install/lib/Release/${TARGET_FILE_NAME_mylib_Release}
+    ${RunCMake_TEST_BINARY_DIR}/install/lib/Release/${TARGET_LINKER_FILE_NAME_mylib_Release}
+
+  EXCLUDE
+    ${TARGET_OBJECT_FILES_exe_Debug}
+    ${TARGET_OBJECT_FILES_mylib_Debug}
+
+    ${TARGET_OBJECT_FILES_exe_MinSizeRel}
+    ${TARGET_OBJECT_FILES_mylib_MinSizeRel}
+
+    ${TARGET_OBJECT_FILES_exe_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_mylib_RelWithDebInfo}
+  )

+ 10 - 0
Tests/RunCMake/NinjaMultiConfig/Install.cmake

@@ -0,0 +1,10 @@
+enable_language(C)
+
+add_executable(exe main.c)
+add_library(mylib STATIC simplelib.c)
+
+install(TARGETS exe DESTINATION bin/$<CONFIG>)
+install(TARGETS mylib DESTINATION lib/$<CONFIG>)
+
+include(${CMAKE_CURRENT_LIST_DIR}/Common.cmake)
+generate_output_files(exe mylib)

+ 7 - 0
Tests/RunCMake/NinjaMultiConfig/PostfixAndLocation-debug-in-release-graph-build-check.cmake

@@ -0,0 +1,7 @@
+check_files("${RunCMake_TEST_BINARY_DIR}"
+  INCLUDE
+    ${TARGET_FILE_mylib_Release}
+    ${TARGET_LINKER_FILE_mylib_Release}
+    ${TARGET_FILE_mylib_Debug}
+    ${TARGET_LINKER_FILE_mylib_Debug}
+  )

+ 5 - 0
Tests/RunCMake/NinjaMultiConfig/PostfixAndLocation-release-in-release-graph-build-check.cmake

@@ -0,0 +1,5 @@
+check_files("${RunCMake_TEST_BINARY_DIR}"
+  INCLUDE
+    ${TARGET_FILE_mylib_Release}
+    ${TARGET_LINKER_FILE_mylib_Release}
+  )

+ 18 - 0
Tests/RunCMake/NinjaMultiConfig/PostfixAndLocation.cmake

@@ -0,0 +1,18 @@
+enable_language(C)
+
+set(CMAKE_DEBUG_POSTFIX "_debug")
+
+set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/lib)
+set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG ${CMAKE_CURRENT_BINARY_DIR}/lib)
+set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE ${CMAKE_CURRENT_BINARY_DIR}/lib)
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin)
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_CURRENT_BINARY_DIR}/bin)
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_CURRENT_BINARY_DIR}/bin)
+set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/lib)
+set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${CMAKE_CURRENT_BINARY_DIR}/lib)
+set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${CMAKE_CURRENT_BINARY_DIR}/lib)
+
+add_library(mylib SHARED simplelib.c)
+
+include(${CMAKE_CURRENT_LIST_DIR}/Common.cmake)
+generate_output_files(mylib)

+ 7 - 0
Tests/RunCMake/NinjaMultiConfig/Qt5-debug-in-release-graph-build-check.cmake

@@ -0,0 +1,7 @@
+check_files("${RunCMake_TEST_BINARY_DIR}"
+  INCLUDE
+    ${AUTOGEN_FILES}
+
+    ${TARGET_FILE_exe_Debug}
+    ${TARGET_OBJECT_FILES_exe_Debug}
+  )

+ 18 - 0
Tests/RunCMake/NinjaMultiConfig/Qt5.cmake

@@ -0,0 +1,18 @@
+enable_language(CXX)
+
+find_package(Qt5Core REQUIRED)
+
+set(CMAKE_AUTOMOC ON)
+set(CMAKE_AUTOMOC_COMPILER_PREDEFINES OFF)
+
+add_executable(exe qt5.cxx)
+target_link_libraries(exe PRIVATE Qt5::Core)
+
+include(${CMAKE_CURRENT_LIST_DIR}/Common.cmake)
+generate_output_files(exe)
+
+set(autogen_files "${CMAKE_BINARY_DIR}/exe_autogen/mocs_compilation.cpp")
+foreach(c IN LISTS CMAKE_CONFIGURATION_TYPES)
+  list(APPEND autogen_files "${CMAKE_BINARY_DIR}/exe_autogen/include_${c}/moc_qt5.cpp")
+endforeach()
+file(APPEND "${CMAKE_BINARY_DIR}/target_files.cmake" "set(AUTOGEN_FILES [==[${autogen_files}]==])\n")

+ 173 - 0
Tests/RunCMake/NinjaMultiConfig/RunCMakeTest.cmake

@@ -0,0 +1,173 @@
+cmake_minimum_required(VERSION 3.16)
+
+include(RunCMake)
+
+set(RunCMake_GENERATOR "Ninja Multi-Config")
+set(RunCMake_GENERATOR_IS_MULTI_CONFIG 1)
+
+function(check_files dir)
+  cmake_parse_arguments(_check_files "" "" "INCLUDE;EXCLUDE" ${ARGN})
+
+  set(expected ${_check_files_INCLUDE})
+  list(FILTER expected EXCLUDE REGEX "^$")
+  list(REMOVE_DUPLICATES expected)
+  list(SORT expected)
+
+  file(GLOB_RECURSE actual "${dir}/*")
+  list(FILTER actual EXCLUDE REGEX "/CMakeFiles/|\\.ninja$|/CMakeCache\\.txt$|/target_files[^/]*\\.cmake$|/\\.ninja_[^/]*$|/cmake_install\\.cmake$|\\.ilk$|\\.manifest$|\\.pdb$|\\.exp$|/install_manifest\\.txt$")
+  foreach(f IN LISTS _check_files_INCLUDE _check_files_EXCLUDE)
+    if(EXISTS ${f})
+      list(APPEND actual ${f})
+    endif()
+  endforeach()
+  list(REMOVE_DUPLICATES actual)
+  list(SORT actual)
+
+  if(NOT "${expected}" STREQUAL "${actual}")
+    string(REPLACE ";" "\n  " expected_formatted "${expected}")
+    string(REPLACE ";" "\n  " actual_formatted "${actual}")
+    string(APPEND RunCMake_TEST_FAILED "Actual files did not match expected\nExpected:\n  ${expected_formatted}\nActual:\n  ${actual_formatted}\n")
+  endif()
+
+  set(RunCMake_TEST_FAILED "${RunCMake_TEST_FAILED}" PARENT_SCOPE)
+endfunction()
+
+function(check_file_contents filename expected)
+  if(NOT EXISTS "${filename}")
+    string(APPEND RunCMake_TEST_FAILED "File ${filename} does not exist\n")
+  else()
+    file(READ "${filename}" actual)
+    if(NOT actual MATCHES "${expected}")
+      string(REPLACE "\n" "\n  " expected_formatted "${expected}")
+      string(REPLACE "\n" "\n  " actual_formatted "${actual}")
+      string(APPEND RunCMake_TEST_FAILED "Contents of ${filename} do not match expected\nExpected:\n  ${expected_formatted}\nActual:\n  ${actual_formatted}\n")
+    endif()
+  endif()
+
+  set(RunCMake_TEST_FAILED "${RunCMake_TEST_FAILED}" PARENT_SCOPE)
+endfunction()
+
+function(run_cmake_configure case)
+  set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${case}-build)
+  set(RunCMake_TEST_NO_CLEAN 1)
+  file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
+  file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
+  run_cmake(${case})
+endfunction()
+
+function(run_cmake_build case suffix config)
+  set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${case}-build)
+  set(RunCMake_TEST_NO_CLEAN 1)
+  set(tgts)
+  foreach(tgt IN LISTS ARGN)
+    list(APPEND tgts --target ${tgt})
+  endforeach()
+  run_cmake_command(${case}-${suffix}-build "${CMAKE_COMMAND}" --build . --config ${config} ${tgts})
+endfunction()
+
+function(run_ninja case suffix file)
+  set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${case}-build)
+  set(RunCMake_TEST_NO_CLEAN 1)
+  run_cmake_command(${case}-${suffix}-ninja "${RunCMake_MAKE_PROGRAM}" -f "${file}" ${ARGN})
+endfunction()
+
+###############################################################################
+
+set(RunCMake_TEST_NO_CLEAN 1)
+
+set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/Simple-build)
+set(RunCMake_TEST_OPTIONS "-DCMAKE_NINJA_MULTI_DEFAULT_BUILD_TYPE=RelWithDebInfo")
+run_cmake_configure(Simple)
+include(${RunCMake_TEST_BINARY_DIR}/target_files.cmake)
+run_cmake_build(Simple debug-target Debug simpleexe)
+run_ninja(Simple debug-target build-Debug.ninja simplestatic)
+get_filename_component(simpleshared_Release "${TARGET_FILE_simpleshared_Release}" NAME)
+run_cmake_build(Simple release-filename Release ${simpleshared_Release})
+file(RELATIVE_PATH simpleexe_Release "${RunCMake_TEST_BINARY_DIR}" "${TARGET_FILE_simpleexe_Release}")
+run_ninja(Simple release-file build-Release.ninja ${simpleexe_Release})
+run_cmake_build(Simple all-configs Release simplestatic:all)
+run_ninja(Simple default-build-file build.ninja simpleexe)
+run_cmake_build(Simple all-clean Release clean:all)
+run_cmake_build(Simple debug-subdir Debug SimpleSubdir/all)
+run_ninja(Simple release-in-minsizerel-graph-subdir build-MinSizeRel.ninja SimpleSubdir/all:Release)
+run_cmake_build(Simple all-subdir Release SimpleSubdir/all:all)
+run_ninja(Simple minsizerel-top build-MinSizeRel.ninja all)
+run_cmake_build(Simple debug-in-release-graph-top Release all:Debug)
+run_ninja(Simple all-clean-again build-Debug.ninja clean:all)
+run_ninja(Simple all-top build-RelWithDebInfo.ninja all:all)
+# Leave enough time for the timestamp to change on second-resolution systems
+execute_process(COMMAND ${CMAKE_COMMAND} -E sleep 1)
+file(TOUCH "${RunCMake_TEST_BINARY_DIR}/empty.cmake")
+run_ninja(Simple reconfigure-config build-Release.ninja simpleexe)
+execute_process(COMMAND ${CMAKE_COMMAND} -E sleep 1)
+file(TOUCH "${RunCMake_TEST_BINARY_DIR}/empty.cmake")
+run_ninja(Simple reconfigure-noconfig build.ninja simpleexe)
+
+set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/CustomCommandGenerator-build)
+run_cmake_configure(CustomCommandGenerator)
+include(${RunCMake_TEST_BINARY_DIR}/target_files.cmake)
+run_cmake_build(CustomCommandGenerator debug Debug generated)
+run_cmake_command(CustomCommandGenerator-debug-generated "${TARGET_FILE_generated_Debug}")
+run_ninja(CustomCommandGenerator release build-Release.ninja generated)
+run_cmake_command(CustomCommandGenerator-release-generated "${TARGET_FILE_generated_Release}")
+run_ninja(CustomCommandGenerator debug-clean build-Debug.ninja clean)
+run_cmake_build(CustomCommandGenerator release-clean Release clean)
+run_cmake_build(CustomCommandGenerator debug-in-release-graph Release generated:Debug)
+run_cmake_command(CustomCommandGenerator-debug-in-release-graph-generated "${TARGET_FILE_generated_Debug}")
+run_ninja(CustomCommandGenerator debug-in-release-graph-clean build-Debug.ninja clean:Debug)
+run_ninja(CustomCommandGenerator release-in-debug-graph build-Debug.ninja generated:Release)
+run_cmake_command(CustomCommandGenerator-release-in-debug-graph-generated "${TARGET_FILE_generated_Release}")
+
+set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/CustomCommandsAndTargets-build)
+run_cmake_configure(CustomCommandsAndTargets)
+include(${RunCMake_TEST_BINARY_DIR}/target_files.cmake)
+run_cmake_build(CustomCommandsAndTargets release-command Release SubdirCommand)
+#FIXME Get this working
+#run_ninja(CustomCommandsAndTargets minsizerel-command build-MinSizeRel.ninja CustomCommandsAndTargetsSubdir/SubdirCommand)
+run_ninja(CustomCommandsAndTargets debug-command build-Debug.ninja TopCommand)
+run_ninja(CustomCommandsAndTargets release-target build-Release.ninja SubdirTarget)
+run_cmake_build(CustomCommandsAndTargets debug-target Debug TopTarget)
+run_cmake_build(CustomCommandsAndTargets debug-in-release-graph-postbuild Release SubdirPostBuild:Debug)
+run_ninja(CustomCommandsAndTargets release-postbuild build-Release.ninja SubdirPostBuild)
+run_cmake_build(CustomCommandsAndTargets debug-targetpostbuild Debug TopTargetPostBuild)
+run_ninja(CustomCommandsAndTargets release-targetpostbuild build-Release.ninja SubdirTargetPostBuild)
+
+set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/PostfixAndLocation-build)
+set(RunCMake_TEST_OPTIONS "-DCMAKE_CONFIGURATION_TYPES=Debug\\;Release")
+run_cmake_configure(PostfixAndLocation)
+set(RunCMake_TEST_OPTIONS)
+include(${RunCMake_TEST_BINARY_DIR}/target_files.cmake)
+run_cmake_build(PostfixAndLocation release-in-release-graph Release mylib:Release)
+run_cmake_build(PostfixAndLocation debug-in-release-graph Release mylib:Debug)
+
+set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/Clean-build)
+run_cmake_configure(Clean)
+include(${RunCMake_TEST_BINARY_DIR}/target_files.cmake)
+run_cmake_build(Clean release Release)
+run_ninja(Clean release-notall build-Release.ninja exenotall)
+run_cmake_build(Clean release-clean Release clean)
+
+set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/AdditionalCleanFiles-build)
+run_cmake_configure(AdditionalCleanFiles)
+run_cmake_build(AdditionalCleanFiles release-clean Release clean)
+run_ninja(AdditionalCleanFiles all-clean build-Debug.ninja clean:all)
+
+set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/Install-build)
+set(RunCMake_TEST_OPTIONS -DCMAKE_INSTALL_PREFIX=${RunCMake_TEST_BINARY_DIR}/install)
+run_cmake_configure(Install)
+set(RunCMake_TEST_OPTIONS)
+include(${RunCMake_TEST_BINARY_DIR}/target_files.cmake)
+run_cmake_build(Install release-install Release install)
+run_ninja(Install debug-in-release-graph-install build-Release.ninja install:Debug)
+
+# FIXME Get this working
+#set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/AutoMocExecutable-build)
+#run_cmake_configure(AutoMocExecutable)
+#run_cmake_build(AutoMocExecutable debug-in-release-graph Release exe)
+
+if(CMake_TEST_Qt5)
+  set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/Qt5-build)
+  run_cmake_configure(Qt5)
+  include(${RunCMake_TEST_BINARY_DIR}/target_files.cmake)
+  run_cmake_build(Qt5 debug-in-release-graph Release exe:Debug)
+endif()

+ 25 - 0
Tests/RunCMake/NinjaMultiConfig/Simple-all-clean-again-ninja-check.cmake

@@ -0,0 +1,25 @@
+check_files("${RunCMake_TEST_BINARY_DIR}"
+  INCLUDE
+    ${GENERATED_FILES}
+
+  EXCLUDE
+    ${TARGET_OBJECT_FILES_simpleexe_Debug}
+    ${TARGET_OBJECT_FILES_simpleshared_Debug}
+    ${TARGET_OBJECT_FILES_simplestatic_Debug}
+    ${TARGET_OBJECT_FILES_simpleobj_Debug}
+
+    ${TARGET_OBJECT_FILES_simpleexe_Release}
+    ${TARGET_OBJECT_FILES_simpleshared_Release}
+    ${TARGET_OBJECT_FILES_simplestatic_Release}
+    ${TARGET_OBJECT_FILES_simpleobj_Release}
+
+    ${TARGET_OBJECT_FILES_simpleexe_MinSizeRel}
+    ${TARGET_OBJECT_FILES_simpleshared_MinSizeRel}
+    ${TARGET_OBJECT_FILES_simplestatic_MinSizeRel}
+    ${TARGET_OBJECT_FILES_simpleobj_MinSizeRel}
+
+    ${TARGET_OBJECT_FILES_simpleexe_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_simpleshared_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_simplestatic_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_simpleobj_RelWithDebInfo}
+  )

+ 25 - 0
Tests/RunCMake/NinjaMultiConfig/Simple-all-clean-build-check.cmake

@@ -0,0 +1,25 @@
+check_files("${RunCMake_TEST_BINARY_DIR}"
+  INCLUDE
+    ${GENERATED_FILES}
+
+  EXCLUDE
+    ${TARGET_OBJECT_FILES_simpleexe_Debug}
+    ${TARGET_OBJECT_FILES_simpleshared_Debug}
+    ${TARGET_OBJECT_FILES_simplestatic_Debug}
+    ${TARGET_OBJECT_FILES_simpleobj_Debug}
+
+    ${TARGET_OBJECT_FILES_simpleexe_Release}
+    ${TARGET_OBJECT_FILES_simpleshared_Release}
+    ${TARGET_OBJECT_FILES_simplestatic_Release}
+    ${TARGET_OBJECT_FILES_simpleobj_Release}
+
+    ${TARGET_OBJECT_FILES_simpleexe_MinSizeRel}
+    ${TARGET_OBJECT_FILES_simpleshared_MinSizeRel}
+    ${TARGET_OBJECT_FILES_simplestatic_MinSizeRel}
+    ${TARGET_OBJECT_FILES_simpleobj_MinSizeRel}
+
+    ${TARGET_OBJECT_FILES_simpleexe_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_simpleshared_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_simplestatic_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_simpleobj_RelWithDebInfo}
+  )

+ 47 - 0
Tests/RunCMake/NinjaMultiConfig/Simple-all-configs-build-check.cmake

@@ -0,0 +1,47 @@
+check_files("${RunCMake_TEST_BINARY_DIR}"
+  INCLUDE
+    ${GENERATED_FILES}
+
+    ${TARGET_FILE_simpleexe_Debug}
+    ${TARGET_OBJECT_FILES_simpleexe_Debug}
+
+    ${TARGET_FILE_simpleshared_Debug}
+    ${TARGET_LINKER_FILE_simpleshared_Debug}
+    ${TARGET_OBJECT_FILES_simpleshared_Debug}
+
+    ${TARGET_FILE_simplestatic_Debug}
+    ${TARGET_LINKER_FILE_simplestatic_Debug}
+    ${TARGET_OBJECT_FILES_simplestatic_Debug}
+
+    ${TARGET_OBJECT_FILES_simpleobj_Debug}
+
+    ${TARGET_FILE_simpleexe_Release}
+    ${TARGET_OBJECT_FILES_simpleexe_Release}
+
+    ${TARGET_FILE_simpleshared_Release}
+    ${TARGET_LINKER_FILE_simpleshared_Release}
+    ${TARGET_OBJECT_FILES_simpleshared_Release}
+
+    ${TARGET_FILE_simplestatic_Release}
+    ${TARGET_LINKER_FILE_simplestatic_Release}
+    ${TARGET_OBJECT_FILES_simplestatic_Release}
+
+    ${TARGET_OBJECT_FILES_simpleobj_Release}
+
+    ${TARGET_FILE_simplestatic_MinSizeRel}
+    ${TARGET_LINKER_FILE_simplestatic_MinSizeRel}
+    ${TARGET_OBJECT_FILES_simplestatic_MinSizeRel}
+
+    ${TARGET_FILE_simplestatic_RelWithDebInfo}
+    ${TARGET_LINKER_FILE_simplestatic_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_simplestatic_RelWithDebInfo}
+
+  EXCLUDE
+    ${TARGET_OBJECT_FILES_simpleexe_MinSizeRel}
+    ${TARGET_OBJECT_FILES_simpleshared_MinSizeRel}
+    ${TARGET_OBJECT_FILES_simpleobj_MinSizeRel}
+
+    ${TARGET_OBJECT_FILES_simpleexe_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_simpleshared_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_simpleobj_RelWithDebInfo}
+  )

+ 49 - 0
Tests/RunCMake/NinjaMultiConfig/Simple-all-subdir-build-check.cmake

@@ -0,0 +1,49 @@
+check_files("${RunCMake_TEST_BINARY_DIR}"
+  INCLUDE
+    ${GENERATED_FILES}
+
+    ${TARGET_FILE_simpleexe_Debug}
+    ${TARGET_OBJECT_FILES_simpleexe_Debug}
+
+    ${TARGET_FILE_simpleshared_Debug}
+    ${TARGET_LINKER_FILE_simpleshared_Debug}
+    ${TARGET_OBJECT_FILES_simpleshared_Debug}
+
+    ${TARGET_OBJECT_FILES_simpleobj_Debug}
+
+    ${TARGET_FILE_simpleexe_Release}
+    ${TARGET_OBJECT_FILES_simpleexe_Release}
+
+    ${TARGET_FILE_simpleshared_Release}
+    ${TARGET_LINKER_FILE_simpleshared_Release}
+    ${TARGET_OBJECT_FILES_simpleshared_Release}
+
+    ${TARGET_OBJECT_FILES_simpleobj_Release}
+
+    ${TARGET_FILE_simpleexe_MinSizeRel}
+    ${TARGET_OBJECT_FILES_simpleexe_MinSizeRel}
+
+    ${TARGET_FILE_simpleshared_MinSizeRel}
+    ${TARGET_LINKER_FILE_simpleshared_MinSizeRel}
+    ${TARGET_OBJECT_FILES_simpleshared_MinSizeRel}
+
+    ${TARGET_OBJECT_FILES_simpleobj_MinSizeRel}
+
+    ${TARGET_FILE_simpleexe_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_simpleexe_RelWithDebInfo}
+
+    ${TARGET_FILE_simpleshared_RelWithDebInfo}
+    ${TARGET_LINKER_FILE_simpleshared_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_simpleshared_RelWithDebInfo}
+
+    ${TARGET_OBJECT_FILES_simpleobj_RelWithDebInfo}
+
+  EXCLUDE
+    ${TARGET_OBJECT_FILES_simplestatic_Debug}
+
+    ${TARGET_OBJECT_FILES_simplestatic_Release}
+
+    ${TARGET_OBJECT_FILES_simplestatic_MinSizeRel}
+
+    ${TARGET_OBJECT_FILES_simplestatic_RelWithDebInfo}
+  )

+ 56 - 0
Tests/RunCMake/NinjaMultiConfig/Simple-all-top-ninja-check.cmake

@@ -0,0 +1,56 @@
+check_files("${RunCMake_TEST_BINARY_DIR}"
+  INCLUDE
+    ${GENERATED_FILES}
+
+    ${TARGET_FILE_simpleexe_Debug}
+    ${TARGET_OBJECT_FILES_simpleexe_Debug}
+
+    ${TARGET_FILE_simpleshared_Debug}
+    ${TARGET_LINKER_FILE_simpleshared_Debug}
+    ${TARGET_OBJECT_FILES_simpleshared_Debug}
+
+    ${TARGET_FILE_simplestatic_Debug}
+    ${TARGET_LINKER_FILE_simplestatic_Debug}
+    ${TARGET_OBJECT_FILES_simplestatic_Debug}
+
+    ${TARGET_OBJECT_FILES_simpleobj_Debug}
+
+    ${TARGET_FILE_simpleexe_Release}
+    ${TARGET_OBJECT_FILES_simpleexe_Release}
+
+    ${TARGET_FILE_simpleshared_Release}
+    ${TARGET_LINKER_FILE_simpleshared_Release}
+    ${TARGET_OBJECT_FILES_simpleshared_Release}
+
+    ${TARGET_FILE_simplestatic_Release}
+    ${TARGET_LINKER_FILE_simplestatic_Release}
+    ${TARGET_OBJECT_FILES_simplestatic_Release}
+
+    ${TARGET_OBJECT_FILES_simpleobj_Release}
+
+    ${TARGET_FILE_simpleexe_MinSizeRel}
+    ${TARGET_OBJECT_FILES_simpleexe_MinSizeRel}
+
+    ${TARGET_FILE_simpleshared_MinSizeRel}
+    ${TARGET_LINKER_FILE_simpleshared_MinSizeRel}
+    ${TARGET_OBJECT_FILES_simpleshared_MinSizeRel}
+
+    ${TARGET_FILE_simplestatic_MinSizeRel}
+    ${TARGET_LINKER_FILE_simplestatic_MinSizeRel}
+    ${TARGET_OBJECT_FILES_simplestatic_MinSizeRel}
+
+    ${TARGET_OBJECT_FILES_simpleobj_MinSizeRel}
+
+    ${TARGET_FILE_simpleexe_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_simpleexe_RelWithDebInfo}
+
+    ${TARGET_FILE_simpleshared_RelWithDebInfo}
+    ${TARGET_LINKER_FILE_simpleshared_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_simpleshared_RelWithDebInfo}
+
+    ${TARGET_FILE_simplestatic_RelWithDebInfo}
+    ${TARGET_LINKER_FILE_simplestatic_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_simplestatic_RelWithDebInfo}
+
+    ${TARGET_OBJECT_FILES_simpleobj_RelWithDebInfo}
+  )

+ 53 - 0
Tests/RunCMake/NinjaMultiConfig/Simple-debug-in-release-graph-top-build-check.cmake

@@ -0,0 +1,53 @@
+check_files("${RunCMake_TEST_BINARY_DIR}"
+  INCLUDE
+    ${GENERATED_FILES}
+
+    ${TARGET_FILE_simpleexe_Debug}
+    ${TARGET_OBJECT_FILES_simpleexe_Debug}
+
+    ${TARGET_FILE_simpleshared_Debug}
+    ${TARGET_LINKER_FILE_simpleshared_Debug}
+    ${TARGET_OBJECT_FILES_simpleshared_Debug}
+
+    ${TARGET_FILE_simplestatic_Debug}
+    ${TARGET_LINKER_FILE_simplestatic_Debug}
+    ${TARGET_OBJECT_FILES_simplestatic_Debug}
+
+    ${TARGET_OBJECT_FILES_simpleobj_Debug}
+
+    ${TARGET_FILE_simpleexe_Release}
+    ${TARGET_OBJECT_FILES_simpleexe_Release}
+
+    ${TARGET_FILE_simpleshared_Release}
+    ${TARGET_LINKER_FILE_simpleshared_Release}
+    ${TARGET_OBJECT_FILES_simpleshared_Release}
+
+    ${TARGET_OBJECT_FILES_simpleobj_Release}
+
+    ${TARGET_FILE_simpleexe_MinSizeRel}
+    ${TARGET_OBJECT_FILES_simpleexe_MinSizeRel}
+
+    ${TARGET_FILE_simpleshared_MinSizeRel}
+    ${TARGET_LINKER_FILE_simpleshared_MinSizeRel}
+    ${TARGET_OBJECT_FILES_simpleshared_MinSizeRel}
+
+    ${TARGET_FILE_simplestatic_MinSizeRel}
+    ${TARGET_LINKER_FILE_simplestatic_MinSizeRel}
+    ${TARGET_OBJECT_FILES_simplestatic_MinSizeRel}
+
+    ${TARGET_OBJECT_FILES_simpleobj_MinSizeRel}
+
+    ${TARGET_FILE_simpleexe_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_simpleexe_RelWithDebInfo}
+
+    ${TARGET_FILE_simpleshared_RelWithDebInfo}
+    ${TARGET_LINKER_FILE_simpleshared_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_simpleshared_RelWithDebInfo}
+
+    ${TARGET_OBJECT_FILES_simpleobj_RelWithDebInfo}
+
+  EXCLUDE
+    ${TARGET_OBJECT_FILES_simplestatic_Release}
+
+    ${TARGET_OBJECT_FILES_simplestatic_RelWithDebInfo}
+  )

+ 31 - 0
Tests/RunCMake/NinjaMultiConfig/Simple-debug-subdir-build-check.cmake

@@ -0,0 +1,31 @@
+check_files("${RunCMake_TEST_BINARY_DIR}"
+  INCLUDE
+    ${GENERATED_FILES}
+
+    ${TARGET_FILE_simpleexe_Debug}
+    ${TARGET_OBJECT_FILES_simpleexe_Debug}
+
+    ${TARGET_FILE_simpleshared_Debug}
+    ${TARGET_LINKER_FILE_simpleshared_Debug}
+    ${TARGET_OBJECT_FILES_simpleshared_Debug}
+
+    ${TARGET_OBJECT_FILES_simpleobj_Debug}
+
+  EXCLUDE
+    ${TARGET_OBJECT_FILES_simplestatic_Debug}
+
+    ${TARGET_OBJECT_FILES_simpleexe_Release}
+    ${TARGET_OBJECT_FILES_simpleshared_Release}
+    ${TARGET_OBJECT_FILES_simplestatic_Release}
+    ${TARGET_OBJECT_FILES_simpleobj_Release}
+
+    ${TARGET_OBJECT_FILES_simpleexe_MinSizeRel}
+    ${TARGET_OBJECT_FILES_simpleshared_MinSizeRel}
+    ${TARGET_OBJECT_FILES_simplestatic_MinSizeRel}
+    ${TARGET_OBJECT_FILES_simpleobj_MinSizeRel}
+
+    ${TARGET_OBJECT_FILES_simpleexe_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_simpleshared_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_simplestatic_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_simpleobj_RelWithDebInfo}
+  )

+ 31 - 0
Tests/RunCMake/NinjaMultiConfig/Simple-debug-target-build-check.cmake

@@ -0,0 +1,31 @@
+check_files("${RunCMake_TEST_BINARY_DIR}"
+  INCLUDE
+    ${GENERATED_FILES}
+
+    ${TARGET_FILE_simpleexe_Debug}
+    ${TARGET_OBJECT_FILES_simpleexe_Debug}
+
+    ${TARGET_FILE_simpleshared_Debug}
+    ${TARGET_LINKER_FILE_simpleshared_Debug}
+    ${TARGET_OBJECT_FILES_simpleshared_Debug}
+
+    ${TARGET_OBJECT_FILES_simpleobj_Debug}
+
+  EXCLUDE
+    ${TARGET_OBJECT_FILES_simplestatic_Debug}
+
+    ${TARGET_OBJECT_FILES_simpleexe_Release}
+    ${TARGET_OBJECT_FILES_simpleshared_Release}
+    ${TARGET_OBJECT_FILES_simplestatic_Release}
+    ${TARGET_OBJECT_FILES_simpleobj_Release}
+
+    ${TARGET_OBJECT_FILES_simpleexe_MinSizeRel}
+    ${TARGET_OBJECT_FILES_simpleshared_MinSizeRel}
+    ${TARGET_OBJECT_FILES_simplestatic_MinSizeRel}
+    ${TARGET_OBJECT_FILES_simpleobj_MinSizeRel}
+
+    ${TARGET_OBJECT_FILES_simpleexe_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_simpleshared_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_simplestatic_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_simpleobj_RelWithDebInfo}
+  )

+ 33 - 0
Tests/RunCMake/NinjaMultiConfig/Simple-debug-target-ninja-check.cmake

@@ -0,0 +1,33 @@
+check_files("${RunCMake_TEST_BINARY_DIR}"
+  INCLUDE
+    ${GENERATED_FILES}
+
+    ${TARGET_FILE_simpleexe_Debug}
+    ${TARGET_OBJECT_FILES_simpleexe_Debug}
+
+    ${TARGET_FILE_simpleshared_Debug}
+    ${TARGET_LINKER_FILE_simpleshared_Debug}
+    ${TARGET_OBJECT_FILES_simpleshared_Debug}
+
+    ${TARGET_FILE_simplestatic_Debug}
+    ${TARGET_LINKER_FILE_simplestatic_Debug}
+    ${TARGET_OBJECT_FILES_simplestatic_Debug}
+
+    ${TARGET_OBJECT_FILES_simpleobj_Debug}
+
+  EXCLUDE
+    ${TARGET_OBJECT_FILES_simpleexe_Release}
+    ${TARGET_OBJECT_FILES_simpleshared_Release}
+    ${TARGET_OBJECT_FILES_simplestatic_Release}
+    ${TARGET_OBJECT_FILES_simpleobj_Release}
+
+    ${TARGET_OBJECT_FILES_simpleexe_MinSizeRel}
+    ${TARGET_OBJECT_FILES_simpleshared_MinSizeRel}
+    ${TARGET_OBJECT_FILES_simplestatic_MinSizeRel}
+    ${TARGET_OBJECT_FILES_simpleobj_MinSizeRel}
+
+    ${TARGET_OBJECT_FILES_simpleexe_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_simpleshared_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_simplestatic_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_simpleobj_RelWithDebInfo}
+  )

+ 51 - 0
Tests/RunCMake/NinjaMultiConfig/Simple-default-build-file-ninja-check.cmake

@@ -0,0 +1,51 @@
+check_files("${RunCMake_TEST_BINARY_DIR}"
+  INCLUDE
+    ${GENERATED_FILES}
+
+    ${TARGET_FILE_simpleexe_Debug}
+    ${TARGET_OBJECT_FILES_simpleexe_Debug}
+
+    ${TARGET_FILE_simpleshared_Debug}
+    ${TARGET_LINKER_FILE_simpleshared_Debug}
+    ${TARGET_OBJECT_FILES_simpleshared_Debug}
+
+    ${TARGET_FILE_simplestatic_Debug}
+    ${TARGET_LINKER_FILE_simplestatic_Debug}
+    ${TARGET_OBJECT_FILES_simplestatic_Debug}
+
+    ${TARGET_OBJECT_FILES_simpleobj_Debug}
+
+    ${TARGET_FILE_simpleexe_Release}
+    ${TARGET_OBJECT_FILES_simpleexe_Release}
+
+    ${TARGET_FILE_simpleshared_Release}
+    ${TARGET_LINKER_FILE_simpleshared_Release}
+    ${TARGET_OBJECT_FILES_simpleshared_Release}
+
+    ${TARGET_FILE_simplestatic_Release}
+    ${TARGET_LINKER_FILE_simplestatic_Release}
+    ${TARGET_OBJECT_FILES_simplestatic_Release}
+
+    ${TARGET_OBJECT_FILES_simpleobj_Release}
+
+    ${TARGET_FILE_simplestatic_MinSizeRel}
+    ${TARGET_LINKER_FILE_simplestatic_MinSizeRel}
+    ${TARGET_OBJECT_FILES_simplestatic_MinSizeRel}
+
+    ${TARGET_FILE_simpleexe_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_simpleexe_RelWithDebInfo}
+
+    ${TARGET_FILE_simpleshared_RelWithDebInfo}
+    ${TARGET_LINKER_FILE_simpleshared_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_simpleshared_RelWithDebInfo}
+
+    ${TARGET_FILE_simplestatic_RelWithDebInfo}
+    ${TARGET_LINKER_FILE_simplestatic_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_simplestatic_RelWithDebInfo}
+
+    ${TARGET_OBJECT_FILES_simpleobj_RelWithDebInfo}
+
+  EXCLUDE
+    ${TARGET_OBJECT_FILES_simpleexe_MinSizeRel}
+    ${TARGET_OBJECT_FILES_simpleshared_MinSizeRel}
+  )

+ 51 - 0
Tests/RunCMake/NinjaMultiConfig/Simple-minsizerel-top-ninja-check.cmake

@@ -0,0 +1,51 @@
+check_files("${RunCMake_TEST_BINARY_DIR}"
+  INCLUDE
+    ${GENERATED_FILES}
+
+    ${TARGET_FILE_simpleexe_Debug}
+    ${TARGET_OBJECT_FILES_simpleexe_Debug}
+
+    ${TARGET_FILE_simpleshared_Debug}
+    ${TARGET_LINKER_FILE_simpleshared_Debug}
+    ${TARGET_OBJECT_FILES_simpleshared_Debug}
+
+    ${TARGET_OBJECT_FILES_simpleobj_Debug}
+
+    ${TARGET_FILE_simpleexe_Release}
+    ${TARGET_OBJECT_FILES_simpleexe_Release}
+
+    ${TARGET_FILE_simpleshared_Release}
+    ${TARGET_LINKER_FILE_simpleshared_Release}
+    ${TARGET_OBJECT_FILES_simpleshared_Release}
+
+    ${TARGET_OBJECT_FILES_simpleobj_Release}
+
+    ${TARGET_FILE_simpleexe_MinSizeRel}
+    ${TARGET_OBJECT_FILES_simpleexe_MinSizeRel}
+
+    ${TARGET_FILE_simpleshared_MinSizeRel}
+    ${TARGET_LINKER_FILE_simpleshared_MinSizeRel}
+    ${TARGET_OBJECT_FILES_simpleshared_MinSizeRel}
+
+    ${TARGET_FILE_simplestatic_MinSizeRel}
+    ${TARGET_LINKER_FILE_simplestatic_MinSizeRel}
+    ${TARGET_OBJECT_FILES_simplestatic_MinSizeRel}
+
+    ${TARGET_OBJECT_FILES_simpleobj_MinSizeRel}
+
+    ${TARGET_FILE_simpleexe_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_simpleexe_RelWithDebInfo}
+
+    ${TARGET_FILE_simpleshared_RelWithDebInfo}
+    ${TARGET_LINKER_FILE_simpleshared_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_simpleshared_RelWithDebInfo}
+
+    ${TARGET_OBJECT_FILES_simpleobj_RelWithDebInfo}
+
+  EXCLUDE
+    ${TARGET_OBJECT_FILES_simplestatic_Debug}
+
+    ${TARGET_OBJECT_FILES_simplestatic_Release}
+
+    ${TARGET_OBJECT_FILES_simplestatic_RelWithDebInfo}
+  )

+ 4 - 0
Tests/RunCMake/NinjaMultiConfig/Simple-reconfigure-config-ninja-stdout.txt

@@ -0,0 +1,4 @@
+-- Configuring done
+-- Generating done
+-- Build files have been written to: [^
+]*/Tests/RunCMake/NinjaMultiConfig/Simple-build

+ 4 - 0
Tests/RunCMake/NinjaMultiConfig/Simple-reconfigure-noconfig-ninja-stdout.txt

@@ -0,0 +1,4 @@
+-- Configuring done
+-- Generating done
+-- Build files have been written to: [^
+]*/Tests/RunCMake/NinjaMultiConfig/Simple-build

+ 39 - 0
Tests/RunCMake/NinjaMultiConfig/Simple-release-file-ninja-check.cmake

@@ -0,0 +1,39 @@
+check_files("${RunCMake_TEST_BINARY_DIR}"
+  INCLUDE
+    ${GENERATED_FILES}
+
+    ${TARGET_FILE_simpleexe_Debug}
+    ${TARGET_OBJECT_FILES_simpleexe_Debug}
+
+    ${TARGET_FILE_simpleshared_Debug}
+    ${TARGET_LINKER_FILE_simpleshared_Debug}
+    ${TARGET_OBJECT_FILES_simpleshared_Debug}
+
+    ${TARGET_FILE_simplestatic_Debug}
+    ${TARGET_LINKER_FILE_simplestatic_Debug}
+    ${TARGET_OBJECT_FILES_simplestatic_Debug}
+
+    ${TARGET_OBJECT_FILES_simpleobj_Debug}
+
+    ${TARGET_FILE_simpleexe_Release}
+    ${TARGET_OBJECT_FILES_simpleexe_Release}
+
+    ${TARGET_FILE_simpleshared_Release}
+    ${TARGET_LINKER_FILE_simpleshared_Release}
+    ${TARGET_OBJECT_FILES_simpleshared_Release}
+
+    ${TARGET_OBJECT_FILES_simpleobj_Release}
+
+  EXCLUDE
+    ${TARGET_OBJECT_FILES_simplestatic_Release}
+
+    ${TARGET_OBJECT_FILES_simpleexe_MinSizeRel}
+    ${TARGET_OBJECT_FILES_simpleshared_MinSizeRel}
+    ${TARGET_OBJECT_FILES_simplestatic_MinSizeRel}
+    ${TARGET_OBJECT_FILES_simpleobj_MinSizeRel}
+
+    ${TARGET_OBJECT_FILES_simpleexe_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_simpleshared_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_simplestatic_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_simpleobj_RelWithDebInfo}
+  )

+ 36 - 0
Tests/RunCMake/NinjaMultiConfig/Simple-release-filename-build-check.cmake

@@ -0,0 +1,36 @@
+check_files("${RunCMake_TEST_BINARY_DIR}"
+  INCLUDE
+    ${GENERATED_FILES}
+
+    ${TARGET_FILE_simpleexe_Debug}
+    ${TARGET_OBJECT_FILES_simpleexe_Debug}
+
+    ${TARGET_FILE_simpleshared_Debug}
+    ${TARGET_LINKER_FILE_simpleshared_Debug}
+    ${TARGET_OBJECT_FILES_simpleshared_Debug}
+
+    ${TARGET_FILE_simplestatic_Debug}
+    ${TARGET_LINKER_FILE_simplestatic_Debug}
+    ${TARGET_OBJECT_FILES_simplestatic_Debug}
+
+    ${TARGET_OBJECT_FILES_simpleobj_Debug}
+
+    ${TARGET_FILE_simpleshared_Release}
+    ${TARGET_LINKER_FILE_simpleshared_Release}
+    ${TARGET_OBJECT_FILES_simpleshared_Release}
+
+  EXCLUDE
+    ${TARGET_OBJECT_FILES_simpleexe_Release}
+    ${TARGET_OBJECT_FILES_simplestatic_Release}
+    ${TARGET_OBJECT_FILES_simpleobj_Release}
+
+    ${TARGET_OBJECT_FILES_simpleexe_MinSizeRel}
+    ${TARGET_OBJECT_FILES_simpleshared_MinSizeRel}
+    ${TARGET_OBJECT_FILES_simplestatic_MinSizeRel}
+    ${TARGET_OBJECT_FILES_simpleobj_MinSizeRel}
+
+    ${TARGET_OBJECT_FILES_simpleexe_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_simpleshared_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_simplestatic_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_simpleobj_RelWithDebInfo}
+  )

+ 37 - 0
Tests/RunCMake/NinjaMultiConfig/Simple-release-in-minsizerel-graph-subdir-ninja-check.cmake

@@ -0,0 +1,37 @@
+check_files("${RunCMake_TEST_BINARY_DIR}"
+  INCLUDE
+    ${GENERATED_FILES}
+
+    ${TARGET_FILE_simpleexe_Debug}
+    ${TARGET_OBJECT_FILES_simpleexe_Debug}
+
+    ${TARGET_FILE_simpleshared_Debug}
+    ${TARGET_LINKER_FILE_simpleshared_Debug}
+    ${TARGET_OBJECT_FILES_simpleshared_Debug}
+
+    ${TARGET_OBJECT_FILES_simpleobj_Debug}
+
+    ${TARGET_FILE_simpleexe_Release}
+    ${TARGET_OBJECT_FILES_simpleexe_Release}
+
+    ${TARGET_FILE_simpleshared_Release}
+    ${TARGET_LINKER_FILE_simpleshared_Release}
+    ${TARGET_OBJECT_FILES_simpleshared_Release}
+
+    ${TARGET_OBJECT_FILES_simpleobj_Release}
+
+  EXCLUDE
+    ${TARGET_OBJECT_FILES_simplestatic_Debug}
+
+    ${TARGET_OBJECT_FILES_simplestatic_Release}
+
+    ${TARGET_OBJECT_FILES_simpleexe_MinSizeRel}
+    ${TARGET_OBJECT_FILES_simpleshared_MinSizeRel}
+    ${TARGET_OBJECT_FILES_simplestatic_MinSizeRel}
+    ${TARGET_OBJECT_FILES_simpleobj_MinSizeRel}
+
+    ${TARGET_OBJECT_FILES_simpleexe_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_simpleshared_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_simplestatic_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_simpleobj_RelWithDebInfo}
+  )

+ 13 - 0
Tests/RunCMake/NinjaMultiConfig/Simple.cmake

@@ -0,0 +1,13 @@
+enable_language(C)
+
+file(TOUCH ${CMAKE_BINARY_DIR}/empty.cmake)
+include(${CMAKE_BINARY_DIR}/empty.cmake)
+
+add_subdirectory(SimpleSubdir)
+
+add_library(simplestatic STATIC simplelib.c)
+
+include(${CMAKE_CURRENT_LIST_DIR}/Common.cmake)
+generate_output_files(simpleexe simpleshared simplestatic simpleobj)
+
+file(APPEND "${CMAKE_BINARY_DIR}/target_files.cmake" "set(GENERATED_FILES [==[${CMAKE_BINARY_DIR}/empty.cmake]==])\n")

+ 4 - 0
Tests/RunCMake/NinjaMultiConfig/SimpleSubdir/CMakeLists.txt

@@ -0,0 +1,4 @@
+add_library(simpleobj OBJECT ../empty.c)
+add_executable(simpleexe ../main.c $<TARGET_OBJECTS:simpleobj>)
+add_library(simpleshared SHARED ../simplelib.c)
+target_link_libraries(simpleexe PRIVATE simpleshared)

+ 1 - 0
Tests/RunCMake/NinjaMultiConfig/WriteFile.cmake

@@ -0,0 +1 @@
+file(WRITE "${OUTPUT_FILE}" "Genex config: ${GENEX_CONFIG}\nINTDIR config: ${INTDIR_CONFIG}\n")

+ 7 - 0
Tests/RunCMake/NinjaMultiConfig/badmoc.c

@@ -0,0 +1,7 @@
+#include <stdio.h>
+
+int main(void)
+{
+  printf("BadMoc Configuration: " CONFIG "\n");
+  return 1;
+}

+ 0 - 0
Tests/RunCMake/NinjaMultiConfig/empty.c


+ 101 - 0
Tests/RunCMake/NinjaMultiConfig/generator.c

@@ -0,0 +1,101 @@
+#include <genex_config.h>
+#include <stdio.h>
+/* FIXME Get this working */
+/*#include <intdir_config.h>*/
+
+const char* generatorlib_genex_config_definition(void);
+const char* generatorlib_genex_config_include_dir(void);
+const char* generatorobj_genex_config_definition(void);
+const char* generatorobj_genex_config_include_dir(void);
+
+static const char contents[] =
+  /* clang-format off */
+"#include <stdio.h>\n"
+"\n"
+"#include <genex_config.h>\n"
+/* FIXME Get this working */
+/*"#include <intdir_config.h>\n"*/
+"\n"
+"const char* generatorlib_genex_config_definition(void);\n"
+"const char* generatorlib_genex_config_include_dir(void);\n"
+"const char* generatorobj_genex_config_definition(void);\n"
+"const char* generatorobj_genex_config_include_dir(void);\n"
+"\n"
+"int main(void)\n"
+"{\n"
+"  printf(\n"
+"    \"Generator genex config definition: "
+  GENEX_CONFIG_DEFINITION "\\n\"\n"
+/* FIXME Get this working */
+/*"    \"Generator INTDIR config definition: "
+  INTDIR_CONFIG_DEFINITION "\\n\"\n"*/
+"    \"Generator genex config include dir: "
+  GENEX_CONFIG_INCLUDE_DIR "\\n\"\n"
+/* FIXME Get this working */
+/*"    \"Generator INTDIR config include dir: "
+  INTDIR_CONFIG_INCLUDE_DIR "\\n\"\n"*/
+"    \"Generator library genex config definition: %s\\n\"\n"
+/* FIXME Get this working */
+/*"    \"Generator library INTDIR config definition: %s\\n\"\n"*/
+"    \"Generator library genex config include dir: %s\\n\"\n"
+/* FIXME Get this working */
+/*"    \"Generator library INTDIR config include dir: %s\\n\"\n"*/
+"    \"Generator object genex config definition: %s\\n\"\n"
+/* FIXME Get this working */
+/*"    \"Generator object INTDIR config definition: %s\\n\"\n"*/
+"    \"Generator object genex config include dir: %s\\n\"\n"
+/* FIXME Get this working */
+/*"    \"Generator object INTDIR config include dir: %s\\n\"\n"*/
+"    \"Generated genex config definition: \""
+  " GENEX_CONFIG_DEFINITION \"\\n\"\n"
+/* FIXME Get this working */
+/*"    \"Generated INTDIR config definition: \""
+  " INTDIR_CONFIG_DEFINITION \"\\n\"\n"*/
+"    \"Generated genex config include dir: \""
+  " GENEX_CONFIG_INCLUDE_DIR \"\\n\"\n"
+/* FIXME Get this working */
+/*"    \"Generated INTDIR config include dir: \""
+  " INTDIR_CONFIG_INCLUDE_DIR \"\\n\"\n"*/
+"    \"Generated library genex config definition: %%s\\n\"\n"
+/* FIXME Get this working */
+/*"    \"Generated library INTDIR config definition: %%s\\n\"\n"*/
+"    \"Generated library genex config include dir: %%s\\n\"\n"
+/* FIXME Get this working */
+/*"    \"Generated library INTDIR config include dir: %%s\\n\"\n"*/
+"    \"Generated object genex config definition: %%s\\n\"\n"
+/* FIXME Get this working */
+/*"    \"Generated object INTDIR config definition: %%s\\n\"\n"*/
+"    \"Generated object genex config include dir: %%s\\n\"\n"
+/* FIXME Get this working */
+/*"    \"Generated object INTDIR config include dir: %%s\\n\"\n"*/
+"    , generatorlib_genex_config_definition()\n"
+"    , generatorlib_genex_config_include_dir()\n"
+"    , generatorobj_genex_config_definition()\n"
+"    , generatorobj_genex_config_include_dir());\n"
+"  return 0;\n"
+"}\n";
+/* clang-format on */
+
+int main(int argc, char** argv)
+{
+  const char* filename;
+  FILE* fout;
+
+  if (argc < 2) {
+    fprintf(stderr, "Usage: %s <filename>\n", argv[0]);
+    return 1;
+  }
+
+  filename = argv[1];
+  if (!(fout = fopen(filename, "w"))) {
+    fprintf(stderr, "Could not open %s for writing\n", filename);
+    return 1;
+  }
+  fprintf(fout, contents, generatorlib_genex_config_definition(),
+          generatorlib_genex_config_include_dir(),
+          generatorobj_genex_config_definition(),
+          generatorobj_genex_config_include_dir());
+  fclose(fout);
+
+  return 0;
+}

+ 24 - 0
Tests/RunCMake/NinjaMultiConfig/generatorlib.c

@@ -0,0 +1,24 @@
+#include <genex_config.h>
+/* FIXME Get this working */
+/*#include <intdir_config.h>*/
+
+const char* generatorlib_genex_config_definition(void)
+{
+  return GENEX_CONFIG_DEFINITION;
+}
+
+const char* generatorlib_genex_config_include_dir(void)
+{
+  return GENEX_CONFIG_INCLUDE_DIR;
+}
+
+/* FIXME Get this working */
+/*const char* generatorlib_intdir_config_definition(void)
+{
+  return INTDIR_CONFIG_DEFINITION;
+}
+
+const char* generatorlib_intdir_config_include_dir(void)
+{
+  return INTDIR_CONFIG_INCLUDE_DIR;
+}*/

+ 24 - 0
Tests/RunCMake/NinjaMultiConfig/generatorobj.c

@@ -0,0 +1,24 @@
+#include <genex_config.h>
+/* FIXME Get this working */
+/*#include <intdir_config.h>*/
+
+const char* generatorobj_genex_config_definition(void)
+{
+  return GENEX_CONFIG_DEFINITION;
+}
+
+const char* generatorobj_genex_config_include_dir(void)
+{
+  return GENEX_CONFIG_INCLUDE_DIR;
+}
+
+/* FIXME Get this working */
+/*const char* generatorobj_intdir_config_definition(void)
+{
+  return INTDIR_CONFIG_DEFINITION;
+}
+
+const char* generatorobj_intdir_config_include_dir(void)
+{
+  return INTDIR_CONFIG_INCLUDE_DIR;
+}*/

+ 4 - 0
Tests/RunCMake/NinjaMultiConfig/main.c

@@ -0,0 +1,4 @@
+int main(void)
+{
+  return 0;
+}

+ 9 - 0
Tests/RunCMake/NinjaMultiConfig/qt5.cxx

@@ -0,0 +1,9 @@
+#include <QCoreApplication>
+
+int main(int argc, char** argv)
+{
+  QCoreApplication app(argc, argv);
+  return app.exec();
+}
+
+#include "moc_qt5.cpp"

+ 5 - 0
Tests/RunCMake/NinjaMultiConfig/qt5.h

@@ -0,0 +1,5 @@
+#include <QObject>
+class QBuffer : public QObject
+{
+  Q_OBJECT
+};

+ 6 - 0
Tests/RunCMake/NinjaMultiConfig/simplelib.c

@@ -0,0 +1,6 @@
+#ifdef _WIN32
+__declspec(dllexport)
+#endif
+  void simplelib(void)
+{
+}