CMakeLists.txt 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. # Distributed under the OSI-approved BSD 3-Clause License. See accompanying
  2. # file Copyright.txt or https://cmake.org/licensing for details.
  3. cmake_minimum_required(VERSION 3.12 FATAL_ERROR)
  4. project(test C)
  5. # Tests assume no previous builds in the build directory
  6. file(REMOVE_RECURSE ${CMAKE_CURRENT_BINARY_DIR}/build)
  7. macro (test_output)
  8. if (BUILD_OUTPUT STREQUAL EXPECTED_LINES )
  9. message("Build OK")
  10. else()
  11. message("BUILD_OUTPUT")
  12. foreach(Line IN LISTS BUILD_OUTPUT)
  13. message("${Line}")
  14. endforeach()
  15. message("EXPECTED_LINES")
  16. foreach(Line IN LISTS EXPECTED_LINES)
  17. message("${Line}")
  18. endforeach()
  19. message(SEND_ERROR "Build KO")
  20. endif()
  21. endmacro()
  22. message("Copy project")
  23. configure_file(${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt.in
  24. ${CMAKE_CURRENT_BINARY_DIR}/src/CMakeLists.txt COPYONLY)
  25. file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/exe1.c
  26. ${CMAKE_CURRENT_SOURCE_DIR}/lib1.c
  27. DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/src
  28. )
  29. message("Building ALL target")
  30. try_compile(RESULT
  31. ${CMAKE_CURRENT_BINARY_DIR}/build
  32. ${CMAKE_CURRENT_BINARY_DIR}/src
  33. test
  34. CMAKE_FLAGS
  35. -DCMAKE_EXE_LINKER_FLAGS=${CMAKE_EXE_LINKER_FLAGS}
  36. OUTPUT_VARIABLE BUILD_OUTPUT)
  37. message("Output from build:\n${BUILD_OUTPUT}")
  38. #filter outputs
  39. string(REPLACE "\r" "" BUILD_OUTPUT "${BUILD_OUTPUT}")
  40. string(REPLACE "\n" ";" BUILD_OUTPUT "${BUILD_OUTPUT}")
  41. list(FILTER BUILD_OUTPUT INCLUDE REGEX "^.*CT:")
  42. unset(EXPECTED_LINES)
  43. list(APPEND EXPECTED_LINES "CT: Processing target_empty_prebuild")
  44. list(APPEND EXPECTED_LINES "CT: Processing target_empty_postbuild")
  45. list(APPEND EXPECTED_LINES "CT: Processing target_cmd")
  46. list(APPEND EXPECTED_LINES "CT: Processing target_cmd_prebuild")
  47. list(APPEND EXPECTED_LINES "CT: Processing target_cmd_postbuild")
  48. test_output()
  49. message("Building target_update_files target")
  50. try_compile(RESULT
  51. ${CMAKE_CURRENT_BINARY_DIR}/build
  52. ${CMAKE_CURRENT_BINARY_DIR}/src
  53. test target_update_files
  54. CMAKE_FLAGS
  55. -DCMAKE_EXE_LINKER_FLAGS=${CMAKE_EXE_LINKER_FLAGS}
  56. OUTPUT_VARIABLE BUILD_OUTPUT)
  57. message("Output from build:\n${BUILD_OUTPUT}")
  58. #filter outputs
  59. string(REPLACE "\r" "" BUILD_OUTPUT "${BUILD_OUTPUT}")
  60. string(REPLACE "\n" ";" BUILD_OUTPUT "${BUILD_OUTPUT}")
  61. list(FILTER BUILD_OUTPUT INCLUDE REGEX "^.*CT:")
  62. unset(EXPECTED_LINES)
  63. list(APPEND EXPECTED_LINES "CT: Processing target_empty_prebuild")
  64. list(APPEND EXPECTED_LINES "CT: Processing target_empty_postbuild")
  65. list(APPEND EXPECTED_LINES "CT: generate C file another_file")
  66. list(APPEND EXPECTED_LINES "CT: generate text file dependsA")
  67. list(APPEND EXPECTED_LINES "CT: generate text file out_of_order_dep")
  68. list(APPEND EXPECTED_LINES "CT: generate text files A, B, and C")
  69. list(APPEND EXPECTED_LINES "CT: Processing target_update_files")
  70. test_output()
  71. message("Rerun target_update_files target")
  72. try_compile(RESULT
  73. ${CMAKE_CURRENT_BINARY_DIR}/build
  74. ${CMAKE_CURRENT_BINARY_DIR}/src
  75. test target_update_files
  76. CMAKE_FLAGS
  77. -DCMAKE_EXE_LINKER_FLAGS=${CMAKE_EXE_LINKER_FLAGS}
  78. OUTPUT_VARIABLE BUILD_OUTPUT)
  79. message("Output from build:\n${BUILD_OUTPUT}")
  80. #filter outputs
  81. string(REPLACE "\r" "" BUILD_OUTPUT "${BUILD_OUTPUT}")
  82. string(REPLACE "\n" ";" BUILD_OUTPUT "${BUILD_OUTPUT}")
  83. list(FILTER BUILD_OUTPUT INCLUDE REGEX "^.*CT:")
  84. unset(EXPECTED_LINES)
  85. list(APPEND EXPECTED_LINES "CT: Processing target_empty_prebuild")
  86. list(APPEND EXPECTED_LINES "CT: Processing target_empty_postbuild")
  87. list(APPEND EXPECTED_LINES "CT: generate text files A, B, and C")
  88. list(APPEND EXPECTED_LINES "CT: Processing target_update_files")
  89. test_output()