-cmake_minimum_required (VERSION 2.8)
+cmake_minimum_required(VERSION 2.8)
# Prevent in-source builds
set(CMAKE_DISABLE_SOURCE_CHANGES ON)
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
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)
--- /dev/null
+/*--------------------------------------------------------------------------
+ ** 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
+#
+# 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
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})
codec2.h
codec2_fdmdv.h
codec2_fifo.h
- comp.h
golay23.h
)
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 "")
# 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)
"${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.")
#
# 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)
--- /dev/null
+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)
--- /dev/null
+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)
--- /dev/null
+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)
--- /dev/null
+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)
--- /dev/null
+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)
#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@
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)