CustomCommandParallelDisable-check.cmake 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. # Check whether the 'BuildInParallel' setting is set as expected for a specified project file.
  2. # Note: if the setting is not present in the project file then it is assumed to be implicitly 'false'.
  3. function(check_build_in_parallel_setting projectFile expectedEnabled)
  4. set(SettingEnabledRegex "<BuildInParallel.*>true</BuildInParallel>")
  5. set(SettingDisabledRegex "<BuildInParallel.*>false</BuildInParallel>")
  6. if(NOT EXISTS "${projectFile}")
  7. set(RunCMake_TEST_FAILED "Project file '${projectFile}' does not exist." PARENT_SCOPE)
  8. return()
  9. endif()
  10. set(settingEnabled FALSE)
  11. set(settingExplicitlyDisabled FALSE)
  12. file(STRINGS "${projectFile}" lines)
  13. foreach(line IN LISTS lines)
  14. if(line MATCHES "${SettingEnabledRegex}")
  15. set(settingEnabled TRUE)
  16. elseif(line MATCHES "${SettingDisabledRegex}")
  17. set(settingExplicitlyDisabled TRUE)
  18. endif()
  19. endforeach()
  20. if(expectedEnabled)
  21. if(NOT settingEnabled)
  22. set(RunCMake_TEST_FAILED "Expected 'BuildInParallel' to be enabled for projectFile '${projectFile}' but it was not!" PARENT_SCOPE)
  23. endif()
  24. if(settingExplicitlyDisabled)
  25. set(RunCMake_TEST_FAILED "Expected 'BuildInParallel' to be enabled for projectFile '${projectFile}' but instead found it explicitly disabled!" PARENT_SCOPE)
  26. endif()
  27. else()
  28. if(settingEnabled)
  29. set(RunCMake_TEST_FAILED "Expected 'BuildInParallel' to be disabled for projectFile '${projectFile}' but it was not!")
  30. endif()
  31. endif()
  32. endfunction()
  33. check_build_in_parallel_setting("${RunCMake_TEST_BINARY_DIR}/foo1.vcxproj" TRUE)
  34. check_build_in_parallel_setting("${RunCMake_TEST_BINARY_DIR}/bar1.vcxproj" FALSE)
  35. check_build_in_parallel_setting("${RunCMake_TEST_BINARY_DIR}/foo2.vcxproj" FALSE)
  36. check_build_in_parallel_setting("${RunCMake_TEST_BINARY_DIR}/bar2.vcxproj" FALSE)