Update cmake configuration including building static builds of most dependencies...
authorhobbes1069 <hobbes1069@01035d8c-6547-0410-b346-abe4f91aad63>
Wed, 24 Apr 2013 19:34:37 +0000 (19:34 +0000)
committerhobbes1069 <hobbes1069@01035d8c-6547-0410-b346-abe4f91aad63>
Wed, 24 Apr 2013 19:34:37 +0000 (19:34 +0000)
git-svn-id: https://svn.code.sf.net/p/freetel/code@1235 01035d8c-6547-0410-b346-abe4f91aad63

codec2-dev/CMakeLists.txt
codec2-dev/cmake/config.h.in [new file with mode: 0644]
codec2-dev/src/CMakeLists.txt
fdmdv2/CMakeLists.txt
fdmdv2/cmake/BuildLibctb.cmake [new file with mode: 0644]
fdmdv2/cmake/BuildPortaudio.cmake [new file with mode: 0644]
fdmdv2/cmake/BuildSamplerate.cmake [new file with mode: 0644]
fdmdv2/cmake/BuildSndfile.cmake [new file with mode: 0644]
fdmdv2/cmake/BuildSox.cmake [new file with mode: 0644]
fdmdv2/cmake/config.h.in
fdmdv2/src/CMakeLists.txt

index 729b09cc247928482483b62070282a452b7cf8ac..411930c7fbd2303879c73ff02b9110272a579725 100644 (file)
@@ -1,4 +1,4 @@
-cmake_minimum_required (VERSION 2.8)
+cmake_minimum_required(VERSION 2.8)
 
 # Prevent in-source builds
 set(CMAKE_DISABLE_SOURCE_CHANGES ON)
@@ -24,38 +24,56 @@ endif()
 
 message(STATUS "codec2 version: ${PROJECT_VERSION}")
 
+#
+# Find the svn revision if this is a working copy.
+# WORK IN PROGRESS
+# Works ok if it is a working copy but errors out if not.
+#
+#find_package(Subversion)
+#if(Subversion_FOUND)
+#      Subversion_WC_INFO(${CMAKE_CURRENT_SOURCE_DIR} CODEC2)
+#      message(STATUS "codec2 svn revision: ${CODEC2_WC_REVISION}")
+#else(SUBVERSION_FOUND)
+#      message(WARNING "Subversion not found. Can not determine svn revision.")
+#endif(SUBVERSION_FOUND)
+
 # Set default C++ flags.
 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -Wall -O3 -g")
 
 # Build shared libraries by default
-set(BUILD_SHARED_LIBS TRUE)
+set(BUILD_SHARED_LIBS TRUE CACHE BOOL "Build shared library. Set to FALSE for static library.")
 
 
 #
 # Find some standard headers and functions.
 # Should we error out if one is not available?
-# Do the results need to be written to a config.h?
 #
-find_library(LIBM m )
-if(LIBM)
-       set(CMAKE_REQUIRED_INCLUDES math.h)
-       set(CMAKE_REQUIRED_LIBRARIES m)
-endif(LIBM)
+
+# Math library is automatic on MSVC
+if(UNIX)
+        set(CMAKE_REQUIRED_INCLUDES math.h)
+        set(CMAKE_REQUIRED_LIBRARIES m)
+endif(UNIX)
 
 include(CheckIncludeFiles)
 check_include_files("stdlib.h" HAVE_STDLIB_H)
 check_include_files("string.h" HAVE_STRING_H)
 
 include(CheckFunctionExists)
-check_function_exists(floor HAVE_FLOOR)
-check_function_exists(ceil  HAVE_CEIL)
-check_function_exists(pow   HAVE_POW)
-check_function_exists(sqrt  HAVE_SQRT)
-check_function_exists(sin   HAVE_SIN)
-check_function_exists(cos   HAVE_COS)
-check_function_exists(atan2 HAVE_ATAN2)
-check_function_exists(log10 HAVE_LOG10)
+check_function_exists(floor  HAVE_FLOOR)
+check_function_exists(ceil   HAVE_CEIL)
+check_function_exists(pow    HAVE_POW)
+check_function_exists(sqrt   HAVE_SQRT)
+check_function_exists(sin    HAVE_SIN)
+check_function_exists(cos    HAVE_COS)
+check_function_exists(atan2  HAVE_ATAN2)
+check_function_exists(log10  HAVE_LOG10)
+check_function_exists(round  HAVE_ROUND)
+check_function_exists(getopt HAVE_GETOPT)
 
