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
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})
#
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)
#
# Default options
-#a
+#
option(BUILD_SHARED_LIBS
"Build shared library. Set to OFF for static library." ON)
option(UNITTEST "Build unittest binaries." OFF)
if(INSTALL_EXAMPLES)
install(DIRECTORY octave raw script voicing wav
USE_SOURCE_PERMISSIONS
- DESTINATION share/codec2)
+ DESTINATION ${CMAKE_INSTALL_DATADIR}/codec2)
endif()
"${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
#
# 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")
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)
--- /dev/null
+# 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()
# 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
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)
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