You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
138 lines
4.2 KiB
138 lines
4.2 KiB
#
|
|
#
|
|
# top level build file for cn-cbor
|
|
|
|
## prepare CMAKE
|
|
cmake_minimum_required ( VERSION 3.0.0 )
|
|
|
|
set ( VERSION_MAJOR 0 CACHE STRING "Project major version number")
|
|
set ( VERSION_MINOR "1" CACHE STRING "Project minor version number" )
|
|
set ( VERSION_PATCH "0" CACHE STRING "Project patch version number" )
|
|
set ( CN_VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}" )
|
|
mark_as_advanced(VERSION_MAJOR VERSION_MINOR VERSION_PATCH CN_VERSION)
|
|
|
|
project ( "cn-cbor" VERSION "${CN_VERSION}")
|
|
|
|
find_package(Doxygen)
|
|
|
|
## setup options
|
|
option ( use_context "Use context pointer for CBOR functions" OFF )
|
|
option ( verbose "Produce verbose makefile output" OFF )
|
|
option ( optimize "Optimize for size" OFF )
|
|
option ( fatal_warnings "Treat build warnings as errors" ON )
|
|
option ( coveralls "Generate coveralls data" ON )
|
|
option ( coveralls_send "Send data to coveralls site" OFF )
|
|
option ( build_docs "Create docs using Doxygen" ${DOXYGEN_FOUND} )
|
|
option ( no_floats "Build without floating point support" OFF )
|
|
option ( align_reads "Use memcpy in ntoh*p()" OFF )
|
|
|
|
set ( dist_dir ${CMAKE_BINARY_DIR}/dist )
|
|
set ( prefix ${CMAKE_INSTALL_PREFIX} )
|
|
set ( exec_prefix ${CMAKE_INSTALL_PREFIX}/bin )
|
|
set ( libdir ${CMAKE_INSTALL_PREFIX}/lib )
|
|
set ( includedir ${CMAKE_INSTALL_PREFIX}/include )
|
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cn-cbor.pc.in
|
|
${CMAKE_CURRENT_BINARY_DIR}/cn-cbor.pc @ONLY)
|
|
install (FILES ${CMAKE_CURRENT_BINARY_DIR}/cn-cbor.pc DESTINATION lib/pkgconfig )
|
|
|
|
set ( package_prefix "${CMAKE_PACKAGE_NAME}-${CMAKE_SYSTEM_NAME}" )
|
|
|
|
set ( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${dist_dir}/bin )
|
|
set ( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${dist_dir}/lib )
|
|
set ( CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${dist_dir}/lib )
|
|
|
|
if (NOT CMAKE_BUILD_TYPE)
|
|
if ( optimize )
|
|
set ( CMAKE_BUILD_TYPE MinSizeRel )
|
|
set ( coveralls OFF )
|
|
set ( coveralls_send OFF )
|
|
else ()
|
|
set ( CMAKE_BUILD_TYPE Debug )
|
|
endif ()
|
|
endif()
|
|
|
|
message ( "Build type: ${CMAKE_BUILD_TYPE}" )
|
|
|
|
if ( CMAKE_C_COMPILER_ID STREQUAL "GNU" OR
|
|
CMAKE_C_COMPILER_ID MATCHES "Clang" )
|
|
message ( STATUS "adding GCC/Clang options ")
|
|
add_definitions ( -std=gnu99 -Wall -Wextra -pedantic )
|
|
if ( fatal_warnings )
|
|
add_definitions ( -Werror )
|
|
endif ()
|
|
if ( optimize )
|
|
add_definitions ( -Os )
|
|
endif ()
|
|
elseif ( MSVC )
|
|
add_definitions ( /W3 )
|
|
if ( fatal_warnings )
|
|
add_definitions ( /WX )
|
|
endif ()
|
|
else ()
|
|
message ( FATAL_ERROR "unhandled compiler id: ${CMAKE_C_COMPILER_ID}" )
|
|
endif ()
|
|
|
|
if ( no_floats )
|
|
add_definitions(-DCBOR_NO_FLOAT)
|
|
endif()
|
|
|
|
if ( verbose )
|
|
set ( CMAKE_VERBOSE_MAKEFILE ON )
|
|
endif ()
|
|
|
|
## include the parts
|
|
add_subdirectory ( include )
|
|
add_subdirectory ( src )
|
|
add_subdirectory ( test )
|
|
|
|
install (FILES LICENSE README.md DESTINATION .)
|
|
|
|
## setup packaging
|
|
set ( CPACK_GENERATOR "TGZ" )
|
|
set ( CPACK_PACKAGE_VERSION "${PROJECT_VERSION}" )
|
|
set ( CPACK_SOURCE_GENERATOR "TGZ" )
|
|
set ( CPACK_SOURCE_IGNORE_FILES "/\\\\.git/" )
|
|
file(STRINGS ${CMAKE_CURRENT_SOURCE_DIR}/.gitignore igs)
|
|
foreach (ig IN ITEMS ${igs})
|
|
# remove comments
|
|
string ( REGEX REPLACE "^\\s*#.*" "" ig "${ig}")
|
|
# remove any other whitespace
|
|
string ( STRIP "${ig}" ig)
|
|
# anything left?
|
|
if (ig)
|
|
# dots are literal
|
|
string ( REPLACE "." "\\\\." ig "${ig}" )
|
|
# stars are on thars
|
|
string ( REPLACE "*" ".*" ig "${ig}" )
|
|
list ( APPEND CPACK_SOURCE_IGNORE_FILES "/${ig}/" )
|
|
endif()
|
|
endforeach()
|
|
|
|
set ( CPACK_PACKAGE_DESCRIPTION_FILE ${CMAKE_CURRENT_SOURCE_DIR}/README.md )
|
|
set ( CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE" )
|
|
|
|
include ( CPack )
|
|
include ( CTest )
|
|
|
|
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/cmake)
|
|
include ( LCov )
|
|
|
|
if (build_docs)
|
|
if(NOT DOXYGEN_FOUND)
|
|
message(FATAL_ERROR "Doxygen is needed to build the documentation.")
|
|
endif()
|
|
|
|
set(doxyfile_in ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in)
|
|
set(doxyfile ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile)
|
|
|
|
configure_file(${doxyfile_in} ${doxyfile} @ONLY)
|
|
|
|
add_custom_target(doc
|
|
COMMAND ${DOXYGEN_EXECUTABLE} ${doxyfile}
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
|
COMMENT "Generating API documentation with Doxygen"
|
|
VERBATIM)
|
|
|
|
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html DESTINATION share/doc)
|
|
endif()
|