CMake configuration updates. More detailed error messages. Icon and desktop installat...
authorhobbes1069 <hobbes1069@01035d8c-6547-0410-b346-abe4f91aad63>
Mon, 6 May 2013 15:48:37 +0000 (15:48 +0000)
committerhobbes1069 <hobbes1069@01035d8c-6547-0410-b346-abe4f91aad63>
Mon, 6 May 2013 15:48:37 +0000 (15:48 +0000)
git-svn-id: https://svn.code.sf.net/p/freetel/code@1238 01035d8c-6547-0410-b346-abe4f91aad63

codec2-dev/CMakeLists.txt
codec2-dev/cmake/config.h.in
codec2-dev/src/CMakeLists.txt
fdmdv2/CMakeLists.txt
fdmdv2/cmake/BuildLibctb.cmake
fdmdv2/cmake/BuildPortaudio.cmake
fdmdv2/cmake/BuildSamplerate.cmake
fdmdv2/cmake/BuildSndfile.cmake
fdmdv2/cmake/BuildSox.cmake
fdmdv2/src/CMakeLists.txt

index 411930c7fbd2303879c73ff02b9110272a579725..7a036cab01504bce2ba3c443e8fc44a54c62ed93 100644 (file)
@@ -1,6 +1,16 @@
+#
+# Codec2 - Next-Generation Digital Voice for Two-Way Radio
+#
+# CMake configuration contributed by Richard Shaw (KF5OIM)
+# Please report questions, comments, problems, or patches to the freetel
+# mailing list: https://lists.sourceforge.net/lists/listinfo/freetel-codec2
+#
+
 cmake_minimum_required(VERSION 2.8)
 
 # Prevent in-source builds
+# If an in-source build is attempted, you will still need to clean up a few
+# files manually.
 set(CMAKE_DISABLE_SOURCE_CHANGES ON)
 set(CMAKE_DISABLE_IN_SOURCE_BUILD ON)
 
@@ -11,18 +21,21 @@ project(codec2)
 # Set project version information. This should probably be done via external
 # file at some point.
 #
-set(PROJECT_VERSION_MAJOR 0)
-set(PROJECT_VERSION_MINOR 2)
+set(CODEC2_VERSION_MAJOR 0)
+set(CODEC2_VERSION_MINOR 2)
 # Set to patch level is needed, otherwise leave FALSE.
-set(PROJECT_VERSION_PATCH FALSE)
-set(PROJECT_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}")
+set(CODEC2_VERSION_PATCH FALSE)
+set(CODEC2_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}")
 # Patch level version bumps should not change API/ABI.
-set(SOVERSION ${PROJECT_VERSION})
-if(PROJECT_VERSION_PATCH)
-       set(PROJECT_VERSION "${PROJECT_VERSION}.${PROJECT_VERSION_PATCH}")
+set(SOVERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}")
+if(CODEC2_VERSION_PATCH)
+    set(PROJECT_VERSION "${CODEC2_VERSION}.${PROJECT_VERSION_PATCH}")
 endif()
 
-message(STATUS "codec2 version: ${PROJECT_VERSION}")
+# Set default build type
+set(CMAKE_BUILD_TYPE "Release")
+
+message(STATUS "codec2 version: ${CODEC2_VERSION}")
 
 #
 # Find the svn revision if this is a working copy.
@@ -31,17 +44,27 @@ message(STATUS "codec2 version: ${PROJECT_VERSION}")
 #
 #find_package(Subversion)
 #if(Subversion_FOUND)
-#      Subversion_WC_INFO(${CMAKE_CURRENT_SOURCE_DIR} CODEC2)
-#      message(STATUS "codec2 svn revision: ${CODEC2_WC_REVISION}")
+#   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.")
+#   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")
 
+
+#
+# Default options
+#
 # Build shared libraries by default
 set(BUILD_SHARED_LIBS TRUE CACHE BOOL "Build shared library. Set to FALSE for static library.")
+# Do not install example code by default.
+option(INSTALL_EXAMPLES "Install example code." OFF)
+if(INSTALL_EXAMPLES)
+    install(DIRECTORY octave raw script voicing wav
+        DESTINATION share/codec2)
+endif()
 
 
 #
