foreach-ZIP_LISTS-test.cmake 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. function(foreachTest result list_var_1 list_var_2 list_var_3)
  2. set(_options MUTE)
  3. set(_one_value_args)
  4. set(_multi_value_args)
  5. cmake_parse_arguments(PARSE_ARGV 3 _arg "${_options}" "${_one_value_args}" "${_multi_value_args}")
  6. set(_has_any_output FALSE)
  7. list(APPEND CMAKE_MESSAGE_INDENT "| ")
  8. foreach(num IN ZIP_LISTS ${list_var_1} ${list_var_2} ${list_var_3})
  9. foreach(i RANGE 2)
  10. if(NOT num_${i})
  11. set(num_${i} "[undefined]")
  12. endif()
  13. endforeach()
  14. if(NOT _arg_MUTE)
  15. message(STATUS "${num_0}, ${num_1}, ${num_2}")
  16. endif()
  17. set(_has_any_output TRUE)
  18. endforeach()
  19. set(${result} ${_has_any_output} PARENT_SCOPE)
  20. endfunction()
  21. function(foreachTestDecorated list_var_1 list_var_2 list_var_3)
  22. list(APPEND CMAKE_MESSAGE_INDENT " ")
  23. message(STATUS "Begin output")
  24. foreachTest(_has_any_output ${list_var_1} ${list_var_2} ${list_var_3})
  25. if(NOT _has_any_output)
  26. message(STATUS "--> empty-output <--")
  27. endif()
  28. message(STATUS "End output")
  29. endfunction()
  30. message(STATUS "foreach(IN ZIP_LISTS):")
  31. list(APPEND CMAKE_MESSAGE_INDENT " ")
  32. set(english)
  33. set(bahasa)
  34. set(russian)
  35. message(STATUS "<<< empty lists case >>>")
  36. foreachTestDecorated(english bahasa russian)
  37. list(APPEND english one two three)
  38. list(APPEND bahasa satu dua tiga)
  39. list(APPEND russian raz dva tri)
  40. message(STATUS "<<< same lengths lists case >>>")
  41. foreachTestDecorated(english bahasa russian)
  42. list(APPEND bahasa empat)
  43. message(STATUS "<<< different lengths lists case >>>")
  44. foreachTestDecorated(english bahasa russian)
  45. set(num_0 "old-0")
  46. set(num_1 "old-1")
  47. set(num_2 "old-2")
  48. foreachTest(_ english bahasa russian MUTE)
  49. set(check PASSED)
  50. foreach(i RANGE 2)
  51. if(NOT "${num_${i}}" STREQUAL "old-${i}")
  52. message(SEND_ERROR "num_${i} value is corrupted")
  53. set(check FAILED)
  54. endif()
  55. endforeach()
  56. message(STATUS "<<< test variable value restored -- ${check} >>>")
  57. list(POP_BACK CMAKE_MESSAGE_INDENT)