summaryrefslogtreecommitdiff
path: root/cmake/Modules
diff options
context:
space:
mode:
authorMichael Dickens <michael.dickens@ettus.com>2014-08-15 13:44:31 -0400
committerMichael Dickens <michael.dickens@ettus.com>2014-08-15 13:44:31 -0400
commit59a7e8fbf0d427bedc80282bb9474ccc3f52da15 (patch)
tree9dbe5ee23b2725679c6b7c2843d73c38d2f2298d /cmake/Modules
parent4691e8597e6c920b767fd55165971c47c5b3d3e9 (diff)
cmake: fix FindUHD.cmake to first check to see if UHD installed its own version of FindUHD, and if so use it; if not, revert to current behavior.
Diffstat (limited to 'cmake/Modules')
-rw-r--r--cmake/Modules/FindUHD.cmake108
1 files changed, 97 insertions, 11 deletions
diff --git a/cmake/Modules/FindUHD.cmake b/cmake/Modules/FindUHD.cmake
index b4d12b6d7b..94db092e8e 100644
--- a/cmake/Modules/FindUHD.cmake
+++ b/cmake/Modules/FindUHD.cmake
@@ -2,27 +2,113 @@
# Find the library for the USRP Hardware Driver
########################################################################
-INCLUDE(FindPkgConfig)
-PKG_CHECK_MODULES(PC_UHD uhd)
+# First check to see if UHD installed its own version
+# of FindUHD, and if so use it.
-FIND_PATH(
+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
+)
+
+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})
+
+ # "QUITE" 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}
+ )
+
+ # restore CMAKE_MODULE_PATH
+
+ set(CMAKE_MODULE_PATH ${SAVED_CMAKE_MODULE_PATH})
+
+ # 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)
+
+endif(LOCAL_FINDUHD_DIR)
+
+# check if UHD was found above
+if(NOT UHD_FOUND)
+
+ # Not found; try the "old" method (not as robust)
+
+ include(FindPkgConfig)
+ pkg_check_modules(PC_UHD uhd)
+
+ find_path(
UHD_INCLUDE_DIRS
NAMES uhd/config.hpp
HINTS $ENV{UHD_DIR}/include
- ${PC_UHD_INCLUDEDIR}
+ ${PC_UHD_INCLUDEDIR}
PATHS /usr/local/include
/usr/include
-)
+ )
-FIND_LIBRARY(
+ find_library(
UHD_LIBRARIES
NAMES uhd
HINTS $ENV{UHD_DIR}/lib
- ${PC_UHD_LIBDIR}
+ ${PC_UHD_LIBDIR}
PATHS /usr/local/lib
/usr/lib
-)
+ )
+
+ include(FindPackageHandleStandardArgs)
+ find_package_handle_standard_args(UHD DEFAULT_MSG UHD_LIBRARIES UHD_INCLUDE_DIRS)
+ mark_as_advanced(UHD_LIBRARIES UHD_INCLUDE_DIRS)
-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)