@@ -51,8 +74,8 @@ set(BUILD_SHARED_LIBS TRUE CACHE BOOL "Build shared library. Set to FALSE for st
 
 # Math library is automatic on MSVC
 if(UNIX)
-        set(CMAKE_REQUIRED_INCLUDES math.h)
-        set(CMAKE_REQUIRED_LIBRARIES m)
+    set(CMAKE_REQUIRED_INCLUDES math.h)
+    set(CMAKE_REQUIRED_LIBRARIES m)
 endif(UNIX)
 
 include(CheckIncludeFiles)
@@ -80,34 +103,32 @@ include_directories(${PROJECT_BINARY_DIR})
 #
 add_subdirectory(src)
 
-#
-# Install example code? Defaults to no.
-#
-option(INSTALL_EXAMPLES "Install example code." OFF)
-if(INSTALL_EXAMPLES)
-       install(DIRECTORY octave raw script voicing wav
-               DESTINATION share/codec2)
-endif()
 
 #
-# Cpack NSIS configuration for Windows. EXPERIMENTAL!!!
+# Cpack NSIS installer configuration for Windows. EXPERIMENTAL!!!
+# See: http://nsis.sourceforge.net/Download
+#
+# *nix systems should use "make install" and/or appropriate
+# distribution packaging tools.
 #
 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)
+    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 ${CODEC2_VERSION_MAJOR})
+    set(CPACK_PACKAGE_VERSION_MINOR ${CODEC2_VERSION_MINOR})
+        if(PROJECT_VERSION_PATCH)
+        set(CPACK_PACKAGE_VERSION_PATCH ${CODEC2_VERSION_PATCH})
+    endif(PROJECT_VERSION_PATCH)
+    set(CPACK_PACKAGE_INSTALL_DIRECTORY "Codec2")
+    # 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}")
+    set(CPACK_NSIS_URL_INFO_ABOUT "http:\\\\\\\\codec2.org")
+    set(CPACK_NSIS_MODIFY_PATH ON)
+    include(CPack)
 endif(WIN32)
index f5de52589b3f8e397f2df34ec5dbc88b5f580b16..60ee7d62c52cb2bf097242d4b186023a53401ea7 100644 (file)
@@ -18,4 +18,6 @@
 #cmakedefine HAVE_COS      @HAVE_COS@
 #cmakedefine HAVE_ATAN2    @HAVE_ATAN2@
 #cmakedefine HAVE_LOG10    @HAVE_LOG10@
+#cmakedefine HAVE_ROUND    @HAVE_ROUND@
+#cmakedefine HAVE_GETOPT   @HAVE_GETOPT@
 #endif
index 9b926e30f4a4bab0ce1144fef19a318071bd579b..6d0d294c3eeec3b77330672517e30da90d203a3b 100644 (file)
@@ -7,182 +7,183 @@ 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
+    ${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
+    ${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
+    ${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
+    ${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
+    ${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
+    ${D}/lspjvm1.txt
+    ${D}/lspjvm2.txt
+    ${D}/lspjvm3.txt
 )
 
 set(CODEBOOKSVQANSSI
-       ${D}/lspvqanssi1.txt
-       ${D}/lspvqanssi2.txt
-       ${D}/lspvqanssi3.txt
-       ${D}/lspvqanssi4.txt
+    ${D}/lspvqanssi1.txt
+    ${D}/lspvqanssi2.txt
+    ${D}/lspvqanssi3.txt
+    ${D}/lspvqanssi4.txt
 )
 
-set(CODEBOOKSGE        ${D}/gecb.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})
+    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})
+    # generate_codebook
+    add_executable(generate_codebook generate_codebook.c)
+    target_link_libraries(generate_codebook ${CMAKE_REQUIRED_LIBRARIES})
+    # genlspdtcb
+    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}
+    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}
+    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}
+    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}
+    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}
+    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}
+    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}
+    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}
+    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)
+    FILE ${CMAKE_BINARY_DIR}/ImportExecutables.cmake)
 
 #
 # codec2 library sources
 #
 
 set(CODEC2_SRCS
-       dump.c
-       lpc.c
-       nlp.c
-       postfilter.c
-       sine.c
-       codec2.c
-       fifo.c
-       fdmdv.c
-       kiss_fft.c
-       interp.c
-       lsp.c
-       phase.c
-       quantise.c
-       pack.c
-       codebook.c
-       codebookd.c
-       codebookvq.c
-       codebookjnd.c
-       codebookjvm.c
-       codebookvqanssi.c
-       codebookdt.c
-       codebookge.c
-       golay23.c
+    dump.c
+    lpc.c
+    nlp.c
+    postfilter.c
+    sine.c
+    codec2.c
+    fifo.c
+    fdmdv.c
+    kiss_fft.c
+    interp.c
+    lsp.c
+    phase.c
+    quantise.c
+    pack.c
+    codebook.c
+    codebookd.c
+    codebookvq.c
+    codebookjnd.c
+    codebookjvm.c
+    codebookvqanssi.c
+    codebookdt.c
+    codebookge.c
+    golay23.c
 )
 
 add_library(codec2 ${CODEC2_SRCS})