+configure_file ("${PROJECT_SOURCE_DIR}/cmake/config.h.in"
+                "${PROJECT_BINARY_DIR}/config.h" )
+include_directories(${PROJECT_BINARY_DIR})
 
 #
 # codec2 library
@@ -72,5 +90,24 @@ if(INSTALL_EXAMPLES)
 endif()
 
 #
-# Cpack configuration to go here...
+# Cpack NSIS configuration for Windows. EXPERIMENTAL!!!
 #
+if(WIN32)
+       include(InstallRequiredSystemLibraries)
+       set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Next-Generation Digital Voice for Two-Way Radio")
+       set(CPACK_PACKAGE_VENDOR "CMake")
+       set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README")
+       set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/COPYING")
+       set(CPACK_PACKAGE_VERSION_MAJOR ${PACKAGE_VERSION_MAJOR})
+       set(CPACK_PACKAGE_VERSION_MINOR ${PACKAGE_VERSION_MINOR})
+       set(CPACK_PACKAGE_VERSION_PATCH ${PACKAGE_VERSION_PATCH})
+       set(CPACK_PACKAGE_INSTALL_DIRECTORY "CMake ${CMake_VERSION_MAJOR}.${CMake_VERSION_MINOR}")
+       # There is a bug in NSI that does not handle full unix paths properly. Make
+       # sure there is at least one set of four (4) backlasshes.
+       #set(CPACK_PACKAGE_ICON "${CMake_SOURCE_DIR}/Utilities/Release\\\\InstallIcon.bmp")
+       set(CPACK_NSIS_INSTALLED_ICON_NAME "bin\\\\MyExecutable.exe")
+       set(CPACK_NSIS_DISPLAY_NAME "${CPACK_PACKAGE_INSTALL_DIRECTORY} Codec2")
+       set(CPACK_NSIS_URL_INFO_ABOUT "http:\\\\\\\\codec2.org")
+       set(CPACK_NSIS_MODIFY_PATH ON)
+       include(CPack)
+endif(WIN32)
diff --git a/codec2-dev/cmake/config.h.in b/codec2-dev/cmake/config.h.in
new file mode 100644 (file)
index 0000000..f5de525
--- /dev/null
@@ -0,0 +1,21 @@
+/*--------------------------------------------------------------------------
+ ** This file is autogenerated from config.h.in 
+ ** during the cmake configuration of your project. If you need to make changes
+ ** edit the original file NOT THIS FILE.
+ ** --------------------------------------------------------------------------*/
+#ifndef _CONFIGURATION_HEADER_GUARD_H_
+#define _CONFIGURATION_HEADER_GUARD_H_
+
+#define SIZEOF_INT @SIZEOF_INT@
+#cmakedefine HAVE_STDLIB_H @HAVE_STDLIB_H@
+#cmakedefine HAVE_STRING_H @HAVE_STRING_H@
+#cmakedefine HAVE_FLOOR    @HAVE_FLOOR@
+#cmakedefine HAVE_CEIL     @HAVE_CEIL@
+#cmakedefine HAVE_MEMSET   @HAVE_MEMSET@
+#cmakedefine HAVE_POW      @HAVE_POW@
+#cmakedefine HAVE_SQRT     @HAVE_SQRT@
+#cmakedefine HAVE_SIN      @HAVE_SIN@
+#cmakedefine HAVE_COS      @HAVE_COS@
+#cmakedefine HAVE_ATAN2    @HAVE_ATAN2@
+#cmakedefine HAVE_LOG10    @HAVE_LOG10@
+#endif
index fdf09e3f93d57066ceb5b200c1e5db31d320e077..9b926e30f4a4bab0ce1144fef19a318071bd579b 100644 (file)
@@ -1,3 +1,164 @@
+#
+# Generated sources
+#
+
+set(D ${CMAKE_CURRENT_SOURCE_DIR}/codebook)
+
+# lsp quantisers
+
+set(CODEBOOKS
+       ${D}/lsp1.txt
+       ${D}/lsp2.txt
+       ${D}/lsp3.txt
+       ${D}/lsp4.txt
+       ${D}/lsp5.txt
+       ${D}/lsp6.txt
+       ${D}/lsp7.txt
+       ${D}/lsp8.txt
+       ${D}/lsp9.txt
+       ${D}/lsp10.txt
+)
+
+# lspd quantisers
+
+set(CODEBOOKSD
+       ${D}/dlsp1.txt
+       ${D}/dlsp2.txt
+       ${D}/dlsp3.txt
+       ${D}/dlsp4.txt
+       ${D}/dlsp5.txt
+       ${D}/dlsp6.txt
+       ${D}/dlsp7.txt
+       ${D}/dlsp8.txt
+       ${D}/dlsp9.txt
+       ${D}/dlsp10.txt
+)
+
+# lspd VQ quantisers
+
+set(CODEBOOKSVQ
+       ${D}/lsp1.txt
+       ${D}/lsp2.txt
+       ${D}/lsp3.txt
+       ${D}/lsp4.txt
+       ${CMAKE_SOURCE_DIR}/unittest/lsp45678910.txt
+)
+
+set(CODEBOOKSJND
+       ${D}/lsp1.txt
+       ${D}/lsp2.txt
+       ${D}/lsp3.txt
+       ${D}/lsp4.txt
+       ${CMAKE_SOURCE_DIR}/unittest/lspjnd5-10.txt
+)
+
+set(CODEBOOKSDT
+       ${D}/lspdt1.txt
+       ${D}/lspdt2.txt
+       ${D}/lspdt3.txt
+       ${D}/lspdt4.txt
+       ${D}/lspdt5.txt
+       ${D}/lspdt6.txt
+       ${D}/lspdt7.txt
+       ${D}/lspdt8.txt
+       ${D}/lspdt9.txt
+       ${D}/lspdt10.txt
+)
+
+set(CODEBOOKSJVM
+       ${D}/lspjvm1.txt
+       ${D}/lspjvm2.txt
+       ${D}/lspjvm3.txt
+)
+
+set(CODEBOOKSVQANSSI
+       ${D}/lspvqanssi1.txt
+       ${D}/lspvqanssi2.txt
+       ${D}/lspvqanssi3.txt
+       ${D}/lspvqanssi4.txt
+)
+
+set(CODEBOOKSGE        ${D}/gecb.txt)
+
+# when crosscompiling import the executable targets from a file
+if(CMAKE_CROSSCOMPILING)
+       SET(IMPORT_EXECUTABLES "IMPORTFILE-NOTFOUND" CACHE FILEPATH "Point it to the export file from a native build")
+       INCLUDE(${IMPORT_EXECUTABLES})
+endif(CMAKE_CROSSCOMPILING)
+
+# Build code generator binaries. These do not get installed.
+if(NOT CMAKE_CROSSCOMPILING)
+       add_executable(generate_codebook generate_codebook.c)
+       target_link_libraries(generate_codebook ${CMAKE_REQUIRED_LIBRARIES})
+
+       add_executable(genlspdtcb genlspdtcb.c)
+       target_link_libraries(genlspdtcb ${CMAKE_REQUIRED_LIBRARIES})
+endif(NOT CMAKE_CROSSCOMPILING)
+
+# codebook.c
+add_custom_command(
+       OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/codebook.c
+       COMMAND generate_codebook lsp_cb ${CODEBOOKS} > ${CMAKE_CURRENT_BINARY_DIR}/codebook.c
+       DEPENDS generate_codebook ${CODEBOOKS}
+)
+
+# codebookd.c
+add_custom_command(
+       OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/codebookd.c
+       COMMAND generate_codebook lsp_cbd ${CODEBOOKSD} > ${CMAKE_CURRENT_BINARY_DIR}/codebookd.c
+       DEPENDS generate_codebook ${CODEBOOKSD}
+)
+
+# codebookdt.c
+add_custom_command(
+       OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/codebookdt.c
+       COMMAND generate_codebook lsp_cbdt ${CODEBOOKSDT} > ${CMAKE_CURRENT_BINARY_DIR}/codebookdt.c
+       DEPENDS generate_codebook ${CODEBOOKSDT}
+)
+
+# codebookvq.c
+add_custom_command(
+       OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/codebookvq.c
+       COMMAND generate_codebook lsp_cbvq ${CODEBOOKSVQ} > ${CMAKE_CURRENT_BINARY_DIR}/codebookvq.c
+       DEPENDS generate_codebook ${CODEBOOKSVQ}
+)
+
+# codebookjnd.c
+add_custom_command(
+       OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/codebookjnd.c
+       COMMAND generate_codebook lsp_cbjnd ${CODEBOOKSJND} > ${CMAKE_CURRENT_BINARY_DIR}/codebookjnd.c
+       DEPENDS generate_codebook ${CODEBOOKSJND}
+)
+
+# codebookjvm.c
+add_custom_command(
+       OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/codebookjvm.c
+       COMMAND generate_codebook lsp_cbjvm ${CODEBOOKSJVM} > ${CMAKE_CURRENT_BINARY_DIR}/codebookjvm.c
+       DEPENDS generate_codebook ${CODEBOOKSJVM}
+)
+
+# codebookvqanssi.c
+add_custom_command(
+       OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/codebookvqanssi.c
+       COMMAND generate_codebook lsp_cbvqanssi ${CODEBOOKSVQANSSI} > ${CMAKE_CURRENT_BINARY_DIR}/codebookvqanssi.c
+       DEPENDS generate_codebook ${CODEBOOKSVQANSSI}
+)
+
+# codebookge.c
+add_custom_command(
+       OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/codebookge.c
+       COMMAND generate_codebook ge_cb ${CODEBOOKSGE} > ${CMAKE_CURRENT_BINARY_DIR}/codebookge.c
+       DEPENDS generate_codebook ${CODEBOOKSGE}
+)
+
+# Make native builds available for cross-compiling.
+export(TARGETS generate_codebook genlspdtcb
+       FILE ${CMAKE_BINARY_DIR}/ImportExecutables.cmake)
+
+#
+# codec2 library sources
+#
+
 set(CODEC2_SRCS
        dump.c
        lpc.c
@@ -21,9 +182,11 @@ set(CODEC2_SRCS
        codebookvqanssi.c
        codebookdt.c
        codebookge.c
+       golay23.c
 )
 
 add_library(codec2 ${CODEC2_SRCS})
+include_directories(${CMAKE_CURRENT_SOURCE_DIR})
 target_link_libraries(codec2 ${CMAKE_REQUIRED_LIBRARIES})
 set_target_properties(codec2 PROPERTIES SOVERSION ${SOVERSION})
 
@@ -31,7 +194,6 @@ set(CODEC2_PUBLIC_HEADERS
        codec2.h
        codec2_fdmdv.h
        codec2_fifo.h
-       comp.h
        golay23.h
 )
 
index 4c0bcfab948997434881a706487b4d916dafaae6..f7ab164851e00c9be56304a0af17d77cbc8a0a72 100644 (file)
@@ -19,12 +19,38 @@ if(VERSION_PATCH)
        set(VERSION ${VERSION}.${VERSION_PATCH})
 endif(VERSION_PATCH)
 
+set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)
+
 # Work around for not using a svn working copy.
 add_definitions(-DSVN_REVISION="1234")
 
 # Set default build flags.
 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
 
