From 1c1ad55996816388743d378f0bc821422c0f0c8c Mon Sep 17 00:00:00 2001 From: hobbes1069 Date: Mon, 16 Jun 2014 14:27:02 +0000 Subject: [PATCH] Add better portaudio detection with version. Stop linking with portaudiocpp as we don't seem to use it. git-svn-id: https://svn.code.sf.net/p/freetel/code@1654 01035d8c-6547-0410-b346-abe4f91aad63 --- fdmdv2/CMakeLists.txt | 50 +++++++++------ fdmdv2/cmake/FindPortaudio.cmake | 107 +++++++++++++++++++++++++++++++ 2 files changed, 137 insertions(+), 20 deletions(-) create mode 100644 fdmdv2/cmake/FindPortaudio.cmake diff --git a/fdmdv2/CMakeLists.txt b/fdmdv2/CMakeLists.txt index 9624569f..b95b7746 100644 --- a/fdmdv2/CMakeLists.txt +++ b/fdmdv2/CMakeLists.txt @@ -19,6 +19,9 @@ if("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}") "separate build directory and run cmake from there.") endif("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}") +# Set local module path. +list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake") + project(FreeDV) # @@ -221,31 +224,38 @@ message(STATUS "Threads library flags: ${CMAKE_THREAD_LIBS_INIT}") # if(NOT USE_STATIC_PORTAUDIO) message(STATUS "Looking for portaudio...") - find_library(PORTAUDIO_LIBS NAMES libportaudio-2.dll portaudio HINTS /usr/local/lib/portaudio2) - find_path(PORTAUDIO_INCLUDE_DIR portaudio.h HINTS /usr/local/include/portaudio2) - message(STATUS " portaudio library: ${PORTAUDIO_LIBS}") - message(STATUS " portaudio headers: ${PORTAUDIO_INCLUDE_DIR}") - if(PORTAUDIO_LIBS AND PORTAUDIO_INCLUDE_DIR) - list(APPEND FREEDV_LINK_LIBS ${PORTAUDIO_LIBS}) - include_directories(${PORTAUDIO_INCLUDE_DIR}) - else(PORTAUDIO_LIBS AND PORTAUDIO_INCLUDE_DIR) - message(FATAL_ERROR "portaudio library not found. -On Linux systems try installing: - portaudio-devel (RPM based systems) - libportaudio-dev (DEB based systems) -On Windows it's easiest to use the cmake option: USE_STATIC_PORTAUDIO" - ) - endif(PORTAUDIO_LIBS AND PORTAUDIO_INCLUDE_DIR) +find_package(Portaudio REQUIRED) +if(PORTAUDIO_FOUND AND ${PORTAUDIO_VERSION} EQUAL 19) + list(APPEND FREEDV_LINK_LIBRARIES ${PORTAUDIO_LIBRARIES}) + include_directories(${PORTAUDIO_INCLUDE_DIRS}) +else() + message(WARNING "Portaudio versions other than 19 are known to have issues. You have been warned!") +endif() +# find_library(PORTAUDIO_LIBS NAMES libportaudio-2.dll portaudio HINTS /usr/local/lib/portaudio2) +# find_path(PORTAUDIO_INCLUDE_DIR portaudio.h HINTS /usr/local/include/portaudio2) +# message(STATUS " portaudio library: ${PORTAUDIO_LIBS}") +# message(STATUS " portaudio headers: ${PORTAUDIO_INCLUDE_DIR}") +# if(PORTAUDIO_LIBS AND PORTAUDIO_INCLUDE_DIR) +# list(APPEND FREEDV_LINK_LIBS ${PORTAUDIO_LIBS}) +# include_directories(${PORTAUDIO_INCLUDE_DIR}) +# else(PORTAUDIO_LIBS AND PORTAUDIO_INCLUDE_DIR) +# message(FATAL_ERROR "portaudio library not found. +#On Linux systems try installing: +# portaudio-devel (RPM based systems) +# libportaudio-dev (DEB based systems) +#On Windows it's easiest to use the cmake option: USE_STATIC_PORTAUDIO" +# ) +# endif(PORTAUDIO_LIBS AND PORTAUDIO_INCLUDE_DIR) else(NOT USE_STATIC_PORTAUDIO) message(STATUS "Will attempt static build of portaudio.") include(cmake/BuildPortaudio.cmake) endif(NOT USE_STATIC_PORTAUDIO) # Do we need this? -find_library(PORTAUDIOCPP portaudiocpp) -if(PORTAUDIOCPP) - message(STATUS "portaudiocpp library: ${PORTAUDIOCPP}") - list(APPEND FREEDV_LINK_LIBS ${PORTAUDIOCPP}) -endif(PORTAUDIOCPP) +#find_library(PORTAUDIOCPP portaudiocpp) +#if(PORTAUDIOCPP) +# message(STATUS "portaudiocpp library: ${PORTAUDIOCPP}") +# list(APPEND FREEDV_LINK_LIBS ${PORTAUDIOCPP}) +#endif(PORTAUDIOCPP) # # Hamlib library diff --git a/fdmdv2/cmake/FindPortaudio.cmake b/fdmdv2/cmake/FindPortaudio.cmake new file mode 100644 index 00000000..158e20ee --- /dev/null +++ b/fdmdv2/cmake/FindPortaudio.cmake @@ -0,0 +1,107 @@ +# - Try to find Portaudio +# Once done this will define +# +# PORTAUDIO_FOUND - system has Portaudio +# PORTAUDIO_INCLUDE_DIRS - the Portaudio include directory +# PORTAUDIO_LIBRARIES - Link these to use Portaudio +# PORTAUDIO_DEFINITIONS - Compiler switches required for using Portaudio +# PORTAUDIO_VERSION - Portaudio version +# +# Copyright (c) 2006 Andreas Schneider +# +# Redistribution and use is allowed according to the terms of the New BSD license. +# For details see the accompanying COPYING-CMAKE-SCRIPTS file. +# + + +if (PORTAUDIO_LIBRARIES AND PORTAUDIO_INCLUDE_DIRS) + # in cache already + set(PORTAUDIO_FOUND TRUE) +else (PORTAUDIO_LIBRARIES AND PORTAUDIO_INCLUDE_DIRS) + if (NOT WIN32) + include(FindPkgConfig) + pkg_check_modules(PORTAUDIO2 portaudio-2.0) + endif (NOT WIN32) + + if (PORTAUDIO2_FOUND) + set(PORTAUDIO_INCLUDE_DIRS + ${PORTAUDIO2_INCLUDE_DIRS} + ) + if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") + set(PORTAUDIO_LIBRARIES "${PORTAUDIO2_LIBRARY_DIRS}/lib${PORTAUDIO2_LIBRARIES}.dylib") + else (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") + set(PORTAUDIO_LIBRARIES + ${PORTAUDIO2_LIBRARIES} + ) + endif (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") + set(PORTAUDIO_VERSION + 19 + ) + set(PORTAUDIO_FOUND TRUE) + else (PORTAUDIO2_FOUND) + find_path(PORTAUDIO_INCLUDE_DIR + NAMES + portaudio.h + PATHS + /usr/include + /usr/local/include + /opt/local/include + /sw/include + ) + + find_library(PORTAUDIO_LIBRARY + NAMES + portaudio + PATHS + /usr/lib + /usr/local/lib + /opt/local/lib + /sw/lib + ) + + find_path(PORTAUDIO_LIBRARY_DIR + NAMES + portaudio + PATHS + /usr/lib + /usr/local/lib + /opt/local/lib + /sw/lib + ) + + set(PORTAUDIO_INCLUDE_DIRS + ${PORTAUDIO_INCLUDE_DIR} + ) + set(PORTAUDIO_LIBRARIES + ${PORTAUDIO_LIBRARY} + ) + + set(PORTAUDIO_LIBRARY_DIRS + ${PORTAUDIO_LIBRARY_DIR} + ) + + set(PORTAUDIO_VERSION + 18 + ) + + if (PORTAUDIO_INCLUDE_DIRS AND PORTAUDIO_LIBRARIES) + set(PORTAUDIO_FOUND TRUE) + endif (PORTAUDIO_INCLUDE_DIRS AND PORTAUDIO_LIBRARIES) + + if (PORTAUDIO_FOUND) + if (NOT Portaudio_FIND_QUIETLY) + message(STATUS "Found Portaudio: ${PORTAUDIO_LIBRARIES}") + endif (NOT Portaudio_FIND_QUIETLY) + else (PORTAUDIO_FOUND) + if (Portaudio_FIND_REQUIRED) + message(FATAL_ERROR "Could not find Portaudio") + endif (Portaudio_FIND_REQUIRED) + endif (PORTAUDIO_FOUND) + endif (PORTAUDIO2_FOUND) + + + # show the PORTAUDIO_INCLUDE_DIRS and PORTAUDIO_LIBRARIES variables only in the advanced view + mark_as_advanced(PORTAUDIO_INCLUDE_DIRS PORTAUDIO_LIBRARIES) + +endif (PORTAUDIO_LIBRARIES AND PORTAUDIO_INCLUDE_DIRS) + -- 2.25.1