@@ -191,14 +192,14 @@ target_link_libraries(codec2 ${CMAKE_REQUIRED_LIBRARIES})
 set_target_properties(codec2 PROPERTIES SOVERSION ${SOVERSION})
 
 set(CODEC2_PUBLIC_HEADERS
-       codec2.h
-       codec2_fdmdv.h
-       codec2_fifo.h
-       golay23.h
+    codec2.h
+    codec2_fdmdv.h
+    codec2_fifo.h
+    golay23.h
 )
 
 install(FILES ${CODEC2_PUBLIC_HEADERS}
-       DESTINATION include/codec2
+    DESTINATION include/codec2
 )
 
 add_executable(c2demo c2demo.c)
@@ -238,20 +239,20 @@ add_executable(fec_dec fec_dec.c golay23.c)
 target_link_libraries(fec_dec ${CMAKE_REQUIRED_LIBRARIES} codec2)
 
 install(TARGETS
-       codec2
-       c2demo
-       c2demo
-       c2enc
-       c2dec
-       c2sim
-       fdmdv_get_test_bits
-       fdmdv_mod fdmdv_demod
-       fdmdv_put_test_bits
-       fdmdv_interleave
-       insert_errors
-       fec_enc
-       fec_dec
-       LIBRARY DESTINATION lib${LIB_SUFFIX}
-       ARCHIVE DESTINATION lib${LIB_SUFFIX}
-       RUNTIME DESTINATION bin
+    codec2
+    c2demo
+    c2demo
+    c2enc
+    c2dec
+    c2sim
+    fdmdv_get_test_bits
+    fdmdv_mod fdmdv_demod
+    fdmdv_put_test_bits
+    fdmdv_interleave
+    insert_errors
+    fec_enc
+    fec_dec
+    LIBRARY DESTINATION lib${LIB_SUFFIX}
+    ARCHIVE DESTINATION lib${LIB_SUFFIX}
+    RUNTIME DESTINATION bin
 )
index f7ab164851e00c9be56304a0af17d77cbc8a0a72..32929c4cb494b35f9ef49ca83d9268f3f0ef3697 100644 (file)
@@ -1,6 +1,16 @@
+#
+# FreeDV - HF Digital Voice for Radio Amateurs
+#
+# CMake configuration contributed by Richard Shaw (KF5OIM)
+# Please report questions, comments, problems, or patches to the freetel
+# mailing list: https://lists.sourceforge.net/lists/listinfo/freetel-codec2
+#
+
 cmake_minimum_required(VERSION 2.8)
 
 # Prevent in-source builds to protect automake/autoconf config.
+# If an in-source build is attempted, you will still need to clean up a few
+# files manually.
 set(CMAKE_DISABLE_SOURCE_CHANGES ON)
 set(CMAKE_DISABLE_IN_SOURCE_BUILD ON)
 
@@ -10,19 +20,24 @@ project(FreeDV)
 # Setup version.
 # This should probably be pulled from an external file at some point.
 #
-set(VERSION_MAJOR 0)
-set(VERSION_MINOR 2)
+set(FREEDV_VERSION_MAJOR 0)
+set(FREEDV_VERSION_MINOR 2)
 # Set to value for patch level releases, otherwise leave as FALSE.