+#
+# Setup cmake options
+#
+set(USE_STATIC_DEPS FALSE CACHE BOOL 
+       "Download and build static libraries instead of system libraries.")
+set(USE_STATIC_PORTAUDIO FALSE CACHE BOOL 
+       "Download and build static portaudio instead of the system library.")
+set(USE_STATIC_SNDFILE FALSE CACHE BOOL
+       "Download and build static sndfile instead of the system library.")
+set(USE_STATIC_SAMPLERATE FALSE CACHE BOOL
+       "Download and build static samplerate instead of the system library.")
+set(USE_STATIC_SOX FALSE CACHE BOOL
+       "Download and build static sox instead of the system library.")
+set(USE_STATIC_LIBCTB FALSE CACHE BOOL
+       "Download and build static libctb instead of the system library.")
+if(USE_STATIC_DEPS)
+       set(USE_STATIC_PORTAUDIO TRUE FORCE)
+       set(USE_STATIC_SNDFILE TRUE FORCE)
+       set(USE_STATIC_SAMPLERATE TRUE FORCE)
+       set(USE_STATIC_SOX TRUE FORCE)
+       set(USE_STATIC_LIBCTB TRUE FORCE)
+endif(USE_STATIC_DEPS)
+set(FREEDV_STATIC_LIBS "")
+
 # Setup empty list to add to
 set(FREEDV_LINK_LIBS "")
 
