CMakeLists.txt 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. cmake_minimum_required (VERSION 2.6)
  2. PROJECT(FindPackageTest)
  3. # Look for a package that has a find module and may be found.
  4. FIND_PACKAGE(OpenGL QUIET)
  5. # Look for a package that has no find module and will not be found.
  6. FIND_PACKAGE(NotAPackage QUIET)
  7. # Look for a package that has an advanced find module.
  8. FIND_PACKAGE(VTK QUIET)
  9. ADD_EXECUTABLE(FindPackageTest FindPackageTest.cxx)
  10. # test behaviour of cmFindBase wrt. the CMAKE_PREFIX_PATH variable
  11. # foo.h should be found in ${CMAKE_CURRENT_SOURCE_DIR}/include:
  12. SET(CMAKE_PREFIX_PATH /blub /blah "${CMAKE_CURRENT_SOURCE_DIR}")
  13. FIND_PATH(FOO_DIR foo.h)
  14. IF(NOT FOO_DIR)
  15. MESSAGE(FATAL_ERROR "Did not find foo.h which is in ${CMAKE_CURRENT_SOURCE_DIR}/include
  16. CMAKE_PREFIX_PATH = ${CMAKE_PREFIX_PATH}")
  17. ENDIF(NOT FOO_DIR)
  18. LIST(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR})
  19. FIND_PACKAGE(VersionTestA 1)
  20. FIND_PACKAGE(VersionTestB 1.2)
  21. FIND_PACKAGE(VersionTestC 1.2.3)
  22. FIND_PACKAGE(VersionTestD 1.2.3.4)
  23. #-----------------------------------------------------------------------------
  24. #SET(CMAKE_FIND_DEBUG_MODE 1)
  25. # For purposes of the test wipe out previous find results.
  26. SET(PACKAGES
  27. foo Foo Bar TFramework Tframework TApp Tapp Special
  28. VersionedA VersionedB
  29. wibbleA wibbleB
  30. RecursiveA RecursiveB RecursiveC
  31. )
  32. FOREACH(p ${PACKAGES})
  33. SET(${p}_DIR "" CACHE FILEPATH "Wipe out find results for testing." FORCE)
  34. ENDFOREACH(p)
  35. # Enable framework and bundle searching. Make sure bundles are found
  36. # before unix-syle packages.
  37. SET(CMAKE_FIND_FRAMEWORK LAST)
  38. SET(CMAKE_FIND_APPBUNDLE FIRST)
  39. # Look for packages with new-style signatures.
  40. FIND_PACKAGE(foo NO_MODULE)
  41. FIND_PACKAGE(Foo CONFIGS FooConfig.cmake)
  42. FIND_PACKAGE(Bar)
  43. FIND_PACKAGE(TFramework CONFIGS TFrameworkConfig.cmake)
  44. FIND_PACKAGE(Tframework)
  45. FIND_PACKAGE(TApp)
  46. FIND_PACKAGE(Tapp CONFIGS tapp-config.cmake)
  47. FIND_PACKAGE(Special NAMES Suffix SuffixTest PATH_SUFFIXES test)
  48. FIND_PACKAGE(VersionedA 2 NAMES zot)
  49. FIND_PACKAGE(VersionedB 3.1 EXACT NAMES zot)
  50. # HINTS should override the system but PATHS should not
  51. LIST(INSERT CMAKE_SYSTEM_PREFIX_PATH 0 "${CMAKE_CURRENT_SOURCE_DIR}/A")
  52. FIND_PACKAGE(wibbleA NAMES wibble PATHS B)
  53. FIND_PACKAGE(wibbleB NAMES wibble HINTS B)
  54. # Look for package with recursive find-modules.
  55. FIND_PACKAGE(RecursiveA)
  56. FIND_PACKAGE(RecursiveB 2)
  57. FIND_PACKAGE(RecursiveC 3.1 EXACT)
  58. # Expected locations at which packages should be found.
  59. SET(foo_EXPECTED "lib/foo-1.2/foo-config.cmake")
  60. SET(Foo_EXPECTED "lib/foo-1.2/CMake/FooConfig.cmake")
  61. SET(Bar_EXPECTED "lib/Bar/BarConfig.cmake")
  62. SET(Special_EXPECTED "lib/suffix/test/SuffixTestConfig.cmake")
  63. SET(TFramework_EXPECTED
  64. "TFramework.framework/Versions/A/Resources/CMake/TFrameworkConfig.cmake")
  65. SET(Tframework_EXPECTED
  66. "TFramework.framework/Versions/A/Resources/tframework-config.cmake")
  67. SET(TApp_EXPECTED
  68. "TApp.app/Contents/Resources/TAppConfig.cmake")
  69. SET(Tapp_EXPECTED
  70. "TApp.app/Contents/Resources/cmake/tapp-config.cmake")
  71. SET(VersionedA_EXPECTED "lib/zot-2.0/zot-config.cmake")
  72. SET(VersionedB_EXPECTED "lib/cmake/zot-3.1/zot-config.cmake")
  73. SET(wibbleA_EXPECTED "A/wibble-config.cmake")
  74. SET(wibbleB_EXPECTED "B/wibble-config.cmake")
  75. SET(RecursiveA_EXPECTED "lib/RecursiveA/recursivea-config.cmake")
  76. SET(RecursiveB_EXPECTED "lib/zot-2.0/zot-config.cmake")
  77. SET(RecursiveC_EXPECTED "lib/cmake/zot-3.1/zot-config.cmake")
  78. # Check the results.
  79. FOREACH(p ${PACKAGES})
  80. IF(${p}_FOUND)
  81. # Convert to relative path for comparison to expected location.
  82. FILE(RELATIVE_PATH REL_${p}_CONFIG "${CMAKE_CURRENT_SOURCE_DIR}"
  83. "${${p}_CONFIG}")
  84. # Debugging output.
  85. IF(CMAKE_FIND_DEBUG_MODE)
  86. MESSAGE("Package ${p} found [${REL_${p}_CONFIG}]")
  87. ENDIF(CMAKE_FIND_DEBUG_MODE)
  88. # Check and report failure.
  89. IF(NOT "${REL_${p}_CONFIG}" STREQUAL "${${p}_EXPECTED}")
  90. MESSAGE(SEND_ERROR
  91. "Package ${p} should have been [${${p}_EXPECTED}] but "
  92. "was [${REL_${p}_CONFIG}]")
  93. ENDIF(NOT "${REL_${p}_CONFIG}" STREQUAL "${${p}_EXPECTED}")
  94. ELSE(${p}_FOUND)
  95. MESSAGE(SEND_ERROR "Package ${p} not found!")
  96. ENDIF(${p}_FOUND)
  97. ENDFOREACH(p)
  98. # Check that version information was extracted.
  99. IF(NOT "${VersionedA_VERSION}" STREQUAL "2.0")
  100. MESSAGE(SEND_ERROR
  101. "Package VersionedA is version [${VersionedA_VERSION}], not [2.0]")
  102. ENDIF(NOT "${VersionedA_VERSION}" STREQUAL "2.0")
  103. IF(NOT "${VersionedA_VERSION_MAJOR}" STREQUAL "2")
  104. MESSAGE(SEND_ERROR
  105. "Package VersionedA is major version [${VersionedA_VERSION_MAJOR}], not [2]")
  106. ENDIF(NOT "${VersionedA_VERSION_MAJOR}" STREQUAL "2")
  107. IF(NOT "${VersionedA_VERSION_MINOR}" STREQUAL "0")
  108. MESSAGE(SEND_ERROR
  109. "Package VersionedA is minor version [${VersionedA_VERSION_MINOR}], not [0]")
  110. ENDIF(NOT "${VersionedA_VERSION_MINOR}" STREQUAL "0")
  111. IF(NOT "${VersionedB_VERSION}" STREQUAL "3.1")
  112. MESSAGE(SEND_ERROR
  113. "Package VersionedB is version [${VersionedB_VERSION}], not [3.1]")
  114. ENDIF(NOT "${VersionedB_VERSION}" STREQUAL "3.1")
  115. IF(NOT "${VersionedB_VERSION_MAJOR}" STREQUAL "3")
  116. MESSAGE(SEND_ERROR
  117. "Package VersionedB is major version [${VersionedB_VERSION_MAJOR}], not [3]")
  118. ENDIF(NOT "${VersionedB_VERSION_MAJOR}" STREQUAL "3")
  119. IF(NOT "${VersionedB_VERSION_MINOR}" STREQUAL "1")
  120. MESSAGE(SEND_ERROR
  121. "Package VersionedB is minor version [${VersionedB_VERSION_MINOR}], not [1]")
  122. ENDIF(NOT "${VersionedB_VERSION_MINOR}" STREQUAL "1")
  123. IF(NOT "${Special_VERSION}" STREQUAL "1.2")
  124. MESSAGE(SEND_ERROR
  125. "Package Special is version [${Special_VERSION}], not [1.2]")
  126. ENDIF(NOT "${Special_VERSION}" STREQUAL "1.2")
  127. IF(NOT "${Special_VERSION_MAJOR}" STREQUAL "1")
  128. MESSAGE(SEND_ERROR
  129. "Package Special is major version [${Special_VERSION_MAJOR}], not [1]")
  130. ENDIF(NOT "${Special_VERSION_MAJOR}" STREQUAL "1")
  131. IF(NOT "${Special_VERSION_MINOR}" STREQUAL "2")
  132. MESSAGE(SEND_ERROR
  133. "Package Special is minor version [${Special_VERSION_MINOR}], not [2]")
  134. ENDIF(NOT "${Special_VERSION_MINOR}" STREQUAL "2")
  135. # Test version number comparison.
  136. IF(NOT "1.2.3.4" VERSION_LESS "1.2.3.5")
  137. MESSAGE(SEND_ERROR "1.2.3.4 VERSION_LESS 1.2.3.5 is not true!")
  138. ENDIF()
  139. IF(NOT "1.2" VERSION_LESS "1.10")
  140. MESSAGE(SEND_ERROR "1.2 VERSION_LESS 1.10 is not true!")
  141. ENDIF()
  142. IF(NOT "1.02" VERSION_GREATER "1.1")
  143. MESSAGE(SEND_ERROR "1.02 VERSION_GREATER 1.1 is not true!")
  144. ENDIF()
  145. IF("1.2.3" VERSION_GREATER "1.2.3.4")
  146. MESSAGE(SEND_ERROR "1.2.3 VERSION_GREATER 1.2.3.4 is not false!")
  147. ENDIF()
  148. IF(NOT "1.2" VERSION_EQUAL "1.2.0.0")
  149. MESSAGE(SEND_ERROR "1.2 VERSION_EQUAL 1.2.0.0 is not true!")
  150. ENDIF()