-set(VERSION_PATCH FALSE)
-set(VERSION "${VERSION_MAJOR}.${VERSION_MINOR}")
-if(VERSION_PATCH)
-       set(VERSION ${VERSION}.${VERSION_PATCH})
-endif(VERSION_PATCH)
+set(FREEDV_VERSION_PATCH FALSE)
+set(FREEDV_VERSION "${FREEDV_VERSION_MAJOR}.${FREEDV_VERSION_MINOR}")
+if(FREEDV_VERSION_PATCH)
+    set(FREEDV_VERSION ${FREEDV_VERSION}.${FREEDV_VERSION_PATCH})
+endif(FREEDV_VERSION_PATCH)
+
+# Set default build type
+set(CMAKE_BUILD_TYPE "Release")
 
-set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)
+message(STATUS "FreeDV version: ${FREEDV_VERSION}")
+
+#set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)
 
 # Work around for not using a svn working copy.
-add_definitions(-DSVN_REVISION="1234")
+add_definitions(-DSVN_REVISION="1238")
 
 # Set default build flags.
 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
@@ -31,61 +46,68 @@ 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.")
+    "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.")
+    "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.")
+    "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.")
+    "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.")
+    "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.")
+    "Download and build static libctb instead of the system library.")
+set(USE_STATIC_CODEC2 FALSE CACHE BOOL
+    "Download and build static codec2 instead of the system library.")
+set(USE_STATIC_WXWIDGETS FALSE CACHE BOOL
+    "Download and build static wxWidgets 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)
+    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)
+    set(USE_STATIC_CODEC2 TRUE FORCE)
+    #set(USE_STATIC_WXWIDGETS TRUE FORCE)
 endif(USE_STATIC_DEPS)
-set(FREEDV_STATIC_LIBS "")
 
-# Setup empty list to add to
+
+# Setup empty list to append to.
 set(FREEDV_LINK_LIBS "")
+set(FREEDV_STATIC_LIBS "")
 
 # Check for a bunch of libraries
 # Would it be better to assume these are available?
 if(MSVC)
-       find_library(ADVAPI32 advapi32)
-       find_library(COMCTL32 comctl32)
-       find_library(COMDLG32 comdlg32)
-       find_library(GDI32 gdi32)
-       find_library(KERNEL32 kernel32)
-       find_library(OLE32 ole32)
-       find_library(OLEAUT32 oleaut32)
-       find_library(RPCRT4 rpcrt4)
-       find_library(SHELL32 shell32)
-       find_library(USER32 user32)
-       find_package(UUID uuid)
-       find_library(WINMM winmm)
-       find_library(WINSPOOL winspool)
-       find_library(WSOCK32 wsock32)
-       find_library(WXEXPAT wxexpat)
-       find_library(WXJPEG wxjpeg)
-       find_library(WXMSW29U wxmsw29u)
-       find_library(WXPNG wxpng)
-       find_library(WXREGEXU wxregexu)
-       find_library(WXTIFF wxtiff)
-       find_library(WXZLIB wxzlib)
+    find_library(ADVAPI32 advapi32)
+    find_library(COMCTL32 comctl32)
+    find_library(COMDLG32 comdlg32)
+    find_library(GDI32 gdi32)
+    find_library(KERNEL32 kernel32)
+    find_library(OLE32 ole32)
+    find_library(OLEAUT32 oleaut32)
+    find_library(RPCRT4 rpcrt4)
+    find_library(SHELL32 shell32)
+    find_library(USER32 user32)
+    find_package(UUID uuid)
+    find_library(WINMM winmm)
+    find_library(WINSPOOL winspool)
+    find_library(WSOCK32 wsock32)
+    find_library(WXEXPAT wxexpat)
+    find_library(WXJPEG wxjpeg)
+    find_library(WXMSW29U wxmsw29u)
+    find_library(WXPNG wxpng)
+    find_library(WXREGEXU wxregexu)
+    find_library(WXTIFF wxtiff)
+    find_library(WXZLIB wxzlib)
 
-       list(APPEND FREEDV_LINK_LIBS ${ADVAPI32} ${COMCTL32} ${COMDLG32} ${GDI32} ${KERNEL32} ${OLE32} ${OLEAUT32} ${RPCRT4} ${SHELL32} ${USER32} ${UUID} ${WINMM} ${WINSPOOL} ${WINSOCK32} ${WZEXPAT} ${WXJPEG} ${WXMSW29U} ${WXPNG} ${WXREGEXU} ${WXTIFF} ${WXZLIB})
+    list(APPEND FREEDV_LINK_LIBS ${ADVAPI32} ${COMCTL32} ${COMDLG32} ${GDI32} ${KERNEL32} ${OLE32} ${OLEAUT32} ${RPCRT4} ${SHELL32} ${USER32} ${UUID} ${WINMM} ${WINSPOOL} ${WINSOCK32} ${WZEXPAT} ${WXJPEG} ${WXMSW29U} ${WXPNG} ${WXREGEXU} ${WXTIFF} ${WXZLIB})
 endif(MSVC)
 
 # Math library is automatic on MSVC
 if(UNIX)