@@ -64,7 +90,7 @@ endif(UNIX)
 
 # Find some standard headers and functions.
 include(CheckIncludeFiles)
-check_include_files("limits.h" HAVE_STDINT_H)
+check_include_files("limits.h" HAVE_LIMITS_H)
 check_include_files("stddef.h" HAVE_STDDEF_H)
 check_include_files("stdlib.h" HAVE_STDLIB_H)
 check_include_files("string.h" HAVE_STRING_H)
@@ -82,57 +108,78 @@ configure_file ("${PROJECT_SOURCE_DIR}/cmake/config.h.in"
                 "${PROJECT_BINARY_DIR}/config.h" )
 include_directories(${PROJECT_BINARY_DIR})
 
-# Find portaudio Library
-message(STATUS "Looking for portaudio...")
-find_library(PORTAUDIO portaudio)
-if(PORTAUDIO)
-       list(APPEND FREEDV_LINK_LIBS ${PORTAUDIO})
-       message(STATUS "  portaudio found: ${PORTAUDIO}")
-else(PORTAUDIO)
-       message(FATAL_ERROR "portaudio library not found.")
-endif(PORTAUDIO)
+# Find or build portaudio Library
+if(NOT USE_STATIC_PORTAUDIO)
+       message(STATUS "Looking for portaudio...")
+       find_library(PORTAUDIO portaudio)
+       if(PORTAUDIO)
+               list(APPEND FREEDV_LINK_LIBS ${PORTAUDIO})
+               message(STATUS "  portaudio found: ${PORTAUDIO}")
+       else(PORTAUDIO)
+               message(FATAL_ERROR "portaudio library not found.")
+       endif(PORTAUDIO)
+else(NOT USE_STATIC_PORTAUDIO)
+       message(STATUS "Will attempt static build of portaudio.")
+       include(cmake/BuildPortaudio.cmake)
+       list(APPEND FREEDV_LINK_LIBS ${PORTAUDIO_LIBRARIES})
+       include_directories(${PORTAUDIO_INCLUDES})
+endif(NOT USE_STATIC_PORTAUDIO)
 # Do we need this?
