CMakeLists.txt 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. cmake_minimum_required(VERSION 3.10)
  2. project(AllFindModules)
  3. # Avoid ctest truncation of output
  4. message(STATUS "CTEST_FULL_OUTPUT")
  5. set(ORIGINAL_MODULE_PATH "${CMAKE_MODULE_PATH}")
  6. file(GLOB FIND_MODULES "${CMAKE_CURRENT_SOURCE_DIR}/../../../Modules/Find*.cmake" )
  7. macro(do_find MODULE_NAME)
  8. message(STATUS " Checking Find${MODULE_NAME}")
  9. find_package(${MODULE_NAME})
  10. set(CMAKE_MODULE_PATH "${ORIGINAL_MODULE_PATH}")
  11. endmacro()
  12. # It is only possible to use either Qt3 or Qt4 in one project.
  13. # Since FindQt will complain if both are found we explicitly request Qt4 here
  14. # and filter out FindQt3. FindKDE3 also depends on Qt3 and
  15. # is therefore also blocked
  16. set(DESIRED_QT_VERSION 4)
  17. set(NO_QT4_MODULES "Qt3" "KDE3")
  18. # ignore everything that has it's own test in Tests/Module/
  19. file(GLOB OWN_TEST_MODULES RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}/../../Module/" "${CMAKE_CURRENT_SOURCE_DIR}/../../Module/Find*")
  20. foreach(FIND_MODULE IN LISTS OWN_TEST_MODULES)
  21. string(REGEX REPLACE "^Find" "" _MOD_NAME "${FIND_MODULE}")
  22. list(APPEND NO_FIND_MODULES "${_MOD_NAME}")
  23. endforeach()
  24. # These modules are named Find*.cmake, but are nothing that works in
  25. # find_package().
  26. list(APPEND NO_FIND_MODULES "PackageHandleStandardArgs" "PackageMessage")
  27. foreach(FIND_MODULE IN LISTS FIND_MODULES)
  28. string(REGEX REPLACE ".*/Find(.*)\\.cmake$" "\\1" MODULE_NAME "${FIND_MODULE}")
  29. list(FIND NO_QT4_MODULES ${MODULE_NAME} NO_QT4_INDEX)
  30. list(FIND NO_FIND_MODULES ${MODULE_NAME} NO_FIND_INDEX)
  31. if (NO_QT4_INDEX EQUAL -1 AND NO_FIND_INDEX EQUAL -1)
  32. do_find(${MODULE_NAME})
  33. endif ()
  34. endforeach()
  35. # Qt4 is not present, so we can check Qt3
  36. if (NOT QT4_FOUND)
  37. set(DESIRED_QT_VERSION 3)
  38. foreach(FIND_MODULE ${NO_QT4_MODULES} "Qt")
  39. do_find(${FIND_MODULE})
  40. endforeach()
  41. endif ()
  42. macro(check_version_string MODULE_NAME VERSION_VAR)
  43. string(FIND " ${CMake_TEST_CMakeOnly.AllFindModules_NO_VERSION} " " ${MODULE_NAME} " _exclude_pos)
  44. if (NOT _exclude_pos EQUAL -1)
  45. message(STATUS "excluding check of ${VERSION_VAR}='${${VERSION_VAR}}' due to local configuration")
  46. elseif (${MODULE_NAME}_FOUND)
  47. unset(SKIP_CHECK)
  48. if(${MODULE_NAME} STREQUAL "HG")
  49. execute_process(COMMAND "${HG_EXECUTABLE}" --version OUTPUT_QUIET ERROR_QUIET RESULT_VARIABLE HG_RV)
  50. if(NOT HG_RV EQUAL 0)
  51. message(WARNING "Broken HG executable detected, skipping")
  52. set(SKIP_CHECK TRUE)
  53. endif()
  54. endif()
  55. if (DEFINED ${VERSION_VAR})
  56. message(STATUS "${VERSION_VAR}='${${VERSION_VAR}}'")
  57. if (NOT ${VERSION_VAR} MATCHES "^[0-9]")
  58. message(SEND_ERROR "unexpected: ${VERSION_VAR} does not begin with a decimal digit")
  59. endif()
  60. if ("${${VERSION_VAR}}" STREQUAL "")
  61. message(SEND_ERROR "unexpected: ${VERSION_VAR} is empty")
  62. endif()
  63. if (${VERSION_VAR} VERSION_EQUAL 0)
  64. message(SEND_ERROR "unexpected: ${VERSION_VAR} is VERSION_EQUAL 0")
  65. endif()
  66. if (NOT ${VERSION_VAR} VERSION_GREATER 0)
  67. message(SEND_ERROR "unexpected: ${VERSION_VAR} is NOT VERSION_GREATER 0")
  68. endif()
  69. else()
  70. if(NOT SKIP_CHECK)
  71. message(SEND_ERROR "${MODULE_NAME}_FOUND is set but version number variable ${VERSION_VAR} is NOT DEFINED")
  72. endif()
  73. endif()
  74. endif ()
  75. endmacro()
  76. # If any of these modules reported that it was found a version number should have been
  77. # reported.
  78. foreach(
  79. VTEST
  80. ALSA ARMADILLO
  81. BZIP2
  82. CUPS CURL
  83. EXPAT
  84. FREETYPE
  85. GETTEXT GIT
  86. HG HSPELL
  87. ICOTOOL
  88. JASPER
  89. LIBLZMA LIBXML2 LIBXSLT LTTNGUST
  90. PERL PKG_CONFIG PostgreSQL
  91. TIFF
  92. ZLIB
  93. )
  94. check_version_string(${VTEST} ${VTEST}_VERSION_STRING)
  95. endforeach()
  96. foreach(
  97. VTEST
  98. ALSA
  99. BISON Boost BZip2 BZIP2
  100. CUDA
  101. DOXYGEN
  102. FLEX
  103. GIF GTK2
  104. HDF5
  105. JPEG
  106. LibArchive LIBLZMA
  107. OPENSCENEGRAPH
  108. PostgreSQL Protobuf
  109. Ruby RUBY
  110. SWIG
  111. ZLIB
  112. )
  113. check_version_string(${VTEST} ${VTEST}_VERSION)
  114. endforeach()
  115. check_version_string(PYTHONINTERP PYTHON_VERSION_STRING)
  116. check_version_string(SUBVERSION Subversion_VERSION_SVN)