-       set(CMAKE_REQUIRED_INCLUDES math.h)
-       set(CMAKE_REQUIRED_LIBRARIES m)
+    set(CMAKE_REQUIRED_INCLUDES math.h)
+    set(CMAKE_REQUIRED_LIBRARIES m)
 endif(UNIX)
 
 # Find some standard headers and functions.
@@ -104,25 +126,31 @@ check_function_exists(memset HAVE_MEMSET)
 check_function_exists(pow HAVE_POW)
 check_function_exists(sqrt HAVE_SQRT)
 
+# fdmdv2_main.h requires patching to find config.h as it current looks in the
+# source directory and the generated file goes in the binary directory.
 configure_file ("${PROJECT_SOURCE_DIR}/cmake/config.h.in"
                 "${PROJECT_BINARY_DIR}/config.h" )
 include_directories(${PROJECT_BINARY_DIR})
+add_definitions(-DHAVE_CONFIG_H)
 
 # 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)
+    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.
+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)
 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})
+    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)
@@ -133,129 +161,197 @@ message(STATUS "Threads library flags: ${CMAKE_THREAD_LIBS_INIT}")
 
 # Samplerate Library
 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)
+    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.
+On Linux systems try installing:
+    samplerate-devel  (RPM based systems)
+    libsamplerate-dev (DEB based systems)
+On Windows it's easiest to use the cmake option: USE_STATIC_SAMPLERATE"
+        )
+    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})
+    message(STATUS "Will attempt static build of samplerate.")
+    include(cmake/BuildSamplerate.cmake)
 endif(NOT USE_STATIC_SAMPLERATE)
-       
+    
 # sndfile Library
 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)
+    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.
+On Linux systems try installing:
+    libsndfile-devel (RPM based systems)
+    libsndfile-dev   (DEB based systems)
+On Windows it's easiest to use the cmake option: USE_STATIC_SNDFILE"
+        )
+    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})
+    message(STATUS "Will attempt static build of sndfile.")
+    include(cmake/BuildSndfile.cmake)
 endif(NOT USE_STATIC_SNDFILE)
 
 # Find sox library
 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)
+    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.
+On Linux systems try installing:
+    sox-devel (RPM based systems)
+    libsox-dev (DEB based systems)
+On Windows it's easiest to use the cmake option: USE_STATIC_SOX"
+        )
+    endif(LIBSOX)
 else(NOT USE_STATIC_SOX)
-       include(cmake/BuildSox.cmake)
-       list(APPEND FREEDV_LINK_LIBS ${SOX_LIBRARIES})
-       include_directories(${SOX_INCLUDES})
+    message(STATUS "Will attempt static build of sox.")
+    include(cmake/BuildSox.cmake)
 endif(NOT USE_STATIC_SOX)
 
+#
 # Find wxWidgets
+#
 set(WXCONFIG "" CACHE FILEPATH "Location of wx-config binary.")
 set(WXRC "" CACHE FILEPATH "Location of wxrc binary.")
