From 7a4af6cc11caf83397e03b326731fb2a9c3911f2 Mon Sep 17 00:00:00 2001 From: hobbes1069 Date: Wed, 22 Oct 2014 14:42:41 +0000 Subject: [PATCH] Updated cmake configuration including working NSIS packaging. git-svn-id: https://svn.code.sf.net/p/freetel/code@1906 01035d8c-6547-0410-b346-abe4f91aad63 --- codec2/CMakeLists.txt | 52 +++++++++++++++------------ codec2/cmake/GetDependencies.cmake.in | 24 +++++++++++++ codec2/cmake/codec2-config.cmake.in | 5 +++ codec2/src/CMakeLists.txt | 29 ++++++++------- codec2/unittest/CMakeLists.txt | 1 - 5 files changed, 75 insertions(+), 36 deletions(-) create mode 100644 codec2/cmake/GetDependencies.cmake.in create mode 100644 codec2/cmake/codec2-config.cmake.in diff --git a/codec2/CMakeLists.txt b/codec2/CMakeLists.txt index 2dea8cdc..bbc74a96 100644 --- a/codec2/CMakeLists.txt +++ b/codec2/CMakeLists.txt @@ -15,6 +15,7 @@ mark_as_advanced(CLEAR CMAKE_INSTALL_INCLUDEDIR CMAKE_INSTALL_LIBDIR ) + # # Prevent in-source builds # If an in-source build is attempted, you will still need to clean up a few @@ -42,17 +43,24 @@ set(CODEC2_VERSION "${CODEC2_VERSION_MAJOR}.${CODEC2_VERSION_MINOR}") set(SOVERSION "${CODEC2_VERSION_MAJOR}.${CODEC2_VERSION_MINOR}") if(CODEC2_VERSION_PATCH) set(CODEC2_VERSION "${CODEC2_VERSION}.${CODEC2_VERSION_PATCH}") -endif(CODEC2_VERSION_PATCH) +endif() message(STATUS "codec2 version: ${CODEC2_VERSION}") # Set default build type if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE "Release") -endif(NOT CMAKE_BUILD_TYPE) +endif() # Set default C++ flags. -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -Wall") -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC -Wall") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall") +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall") + +# -fPIC is implied on MinGW... +if(NOT WIN32) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC") +endif() + message(STATUS "Build type is: " ${CMAKE_BUILD_TYPE}) message(STATUS "Compiler Flags: " ${CMAKE_CXX_FLAGS}) @@ -62,18 +70,6 @@ message(STATUS "Compiler Flags: " ${CMAKE_CXX_FLAGS}) # if(MINGW) message(STATUS "System is MinGW.") - foreach(RUNTIME - gcc_s_sjlj-1 - gcc_s_dw2-1 - stdc++-6 - ) - message(STATUS "Checking for ${RUNTIME}") - find_library(${RUNTIME}_LIB ${RUNTIME}) - message(STATUS "runtime found: ${${RUNTIME}_LIB}") - if(${${RUNTIME}_LIB}_FOUND) - list(APPEND CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS ${${RUNTIME}_LIB}) - endif() - endforeach() endif(MINGW) @@ -93,7 +89,7 @@ endif(MINGW) # # Default options -#a +# option(BUILD_SHARED_LIBS "Build shared library. Set to OFF for static library." ON) option(UNITTEST "Build unittest binaries." OFF) @@ -101,7 +97,7 @@ option(INSTALL_EXAMPLES "Install example code." OFF) if(INSTALL_EXAMPLES) install(DIRECTORY octave raw script voicing wav USE_SOURCE_PERMISSIONS - DESTINATION share/codec2) + DESTINATION ${CMAKE_INSTALL_DATADIR}/codec2) endif() @@ -131,6 +127,14 @@ configure_file ("${PROJECT_SOURCE_DIR}/cmake/config.h.in" "${PROJECT_BINARY_DIR}/config.h" ) include_directories(${PROJECT_BINARY_DIR}) +# CMake Package setup +include(CMakePackageConfigHelpers) +configure_package_config_file(cmake/codec2-config.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/codec2-config.cmake + INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/codec2 + PATH_VARS CMAKE_INSTALL_INCLUDEDIR +) + # # codec2 library # @@ -151,7 +155,10 @@ endif(UNITTEST) # distribution packaging tools. # if(WIN32) - include(InstallRequiredSystemLibraries) + configure_file(cmake/GetDependencies.cmake.in cmake/GetDependencies.cmake + @ONLY + ) + install(SCRIPT ${CMAKE_BINARY_DIR}/cmake/GetDependencies.cmake) 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") @@ -160,12 +167,13 @@ if(WIN32) set(CPACK_PACKAGE_VERSION_MINOR ${CODEC2_VERSION_MINOR}) if(CODEC2_VERSION_PATCH) set(CPACK_PACKAGE_VERSION_PATCH ${CODEC2_VERSION_PATCH}) - else(CODEC2_VERSION_PATCH) + else() set(CPACK_PACKAGE_VERSION_PATCH 0) - endif(CODEC2_VERSION_PATCH) + endif() set(CPACK_PACKAGE_INSTALL_DIRECTORY "Codec2") + set(CPACK_CREATE_DESKTOP_LINKS "") set(CPACK_NSIS_DISPLAY_NAME "${CPACK_PACKAGE_INSTALL_DIRECTORY}") - set(CPACK_NSIS_URL_INFO_ABOUT "http:\\\\\\\\codec2.org") + set(CPACK_NSIS_URL_INFO_ABOUT "http://codec2.org") set(CPACK_NSIS_MODIFY_PATH ON) include(CPack) endif(WIN32) diff --git a/codec2/cmake/GetDependencies.cmake.in b/codec2/cmake/GetDependencies.cmake.in new file mode 100644 index 00000000..067ad5e8 --- /dev/null +++ b/codec2/cmake/GetDependencies.cmake.in @@ -0,0 +1,24 @@ +# As this script is run in a new cmake instance, it does not have access to +# the existing cache variables. Pass them in via the configure_file command. +set(CMAKE_BINARY_DIR @CMAKE_BINARY_DIR@) +set(CMAKE_SOURCE_DIR @CMAKE_SOURCE_DIR@) +set(UNIX @UNIX@) +set(WIN32 @WIN32@) +set(CMAKE_CROSSCOMPILING @CMAKE_CROSSCOMPILING@) +set(CMAKE_FIND_LIBRARY_SUFFIXES @CMAKE_FIND_LIBRARY_SUFFIXES@) +set(CMAKE_FIND_LIBRARY_PREFIXES @CMAKE_FIND_LIBRARY_PREFIXES@) +set(CMAKE_SYSTEM_LIBRARY_PATH @CMAKE_SYSTEM_LIBRARY_PATH@) +set(CMAKE_FIND_ROOT_PATH @CMAKE_FIND_ROOT_PATH@) +set(CODEC2_DLL ${CMAKE_BINARY_DIR}/src/libcodec2.dll) + +include(GetPrerequisites) +get_prerequisites(${CODEC2_DLL} _deps 1 1 "" "") +foreach(_runtime ${_deps}) + message("Looking for ${_runtime}") + find_library(RUNTIME_${_runtime} ${_runtime}) + message("${RUNTIME_${_runtime}}") + if(RUNTIME_${_runtime}) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/bin" + TYPE EXECUTABLE FILES "${RUNTIME_${_runtime}}") + endif() +endforeach() diff --git a/codec2/cmake/codec2-config.cmake.in b/codec2/cmake/codec2-config.cmake.in new file mode 100644 index 00000000..db79a539 --- /dev/null +++ b/codec2/cmake/codec2-config.cmake.in @@ -0,0 +1,5 @@ +set(CODEC2_VERSION ${CODEC2_VERSION}) + +@PACKAGE_INIT@ + +set_and_check(CODEC2_INCLUDE_DIR "@CMAKE_INSTALL_FULL_INCLUDEDIR@") diff --git a/codec2/src/CMakeLists.txt b/codec2/src/CMakeLists.txt index 29405ad5..36ffc926 100644 --- a/codec2/src/CMakeLists.txt +++ b/codec2/src/CMakeLists.txt @@ -82,8 +82,8 @@ 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 to the export file from a native build") - INCLUDE(${IMPORT_EXECUTABLES}) + set(IMPORT_EXECUTABLES "IMPORTFILE-NOTFOUND" CACHE FILEPATH "Point to the export file from a native build") + include(${IMPORT_EXECUTABLES}) else(CMAKE_CROSSCOMPILING) # Build code generator binaries. These do not get installed. # generate_codebook @@ -184,21 +184,23 @@ set(CODEC2_SRCS 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}) - set(CODEC2_PUBLIC_HEADERS + golay23.h codec2.h codec2_fdmdv.h codec2_fifo.h comp.h - golay23.h ) -install(FILES ${CODEC2_PUBLIC_HEADERS} - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/codec2 +# +# Setup the codec2 library +# +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} + PUBLIC_HEADER "${CODEC2_PUBLIC_HEADERS}" ) add_executable(c2demo c2demo.c) @@ -241,11 +243,12 @@ install(TARGETS codec2 EXPORT codec2-config LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/codec2 ) -install(EXPORT codec2-config - DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/codec2 -) +#install(EXPORT codec2-config +# DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/codec2 +#) install(TARGETS c2demo diff --git a/codec2/unittest/CMakeLists.txt b/codec2/unittest/CMakeLists.txt index fac25f93..af72e13d 100644 --- a/codec2/unittest/CMakeLists.txt +++ b/codec2/unittest/CMakeLists.txt @@ -81,4 +81,3 @@ target_link_libraries(raw2h codec2) add_definitions(-D__UNITTEST__) add_executable(c2validate c2validate.c) target_link_libraries(c2validate codec2) -#c2validate_LDADD = $(lib_LTLIBRARIES) ../src/libcodec2.la -- 2.25.1