-find_library(PORTAUDIOCPP portaudiocpp)
+#find_library(PORTAUDIOCPP portaudiocpp)
 
 # Pthread Library
-message(STATUS "Looking for pthread...")
-find_library(PTHREAD pthread)
-if(PTHREAD)
-       # Don't need to add linker flag, wx-config adds it already.
-       message(STATUS "  pthread found: ${PTHREAD}")
-else(PTHREAD)
-       message(FATAL_ERROR "pthread library not found.")
-endif(PTHREAD)
+find_package(Threads REQUIRED)
+message(STATUS "Threads library flags: ${CMAKE_THREAD_LIBS_INIT}")
 
 # Samplerate Library
-message(STATUS "Looking for samplerate...")
-find_library(LIBSAMPLERATE samplerate)
-if(LIBSAMPLERATE)
-       list(APPEND FREEDV_LINK_LIBS ${LIBSAMPLERATE})
-       message(STATUS "  samplerate found: ${LIBSAMPLERATE}")
-else(LIBSTAMPLERATE)
-       message(FATAL_ERROR "samplerate library not found.")
-endif(LIBSAMPLERATE)
-
+if(NOT USE_STATIC_SAMPLERATE)
+       message(STATUS "Looking for samplerate...")
+       find_library(LIBSAMPLERATE samplerate)
+       if(LIBSAMPLERATE)
+               list(APPEND FREEDV_LINK_LIBS ${LIBSAMPLERATE})
+               message(STATUS "  samplerate found: ${LIBSAMPLERATE}")
+       else(LIBSTAMPLERATE)
+               message(FATAL_ERROR "samplerate library not found.")
+       endif(LIBSAMPLERATE)
+else(NOT USE_STATIC_SAMPLERATE)
+       message(STATUS "Will attempt static build of samplerate.")
+       include(cmake/BuildSamplerate.cmake)
+       list(APPEND FREEDV_LINK_LIBS ${SAMPLERATE_LIBRARIES})
+       include_directories(${SAMPLERATE_INCLUDES})
+endif(NOT USE_STATIC_SAMPLERATE)
+       
 # sndfile Library
-message(STATUS "Looking for sndfile...")
-find_library(LIBSNDFILE sndfile)
-if(LIBSNDFILE)
-       list(APPEND FREEDV_LINK_LIBS ${LIBSNDFILE})
-       message(STATUS "  sndfile found: ${LIBSNDFILE}")
-else(LIBSNDFILE)
-       message(FATAL_ERROR "sndfile library not found.")
-endif(LIBSNDFILE)
+if(NOT USE_STATIC_SNDFILE)
+       message(STATUS "Looking for sndfile...")
+       find_library(LIBSNDFILE sndfile)
+       if(LIBSNDFILE)
+               list(APPEND FREEDV_LINK_LIBS ${LIBSNDFILE})
+               message(STATUS "  sndfile found: ${LIBSNDFILE}")
+       else(LIBSNDFILE)
+               message(FATAL_ERROR "sndfile library not found.")
+       endif(LIBSNDFILE)
+else(NOT USE_STATIC_SNDFILE)
+       message(STATUS "Will attempt static build of sndfile.")
+       include(cmake/BuildSndfile.cmake)
+       list(APPEND FREEDV_LINK_LIBS ${SNDFILE_LIBRARIES})
+       include_directories(${SNDFILE_INCLUDES})
+endif(NOT USE_STATIC_SNDFILE)
 
 # Find sox library