-message(STATUS "Looking for wxWidgets...")
-if(WXCONFIG)
-       set(wxWidgets_CONFIG_EXECUTABLE ${WXCONFIG})
-endif()
-if(WXRC)
-       set(wxWidgets_wxrc_EXECUTABLE ${WXRC})
-endif()
-set(WX_VERSION_MIN 2.9.0)
-find_package(wxWidgets REQUIRED COMPONENTS core base aui html net adv REQUIRED)
-execute_process(COMMAND sh "${wxWidgets_CONFIG_EXECUTABLE}" --version
-       OUTPUT_VARIABLE WX_VERSION)
-if(WX_VERSION VERSION_EQUAL ${WX_VERSION_MIN}
-       OR WX_VERSION VERSION_GREATER ${WX_VERSION_MIN})
-       message(STATUS "wxWidgets version: ${WX_VERSION}")
-else()
-       message(FATAL_ERROR "wxWidgets must be installed on your system.
-
-                Please check that wx-config is in path, the directory
-                where wxWidgets libraries are installed (returned by
-                'wx-config --libs' or 'wx-config --static --libs' command)
-                is in LD_LIBRARY_PATH or equivalent variable and
-                wxWidgets version is ${WX_VERSION_MIN} or above."
-       )
-endif()
-if(wxWidgets_FOUND)
-       include("${wxWidgets_USE_FILE}")
-       list(APPEND FREEDV_LINK_LIBS ${wxWidgets_LIBRARIES})
-endif(wxWidgets_FOUND)
-
+if(USE_STATIC_WXWIDGETS)
+    include(cmake/BuildWxWidgets.cmake)
+else(USE_STATIC_WXWIDGETS)
+    message(STATUS "Looking for wxWidgets...")
+    if(WXCONFIG)
+        message(STATUS "wx-config: ${WXCONFIG}")
+        set(wxWidgets_CONFIG_EXECUTABLE ${WXCONFIG})
+    endif(WXCONFIG)
+    if(WXRC)
+        message(STATUS "wxrc: ${WXRC}")
+        set(wxWidgets_wxrc_EXECUTABLE ${WXRC})
+    endif(WXRC)
+    set(WX_VERSION_MIN 2.9.0)
+    find_package(wxWidgets REQUIRED COMPONENTS core base aui html net adv REQUIRED)
+    execute_process(COMMAND sh "${wxWidgets_CONFIG_EXECUTABLE}" --version
+        OUTPUT_VARIABLE WX_VERSION)
+    if(WX_VERSION VERSION_EQUAL ${WX_VERSION_MIN}
+        OR WX_VERSION VERSION_GREATER ${WX_VERSION_MIN})
+        message(STATUS "wxWidgets version: ${WX_VERSION}")
+    else()
+        message(FATAL_ERROR "wxWidgets must be installed on your system.
+    
+                    Please check that wx-config is in path, the directory
+                    where wxWidgets libraries are installed (returned by
+                    'wx-config --libs' or 'wx-config --static --libs' command)
+                    is in LD_LIBRARY_PATH or equivalent variable and
+                    wxWidgets version is ${WX_VERSION_MIN} or above."
+        )
+    endif()
+    if(wxWidgets_FOUND)
+        include("${wxWidgets_USE_FILE}")
+        list(APPEND FREEDV_LINK_LIBS ${wxWidgets_LIBRARIES})
+    endif(wxWidgets_FOUND)
+endif(USE_STATIC_WXWIDGETS)
 
 #
 # Find codec2
 #
-message(STATUS "Looking for codec2...")
-find_path(CODEC2_INCLUDE_DIR codec2.h
-          PATH_SUFFIXES codec2)
-find_library(CODEC2_LIBRARY NAMES codec2)
-message(STATUS "  codec2 library: ${CODEC2_LIBRARY}")
-message(STATUS "  codec2 headers: ${CODEC2_INCLUDE_DIR}")
-include_directories(${CODEC2_INCLUDE_DIR})
-list(APPEND FREEDV_LINK_LIBS ${CODEC2_LIBRARY})
+if(NOT USE_STATIC_CODEC2)
+    message(STATUS "Looking for codec2...")
+    find_path(CODEC2_INCLUDE_DIR codec2.h
+              PATH_SUFFIXES codec2)
+    find_library(CODEC2_LIBRARY NAMES codec2)
+    message(STATUS "  codec2 library: ${CODEC2_LIBRARY}")
+    message(STATUS "  codec2 headers: ${CODEC2_INCLUDE_DIR}")
+    if(CODEC2_INCLUDE_DIR AND CODEC2_LIBRARY)
+        include_directories(${CODEC2_INCLUDE_DIR})
+        list(APPEND FREEDV_LINK_LIBS ${CODEC2_LIBRARY})
+    else(CODEC2_INCLUDE_DIR AND CODEC2_LIBRARY)
+        message(FATAL_ERROR "codec2 library not found.
+Linux: 
+Codec2 may not be in your distribution so build yourself or use the cmake option to build statically into FreeDV.
+Windws:
+It's easiest to use the cmake option: USE_STATIC_PORTAUDIO"
+        )
+    endif(CODEC2_INCLUDE_DIR AND CODEC2_LIBRARY)
+else(NOT USE_STATIC_CODEC2)
+    message(STATUS "Will attempt static build of codec2.")
+    include(cmake/BuildCodec2.cmake)
+endif(NOT USE_STATIC_CODEC2)
 
 #
 # Find libctb. Assumes version 0.16
 #
 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)
