diff options
| -rw-r--r-- | host/cmake/Modules/CheckCXXSymbolExistsCopy.cmake | 43 | ||||
| -rw-r--r-- | host/cmake/Modules/CheckSymbolExistsCopy.cmake | 125 | ||||
| -rw-r--r-- | host/cmake/Modules/UHDGlobalDefs.cmake | 2 | ||||
| -rw-r--r-- | host/cmake/Modules/UHDUnitTest.cmake | 39 | ||||
| -rw-r--r-- | host/tests/CMakeLists.txt | 3 | 
5 files changed, 116 insertions, 96 deletions
diff --git a/host/cmake/Modules/CheckCXXSymbolExistsCopy.cmake b/host/cmake/Modules/CheckCXXSymbolExistsCopy.cmake index d2cfac55e..2f16ba677 100644 --- a/host/cmake/Modules/CheckCXXSymbolExistsCopy.cmake +++ b/host/cmake/Modules/CheckCXXSymbolExistsCopy.cmake @@ -1,26 +1,33 @@ -# - Check if a symbol exists as a function, variable, or macro in C++ +#.rst: +# CheckCXXSymbolExists +# -------------------- +# +# Check if a symbol exists as a function, variable, or macro in C++ +#  # CHECK_CXX_SYMBOL_EXISTS(<symbol> <files> <variable>)  #  # Check that the <symbol> is available after including given header -# <files> and store the result in a <variable>.  Specify the list -# of files in one argument as a semicolon-separated list. -# CHECK_CXX_SYMBOL_EXISTS() can be used to check in C++ files, as opposed -# to CHECK_SYMBOL_EXISTS(), which works only for C. +# <files> and store the result in a <variable>.  Specify the list of +# files in one argument as a semicolon-separated list. +# CHECK_CXX_SYMBOL_EXISTS() can be used to check in C++ files, as +# opposed to CHECK_SYMBOL_EXISTS(), which works only for C.  #  # If the header files define the symbol as a macro it is considered -# available and assumed to work.  If the header files declare the -# symbol as a function or variable then the symbol must also be -# available for linking.  If the symbol is a type or enum value -# it will not be recognized (consider using CheckTypeSize or -# CheckCSourceCompiles). -# -# The following variables may be set before calling this macro to -# modify the way the check is run: -# -#  CMAKE_REQUIRED_FLAGS = string of compile command line flags -#  CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar) -#  CMAKE_REQUIRED_INCLUDES = list of include directories -#  CMAKE_REQUIRED_LIBRARIES = list of libraries to link +# available and assumed to work.  If the header files declare the symbol +# as a function or variable then the symbol must also be available for +# linking.  If the symbol is a type or enum value it will not be +# recognized (consider using CheckTypeSize or CheckCSourceCompiles). +# +# The following variables may be set before calling this macro to modify +# the way the check is run: +# +# :: +# +#   CMAKE_REQUIRED_FLAGS = string of compile command line flags +#   CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar) +#   CMAKE_REQUIRED_INCLUDES = list of include directories +#   CMAKE_REQUIRED_LIBRARIES = list of libraries to link +#   CMAKE_REQUIRED_QUIET = execute quietly without messages  #=============================================================================  # Copyright 2003-2011 Kitware, Inc. diff --git a/host/cmake/Modules/CheckSymbolExistsCopy.cmake b/host/cmake/Modules/CheckSymbolExistsCopy.cmake index 183b2bbe6..79c5ba78e 100644 --- a/host/cmake/Modules/CheckSymbolExistsCopy.cmake +++ b/host/cmake/Modules/CheckSymbolExistsCopy.cmake @@ -1,26 +1,35 @@ -# - Check if a symbol exists as a function, variable, or macro +#.rst: +# CheckSymbolExists +# ----------------- +# +# Check if a symbol exists as a function, variable, or macro +#  # CHECK_SYMBOL_EXISTS(<symbol> <files> <variable>)  #  # Check that the <symbol> is available after including given header -# <files> and store the result in a <variable>.  Specify the list -# of files in one argument as a semicolon-separated list. +# <files> and store the result in a <variable>.  Specify the list of +# files in one argument as a semicolon-separated list. +# <variable> will be created as an internal cache variable.  #  # If the header files define the symbol as a macro it is considered -# available and assumed to work.  If the header files declare the -# symbol as a function or variable then the symbol must also be -# available for linking.  If the symbol is a type or enum value -# it will not be recognized (consider using CheckTypeSize or -# CheckCSourceCompiles). -# If the check needs to be done in C++, consider using CHECK_CXX_SYMBOL_EXISTS(), -# which does the same as CHECK_SYMBOL_EXISTS(), but in C++. +# available and assumed to work.  If the header files declare the symbol +# as a function or variable then the symbol must also be available for +# linking.  If the symbol is a type or enum value it will not be +# recognized (consider using CheckTypeSize or CheckCSourceCompiles).  If +# the check needs to be done in C++, consider using +# CHECK_CXX_SYMBOL_EXISTS(), which does the same as +# CHECK_SYMBOL_EXISTS(), but in C++. +# +# The following variables may be set before calling this macro to modify +# the way the check is run:  # -# The following variables may be set before calling this macro to -# modify the way the check is run: +# ::  # -#  CMAKE_REQUIRED_FLAGS = string of compile command line flags -#  CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar) -#  CMAKE_REQUIRED_INCLUDES = list of include directories -#  CMAKE_REQUIRED_LIBRARIES = list of libraries to link +#   CMAKE_REQUIRED_FLAGS = string of compile command line flags +#   CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar) +#   CMAKE_REQUIRED_INCLUDES = list of include directories +#   CMAKE_REQUIRED_LIBRARIES = list of libraries to link +#   CMAKE_REQUIRED_QUIET = execute quietly without messages  #=============================================================================  # Copyright 2003-2011 Kitware, Inc. @@ -35,62 +44,70 @@  # (To distribute this file outside of CMake, substitute the full  #  License text for the above reference.) -MACRO(CHECK_SYMBOL_EXISTS SYMBOL FILES VARIABLE) + + +macro(CHECK_SYMBOL_EXISTS SYMBOL FILES VARIABLE)    _CHECK_SYMBOL_EXISTS("${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckSymbolExists.c" "${SYMBOL}" "${FILES}" "${VARIABLE}" ) -ENDMACRO(CHECK_SYMBOL_EXISTS) +endmacro() -MACRO(_CHECK_SYMBOL_EXISTS SOURCEFILE SYMBOL FILES VARIABLE) -  IF("${VARIABLE}" MATCHES "^${VARIABLE}$") -    SET(CMAKE_CONFIGURABLE_FILE_CONTENT "/* */\n") -    SET(MACRO_CHECK_SYMBOL_EXISTS_FLAGS ${CMAKE_REQUIRED_FLAGS}) -    IF(CMAKE_REQUIRED_LIBRARIES) -      SET(CHECK_SYMBOL_EXISTS_LIBS -        "-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}") -    ELSE(CMAKE_REQUIRED_LIBRARIES) -      SET(CHECK_SYMBOL_EXISTS_LIBS) -    ENDIF(CMAKE_REQUIRED_LIBRARIES) -    IF(CMAKE_REQUIRED_INCLUDES) -      SET(CMAKE_SYMBOL_EXISTS_INCLUDES +macro(_CHECK_SYMBOL_EXISTS SOURCEFILE SYMBOL FILES VARIABLE) +  if(NOT DEFINED "${VARIABLE}" OR "x${${VARIABLE}}" STREQUAL "x${VARIABLE}") +    set(CMAKE_CONFIGURABLE_FILE_CONTENT "/* */\n") +    set(MACRO_CHECK_SYMBOL_EXISTS_FLAGS ${CMAKE_REQUIRED_FLAGS}) +    if(CMAKE_REQUIRED_LIBRARIES) +      set(CHECK_SYMBOL_EXISTS_LIBS +        LINK_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES}) +    else() +      set(CHECK_SYMBOL_EXISTS_LIBS) +    endif() +    if(CMAKE_REQUIRED_INCLUDES) +      set(CMAKE_SYMBOL_EXISTS_INCLUDES          "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}") -    ELSE(CMAKE_REQUIRED_INCLUDES) -      SET(CMAKE_SYMBOL_EXISTS_INCLUDES) -    ENDIF(CMAKE_REQUIRED_INCLUDES) -    FOREACH(FILE ${FILES}) -      SET(CMAKE_CONFIGURABLE_FILE_CONTENT +    else() +      set(CMAKE_SYMBOL_EXISTS_INCLUDES) +    endif() +    foreach(FILE ${FILES}) +      set(CMAKE_CONFIGURABLE_FILE_CONTENT          "${CMAKE_CONFIGURABLE_FILE_CONTENT}#include <${FILE}>\n") -    ENDFOREACH(FILE) -    SET(CMAKE_CONFIGURABLE_FILE_CONTENT -      "${CMAKE_CONFIGURABLE_FILE_CONTENT}\nvoid cmakeRequireSymbol(int dummy,...){(void)dummy;}\nint main()\n{\n#ifndef ${SYMBOL}\n  cmakeRequireSymbol(0,&${SYMBOL});\n#endif\n  return 0;\n}\n") +    endforeach() +    set(CMAKE_CONFIGURABLE_FILE_CONTENT +      "${CMAKE_CONFIGURABLE_FILE_CONTENT}\nint main(int argc, char** argv)\n{\n  (void)argv;\n#ifndef ${SYMBOL}\n  return ((int*)(&${SYMBOL}))[argc];\n#else\n  (void)argc;\n  return 0;\n#endif\n}\n") -    CONFIGURE_FILE("${CMAKE_ROOT}/Modules/CMakeConfigurableFile.in" -      "${SOURCEFILE}" @ONLY IMMEDIATE) +    configure_file("${CMAKE_ROOT}/Modules/CMakeConfigurableFile.in" +      "${SOURCEFILE}" @ONLY) -    MESSAGE(STATUS "Looking for ${SYMBOL}") -    TRY_COMPILE(${VARIABLE} +    if(NOT CMAKE_REQUIRED_QUIET) +      message(STATUS "Looking for ${SYMBOL}") +    endif() +    try_compile(${VARIABLE}        ${CMAKE_BINARY_DIR}        "${SOURCEFILE}"        COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} +      ${CHECK_SYMBOL_EXISTS_LIBS}        CMAKE_FLAGS        -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_SYMBOL_EXISTS_FLAGS} -      "${CHECK_SYMBOL_EXISTS_LIBS}"        "${CMAKE_SYMBOL_EXISTS_INCLUDES}"        OUTPUT_VARIABLE OUTPUT) -    IF(${VARIABLE}) -      MESSAGE(STATUS "Looking for ${SYMBOL} - found") -      SET(${VARIABLE} 1 CACHE INTERNAL "Have symbol ${SYMBOL}") -      FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log +    if(${VARIABLE}) +      if(NOT CMAKE_REQUIRED_QUIET) +        message(STATUS "Looking for ${SYMBOL} - found") +      endif() +      set(${VARIABLE} 1 CACHE INTERNAL "Have symbol ${SYMBOL}") +      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log          "Determining if the ${SYMBOL} "          "exist passed with the following output:\n"          "${OUTPUT}\nFile ${SOURCEFILE}:\n"          "${CMAKE_CONFIGURABLE_FILE_CONTENT}\n") -    ELSE(${VARIABLE}) -      MESSAGE(STATUS "Looking for ${SYMBOL} - not found.") -      SET(${VARIABLE} "" CACHE INTERNAL "Have symbol ${SYMBOL}") -      FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log +    else() +      if(NOT CMAKE_REQUIRED_QUIET) +        message(STATUS "Looking for ${SYMBOL} - not found") +      endif() +      set(${VARIABLE} "" CACHE INTERNAL "Have symbol ${SYMBOL}") +      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log          "Determining if the ${SYMBOL} "          "exist failed with the following output:\n"          "${OUTPUT}\nFile ${SOURCEFILE}:\n"          "${CMAKE_CONFIGURABLE_FILE_CONTENT}\n") -    ENDIF(${VARIABLE}) -  ENDIF("${VARIABLE}" MATCHES "^${VARIABLE}$") -ENDMACRO(_CHECK_SYMBOL_EXISTS) +    endif() +  endif() +endmacro() diff --git a/host/cmake/Modules/UHDGlobalDefs.cmake b/host/cmake/Modules/UHDGlobalDefs.cmake index 78a69d46d..58c0b1287 100644 --- a/host/cmake/Modules/UHDGlobalDefs.cmake +++ b/host/cmake/Modules/UHDGlobalDefs.cmake @@ -20,7 +20,7 @@  INCLUDE(CheckCXXSymbolExistsCopy)  ## Check for std::log2 -CHECK_CXX_SYMBOL_EXISTS("log2" "cmath" HAVE_LOG2) +CHECK_CXX_SYMBOL_EXISTS(log2 cmath HAVE_LOG2)  ## Macros for the version number  IF(UHD_VERSION_DEVEL) diff --git a/host/cmake/Modules/UHDUnitTest.cmake b/host/cmake/Modules/UHDUnitTest.cmake index 76fec14b8..f3e848906 100644 --- a/host/cmake/Modules/UHDUnitTest.cmake +++ b/host/cmake/Modules/UHDUnitTest.cmake @@ -1,5 +1,5 @@  # -# Copyright 2010-2012 Ettus Research LLC +# Copyright 2010-2012,2015 Ettus Research LLC  #  # This program is free software: you can redistribute it and/or modify  # it under the terms of the GNU General Public License as published by @@ -18,31 +18,30 @@  ########################################################################  # Add a unit test and setup the environment for a unit test.  # Takes the same arguments as the ADD_TEST function. -# -# Before calling set the following variables: -# UHD_TEST_TARGET_DEPS  - built targets for the library path -# UHD_TEST_LIBRARY_DIRS - directories for the library path  ########################################################################  function(UHD_ADD_TEST test_name)          #Ensure that the build exe also appears in the PATH.          list(APPEND UHD_TEST_TARGET_DEPS ${ARGN}) -        #In the land of windows, all libraries must be in the PATH. -        #Since the dependent libraries are not yet installed, -        #we must manually set them in the PATH to run tests. -        #The following appends the path of a target dependency. -        foreach(target ${UHD_TEST_TARGET_DEPS}) -            get_target_property(location ${target} LOCATION) -            if(location) -                get_filename_component(path ${location} PATH) -                string(REGEX REPLACE "\\$\\(.*\\)" ${CMAKE_BUILD_TYPE} path ${path}) -                list(APPEND UHD_TEST_LIBRARY_DIRS ${path}) -            endif(location) -        endforeach(target) - -    file(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR} srcdir) -    file(TO_NATIVE_PATH "${UHD_TEST_LIBRARY_DIRS}" libpath) #ok to use on dir list? +        #We need to put the directory with the .so/.dll file in the +        #appropriate environment variable, as well as the test +        #directory itself. +        if(WIN32) +            set(UHD_TEST_LIBRARY_DIRS +                "${Boost_LIBRARY_DIRS}" +                "${CMAKE_BINARY_DIR}/lib/${CMAKE_BUILD_TYPE}" +                "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}" +            ) +        else() +            set(UHD_TEST_LIBRARY_DIRS +                "${Boost_LIBRARY_DIRS}" +                "${CMAKE_BINARY_DIR}/lib" +                "${CMAKE_CURRENT_BINARY_DIR}" +            ) +        endif(WIN32) + +    file(TO_NATIVE_PATH "${UHD_TEST_LIBRARY_DIRS}" libpath)      #http://www.cmake.org/pipermail/cmake/2009-May/029464.html      #Replaced this add test + set environs code with the shell script generation. diff --git a/host/tests/CMakeLists.txt b/host/tests/CMakeLists.txt index e41d61bde..8b12c961f 100644 --- a/host/tests/CMakeLists.txt +++ b/host/tests/CMakeLists.txt @@ -50,9 +50,6 @@ SET(test_sources  #turn each test cpp file into an executable with an int main() function  ADD_DEFINITIONS(-DBOOST_TEST_DYN_LINK -DBOOST_TEST_MAIN) -SET(UHD_TEST_TARGET_DEPS uhd) -SET(UHD_TEST_LIBRARY_DIRS ${Boost_LIBRARY_DIRS}) -  IF(ENABLE_C_API)      LIST(APPEND test_sources          eeprom_c_test.c  | 
