CMakeLists.txt 3.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. cmake_minimum_required(VERSION 2.8.4) # new enough for CMP0017
  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. if (DEFINED ${VERSION_VAR})
  48. message(STATUS "${VERSION_VAR}='${${VERSION_VAR}}'")
  49. if (NOT ${VERSION_VAR} MATCHES "^[0-9]")
  50. message(SEND_ERROR "unexpected: ${VERSION_VAR} does not begin with a decimal digit")
  51. endif()
  52. if ("${${VERSION_VAR}}" STREQUAL "")
  53. message(SEND_ERROR "unexpected: ${VERSION_VAR} is empty")
  54. endif()
  55. if (${VERSION_VAR} VERSION_EQUAL 0)
  56. message(SEND_ERROR "unexpected: ${VERSION_VAR} is VERSION_EQUAL 0")
  57. endif()
  58. if (NOT ${VERSION_VAR} VERSION_GREATER 0)
  59. message(SEND_ERROR "unexpected: ${VERSION_VAR} is NOT VERSION_GREATER 0")
  60. endif()
  61. else()
  62. message(SEND_ERROR "${MODULE_NAME}_FOUND is set but version number variable ${VERSION_VAR} is NOT DEFINED")
  63. endif()
  64. endif ()
  65. endmacro()
  66. # If any of these modules reported that it was found a version number should have been
  67. # reported.
  68. foreach(VTEST ALSA ARMADILLO BZIP2 CUPS CURL EXPAT FREETYPE GETTEXT GIT HG
  69. HSPELL ICOTOOL JASPER LIBLZMA LIBXML2 LIBXSLT LTTNGUST PERL PKG_CONFIG
  70. PostgreSQL TIFF ZLIB)
  71. check_version_string(${VTEST} ${VTEST}_VERSION_STRING)
  72. endforeach()
  73. foreach(VTEST BISON Boost CUDA DOXYGEN FLEX GIF GTK2
  74. HDF5 LibArchive OPENSCENEGRAPH RUBY SWIG Protobuf)
  75. check_version_string(${VTEST} ${VTEST}_VERSION)
  76. endforeach()
  77. check_version_string(PYTHONINTERP PYTHON_VERSION_STRING)
  78. check_version_string(SUBVERSION Subversion_VERSION_SVN)