+    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}")
+        if(LIBCTB_LIBRARY AND 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(LIBCTB_LIBRARY AND LIBCTB_INCLUDE_DIR)
+            message(FATAL_ERROR "libctb not found.
+Linux:
+  libctb may not be available in your distribution. Either build and install or use the cmake option to build statically.
+Windws:
+It's easiest to use the cmake option: USE_STATIC_LIBCTB"
+            )
+        endif(LIBCTB_LIBRARY AND LIBCTB_INCLUDE_DIR)
 else(NOT USE_STATIC_LIBCTB)
-       include(cmake/BuildLibctb.cmake)
+    include(cmake/BuildLibctb.cmake)
 endif(NOT USE_STATIC_LIBCTB)
 
 include_directories(${LIBCTB_INCLUDE_DIR})
 list(APPEND FREEDV_LINK_LIBS ${LIBCTB_LIBRARY})
 
-
+# Freedv 
 add_subdirectory(src)
+
+# Icons and desktop file
+add_subdirectory(contrib)
+
+#
+# Cpack NSIS configuration for Windows. EXPERIMENTAL!!!
+#
+if(WIN32)
+    include(InstallRequiredSystemLibraries)
+    set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "HF Digital Voice for Radio Amateurs")
+    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 ${FREEDV_VERSION_MAJOR})
+    set(CPACK_PACKAGE_VERSION_MINOR ${FREEDV_VERSION_MINOR})
+    if(FREEDV_VERSION_PATCH)
+        set(CPACK_PACKAGE_VERSION_PATCH ${FREEDV_VERSION_PATCH})
+    endif(FREEDV_VERSION_PATCH)
+    set(CPACK_PACKAGE_INSTALL_DIRECTORY "FreeDV")
+    # 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}")
+    set(CPACK_NSIS_URL_INFO_ABOUT "http:\\\\\\\\freedv.org")
+    set(CPACK_NSIS_MODIFY_PATH ON)
+    include(CPack)
+endif(WIN32)
index a91f7385571778375714be8a79461c48638f1dda..cf44bd72b0ee88bcfad30249437bdaeb79c86997 100644 (file)
@@ -3,10 +3,8 @@ 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
@@ -16,5 +14,6 @@ if(WIN32)
 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)
+include_directories(${CMAKE_BINARY_DIR}/external/dist/include)
+list(APPEND FREEDV_LINK_LIBS ${LIBCTB_LIBRARY})
+list(APPEND FREEDV_STATIC_DEPS libctb)
index 24163dcd39efd6a430b9ee17cbd11e933fdb35b2..c610168acce093a5eb9dd4da7de21ea8b4429b93 100644 (file)
@@ -2,24 +2,24 @@ 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
+    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)
+    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}
-   )
+    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)
+include_directories(${CMAKE_BINARY_DIR}/external/dist/include)
+list(APPEND FREEDV_LINK_LIBS ${PORTAUDIO_LIBRARIES})
+list(APPEND FREEDV_STATIC_DEPS portaudio)
index 9e52854ccd30a90f5d073dfae853d2020d4f507a..a3be55190ca697108ff1bb2a8f5ca4e994aaf414 100644 (file)
@@ -2,19 +2,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
+    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)
+    set(SAMPLERATE_LIBRARIES
+        ${CMAKE_BINARY_DIR}/external/dist/lib/samplerate.lib)
 else(WIN32)
-   set(SAMPLERATE_LIBRARIES
-       ${CMAKE_BINARY_DIR}/external/dist/lib/libsamplerate.a)
+    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)
+include_directories(${CMAKE_BINARY_DIR}/external/dist/include)
+list(APPEND FREEDV_LINK_LIBS ${SAMPLERATE_LIBRARIES})
+list(APPEND FREEDV_STATIC_DEPS samplerate)
index fbf677df7c60b6589877ae7747da161f455f553d..58265413c56e4d9369d299254d793d07bae5a6bc 100644 (file)
@@ -2,19 +2,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
+    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)
+    set(SNDFILE_LIBRARIES
+        ${CMAKE_BINARY_DIR}/external/dist/lib/sndfile.lib)
 else(WIN32)
