CMakeLists.txt 3.4 KB

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