CMakeLists.txt 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. cmake_minimum_required(VERSION 2.8.12)
  2. project(ExternalProjectUpdateTest NONE)
  3. if(CMAKE_XCODE_BUILD_SYSTEM VERSION_GREATER_EQUAL 12)
  4. cmake_policy(SET CMP0114 NEW)
  5. endif()
  6. cmake_policy(GET CMP0114 cmp0114)
  7. include(ExternalProject)
  8. find_package(Git)
  9. option(ExternalProjectUpdateTest_USE_FOLDERS "Enable folder grouping in IDEs." ON)
  10. if(ExternalProjectUpdateTest_USE_FOLDERS)
  11. set_property(GLOBAL PROPERTY USE_FOLDERS ON)
  12. else()
  13. set_property(GLOBAL PROPERTY USE_FOLDERS OFF)
  14. endif()
  15. set_property(GLOBAL PROPERTY PREDEFINED_TARGETS_FOLDER
  16. "CMakePredefinedTargets-in-ExternalProjectUpdateTest")
  17. set(base "${CMAKE_BINARY_DIR}/CMakeExternals")
  18. set(binary_base "${base}/Build")
  19. set_property(DIRECTORY PROPERTY EP_BASE ${base})
  20. if(cmp0114 STREQUAL "NEW")
  21. set_property(DIRECTORY PROPERTY EP_STEP_TARGETS configure build test update)
  22. set(TestUpdateCommand_STEP_TARGETS STEP_TARGETS update)
  23. set(TestUpdateCommand_INDEPENDENT_STEP_TARGETS)
  24. else()
  25. set_property(DIRECTORY PROPERTY EP_STEP_TARGETS configure build test)
  26. set_property(DIRECTORY PROPERTY EP_INDEPENDENT_STEP_TARGETS update)
  27. set(TestUpdateCommand_STEP_TARGETS)
  28. set(TestUpdateCommand_INDEPENDENT_STEP_TARGETS INDEPENDENT_STEP_TARGETS update)
  29. endif()
  30. ExternalProject_Add(TestUpdateCommand
  31. SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}
  32. UPDATE_COMMAND ${CMAKE_COMMAND} -E echo update
  33. UPDATE_DISCONNECTED 1
  34. CONFIGURE_COMMAND ""
  35. BUILD_COMMAND ""
  36. INSTALL_COMMAND ""
  37. ${TestUpdateCommand_STEP_TARGETS}
  38. ${TestUpdateCommand_INDEPENDENT_STEP_TARGETS}
  39. )
  40. add_custom_target(TestUpdateCommandDriver ALL)
  41. add_dependencies(TestUpdateCommandDriver TestUpdateCommand-update)
  42. set(do_git_tests 0)
  43. if(GIT_EXECUTABLE)
  44. set(do_git_tests 1)
  45. message(STATUS "GIT_VERSION_STRING='${GIT_VERSION_STRING}'")
  46. if("${GIT_VERSION_STRING}" VERSION_LESS 1.6.5)
  47. message(STATUS "No ExternalProject git tests with git client less than version 1.6.5")
  48. set(do_git_tests 0)
  49. endif()
  50. endif()
  51. # This should be specified from the command line.
  52. if(NOT TEST_GIT_TAG)
  53. set(TEST_GIT_TAG origin/master)
  54. endif()
  55. if(do_git_tests)
  56. set(local_git_repo "../../LocalRepositories/GIT")
  57. # Unzip/untar the git repository in our source folder so that other
  58. # projects below may use it to test git args of ExternalProject_Add
  59. #
  60. set(proj SetupLocalGITRepository)
  61. ExternalProject_Add(${proj}
  62. SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/LocalRepositories/GIT
  63. URL ${CMAKE_CURRENT_SOURCE_DIR}/gitrepo.tgz
  64. BUILD_COMMAND ""
  65. CONFIGURE_COMMAND "${GIT_EXECUTABLE}" --version
  66. INSTALL_COMMAND ""
  67. )
  68. set_property(TARGET ${proj}
  69. PROPERTY FOLDER "SetupRepos/Local/Deeply/Nested/For/Testing")
  70. set(proj TutorialStep1-GIT)
  71. ExternalProject_Add(${proj}
  72. GIT_REPOSITORY "${local_git_repo}"
  73. GIT_TAG ${TEST_GIT_TAG}
  74. GIT_CONFIG "[email protected]"
  75. "user.name=testauthor"
  76. CMAKE_GENERATOR "${CMAKE_GENERATOR}"
  77. CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
  78. INSTALL_COMMAND ""
  79. )
  80. ExternalProject_Add_StepDependencies(${proj} download SetupLocalGITRepository)
  81. set_property(TARGET ${proj} PROPERTY FOLDER "GIT")
  82. set(proj TutorialStep2-GIT)
  83. ExternalProject_Add(${proj}
  84. GIT_REPOSITORY "${local_git_repo}"
  85. GIT_TAG ${TEST_GIT_TAG}
  86. CMAKE_GENERATOR "${CMAKE_GENERATOR}"
  87. CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
  88. INSTALL_COMMAND ""
  89. UPDATE_DISCONNECTED 1
  90. )
  91. ExternalProject_Add_StepDependencies(${proj} download SetupLocalGITRepository)
  92. set_property(TARGET ${proj} PROPERTY FOLDER "GIT")
  93. endif()
  94. # Test the testable built/installed products:
  95. #
  96. enable_testing()
  97. # Do at least a smoke test of a built executable from each
  98. # project's build directory...
  99. #
  100. # BuildTree tests:
  101. #
  102. if(do_git_tests)
  103. add_test(TutorialStep1-GIT
  104. "${binary_base}/TutorialStep1-GIT/Tutorial" 81)
  105. endif()
  106. message(STATUS "do_git_tests='${do_git_tests}'")
  107. message(STATUS "GIT_EXECUTABLE='${GIT_EXECUTABLE}'")