CMakeLists.txt 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  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 PROJECTS LibA)
  25. set(LibB_VAR "LibB")
  26. mark_as_superbuild(VARS LibB_VAR PROJECTS LibB)
  27. set(LibA_VAR_WITH_LABELS "LibAWithLabels")
  28. mark_as_superbuild(VARS LibA_VAR_WITH_LABELS PROJECTS LibA LABELS "LABEL_A")
  29. set(MULTIPROJECT_VAR "MultiProjectVar")
  30. mark_as_superbuild(VARS MULTIPROJECT_VAR PROJECTS ${PROJECT_NAME} LibA LibB)
  31. set(MULTIPROJECT_VAR_WITH_LABELS "MultiProjectVarWithLabels")
  32. mark_as_superbuild(VARS MULTIPROJECT_VAR_WITH_LABELS PROJECTS ${PROJECT_NAME} LibA LibB LABELS "MULTIPROJECT")
  33. set(ALL_PROJECTS_VAR "AllProjectsVar")
  34. mark_as_superbuild(VARS ALL_PROJECTS_VAR ALL_PROJECTS)
  35. #set(MULTIPROJECT_VAR_WITH_LABELS "MultiProjectVarWithLabels")
  36. #mark_as_superbuild(VARS MULTIPROJECT_VAR_WITH_LABELS PROJECTS ${PROJECT_NAME} LibA LABELS "MULTIPROJECT")
  37. # Since LibC depends on LibD, LibD will also be expected to be found on the system
  38. set(${CMAKE_PROJECT_NAME}_USE_SYSTEM_LibC 1)
  39. endif()
  40. set(${PROJECT_NAME}_DEPENDENCIES LibA LibB LibC)
  41. superbuild_include_dependencies(${PROJECT_NAME})
  42. if(${PROJECT_NAME}_SUPERBUILD)
  43. ExternalProject_Add(${PROJECT_NAME}
  44. ${${PROJECT_NAME}_EXTERNAL_PROJECT_ARGS}
  45. DOWNLOAD_COMMAND ""
  46. CMAKE_CACHE_ARGS
  47. -D${PROJECT_NAME}_SUPERBUILD:BOOL=OFF
  48. SOURCE_DIR ${${PROJECT_NAME}_SOURCE_DIR}
  49. BINARY_DIR ${${PROJECT_NAME}_BINARY_DIR}/${PROJECT_NAME}-build
  50. BUILD_COMMAND ""
  51. INSTALL_COMMAND ""
  52. DEPENDS
  53. ${${PROJECT_NAME}_DEPENDENCIES}
  54. )
  55. return()
  56. endif()
  57. function(check_variable var_name expected_value)
  58. if(NOT "x${${var_name}}" STREQUAL "x${expected_value}")
  59. message(FATAL_ERROR "Problem with mark_as_superbuild() - CMake variable [${var_name}] is incorrectly set !\n"
  60. "current:${${var_name}}\n"
  61. "expected:${expected_value}")
  62. endif()
  63. endfunction()
  64. check_variable(FOO_OPTION "ON")
  65. check_variable(FOO_VAR "FooVar")
  66. check_variable(FOO_LIST "Item1;Item2")
  67. check_variable(FOO_LIST_FOR_CMAKE_CMD "Item1;Item2")
  68. check_variable(FOO_VAR_WITH_LABELS "FooVarWithLabels")
  69. check_variable(BAR_VAR_WITH_LABELS "BarVarWithLabels")
  70. check_variable(SuperBuildTest_EP_LABEL_LABEL_A "FOO_VAR_WITH_LABELS")
  71. check_variable(SuperBuildTest_EP_LABEL_LABEL_B "FOO_VAR_WITH_LABELS;BAR_VAR_WITH_LABELS")
  72. check_variable(SuperBuildTest_EP_LABEL_FIND_PACKAGE "LibA_DIR;LibB_DIR")
  73. get_filename_component(expected_LibA_DIR "${CMAKE_CURRENT_BINARY_DIR}/../LibA-build" REALPATH)
  74. check_variable(LibA_DIR ${expected_LibA_DIR})
  75. get_filename_component(expected_LibB_DIR "${CMAKE_CURRENT_BINARY_DIR}/../LibB-build" REALPATH)
  76. check_variable(LibB_DIR ${expected_LibB_DIR})
  77. check_variable(SuperBuildTest_EP_LABEL_USE_SYSTEM
  78. "${CMAKE_PROJECT_NAME}_USE_SYSTEM_LibA;${CMAKE_PROJECT_NAME}_USE_SYSTEM_LibB;${CMAKE_PROJECT_NAME}_USE_SYSTEM_LibD;${CMAKE_PROJECT_NAME}_USE_SYSTEM_LibC")
  79. check_variable(${CMAKE_PROJECT_NAME}_USE_SYSTEM_LibA "")
  80. check_variable(${CMAKE_PROJECT_NAME}_USE_SYSTEM_LibB "")
  81. check_variable(${CMAKE_PROJECT_NAME}_USE_SYSTEM_LibC 1)
  82. check_variable(${CMAKE_PROJECT_NAME}_USE_SYSTEM_LibD 1)
  83. check_variable(MULTIPROJECT_VAR "MultiProjectVar")
  84. check_variable(SuperBuildTest_EP_LABEL_MULTIPROJECT "MULTIPROJECT_VAR_WITH_LABELS")
  85. check_variable(MULTIPROJECT_VAR_WITH_LABELS "MultiProjectVarWithLabels")
  86. check_variable(ALL_PROJECTS_VAR "AllProjectsVar")