CMakeLists.txt 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. cmake_minimum_required(VERSION 2.8.7)
  2. set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../../" ${CMAKE_MODULE_PATH})
  3. set(EXTERNAL_PROJECT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/TheExternals)
  4. set(EXTERNAL_PROJECT_FILE_PREFIX "TheExternal_")
  5. include(ExternalProject)
  6. include(ctkMacroCheckExternalProjectDependency)
  7. project(SuperBuildTest NONE)
  8. option(${PROJECT_NAME}_SUPERBUILD "Build ${PROJECT_NAME} and the projects it depends" ON)
  9. mark_as_advanced(${PROJECT_NAME}_SUPERBUILD)
  10. if(${PROJECT_NAME}_SUPERBUILD)
  11. option(FOO_OPTION "Option mark_as_superbuild" ON)
  12. mark_as_superbuild(FOO_OPTION)
  13. set(FOO_VAR "FooVar")
  14. mark_as_superbuild(FOO_VAR)
  15. set(FOO_LIST Item1 Item2)
  16. mark_as_superbuild(FOO_LIST)
  17. set(FOO_LIST_FOR_CMAKE_CMD "Item1${EP_LIST_SEPARATOR}Item2")
  18. mark_as_superbuild(FOO_LIST_FOR_CMAKE_CMD CMAKE_CMD)
  19. set(FOO_VAR_WITH_LABELS "FooVarWithLabels")
  20. mark_as_superbuild(VARS FOO_VAR_WITH_LABELS LABELS "LABEL_A" "LABEL_B")
  21. set(BAR_VAR_WITH_LABELS "BarVarWithLabels")
  22. mark_as_superbuild(VARS BAR_VAR_WITH_LABELS LABELS "LABEL_B")
  23. set(LibA_VAR "LibA")
  24. mark_as_superbuild(VARS LibA_VAR PROJECT LibA)
  25. set(LibA_VAR_WITH_LABELS "LibAWithLabels")
  26. mark_as_superbuild(VARS LibA_VAR_WITH_LABELS PROJECT LibA LABELS "LABEL_A")
  27. # Since LibC depends on LibD, LibD will also be expected to be found on the system
  28. set(${CMAKE_PROJECT_NAME}_USE_SYSTEM_LibC 1)
  29. endif()
  30. set(${PROJECT_NAME}_DEPENDENCIES LibA LibB LibC)
  31. superbuild_include_dependencies(${PROJECT_NAME})
  32. if(${PROJECT_NAME}_SUPERBUILD)
  33. ExternalProject_Add(${PROJECT_NAME}
  34. ${${PROJECT_NAME}_EXTERNAL_PROJECT_ARGS}
  35. DOWNLOAD_COMMAND ""
  36. CMAKE_CACHE_ARGS
  37. -D${PROJECT_NAME}_SUPERBUILD:BOOL=OFF
  38. SOURCE_DIR ${${PROJECT_NAME}_SOURCE_DIR}
  39. BINARY_DIR ${${PROJECT_NAME}_BINARY_DIR}/${PROJECT_NAME}-build
  40. BUILD_COMMAND ""
  41. INSTALL_COMMAND ""
  42. DEPENDS
  43. ${${PROJECT_NAME}_DEPENDENCIES}
  44. )
  45. return()
  46. endif()
  47. function(check_variable var_name expected_value)
  48. if(NOT "x${${var_name}}" STREQUAL "x${expected_value}")
  49. message(FATAL_ERROR "Problem with mark_as_superbuild() - CMake variable [${var_name}] is incorrectly set !\n"
  50. "current:${${var_name}}\n"
  51. "expected:${expected_value}")
  52. endif()
  53. endfunction()
  54. check_variable(FOO_OPTION "ON")
  55. check_variable(FOO_VAR "FooVar")
  56. check_variable(FOO_LIST "Item1;Item2")
  57. check_variable(FOO_LIST_FOR_CMAKE_CMD "Item1;Item2")
  58. check_variable(FOO_VAR_WITH_LABELS "FooVarWithLabels")
  59. check_variable(BAR_VAR_WITH_LABELS "BarVarWithLabels")
  60. check_variable(SuperBuildTest_EP_LABEL_LABEL_A "FOO_VAR_WITH_LABELS")
  61. check_variable(SuperBuildTest_EP_LABEL_LABEL_B "FOO_VAR_WITH_LABELS;BAR_VAR_WITH_LABELS")
  62. check_variable(SuperBuildTest_EP_LABEL_FIND_PACKAGE "LibA_DIR")
  63. get_filename_component(expected_LibA_DIR "${CMAKE_CURRENT_BINARY_DIR}/../LibA-build" REALPATH)
  64. check_variable(LibA_DIR ${expected_LibA_DIR})
  65. check_variable(SuperBuildTest_EP_LABEL_USE_SYSTEM
  66. "${CMAKE_PROJECT_NAME}_USE_SYSTEM_LibA;${CMAKE_PROJECT_NAME}_USE_SYSTEM_LibB;${CMAKE_PROJECT_NAME}_USE_SYSTEM_LibC;${CMAKE_PROJECT_NAME}_USE_SYSTEM_LibD")
  67. check_variable(${CMAKE_PROJECT_NAME}_USE_SYSTEM_LibA "")
  68. check_variable(${CMAKE_PROJECT_NAME}_USE_SYSTEM_LibB "")
  69. check_variable(${CMAKE_PROJECT_NAME}_USE_SYSTEM_LibC 1)
  70. check_variable(${CMAKE_PROJECT_NAME}_USE_SYSTEM_LibD 1)