-message(STATUS "Looking for sox...")
-find_library(LIBSOX sox)
-if(LIBSOX)
-       list(APPEND FREEDV_LINK_LIBS ${LIBSOX})
-       message(STATUS "  sox found: ${LIBSOX}")
-else(LIBSOX)
-       message(FATAL_ERROR "sox library not found.")
-endif(LIBSOX)
+if(NOT USE_STATIC_SOX)
+       message(STATUS "Looking for sox...")
+       find_library(LIBSOX sox)
+       if(LIBSOX)
+               list(APPEND FREEDV_LINK_LIBS ${LIBSOX})
+               message(STATUS "  sox found: ${LIBSOX}")
+       else(LIBSOX)
+               message(FATAL_ERROR "sox library not found.")
+       endif(LIBSOX)
+else(NOT USE_STATIC_SOX)
+       include(cmake/BuildSox.cmake)
+       list(APPEND FREEDV_LINK_LIBS ${SOX_LIBRARIES})
+       include_directories(${SOX_INCLUDES})
+endif(NOT USE_STATIC_SOX)
 
 # Find wxWidgets
 set(WXCONFIG "" CACHE FILEPATH "Location of wx-config binary.")
@@ -182,31 +229,33 @@ list(APPEND FREEDV_LINK_LIBS ${CODEC2_LIBRARY})
 #
 # Find libctb. Assumes version 0.16
 #
-message(STATUS "Looking for libctb...")
-find_path(LIBCTB_INCLUDE_DIR ctb.h
-          PATH_SUFFIXES ctb-0.16
-         )
-find_library(LIBCTB_LIBRARY NAMES ctb ctb-0.16)
-set(LIBCTB_LIBRARIES ${LIBCTB_LIBRARY})
-set(LIBCTB_INCLUDE_DIRS ${LIBCTB_INCLUDE_DIR})
-message(STATUS "  libctb library: ${LIBCTB_LIBRARIES}")
-message(STATUS "  libctb headers: ${LIBCTB_INCLUDE_DIRS}")
-# Check to make sure linking with libctb works.
-include(CheckCXXSourceCompiles)
-set(CMAKE_REQUIRED_LIBRARIES ${LIBCTB_LIBRARIES})
-check_cxx_source_compiles("
-       #include <ctb-0.16/ctb.h>
-       int main() {
-       ctb::SerialPort*        m_serialPort;
-       m_serialPort = new ctb::SerialPort();
-       };"
-       LIBCTB_LINKS)
-if(NOT LIBCTB_LINKS)
-       message(FATAL_ERROR "Linking libctb failed.")
-endif()
+if(NOT USE_STATIC_LIBCTB)
+       message(STATUS "Looking for libctb...")
+       find_path(LIBCTB_INCLUDE_DIR ctb.h
+                 PATH_SUFFIXES ctb-0.16
+                )
+       find_library(LIBCTB_LIBRARY NAMES ctb ctb-0.16)
+       message(STATUS "  libctb library: ${LIBCTB_LIBRARY}")
+       message(STATUS "  libctb headers: ${LIBCTB_INCLUDE_DIR}")
+       set(CMAKE_REQUIRED_LIBRARIES ${LIBCTB_LIBRARY})
+       # Check to make sure linking with libctb works.
+       include(CheckCXXSourceCompiles)
+       check_cxx_source_compiles("
+               #include <ctb-0.16/ctb.h>
+               int main() {
+               ctb::SerialPort*        m_serialPort;
+               m_serialPort = new ctb::SerialPort();
+               };"
+               LIBCTB_LINKS)
+       if(NOT LIBCTB_LINKS)
+               message(FATAL_ERROR "Linking libctb failed.")
+       endif(NOT LIBCTB_LINKS)
+else(NOT USE_STATIC_LIBCTB)
+       include(cmake/BuildLibctb.cmake)
+endif(NOT USE_STATIC_LIBCTB)
 
