ctkFunctionCheckoutRepo.cmake 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. function(ctkFunctionCheckoutRepo)
  2. ctkMacroParseArguments("" "NAME;GIT_URL;GIT_TAG;GIT_PROTOCOL;CHECKOUT_DIR" "" ${ARGN})
  3. if(${_NAME}_DIR)
  4. # if a *_DIR variable is supplied, the repository is not cloned.
  5. return()
  6. endif()
  7. foreach(_required_arg NAME GIT_URL)
  8. if(NOT _${_required_arg})
  9. message(FATAL_ERROR "${_required_arg} is empty")
  10. endif()
  11. endforeach()
  12. if(NOT _GIT_PROTOCOL)
  13. set(_GIT_PROTOCOL ${git_protocol})
  14. endif()
  15. if(NOT _CHECKOUT_DIR)
  16. set(_CHECKOUT_DIR ${CMAKE_CURRENT_BINARY_DIR})
  17. endif()
  18. if(NOT IS_ABSOLUTE "${_CHECKOUT_DIR}")
  19. message(FATAL_ERROR "The value of the CHECKOUT_DIR argument must be an absolute path.")
  20. endif()
  21. if(NOT _GIT_TAG)
  22. set(_GIT_TAG origin/master)
  23. endif()
  24. set(_repo_build_dir ${CMAKE_CURRENT_BINARY_DIR}/${_NAME}-proj)
  25. configure_file(${CTK_CMAKE_DIR}/ctkCheckoutRepo.cmake.in
  26. ${_repo_build_dir}/CMakeLists.txt)
  27. execute_process(
  28. COMMAND ${CMAKE_COMMAND} .
  29. WORKING_DIRECTORY ${_repo_build_dir}
  30. RESULT_VARIABLE _result_code
  31. ERROR_VARIABLE _err_msg
  32. )
  33. if(_result_code)
  34. message(FATAL_ERROR "Configuring directory ${_repo_build_dir} failed: ${_err_msg}")
  35. endif()
  36. execute_process(
  37. COMMAND ${CMAKE_COMMAND} --build ${_repo_build_dir}
  38. RESULT_VARIABLE _result_code
  39. ERROR_VARIABLE _err_msg
  40. )
  41. if(_result_code)
  42. message(FATAL_ERROR "Building directory ${_repo_build_dir} failed: ${_err_msg}")
  43. endif()
  44. set(${_NAME}_DIR ${_CHECKOUT_DIR}/${_NAME} PARENT_SCOPE)
  45. endfunction()