CMakeLists.txt 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  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. )
  31. FOREACH(p ${PACKAGES})
  32. SET(${p}_DIR "" CACHE FILEPATH "Wipe out find results for testing." FORCE)
  33. ENDFOREACH(p)
  34. # Enable framework and bundle searching. Make sure bundles are found
  35. # before unix-syle packages.
  36. SET(CMAKE_FIND_FRAMEWORK LAST)
  37. SET(CMAKE_FIND_APPBUNDLE FIRST)
  38. # Look for packages with new-style signatures.
  39. FIND_PACKAGE(foo NO_MODULE)
  40. FIND_PACKAGE(Foo CONFIGS FooConfig.cmake)
  41. FIND_PACKAGE(Bar)
  42. FIND_PACKAGE(TFramework CONFIGS TFrameworkConfig.cmake)
  43. FIND_PACKAGE(Tframework)
  44. FIND_PACKAGE(TApp)
  45. FIND_PACKAGE(Tapp CONFIGS tapp-config.cmake)
  46. FIND_PACKAGE(Special NAMES Suffix SuffixTest PATH_SUFFIXES test)
  47. FIND_PACKAGE(VersionedA 2 NAMES zot)
  48. FIND_PACKAGE(VersionedB 3.1 EXACT NAMES zot)
  49. # HINTS should override the system but PATHS should not
  50. LIST(INSERT CMAKE_SYSTEM_PREFIX_PATH 0 "${CMAKE_CURRENT_SOURCE_DIR}/A")
  51. FIND_PACKAGE(wibbleA NAMES wibble PATHS B)
  52. FIND_PACKAGE(wibbleB NAMES wibble HINTS B)
  53. # Expected locations at which packages should be found.
  54. SET(foo_EXPECTED "lib/foo-1.2/foo-config.cmake")
  55. SET(Foo_EXPECTED "lib/foo-1.2/CMake/FooConfig.cmake")
  56. SET(Bar_EXPECTED "lib/Bar/BarConfig.cmake")
  57. SET(Special_EXPECTED "lib/suffix/test/SuffixTestConfig.cmake")
  58. SET(TFramework_EXPECTED
  59. "TFramework.framework/Versions/A/Resources/CMake/TFrameworkConfig.cmake")
  60. SET(Tframework_EXPECTED
  61. "TFramework.framework/Versions/A/Resources/tframework-config.cmake")
  62. SET(TApp_EXPECTED
  63. "TApp.app/Contents/Resources/TAppConfig.cmake")
  64. SET(Tapp_EXPECTED
  65. "TApp.app/Contents/Resources/cmake/tapp-config.cmake")
  66. SET(VersionedA_EXPECTED "lib/zot-2.0/zot-config.cmake")
  67. SET(VersionedB_EXPECTED "lib/zot-3.1/zot-config.cmake")
  68. SET(wibbleA_EXPECTED "A/wibble-config.cmake")
  69. SET(wibbleB_EXPECTED "B/wibble-config.cmake")
  70. # Check the results.
  71. FOREACH(p ${PACKAGES})
  72. IF(${p}_FOUND)
  73. # Convert to relative path for comparison to expected location.
  74. FILE(RELATIVE_PATH REL_${p}_CONFIG "${CMAKE_CURRENT_SOURCE_DIR}"
  75. "${${p}_CONFIG}")
  76. # Debugging output.
  77. IF(CMAKE_FIND_DEBUG_MODE)
  78. MESSAGE("Package ${p} found [${REL_${p}_CONFIG}]")
  79. ENDIF(CMAKE_FIND_DEBUG_MODE)
  80. # Check and report failure.
  81. IF(NOT "${REL_${p}_CONFIG}" STREQUAL "${${p}_EXPECTED}")
  82. MESSAGE(SEND_ERROR
  83. "Package ${p} should have been [${${p}_EXPECTED}] but "
  84. "was [${REL_${p}_CONFIG}]")
  85. ENDIF(NOT "${REL_${p}_CONFIG}" STREQUAL "${${p}_EXPECTED}")
  86. ELSE(${p}_FOUND)
  87. MESSAGE(SEND_ERROR "Package ${p} not found!")
  88. ENDIF(${p}_FOUND)
  89. ENDFOREACH(p)
  90. # Check that version information was extracted.
  91. IF(NOT "${VersionedA_VERSION}" STREQUAL "2.0")
  92. MESSAGE(SEND_ERROR
  93. "Package VersionedA is version [${VersionedA_VERSION}], not [2.0]")
  94. ENDIF(NOT "${VersionedA_VERSION}" STREQUAL "2.0")
  95. IF(NOT "${VersionedA_VERSION_MAJOR}" STREQUAL "2")
  96. MESSAGE(SEND_ERROR
  97. "Package VersionedA is major version [${VersionedA_VERSION_MAJOR}], not [2]")
  98. ENDIF(NOT "${VersionedA_VERSION_MAJOR}" STREQUAL "2")
  99. IF(NOT "${VersionedA_VERSION_MINOR}" STREQUAL "0")
  100. MESSAGE(SEND_ERROR
  101. "Package VersionedA is minor version [${VersionedA_VERSION_MINOR}], not [0]")
  102. ENDIF(NOT "${VersionedA_VERSION_MINOR}" STREQUAL "0")
  103. IF(NOT "${VersionedB_VERSION}" STREQUAL "3.1")
  104. MESSAGE(SEND_ERROR
  105. "Package VersionedB is version [${VersionedB_VERSION}], not [3.1]")
  106. ENDIF(NOT "${VersionedB_VERSION}" STREQUAL "3.1")
  107. IF(NOT "${VersionedB_VERSION_MAJOR}" STREQUAL "3")
  108. MESSAGE(SEND_ERROR
  109. "Package VersionedB is major version [${VersionedB_VERSION_MAJOR}], not [3]")
  110. ENDIF(NOT "${VersionedB_VERSION_MAJOR}" STREQUAL "3")
  111. IF(NOT "${VersionedB_VERSION_MINOR}" STREQUAL "1")
  112. MESSAGE(SEND_ERROR
  113. "Package VersionedB is minor version [${VersionedB_VERSION_MINOR}], not [1]")
  114. ENDIF(NOT "${VersionedB_VERSION_MINOR}" STREQUAL "1")
  115. IF(NOT "${Special_VERSION}" STREQUAL "1.2")
  116. MESSAGE(SEND_ERROR
  117. "Package Special is version [${Special_VERSION}], not [1.2]")
  118. ENDIF(NOT "${Special_VERSION}" STREQUAL "1.2")
  119. IF(NOT "${Special_VERSION_MAJOR}" STREQUAL "1")
  120. MESSAGE(SEND_ERROR
  121. "Package Special is major version [${Special_VERSION_MAJOR}], not [1]")
  122. ENDIF(NOT "${Special_VERSION_MAJOR}" STREQUAL "1")
  123. IF(NOT "${Special_VERSION_MINOR}" STREQUAL "2")
  124. MESSAGE(SEND_ERROR
  125. "Package Special is minor version [${Special_VERSION_MINOR}], not [2]")
  126. ENDIF(NOT "${Special_VERSION_MINOR}" STREQUAL "2")
  127. # Test version number comparison.
  128. IF(NOT "1.2.3.4" VERSION_LESS "1.2.3.5")
  129. MESSAGE(SEND_ERROR "1.2.3.4 VERSION_LESS 1.2.3.5 is not true!")
  130. ENDIF()
  131. IF(NOT "1.2" VERSION_LESS "1.10")
  132. MESSAGE(SEND_ERROR "1.2 VERSION_LESS 1.10 is not true!")
  133. ENDIF()
  134. IF(NOT "1.02" VERSION_GREATER "1.1")
  135. MESSAGE(SEND_ERROR "1.02 VERSION_GREATER 1.1 is not true!")
  136. ENDIF()
  137. IF("1.2.3" VERSION_GREATER "1.2.3.4")
  138. MESSAGE(SEND_ERROR "1.2.3 VERSION_GREATER 1.2.3.4 is not false!")
  139. ENDIF()
  140. IF(NOT "1.2" VERSION_EQUAL "1.2.0.0")
  141. MESSAGE(SEND_ERROR "1.2 VERSION_EQUAL 1.2.0.0 is not true!")
  142. ENDIF()