diff options
author | Michael Dickens <michael.dickens@ettus.com> | 2014-08-25 13:19:17 -0400 |
---|---|---|
committer | Michael Dickens <michael.dickens@ettus.com> | 2014-08-25 13:19:17 -0400 |
commit | 13deb30aed1500b43916ea5f0b4ee056081dede7 (patch) | |
tree | a13cbb52e1421144889c3f2cb9e6e8f9456dc19f | |
parent | df693a90525ec4a49435ed4e3fb5cfec7643b61a (diff) |
cmake: fix FindUHD.cmake to work with UHDConfig*.cmake, not FindUHD.cmake, since that's what UHD will be installing. UHDConfig* is a more robust way to find packages, and works with default CMake internal paths.
-rw-r--r-- | cmake/Modules/FindUHD.cmake | 118 |
1 files changed, 44 insertions, 74 deletions
diff --git a/cmake/Modules/FindUHD.cmake b/cmake/Modules/FindUHD.cmake index 9f69699a75..d4d2069aeb 100644 --- a/cmake/Modules/FindUHD.cmake +++ b/cmake/Modules/FindUHD.cmake @@ -2,84 +2,44 @@ # Find the library for the USRP Hardware Driver ######################################################################## -# First check to see if UHD installed its own version -# of FindUHD, and if so use it. +# First check to see if UHD installed its own CMake files -unset(UHD_FOUND) - -# obvious locations for FindUHD.cmake to already be installed are: -# ${prefix}/share/cmake-X.Y/Modules (${CMAKE_ROOT}) -# ${prefix}/share/cmake/Modules -# ${prefix}/lib/cmake -# ${prefix}/lib64/cmake - -get_filename_component(CMAKE_ROOT_PARENT "${CMAKE_ROOT}" PATH) - -find_path( - LOCAL_FINDUHD_DIR - NAMES FindUHD.cmake - PATH_SUFFIXES cmake cmake/Modules Modules - HINTS ${CMAKE_MODULES_DIR} - PATHS ${CMAKE_ROOT} - ${CMAKE_ROOT_PARENT} - ${CMAKE_INSTALL_PREFIX}/lib - ${CMAKE_INSTALL_PREFIX}/lib64 -) +# save the current MODULE path +set(SAVED_CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH}) -if(LOCAL_FINDUHD_DIR) - - # save the current MODULE path - set(SAVED_CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH}) - - # remove the current directory from the MODULE path - list(REMOVE_ITEM CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}) - - # prepend the found directory to the MODULE path - list(INSERT CMAKE_MODULE_PATH 0 ${LOCAL_FINDUHD_DIR}) - - # "QUIET" works on CMake 2.8+ only - unset(LOCAL_UHD_QUIET) - if(NOT ${CMAKE_VERSION} VERSION_LESS "2.8.0") - set(LOCAL_UHD_QUIET "QUIET") - endif() - - # set REQUIRED, as directed - unset(LOCAL_UHD_REQUIRED) - if(UHD_FIND_REQUIRED) - set(LOCAL_UHD_REQUIRED "REQUIRED") - endif(UHD_FIND_REQUIRED) - - # set VERSION to be checking, as directed - unset(LOCAL_UHD_VERSION) - if(UHD_FIND_VERSION) - set(LOCAL_UHD_VERSION "${UHD_FIND_VERSION}") - endif(UHD_FIND_VERSION) - - # set EXACT, as directed, but only if VERSION was specified - unset(LOCAL_UHD_VERSION_EXACT) - if(UHD_FIND_VERSION_EXACT) - if(LOCAL_UHD_VERSION) - set(LOCAL_UHD_VERSION_EXACT "EXACT") - endif(LOCAL_UHD_VERSION) - endif(UHD_FIND_VERSION_EXACT) - - # try to find UHD using the already-installed FindUHD, as directed - find_package( - UHD ${LOCAL_UHD_VERSION} ${LOCAL_UHD_VERSION_EXACT} - ${LOCAL_UHD_REQUIRED} ${LOCAL_UHD_QUIET} - ) +# remove the current directory from the MODULE path +list(REMOVE_ITEM CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}) - # restore CMAKE_MODULE_PATH - - set(CMAKE_MODULE_PATH ${SAVED_CMAKE_MODULE_PATH}) +# try to find UHD via the provided parameters, +# handle REQUIRED internally later +unset(UHD_FOUND) - # print the standard message iff UHD was found - if(UHD_FOUND) - include(FindPackageHandleStandardArgs) - find_package_handle_standard_args(UHD DEFAULT_MSG UHD_LIBRARIES UHD_INCLUDE_DIRS) - endif(UHD_FOUND) +# try quietly when possible (CMake 2.8+). +if(NOT ${CMAKE_VERSION} VERSION_LESS "2.8.0") + set(UHD_QUIET "QUIET") +endif() + +# was the version specified? +unset(LOCAL_UHD_FIND_VERSION) +if(UHD_FIND_VERSION) + set(LOCAL_UHD_FIND_VERSION ${UHD_FIND_VERSION}) +endif(UHD_FIND_VERSION) + +# was EXACT specified? +unset(LOCAL_UHD_FIND_VERSION_EXACT) +if(UHD_FIND_VERSION_EXACT) + set(LOCAL_UHD_FIND_VERSION_EXACT "EXACT") +endif(UHD_FIND_VERSION_EXACT) + +# try to find UHDConfig using the desired parameters; +# UHDConfigVersion will catch a pass-through version bug ... +find_package( + UHD ${LOCAL_UHD_FIND_VERSION} + ${LOCAL_UHD_FIND_VERSION_EXACT} ${UHD_QUIET} +) -endif(LOCAL_FINDUHD_DIR) +# restore CMAKE_MODULE_PATH +set(CMAKE_MODULE_PATH ${SAVED_CMAKE_MODULE_PATH}) # check if UHD was found above if(NOT UHD_FOUND) @@ -106,9 +66,19 @@ if(NOT UHD_FOUND) PATHS /usr/local/lib /usr/lib ) +endif(NOT UHD_FOUND) + +if(UHD_LIBRARIES AND UHD_INCLUDE_DIRS) + + # if UHDConfig set UHD_FOUND==TRUE, then these have already been + # done, but done quietly. It does not hurt to redo them here. include(FindPackageHandleStandardArgs) find_package_handle_standard_args(UHD DEFAULT_MSG UHD_LIBRARIES UHD_INCLUDE_DIRS) mark_as_advanced(UHD_LIBRARIES UHD_INCLUDE_DIRS) -endif(NOT UHD_FOUND) +elseif(UHD_FIND_REQUIRED) + + message(FATAL_ERROR "UHD is required, but was not found.") + +endif() |