From: hobbes1069 Date: Mon, 6 May 2013 15:48:37 +0000 (+0000) Subject: CMake configuration updates. More detailed error messages. Icon and desktop installat... X-Git-Url: http://git.whiteaudio.com/gitweb/?a=commitdiff_plain;h=bd5df8bc64b1e20b235b258b5fc190ea63f88fb0;p=freetel-svn-tracking.git CMake configuration updates. More detailed error messages. Icon and desktop installation for Linux. WIN32 CPack tweaks. git-svn-id: https://svn.code.sf.net/p/freetel/code@1238 01035d8c-6547-0410-b346-abe4f91aad63 --- diff --git a/codec2-dev/CMakeLists.txt b/codec2-dev/CMakeLists.txt index 411930c7..7a036cab 100644 --- a/codec2-dev/CMakeLists.txt +++ b/codec2-dev/CMakeLists.txt @@ -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) diff --git a/codec2-dev/cmake/config.h.in b/codec2-dev/cmake/config.h.in index f5de5258..60ee7d62 100644 --- a/codec2-dev/cmake/config.h.in +++ b/codec2-dev/cmake/config.h.in @@ -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 diff --git a/codec2-dev/src/CMakeLists.txt b/codec2-dev/src/CMakeLists.txt index 9b926e30..6d0d294c 100644 --- a/codec2-dev/src/CMakeLists.txt +++ b/codec2-dev/src/CMakeLists.txt @@ -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 ) diff --git a/fdmdv2/CMakeLists.txt b/fdmdv2/CMakeLists.txt index f7ab1648..32929c4c 100644 --- a/fdmdv2/CMakeLists.txt +++ b/fdmdv2/CMakeLists.txt @@ -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 - 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 + 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) diff --git a/fdmdv2/cmake/BuildLibctb.cmake b/fdmdv2/cmake/BuildLibctb.cmake index a91f7385..cf44bd72 100644 --- a/fdmdv2/cmake/BuildLibctb.cmake +++ b/fdmdv2/cmake/BuildLibctb.cmake @@ -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) diff --git a/fdmdv2/cmake/BuildPortaudio.cmake b/fdmdv2/cmake/BuildPortaudio.cmake index 24163dcd..c610168a 100644 --- a/fdmdv2/cmake/BuildPortaudio.cmake +++ b/fdmdv2/cmake/BuildPortaudio.cmake @@ -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) diff --git a/fdmdv2/cmake/BuildSamplerate.cmake b/fdmdv2/cmake/BuildSamplerate.cmake index 9e52854c..a3be5519 100644 --- a/fdmdv2/cmake/BuildSamplerate.cmake +++ b/fdmdv2/cmake/BuildSamplerate.cmake @@ -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) diff --git a/fdmdv2/cmake/BuildSndfile.cmake b/fdmdv2/cmake/BuildSndfile.cmake index fbf677df..58265413 100644 --- a/fdmdv2/cmake/BuildSndfile.cmake +++ b/fdmdv2/cmake/BuildSndfile.cmake @@ -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) diff --git a/fdmdv2/cmake/BuildSox.cmake b/fdmdv2/cmake/BuildSox.cmake index 566b2278..535b5380 100644 --- a/fdmdv2/cmake/BuildSox.cmake +++ b/fdmdv2/cmake/BuildSox.cmake @@ -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) diff --git a/fdmdv2/src/CMakeLists.txt b/fdmdv2/src/CMakeLists.txt index 6521942b..79647f81 100644 --- a/fdmdv2/src/CMakeLists.txt +++ b/fdmdv2/src/CMakeLists.txt @@ -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)