-include_directories(${LIBCTB_INCLUDE_DIRS})
-list(APPEND FREEDV_LINK_LIBS ${LIBCTB_LIBRARIES})
+include_directories(${LIBCTB_INCLUDE_DIR})
+list(APPEND FREEDV_LINK_LIBS ${LIBCTB_LIBRARY})
 
 
 add_subdirectory(src)
diff --git a/fdmdv2/cmake/BuildLibctb.cmake b/fdmdv2/cmake/BuildLibctb.cmake
new file mode 100644 (file)
index 0000000..a91f738
--- /dev/null
@@ -0,0 +1,20 @@
+set(LIBCTB_TARBALL "libctb-0.16")
+
+include(ExternalProject)
+ExternalProject_Add(libctb
+   URL https://iftools.com/download/ctb/0.16/${LIBCTB_TARBALL}.tar.gz
+   # Project does not have configure. Abuse to change directory.
+   CONFIGURE_COMMAND ""
+   BINARY_DIR libctb-prefix/src/libctb/build
+   #BUILD_IN_SOURCE 1
+   BUILD_COMMAND $(MAKE) -f GNUmakefile
+   INSTALL_DIR external/dist
+   INSTALL_COMMAND $(MAKE) install prefix=${CMAKE_BINARY_DIR}/external/dist
+)
+if(WIN32)
+   set(LIBCTB_LIBRARY ${CMAKE_BINARY_DIR}/external/dist/lib/ctb-0.16.lib)
+else(WIN32)
+   set(LIBCTB_LIBRARY ${CMAKE_BINARY_DIR}/external/dist/lib/libctb-0.16.a)
+endif(WIN32)
+set(LIBCTB_INCLUDE_DIR external/dist/include)
+list(APPEND FREEDV_STATIC_LIBS libctb)
diff --git a/fdmdv2/cmake/BuildPortaudio.cmake b/fdmdv2/cmake/BuildPortaudio.cmake
new file mode 100644 (file)
index 0000000..24163dc
--- /dev/null
@@ -0,0 +1,25 @@
+set(PORTAUDIO_TARBALL "pa_stable_v19_20111121")
+
+include(ExternalProject)
+ExternalProject_Add(portaudio
+   URL http://www.portaudio.com/archives/${PORTAUDIO_TARBALL}.tgz
+   BUILD_IN_SOURCE 1
+   INSTALL_DIR external/dist
+   CONFIGURE_COMMAND ./configure --enable-cxx --without-jack --prefix=${CMAKE_BINARY_DIR}/external/dist
+   BUILD_COMMAND make
+   INSTALL_COMMAND make install
+)
+if(WIN32)
+   set(PORTAUDIO_LIBRARIES
+      ${CMAKE_BINARY_DIR}/external/dist/lib/portaudio.lib)
+else(WIN32)
+   find_library(RT rt)
+   find_library(ASOUND asound)
+   set(PORTAUDIO_LIBRARIES
+       ${CMAKE_BINARY_DIR}/external/dist/lib/libportaudio.a
+       ${RT}
+       ${ASOUND}
+   )
+endif(WIN32)
+set(PORTAUDIO_INCLUDES external/dist/include)
+list(APPEND FREEDV_STATIC_LIBS portaudio)
diff --git a/fdmdv2/cmake/BuildSamplerate.cmake b/fdmdv2/cmake/BuildSamplerate.cmake
new file mode 100644 (file)
index 0000000..9e52854
--- /dev/null
@@ -0,0 +1,20 @@
+set(SAMPLERATE_TARBALL "libsamplerate-0.1.8")
+
+include(ExternalProject)
+ExternalProject_Add(samplerate
+   URL http://www.mega-nerd.com/SRC/${SAMPLERATE_TARBALL}.tar.gz 
+   BUILD_IN_SOURCE 1
+   INSTALL_DIR external/dist
+   CONFIGURE_COMMAND ./configure --prefix=${CMAKE_BINARY_DIR}/external/dist
+   BUILD_COMMAND make
+   INSTALL_COMMAND make install
+)
+if(WIN32)
+   set(SAMPLERATE_LIBRARIES
+      ${CMAKE_BINARY_DIR}/external/dist/lib/samplerate.lib)
+else(WIN32)
+   set(SAMPLERATE_LIBRARIES
+       ${CMAKE_BINARY_DIR}/external/dist/lib/libsamplerate.a)
+endif(WIN32)
+set(SAMPLERATE_INCLUDES external/dist/include)
+list(APPEND FREEDV_STATIC_LIBS samplerate)
diff --git a/fdmdv2/cmake/BuildSndfile.cmake b/fdmdv2/cmake/BuildSndfile.cmake
new file mode 100644 (file)
index 0000000..fbf677d
--- /dev/null
@@ -0,0 +1,20 @@
+set(SNDFILE_TARBALL "libsndfile-1.0.25")
+
+include(ExternalProject)
+ExternalProject_Add(sndfile
+   URL http://www.mega-nerd.com/libsndfile/files/${SNDFILE_TARBALL}.tar.gz
+   BUILD_IN_SOURCE 1
+   INSTALL_DIR external/dist
+   CONFIGURE_COMMAND ./configure --prefix=${CMAKE_BINARY_DIR}/external/dist
+   BUILD_COMMAND make
+   INSTALL_COMMAND make install
+)
+if(WIN32)
+   set(SNDFILE_LIBRARIES
+      ${CMAKE_BINARY_DIR}/external/dist/lib/sndfile.lib)
+else(WIN32)
+   set(SNDFILE_LIBRARIES
+       ${CMAKE_BINARY_DIR}/external/dist/lib/libsndfile.a)
+endif(WIN32)
+set(SNDFILE_INCLUDES external/dist/include)
+list(APPEND FREEDV_STATIC_LIBS sndfile)
diff --git a/fdmdv2/cmake/BuildSox.cmake b/fdmdv2/cmake/BuildSox.cmake
new file mode 100644 (file)
index 0000000..566b227
--- /dev/null
@@ -0,0 +1,31 @@
+set(SOX_TARBALL "sox-14.4.1")
+
+# required linking libraries on linux. Not sure about windows.
+find_library(ALSA_LIBRARIES asound)
+find_library(AO_LIBRARIES ao)
+
+include(ExternalProject)
+ExternalProject_Add(sox
+   URL http://downloads.sourceforge.net/sox/${SOX_TARBALL}.tar.gz
+   BUILD_IN_SOURCE 1
+   INSTALL_DIR external/dist
+   CONFIGURE_COMMAND ./configure --enable-shared=no --without-id3tag --without-png --disable-gomp --with-oggvorbis=no --with-oss=no --with-flac=no --with-amrnb=no --with-amrwb=no --with-mp3=no --disable-dl-sndfile --with-pulseaudio=no --without-magic --prefix=${CMAKE_BINARY_DIR}/external/dist
+   BUILD_COMMAND make
+   INSTALL_COMMAND make install
+)
+if(WIN32)
+   set(SOX_LIBRARIES
+      ${CMAKE_BINARY_DIR}/external/dist/lib/sox.lib)
+else(WIN32)
+      set(SOX_LIBRARIES
+       ${CMAKE_BINARY_DIR}/external/dist/lib/libsox.a
+       ${ALSA_LIBRARIES}
+       ${AO_LIBRARIES}
+       )
+endif(WIN32)
+set(SOX_INCLUDES external/dist/include)
+list(APPEND FREEDV_STATIC_LIBS sox)
+
+if(USE_STATIC_SNDFILE)
+       add_dependencies(sox sndfile)
+endif(USE_STATIC_SNDFILE)
index c952b03fbdea1445671bc8040ce9a8329dabc490..8e3ab76be8bb8fed2e7c9938ae73db3b5636a498 100644 (file)
@@ -7,7 +7,7 @@
 #define _CONFIGURATION_HEADER_GUARD_H_
 
 #define SIZEOF_INT @SIZEOF_INT@
-#cmakedefine HAVE_STDINT_H @HAVE_STDINT_H@
+#cmakedefine HAVE_LIMITS_H @HAVE_LIMITS_H@
 #cmakedefine HAVE_STDINT_H @HAVE_STDINT_H@
 #cmakedefine HAVE_STDDEF_H @HAVE_STDDEF_H@
 #cmakedefine HAVE_STDLIB_H @HAVE_STDLIB_H@
index f3431517136875e9c0d1a53b84dc9d7364d6d6dd..6521942b470d67bb6a6915081094a1b02247c6fd 100644 (file)
@@ -36,5 +36,8 @@ set(FREEDV_SOURCES
 add_executable(freedv ${FREEDV_SOURCES})
 target_link_libraries(freedv ${FREEDV_LINK_LIBS})
 include_directories(${CMAKE_CURRENT_SOURCE_DIR})
+if(FREEDV_STATIC_LIBS)
+       add_dependencies(freedv ${FREEDV_STATIC_LIBS})
+endif(FREEDV_STATIC_LIBS)
 install(TARGETS freedv
        RUNTIME DESTINATION bin)