Add better portaudio detection with version. Stop linking with portaudiocpp as we...
authorhobbes1069 <hobbes1069@01035d8c-6547-0410-b346-abe4f91aad63>
Mon, 16 Jun 2014 14:27:02 +0000 (14:27 +0000)
committerhobbes1069 <hobbes1069@01035d8c-6547-0410-b346-abe4f91aad63>
Mon, 16 Jun 2014 14:27:02 +0000 (14:27 +0000)
git-svn-id: https://svn.code.sf.net/p/freetel/code@1654 01035d8c-6547-0410-b346-abe4f91aad63

fdmdv2/CMakeLists.txt
fdmdv2/cmake/FindPortaudio.cmake [new file with mode: 0644]

index 9624569f71cea3e27191be769c8eaa0d3d722564..b95b7746d6d6bc81ab96ce9e63dd898c0bcec538 100644 (file)
@@ -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 (file)
index 0000000..158e20e
--- /dev/null
@@ -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 <mail@cynapses.org>
+#
+# 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)
+