-   set(SNDFILE_LIBRARIES
-       ${CMAKE_BINARY_DIR}/external/dist/lib/libsndfile.a)
+    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)
+include_directories(${CMAKE_BINARY_DIR}/external/dist/include)
+list(APPEND FREEDV_LINK_LIBS ${SNDFILE_LIBRARIES})
+list(APPEND FREEDV_STATIC_DEPS sndfile)
index 566b22788b5addc5b4c4d8c2d01870776a215b0b..535b538099cbd14b552c39ec8e2dee3c9d31969f 100644 (file)
@@ -6,26 +6,27 @@ 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
+    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)
+    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}
-       )
+    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)
+include_directories(${CMAKE_BINARY_DIR}/external/dist/include)
+list(APPEND FREEDV_LINK_LIBS ${SOX_LIBRARIES})
+list(APPEND FREEDV_STATIC_DEPS sox)
 
 if(USE_STATIC_SNDFILE)
-       add_dependencies(sox sndfile)
+    add_dependencies(sox sndfile)
 endif(USE_STATIC_SNDFILE)
index 6521942b470d67bb6a6915081094a1b02247c6fd..79647f8182826d76d105fc04a1de71326626d8d3 100644 (file)
@@ -1,43 +1,44 @@
 set(FREEDV_SOURCES
-       fdmdv2_main.cpp
-       fdmdv2_pa_wrapper.cpp
-       fdmdv2_plot.cpp
-       fdmdv2_plot_scalar.cpp
-       fdmdv2_plot_scatter.cpp
-       fdmdv2_plot_spectrum.cpp
-       fdmdv2_plot_waterfall_linux.cpp
-       dlg_about.cpp
-       dlg_audiooptions.cpp
-       dlg_comports.cpp
-       dlg_filter.cpp
-       sox_biquad.c
-       topFrame.cpp
-       varicode.c
-       comp.h
-       fdmdv2_defines.h
-       fdmdv2_main.h
-       fdmdv2_pa_wrapper.h
-       fdmdv2_plot.h
-       fdmdv2_plot_scalar.h
-       fdmdv2_plot_scatter.h
-       fdmdv2_plot_spectrum.h
-       fdmdv2_plot_waterfall_linux.h
-       dlg_about.h dlg_audiooptions.h
-       dlg_comports.h
-       dlg_filter.h
-       sox.h
-       sox_biquad.h
-       topFrame.h
-       varicode.h
-       varicode_table.h
-       version.h
+    fdmdv2_main.cpp
+    fdmdv2_pa_wrapper.cpp
+    fdmdv2_plot.cpp
+    fdmdv2_plot_scalar.cpp
+    fdmdv2_plot_scatter.cpp
+    fdmdv2_plot_spectrum.cpp
+    fdmdv2_plot_waterfall_linux.cpp
+    dlg_about.cpp
+    dlg_audiooptions.cpp
+    dlg_comports.cpp
+    dlg_filter.cpp
+    sox_biquad.c
+    topFrame.cpp
+    varicode.c
+    comp.h
+    fdmdv2_defines.h
+    fdmdv2_main.h
+    fdmdv2_pa_wrapper.h
+    fdmdv2_plot.h
+    fdmdv2_plot_scalar.h
+    fdmdv2_plot_scatter.h
+    fdmdv2_plot_spectrum.h
+    fdmdv2_plot_waterfall_linux.h
+    dlg_about.h dlg_audiooptions.h
+    dlg_comports.h
+    dlg_filter.h
+    sox.h
+    sox_biquad.h
+    topFrame.h
+    varicode.h
+    varicode_table.h
+    version.h
 )
 
-add_executable(freedv ${FREEDV_SOURCES})
+# WIN32 is needed for Windows GUI apps and is ignored for UNIX like systems.
+add_executable(freedv WIN32 ${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)
+if(FREEDV_STATIC_DEPS)
+    add_dependencies(freedv ${FREEDV_STATIC_DEPS})
+endif(FREEDV_STATIC_DEPS)
 install(TARGETS freedv
-       RUNTIME DESTINATION bin)
+    RUNTIME DESTINATION bin)