diff options
| -rw-r--r-- | host/include/uhd/transport/if_addrs.hpp | 1 | ||||
| -rw-r--r-- | host/lib/transport/CMakeLists.txt | 25 | ||||
| -rw-r--r-- | host/lib/transport/if_addrs.cpp | 16 | ||||
| -rw-r--r-- | host/lib/utils/CMakeLists.txt | 43 | ||||
| -rw-r--r-- | host/lib/utils/load_modules.cpp | 14 | ||||
| -rw-r--r-- | host/lib/utils/thread_priority.cpp | 10 | 
6 files changed, 70 insertions, 39 deletions
| diff --git a/host/include/uhd/transport/if_addrs.hpp b/host/include/uhd/transport/if_addrs.hpp index c831750d7..689aff42c 100644 --- a/host/include/uhd/transport/if_addrs.hpp +++ b/host/include/uhd/transport/if_addrs.hpp @@ -31,7 +31,6 @@ namespace uhd{ namespace transport{          std::string inet;          std::string mask;          std::string bcast; -        if_addrs_t(void);      };      /*! diff --git a/host/lib/transport/CMakeLists.txt b/host/lib/transport/CMakeLists.txt index e58957154..a5bf9c5f1 100644 --- a/host/lib/transport/CMakeLists.txt +++ b/host/lib/transport/CMakeLists.txt @@ -48,20 +48,31 @@ ENDIF(ENABLE_USB)  ########################################################################  MESSAGE(STATUS "")  MESSAGE(STATUS "Configuring interface address discovery...") - +INCLUDE(CheckCXXSourceCompiles)  INCLUDE(CheckIncludeFileCXX) -CHECK_INCLUDE_FILE_CXX(ifaddrs.h HAVE_IFADDRS_H) + +CHECK_CXX_SOURCE_COMPILES(" +    #include <ifaddrs.h> +    int main(){ +        struct ifaddrs *ifap; +        getifaddrs(&ifap); +        return 0; +    } +    " HAVE_GETIFADDRS +) +  CHECK_INCLUDE_FILE_CXX(winsock2.h HAVE_WINSOCK2_H) -IF(HAVE_IFADDRS_H) +IF(HAVE_GETIFADDRS)      MESSAGE(STATUS "  Interface address discovery supported through getifaddrs.") -    SET(IF_ADDRS_DEFS HAVE_IFADDRS_H) +    SET(IF_ADDRS_DEFS HAVE_GETIFADDRS)  ELSEIF(HAVE_WINSOCK2_H)      MESSAGE(STATUS "  Interface address discovery supported through SIO_GET_INTERFACE_LIST.") -    SET(IF_ADDRS_DEFS HAVE_WINSOCK2_H) -ELSE(HAVE_IFADDRS_H) +    SET(IF_ADDRS_DEFS HAVE_SIO_GET_INTERFACE_LIST) +ELSE()      MESSAGE(STATUS "  Interface address discovery not supported.") -ENDIF(HAVE_IFADDRS_H) +    SET(IF_ADDRS_DEFS HAVE_IF_ADDRS_DUMMY) +ENDIF()  SET_SOURCE_FILES_PROPERTIES(      ${CMAKE_CURRENT_SOURCE_DIR}/if_addrs.cpp diff --git a/host/lib/transport/if_addrs.cpp b/host/lib/transport/if_addrs.cpp index 17cf8455b..b7c8ad844 100644 --- a/host/lib/transport/if_addrs.cpp +++ b/host/lib/transport/if_addrs.cpp @@ -20,14 +20,10 @@  #include <boost/cstdint.hpp>  #include <iostream> -uhd::transport::if_addrs_t::if_addrs_t(void){ -    /* NOP */ -} -  /***********************************************************************   * Interface address discovery through ifaddrs api   **********************************************************************/ -#if defined(HAVE_IFADDRS_H) +#ifdef HAVE_GETIFADDRS  #include <ifaddrs.h>  static boost::asio::ip::address_v4 sockaddr_to_ip_addr(sockaddr *addr){ @@ -59,10 +55,12 @@ std::vector<uhd::transport::if_addrs_t> uhd::transport::get_if_addrs(void){      return if_addrs;  } +#endif /* HAVE_GETIFADDRS */ +  /***********************************************************************   * Interface address discovery through windows api   **********************************************************************/ -#elif defined(HAVE_WINSOCK2_H) +#ifdef HAVE_SIO_GET_INTERFACE_LIST  #include <winsock2.h>  std::vector<uhd::transport::if_addrs_t> uhd::transport::get_if_addrs(void){ @@ -98,13 +96,15 @@ std::vector<uhd::transport::if_addrs_t> uhd::transport::get_if_addrs(void){      return if_addrs;  } +#endif /* HAVE_SIO_GET_INTERFACE_LIST */ +  /***********************************************************************   * Interface address discovery not included   **********************************************************************/ -#else /* HAVE_IFADDRS_H */ +#ifdef HAVE_IF_ADDRS_DUMMY  std::vector<uhd::transport::if_addrs_t> uhd::transport::get_if_addrs(void){      return std::vector<if_addrs_t>();  } -#endif /* HAVE_IFADDRS_H */ +#endif /* HAVE_IF_ADDRS_DUMMY */ diff --git a/host/lib/utils/CMakeLists.txt b/host/lib/utils/CMakeLists.txt index 743528189..a4d3b2db2 100644 --- a/host/lib/utils/CMakeLists.txt +++ b/host/lib/utils/CMakeLists.txt @@ -24,8 +24,8 @@  ########################################################################  MESSAGE(STATUS "")  MESSAGE(STATUS "Configuring priority scheduling...") -  INCLUDE(CheckCXXSourceCompiles) +  CHECK_CXX_SOURCE_COMPILES("      #include <pthread.h>      int main(){ @@ -52,9 +52,10 @@ IF(HAVE_PTHREAD_SETSCHEDPARAM)  ELSEIF(HAVE_WIN_SETTHREADPRIORITY)      MESSAGE(STATUS "  Priority scheduling supported through windows SetThreadPriority.")      SET(THREAD_PRIO_DEFS HAVE_WIN_SETTHREADPRIORITY) -ELSE(HAVE_PTHREAD_SETSCHEDPARAM) +ELSE()      MESSAGE(STATUS "  Priority scheduling not supported.") -ENDIF(HAVE_PTHREAD_SETSCHEDPARAM) +    SET(THREAD_PRIO_DEFS HAVE_THREAD_PRIO_DUMMY) +ENDIF()  SET_SOURCE_FILES_PROPERTIES(      ${CMAKE_CURRENT_SOURCE_DIR}/thread_priority.cpp @@ -66,21 +67,39 @@ SET_SOURCE_FILES_PROPERTIES(  ########################################################################  MESSAGE(STATUS "")  MESSAGE(STATUS "Configuring module loading...") +INCLUDE(CheckCXXSourceCompiles) -INCLUDE(CheckIncludeFileCXX) -CHECK_INCLUDE_FILE_CXX(dlfcn.h HAVE_DLFCN_H) -CHECK_INCLUDE_FILE_CXX(windows.h HAVE_WINDOWS_H) +SET(CMAKE_REQUIRED_LIBRARIES ${CMAKE_DL_LIBS}) +CHECK_CXX_SOURCE_COMPILES(" +    #include <dlfcn.h> +    int main(){ +        dlopen(0, 0); +        return 0; +    } +    " HAVE_DLOPEN +) +UNSET(CMAKE_REQUIRED_LIBRARIES) + +CHECK_CXX_SOURCE_COMPILES(" +    #include <windows.h> +    int main(){ +        LoadLibrary(0); +        return 0; +    } +    " HAVE_LOAD_LIBRARY +) -IF(HAVE_DLFCN_H) +IF(HAVE_DLOPEN)      MESSAGE(STATUS "  Module loading supported through dlopen.") -    SET(LOAD_MODULES_DEFS HAVE_DLFCN_H) +    SET(LOAD_MODULES_DEFS HAVE_DLOPEN)      LIBUHD_APPEND_LIBS(${CMAKE_DL_LIBS}) -ELSEIF(HAVE_WINDOWS_H) +ELSEIF(HAVE_LOAD_LIBRARY)      MESSAGE(STATUS "  Module loading supported through LoadLibrary.") -    SET(LOAD_MODULES_DEFS HAVE_WINDOWS_H) -ELSE(HAVE_DLFCN_H) +    SET(LOAD_MODULES_DEFS HAVE_LOAD_LIBRARY) +ELSE()      MESSAGE(STATUS "  Module loading not supported.") -ENDIF(HAVE_DLFCN_H) +    SET(LOAD_MODULES_DEFS HAVE_LOAD_MODULES_DUMMY) +ENDIF()  SET_SOURCE_FILES_PROPERTIES(      ${CMAKE_CURRENT_SOURCE_DIR}/load_modules.cpp diff --git a/host/lib/utils/load_modules.cpp b/host/lib/utils/load_modules.cpp index 623d31eb6..fa9b22438 100644 --- a/host/lib/utils/load_modules.cpp +++ b/host/lib/utils/load_modules.cpp @@ -29,9 +29,8 @@ namespace fs = boost::filesystem;  /***********************************************************************   * Module Load Function   **********************************************************************/ -#if defined(HAVE_DLFCN_H) +#ifdef HAVE_DLOPEN  #include <dlfcn.h> -  static void load_module(const std::string &file_name){      if (dlopen(file_name.c_str(), RTLD_LAZY) == NULL){          throw std::runtime_error(str( @@ -39,10 +38,11 @@ static void load_module(const std::string &file_name){          ));      }  } +#endif /* HAVE_DLOPEN */ -#elif defined(HAVE_WINDOWS_H) -#include <windows.h> +#ifdef HAVE_LOAD_LIBRARY +#include <windows.h>  static void load_module(const std::string &file_name){      if (LoadLibrary(file_name.c_str()) == NULL){          throw std::runtime_error(str( @@ -50,16 +50,16 @@ static void load_module(const std::string &file_name){          ));      }  } +#endif /* HAVE_LOAD_LIBRARY */ -#else +#ifdef HAVE_LOAD_MODULES_DUMMY  static void load_module(const std::string &file_name){      throw std::runtime_error(str(          boost::format("Module loading not supported: Cannot load \"%s\"") % file_name      ));  } - -#endif +#endif /* HAVE_LOAD_MODULES_DUMMY */  /***********************************************************************   * Load Modules diff --git a/host/lib/utils/thread_priority.cpp b/host/lib/utils/thread_priority.cpp index 40b74f655..18f372ec0 100644 --- a/host/lib/utils/thread_priority.cpp +++ b/host/lib/utils/thread_priority.cpp @@ -44,7 +44,7 @@ static void check_priority_range(float priority){  /***********************************************************************   * Pthread API to set priority   **********************************************************************/ -#if defined(HAVE_PTHREAD_SETSCHEDPARAM) +#ifdef HAVE_PTHREAD_SETSCHEDPARAM      #include <pthread.h>      void uhd::set_thread_priority(float priority, bool realtime){ @@ -67,11 +67,12 @@ static void check_priority_range(float priority){          int ret = pthread_setschedparam(pthread_self(), policy, &sp);          if (ret != 0) throw std::runtime_error("error in pthread_setschedparam");      } +#endif /* HAVE_PTHREAD_SETSCHEDPARAM */  /***********************************************************************   * Windows API to set priority   **********************************************************************/ -#elif defined(HAVE_WIN_SETTHREADPRIORITY) +#ifdef HAVE_WIN_SETTHREADPRIORITY      #include <windows.h>      void uhd::set_thread_priority(float priority, bool realtime){ @@ -93,13 +94,14 @@ static void check_priority_range(float priority){          if (SetThreadPriority(GetCurrentThread(), priorities[pri_index]) == 0)              throw std::runtime_error("error in SetThreadPriority");      } +#endif /* HAVE_WIN_SETTHREADPRIORITY */  /***********************************************************************   * Unimplemented API to set priority   **********************************************************************/ -#else +#ifdef HAVE_LOAD_MODULES_DUMMY      void uhd::set_thread_priority(float, bool){          throw std::runtime_error("set thread priority not implemented");      } -#endif /* HAVE_PTHREAD_SETSCHEDPARAM */ +#endif /* HAVE_LOAD_MODULES_DUMMY */ | 
