refactor: clean up cmake
diff --git a/CMakeLists.txt b/CMakeLists.txt
index c859b23..143f0a8 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,141 +1,149 @@
-cmake_minimum_required( VERSION 3.0.0)
+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 (COSE_VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}")
+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(COSE_VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}")
mark_as_advanced(VERSION_MAJOR VERSION_MINOR VERSION_PATCH COSE_VERSION)
-project ("cose-c" VERSION "${COSE_VERSION}")
+project("cose-c" VERSION "${COSE_VERSION}")
###############################################################################
# OPTIONS
###############################################################################
-option (COSE_C_USE_CONTEXT "Use context pointer for COSE functions" ON)
-option (COSE_C_VERBOSE "Produce COSE_C_VERBOSE makefile output" OFF)
-option (COSE_C_OPTIMIZE "Optimize for size" OFF)
-option (COSE_C_FATAL_WARNINGS "Treat build warnings as error" OFF)
-option (COSE_C_COVERALLS "Generate coveralls data" ON)
-option (COSE_C_COVERALLS_SEND "Send data to coveralls site" OFF )
-option (COSE_C_BUILD_DOCS "Create docs using Doxygen" OFF )
-option (COSE_C_BUILD_TESTS "build tests" ON )
-option (COSE_C_BUILD_DUMPER "build dumper" ON )
-option (BUILD_SHARED_LIBS "Build Shared Libraries" ON)
-option (COSE_C_USE_MBEDTLS "Use MBedTLS for the Crypto Package" OFF)
-option (COSE_C_USE_FIND_PACKAGE "Use cmake find_package instead of using cmake project_add" OFF)
-option (COSE_C_INCLUDE_ENCRYPT "Include COSE_ENCRYPT" ON)
-option (COSE_C_INCLUDE_ENCRYPT0 "Include COSE_ENCRYPT0" ON)
-option (COSE_C_INCLUDE_MAC "Include COSE_MAC" ON)
-option (COSE_C_INCLUDE_MAC0 "Include COSE_MAC0" ON)
-option (COSE_C_INCLUDE_SIGN "Include COSE_SIGN" ON)
-option (COSE_C_INCLUDE_SIGN0 "Include COSE_SIGN0" ON)
-option (COSE_C_INCLUDE_SIGN1 "Include COSE_SIGN1" ON)
+option(COSE_C_USE_CONTEXT "Use context pointer for COSE functions" ON)
+option(COSE_C_VERBOSE "Produce COSE_C_VERBOSE makefile output" OFF)
+option(COSE_C_OPTIMIZE "Optimize for size" OFF)
+option(COSE_C_FATAL_WARNINGS "Treat build warnings as error" OFF)
+option(COSE_C_COVERALLS "Generate coveralls data" ON)
+option(COSE_C_COVERALLS_SEND "Send data to coveralls site" OFF)
+option(COSE_C_BUILD_DOCS "Create docs using Doxygen" OFF)
+option(COSE_C_BUILD_TESTS "build tests" ON)
+option(COSE_C_BUILD_DUMPER "build dumper" ON)
+option(BUILD_SHARED_LIBS "Build Shared Libraries" ON)
+option(COSE_C_USE_MBEDTLS "Use MBedTLS for the Crypto Package" OFF)
+option(COSE_C_USE_FIND_PACKAGE "Use cmake find_package instead of using cmake project_add" OFF)
+option(COSE_C_INCLUDE_ENCRYPT "Include COSE_ENCRYPT" ON)
+option(COSE_C_INCLUDE_ENCRYPT0 "Include COSE_ENCRYPT0" ON)
+option(COSE_C_INCLUDE_MAC "Include COSE_MAC" ON)
+option(COSE_C_INCLUDE_MAC0 "Include COSE_MAC0" ON)
+option(COSE_C_INCLUDE_SIGN "Include COSE_SIGN" ON)
+option(COSE_C_INCLUDE_SIGN0 "Include COSE_SIGN0" ON)
+option(COSE_C_INCLUDE_SIGN1 "Include COSE_SIGN1" ON)
-if (NOT COSE_C_INCLUDE_SIGN0)
- message ( "Use COSE_C_INCLUDE_SIGN1 rather than COSE_C_INCLUDE_SIGN0" )
- set (COSE_C_INCLUDE_SIGN1 ${COSE_C_INCLUDE_SIGN0})
-endif ()
+if(NOT COSE_C_INCLUDE_SIGN0)
+ message("Use COSE_C_INCLUDE_SIGN1 rather than COSE_C_INCLUDE_SIGN0")
+ set(COSE_C_INCLUDE_SIGN1 ${COSE_C_INCLUDE_SIGN0})
+endif()
# Set the output of the libraries and executables.
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/cmake)
+list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_BINARY_DIR})
-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 )
+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)
+if(NOT CMAKE_BUILD_TYPE)
+ if(COSE_C_OPTIMIZE)
+ set(CMAKE_BUILD_TYPE MinSizeRel)
+ set(COSE_C_COVERALLS OFF)
+ set(COSE_C_COVERALLS_SEND OFF)
+ else()
+ set(CMAKE_BUILD_TYPE Debug)
+ endif()
+endif()
-if (NOT CMAKE_BUILD_TYPE)
- if (COSE_C_OPTIMIZE)
- set ( CMAKE_BUILD_TYPE MinSizeRel )
- set ( COSE_C_COVERALLS OFF )
- set ( COSE_C_COVERALLS_SEND OFF )
- else ()
- set ( CMAKE_BUILD_TYPE Debug)
- endif ()
-endif ()
+if(NOT COSE_C_INCLUDE_ENCRYPT)
+ add_definitions(-DINCLUDE_ENCRYPT=0)
+endif()
+if(NOT COSE_C_INCLUDE_ENCRYPT0)
+ add_definitions(-DINCLUDE_ENCRYPT0=0)
+endif()
+if(NOT COSE_C_INCLUDE_MAC)
+ add_definitions(-DINCLUDE_MAC=0)
+endif()
+if(NOT COSE_C_INCLUDE_MAC0)
+ add_definitions(-DINCLUDE_MAC0=0)
+endif()
+if(NOT COSE_C_INCLUDE_SIGN)
+ add_definitions(-DINCLUDE_SIGN=0)
+endif()
+if(NOT COSE_C_INCLUDE_SIGN1)
+ add_definitions(-DINCLUDE_SIGN1=0)
+endif()
+if(COSE_C_USE_CONTEXT)
+ add_definitions(-DUSE_CBOR_CONTEXT)
+endif()
+if(MSVC OR CMAKE_C_COMPILER_ID MATCHES "Clang")
+ set(COSE_C_COVERALLS OFF)
+endif()
-if (NOT COSE_C_INCLUDE_ENCRYPT)
- add_definitions( -DINCLUDE_ENCRYPT=0 )
-endif ()
-if (NOT COSE_C_INCLUDE_ENCRYPT0)
- add_definitions( -DINCLUDE_ENCRYPT0=0 )
-endif ()
-if (NOT COSE_C_INCLUDE_MAC)
- add_definitions( -DINCLUDE_MAC=0 )
-endif ()
-if (NOT COSE_C_INCLUDE_MAC0)
- add_definitions( -DINCLUDE_MAC0=0 )
-endif ()
-if (NOT COSE_C_INCLUDE_SIGN)
- add_definitions( -DINCLUDE_SIGN=0 )
-endif ()
-if (NOT COSE_C_INCLUDE_SIGN1)
- add_definitions( -DINCLUDE_SIGN1=0 )
-endif ()
+message("Build type: ${CMAKE_BUILD_TYPE}")
-if ( MSVC OR CMAKE_C_COMPILER_ID MATCHES "Clang" )
- set (COSE_C_COVERALLS OFF)
-endif ()
+add_definitions(-DUSE_ARRAY)
+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(COSE_C_FATAL_WARNINGS)
+ add_definitions(-Werror)
+ endif()
+ if(COSE_C_OPTIMIZE)
+ add_definitions(-Os)
+ endif()
+ add_definitions(-DNDEBUG)
+elseif(MSVC)
+ add_definitions(/W4)
+ if(COSE_C_FATAL_WARNINGS)
+ add_definitions(/WX)
+ endif()
+else()
+ message(FATAL_ERROR "unhandled compiler id: ${CMAKE_C_COMPILER_ID}")
+endif()
-message ( "Build type: ${CMAKE_BUILD_TYPE}" )
+set(LIB_TYPE STATIC)
+if(BUILD_SHARED_LIBS)
+ set(LIB_TYPE SHARED)
+endif(BUILD_SHARED_LIBS)
-add_definitions( -DUSE_ARRAY )
-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 ( COSE_C_FATAL_WARNINGS )
- add_definitions( -Werror )
- endif ()
- if (COSE_C_OPTIMIZE)
- add_definitions( -Os )
- endif ()
- add_definitions( -DNDEBUG )
-elseif (MSVC)
- add_definitions ( /W4 )
- if (COSE_C_FATAL_WARNINGS)
- add_definitions( /WX )
- endif ()
-else ()
- message ( FATAL_ERROR "unhandled compiler id: ${CMAKE_C_COMPILER_ID}" )
-endif ()
-
-set (LIB_TYPE STATIC)
-if (BUILD_SHARED_LIBS)
- set (LIB_TYPE SHARED)
-endif (BUILD_SHARED_LIBS)
-
-if (versbose)
- set (CMAKE_VERBOSE_MAKEFILE ON)
-endif ()
+if(versbose)
+ set(CMAKE_VERBOSE_MAKEFILE ON)
+endif()
###############################################################################
# DOCS
###############################################################################
-if (COSE_C_BUILD_DOCS)
- find_package(Doxygen)
- if (NOT DOXYGEN_FOUND)
- message(FATAL_ERROR "Doxygen is needed to build the documenation")
- endif()
+if(COSE_C_BUILD_DOCS)
+ find_package(Doxygen)
+ if(NOT DOXYGEN_FOUND)
+ message(FATAL_ERROR "Doxygen is needed to build the documenation")
+ endif()
- set(doxyfile_in ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in)
- set(doxyfile ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile)
+ set(doxyfile_in ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in)
+ set(doxyfile ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile)
- configure_file(${doxyfile_in} ${doxyfile} @ONLY)
+ 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)
+ 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)
+ install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html DESTINATION share/doc)
endif()
###############################################################################
@@ -143,60 +151,81 @@
###############################################################################
if(COSE_C_USE_FIND_PACKAGE)
- find_package(cn-cbor REQUIRED)
+ find_package(cn-cbor REQUIRED)
else()
- include(ExternalProject)
- ExternalProject_Add(
- project_cn-cbor
- GIT_REPOSITORY https://github.com/jimsch/cn-cbor
- GIT_TAG master
- CMAKE_ARGS -Doptimize=OFF -Duse_context=${COSE_C_USE_CONTEXT} -Dbuild_docs=OFF -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR> -Dcoveralls=OFF -DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBS} -Dfatal_warnings=OFF
- INSTALL_DIR "${dist_dir}"
- UPDATE_DISCONNECTED 1
- )
+ include(ExternalProject)
+ externalproject_add(
+ project_cn-cbor
+ GIT_REPOSITORY https://github.com/jimsch/cn-cbor
+ GIT_TAG master
+ CMAKE_ARGS -Doptimize=OFF
+ -Duse_context=${COSE_C_USE_CONTEXT}
+ -Dbuild_docs=OFF
+ -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
+ -Dcoveralls=OFF
+ -DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBS}
+ -Dfatal_warnings=OFF
+ INSTALL_DIR "${dist_dir}"
+ UPDATE_DISCONNECTED 1)
- ExternalProject_Get_Property(project_cn-cbor install_dir)
- include_directories ( "${install_dir}/include" )
+ externalproject_get_property(project_cn-cbor install_dir)
+ include_directories("${install_dir}/include")
- if (MSVC)
- add_library (cn-cbor STATIC IMPORTED)
- set_property (TARGET cn-cbor PROPERTY IMPORTED_LOCATION "${install_dir}/lib/${CMAKE_SHARED_MODULE_PREFIX}cn-cbor.lib")
- else ()
- add_library (cn-cbor STATIC IMPORTED)
- set_property (TARGET cn-cbor PROPERTY IMPORTED_LOCATION "${install_dir}/lib/${CMAKE_SHARED_MODULE_PREFIX}cn-cbor${CMAKE_SHARED_LIBRARY_SUFFIX}")
- endif ()
+ if(MSVC)
+ add_library(cn-cbor STATIC IMPORTED GLOBAL)
+ set_property(TARGET cn-cbor PROPERTY IMPORTED_LOCATION
+ "${install_dir}/lib/${CMAKE_SHARED_MODULE_PREFIX}cn-cbor.lib")
+ else()
+ add_library(cn-cbor STATIC IMPORTED GLOBAL)
+ set_property(
+ TARGET cn-cbor PROPERTY IMPORTED_LOCATION
+ "${install_dir}/lib/${CMAKE_SHARED_MODULE_PREFIX}cn-cbor${CMAKE_SHARED_LIBRARY_SUFFIX}")
+ endif()
- add_dependencies(cn-cbor project_cn-cbor)
+ if(NOT TARGET cn-cbor::cn-cbor)
+ add_library(cn-cbor::cn-cbor ALIAS cn-cbor)
+ endif()
+
+ add_dependencies(cn-cbor project_cn-cbor)
endif()
-if (COSE_C_USE_MBEDTLS)
- add_definitions( -DUSE_MBED_TLS )
+if(COSE_C_USE_MBEDTLS)
+ add_definitions(-DUSE_MBED_TLS)
- if(COSE_C_USE_FIND_PACKAGE)
- find_package(MbedTLS REQUIRED)
- else()
- ExternalProject_Add(
- project_mbedtls
- GIT_REPOSITORY https://github.com/ARMmbed/mbedtls
- CMAKE_ARGS -DENABLED_PROGRAMS=OFF -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR> -Dcoveralls=OFF -DUSE_SHARED_MBEDTLS_LIBRARY=${BUILD_SHARED_LIBS} -Dfatal_warnings=OFF -DENABLE_TESTING=OFF -DLIB_INSTALL_DIR=${install_dir}/lib
- INTALL_DIR "${dist_dir}"
- UPDATE_DISCONNECTED 1
- )
+ if(COSE_C_USE_FIND_PACKAGE)
+ find_package(MbedTLS REQUIRED)
+ else()
+ externalproject_add(
+ project_mbedtls
+ GIT_REPOSITORY https://github.com/ARMmbed/mbedtls
+ CMAKE_ARGS -DENABLED_PROGRAMS=OFF
+ -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
+ -Dcoveralls=OFF
+ -DUSE_SHARED_MBEDTLS_LIBRARY=${BUILD_SHARED_LIBS}
+ -Dfatal_warnings=OFF
+ -DENABLE_TESTING=OFF
+ -DLIB_INSTALL_DIR=${install_dir}/lib
+ INTALL_DIR
+ "${dist_dir}"
+ UPDATE_DISCONNECTED 1)
- ExternalProject_Get_Property(project_mbedtls install_dir)
- include_directories( "${install_dir}/include" )
- add_library( mbedtls STATIC IMPORTED)
- if (MSVC)
- set_property (TARGET mbedtls PROPERTY IMPORTED_LOCATION "${dist_dir}/lib/${CMAKE_SHARED_MODULE_PREFIX}mbedcrypto.lib")
- else ()
- set_property (TARGET mbedtls PROPERTY IMPORTED_LOCATION "${dist_dir}/lib/${CMAKE_SHARED_MODULE_PREFIX}mbedcrypto${CMAKE_SHARED_LIBRARY_SUFFIX}")
- endif ()
- add_dependencies(mbedtls project_mbedtls)
- endif()
+ externalproject_get_property(project_mbedtls install_dir)
+ include_directories("${install_dir}/include")
+ add_library(mbedtls STATIC IMPORTED)
+ if(MSVC)
+ set_property(TARGET mbedtls PROPERTY IMPORTED_LOCATION
+ "${dist_dir}/lib/${CMAKE_SHARED_MODULE_PREFIX}mbedcrypto.lib")
+ else()
+ set_property(
+ TARGET mbedtls PROPERTY IMPORTED_LOCATION
+ "${dist_dir}/lib/${CMAKE_SHARED_MODULE_PREFIX}mbedcrypto${CMAKE_SHARED_LIBRARY_SUFFIX}")
+ endif()
+ add_dependencies(mbedtls project_mbedtls)
+ endif()
else()
- find_package(OpenSSL REQUIRED)
-endif ()
+ find_package(OpenSSL REQUIRED)
+endif()
###############################################################################
# ADD LIBRARY
@@ -205,42 +234,41 @@
add_subdirectory(src)
###############################################################################
-# ADD DUMPER
+# ADD DUMPER
###############################################################################
if(COSE_C_BUILD_DUMPER)
- add_subdirectory(dumper)
+ add_subdirectory(dumper)
endif()
###############################################################################
-# ADD TESTS
+# ADD TESTS
###############################################################################
if(COSE_C_BUILD_TESTS)
- include (CTest)
- add_subdirectory(test)
+ enable_testing()
+ include(CTest)
+ add_subdirectory(test)
endif()
###############################################################################
-# PRINT CONFIG
+# PRINT CONFIG
###############################################################################
-message(STATUS "COSE_C_INCLUDE_ENCRYPT:..............${COSE_C_INCLUDE_ENCRYPT}")
-message(STATUS "COSE_C_INCLUDE_ENCRYPT0:.............${COSE_C_INCLUDE_ENCRYPT0}")
-message(STATUS "COSE_C_INCLUDE_MAC:..................${COSE_C_INCLUDE_MAC}")
-message(STATUS "COSE_C_INCLUDE_MAC0:.................${COSE_C_INCLUDE_MAC0}")
-message(STATUS "COSE_C_INCLUDE_SIGN:.................${COSE_C_INCLUDE_SIGN}")
-message(STATUS "COSE_C_INCLUDE_SIGN0:................${COSE_C_INCLUDE_SIGN0}")
-message(STATUS "COSE_C_INCLUDE_SIGN1:................${COSE_C_INCLUDE_SIGN1}")
-message(STATUS "COSE_C_USE_CONTEXT:..................${COSE_C_USE_CONTEXT}")
-message(STATUS "COSE_C_FATAL_WARNINGS:...............${COSE_C_FATAL_WARNINGS}")
-message(STATUS "COSE_C_BUILD_TESTS:..................${COSE_C_BUILD_TESTS}")
-message(STATUS "COSE_C_BUILD_DOCS:...................${COSE_C_BUILD_DOCS}")
-message(STATUS "COSE_C_USE_MBEDTLS:..................${COSE_C_USE_MBEDTLS}")
-message(STATUS "COSE_C_USE_FIND_PACKAGE:.............${COSE_C_USE_FIND_PACKAGE}")
-message(STATUS "COSE_C_BUILD_DUMPER:.................${COSE_C_BUILD_DUMPER}")
-message(STATUS "CMAKE_BUILD_TYPE:....................${CMAKE_BUILD_TYPE}")
-message(STATUS "BUILD_SHARED_LIBS:...................${BUILD_SHARED_LIBS}")
-message(STATUS "COSE_VERSION:........................${COSE_VERSION}")
-
-
+message(STATUS "COSE_C_INCLUDE_ENCRYPT:..........${COSE_C_INCLUDE_ENCRYPT}")
+message(STATUS "COSE_C_INCLUDE_ENCRYPT0:.........${COSE_C_INCLUDE_ENCRYPT0}")
+message(STATUS "COSE_C_INCLUDE_MAC:..............${COSE_C_INCLUDE_MAC}")
+message(STATUS "COSE_C_INCLUDE_MAC0:.............${COSE_C_INCLUDE_MAC0}")
+message(STATUS "COSE_C_INCLUDE_SIGN:.............${COSE_C_INCLUDE_SIGN}")
+message(STATUS "COSE_C_INCLUDE_SIGN0:............${COSE_C_INCLUDE_SIGN0}")
+message(STATUS "COSE_C_INCLUDE_SIGN1:............${COSE_C_INCLUDE_SIGN1}")
+message(STATUS "COSE_C_USE_CONTEXT:..............${COSE_C_USE_CONTEXT}")
+message(STATUS "COSE_C_FATAL_WARNINGS:...........${COSE_C_FATAL_WARNINGS}")
+message(STATUS "COSE_C_BUILD_TESTS:..............${COSE_C_BUILD_TESTS}")
+message(STATUS "COSE_C_BUILD_DOCS:...............${COSE_C_BUILD_DOCS}")
+message(STATUS "COSE_C_USE_MBEDTLS:..............${COSE_C_USE_MBEDTLS}")
+message(STATUS "COSE_C_USE_FIND_PACKAGE:.........${COSE_C_USE_FIND_PACKAGE}")
+message(STATUS "COSE_C_BUILD_DUMPER:.............${COSE_C_BUILD_DUMPER}")
+message(STATUS "CMAKE_BUILD_TYPE:................${CMAKE_BUILD_TYPE}")
+message(STATUS "BUILD_SHARED_LIBS:...............${BUILD_SHARED_LIBS}")
+message(STATUS "COSE_VERSION:....................${COSE_VERSION}")
diff --git a/cmake-format.yaml b/cmake-format.yaml
new file mode 100644
index 0000000..60329ed
--- /dev/null
+++ b/cmake-format.yaml
@@ -0,0 +1,15 @@
+# https://github.com/cheshirekow/cmake_format
+
+# How wide to allow formatted cmake files
+line_width: 120
+
+# How many spaces to tab for indent
+tab_size: 2
+
+# Format command names consistently as 'lower' or 'upper' case
+command_case: "lower"
+
+first_comment_is_literal: False
+
+# enable comment markup parsing and reflow
+enable_markup: False
diff --git a/conanfile.txt b/conanfile.txt
new file mode 100644
index 0000000..91b2156
--- /dev/null
+++ b/conanfile.txt
@@ -0,0 +1,19 @@
+# conan usage:
+
+# pip install conan --upgrade
+# rm -rf build
+# mkdir build
+# cd build
+# conan install ..
+# cmake .. -DCOSE_C_USE_FIND_PACKAGE=OFF
+# cmake --build .
+
+[requires]
+mbedtls/2.16.3-gpl
+cn-cbor/1.0.0
+
+[generators]
+cmake_find_package
+cmake_paths
+
+[options]
diff --git a/dumper/CMakeLists.txt b/dumper/CMakeLists.txt
index 52e87a9..600a0db 100644
--- a/dumper/CMakeLists.txt
+++ b/dumper/CMakeLists.txt
@@ -1,40 +1,20 @@
-#
-# Compiling/running tests
-#
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${dist_dir}/dumper)
-if (COSE_C_USE_CONTEXT)
- add_definitions(-DUSE_CBOR_CONTEXT)
+add_executable(cose_dumper dumper.c)
+target_link_libraries(cose_dumper PRIVATE cn-cbor::cn-cbor cose-c::cose-c)
+if(MSVC)
+ target_link_libraries(cose_dumper PRIVATE ws2_32)
endif()
-set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${dist_dir}/dumper )
-
-add_executable ( cose_dumper dumper.c )
-
-target_link_libraries (cose_dumper PRIVATE cose-c )
-
-## OpenSSL
-
-target_include_directories(cose_dumper PRIVATE ${OPENSSL_INCLUDE_DIR})
-#target_link_libraries( cose_dumper PRIVATE event_openssl)
-target_link_libraries( cose_dumper PRIVATE ${OPENSSL_LIBRARIES} )
-target_link_libraries( cose_dumper PRIVATE cn-cbor )
-
-if ( MSVC )
- message ( "test: ${BUILD_SHARED_LIBS}")
- message ( "COSE_C_VERBOSE: ${COSE_C_VERBOSE}")
-
-target_link_libraries( cose_dumper PRIVATE ws2_32 )
-endif ()
-if (COSE_C_USE_MBEDTLS)
- target_include_directories ( cose_dumper PUBLIC ${CMAKE_SHARED_MODLE_PREFIX}mbedtls${CMAKE_SHARED_LIBRARY_SUFFIX}/include )
- target_link_libraries ( cose_dumper PRIVATE mbedtls )
+if(COSE_C_USE_MBEDTLS)
+ # mbedtls
+ target_include_directories(cose_dumper
+ PUBLIC ${CMAKE_SHARED_MODLE_PREFIX}mbedtls${CMAKE_SHARED_LIBRARY_SUFFIX}/include)
+ target_link_libraries(cose_dumper PRIVATE mbedtls)
+else()
+ # openssl
+ target_include_directories(cose_dumper PRIVATE ${OPENSSL_INCLUDE_DIR})
+ target_link_libraries(cose_dumper PRIVATE ${OPENSSL_LIBRARIES})
endif()
-target_include_directories ( cose_dumper PRIVATE ../include )
-target_include_directories ( cose_dumper PRIVATE ../src )
-target_include_directories ( cose_dumper PUBLIC ../../cose/cn-cbor/include )
-target_include_directories ( cose_dumper PUBLIC ../../cn-cbor/implement/cn-cbor/include )
-
-enable_testing()
-# add_test ( NAME cose_dumper COMMAND cose_dumper )
-
+# target_include_directories(cose_dumper PRIVATE ../src)
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 55e577e..587e86c 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -1,84 +1,81 @@
+add_library(${PROJECT_NAME} ${LIB_TYPE})
-if (COSE_C_USE_MBEDTLS)
- set (cose_crypto mbedtls.c)
-else ()
- set (cose_crypto openssl.c)
+if(COSE_C_USE_MBEDTLS)
+ set(cose_crypto mbedtls.c)
+else()
+ set(cose_crypto openssl.c)
endif()
set(cose_sources
- ${CMAKE_CURRENT_LIST_DIR}/../include/cose/cose.h
- ${CMAKE_CURRENT_LIST_DIR}/../include/cose/cose_configure.h
- crypto.h
- cose_int.h
- crypto.h
- Cose.c
- MacMessage.c
- MacMessage0.c
- Sign.c
- Sign1.c
- cbor.c
- Encrypt.c
- Encrypt0.c
- Recipient.c
- SignerInfo.c
- ${cose_crypto}
-)
+ ${PROJECT_SOURCE_DIR}/include/cose/cose.h
+ ${PROJECT_SOURCE_DIR}/include/cose/cose_configure.h
+ crypto.h
+ cose_int.h
+ crypto.h
+ Cose.c
+ MacMessage.c
+ MacMessage0.c
+ Sign.c
+ Sign1.c
+ cbor.c
+ Encrypt.c
+ Encrypt0.c
+ Recipient.c
+ SignerInfo.c
+ ${cose_crypto})
+target_sources(${PROJECT_NAME} PRIVATE ${cose_sources})
-if (COSE_C_USE_CONTEXT)
- add_definitions(-DUSE_CBOR_CONTEXT)
+target_include_directories(
+ ${PROJECT_NAME}
+ PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include> $<INSTALL_INTERFACE:include>
+ PRIVATE ../src)
+target_link_libraries(${PROJECT_NAME} PRIVATE cn-cbor::cn-cbor)
+# target_include_directories(${PROJECT_NAME} PUBLIC ${dist_dir}/include)
+
+if(COSE_C_USE_MBEDTLS)
+ target_include_directories(${PROJECT_NAME}
+ PUBLIC ${CMAKE_SHARED_MODLE_PREFIX}mbedtls${CMAKE_SHARED_LIBRARY_SUFFIX}/include)
+ target_link_libraries(${PROJECT_NAME} PRIVATE mbedtls)
+else()
+ target_include_directories(${PROJECT_NAME} PRIVATE ${OPENSSL_INCLUDE_DIR})
+ target_link_libraries(${PROJECT_NAME} PRIVATE ${OPENSSL_LIBRARIES})
endif()
-add_library ( cose-c ${LIB_TYPE} ${cose_sources} )
-
-target_include_directories ( cose-c PRIVATE ${OPENSSL_INCLUDE_DIR} )
-target_include_directories ( cose-c PUBLIC ${dist_dir}/include )
-target_include_directories ( cose-c PUBLIC ../include )
-target_include_directories ( cose-c PRIVATE ../src )
-
-target_link_libraries ( cose-c PRIVATE ${OPENSSL_LIBRARIES} )
-target_link_libraries ( cose-c PRIVATE cn-cbor )
-if (COSE_C_USE_MBEDTLS)
- target_include_directories ( cose-c PUBLIC ${CMAKE_SHARED_MODLE_PREFIX}mbedtls${CMAKE_SHARED_LIBRARY_SUFFIX}/include )
- target_link_libraries ( cose-c PRIVATE mbedtls )
+if(MSVC)
+ target_link_libraries(${PROJECT_NAME} PRIVATE ws2_32)
endif()
-if ( MSVC )
- target_link_libraries( cose-c PRIVATE ws2_32 )
-endif ()
+add_library(${PROJECT_NAME}::${PROJECT_NAME} ALIAS ${PROJECT_NAME})
-if (COSE_C_COVERALLS)
- include(Coveralls)
- coveralls_turn_on_coverage()
+if(COSE_C_COVERALLS)
+ include(Coveralls)
+ coveralls_turn_on_coverage()
- set(COVERAGE_SRC "")
- foreach (S ${cose_sources})
- get_filename_component(S_ABS ${S} ABSOLUTE)
- list (APPEND COVERAGE_SRCS ${S_ABS})
- endforeach()
+ set(COVERAGE_SRC "")
+ foreach(S ${cose_sources})
+ get_filename_component(S_ABS ${S} ABSOLUTE)
+ list(APPEND COVERAGE_SRCS ${S_ABS})
+ endforeach()
- # Create the coveralls target.
- coveralls_setup(
- "${COVERAGE_SRCS}"
- ${COSE_C_COVERALLS_SEND} # If we should upload
- )
+ # Create the coveralls target. If we should upload
+ coveralls_setup("${COVERAGE_SRCS}" ${COSE_C_COVERALLS_SEND})
endif()
-
###############################################################################
-# INSTALL LIBRARY
+#INSTALL LIBRARY
###############################################################################
include(GNUInstallDirs)
-install ( TARGETS cose-c
- LIBRARY DESTINATION lib
- ARCHIVE DESTINATION lib
- RUNTIME DESTINATION bin)
install(
- DIRECTORY ../include
+ TARGETS ${PROJECT_NAME}
+ LIBRARY DESTINATION lib COMPONENT lib
+ ARCHIVE DESTINATION lib COMPONENT dev
+ RUNTIME DESTINATION lib COMPONENT lib)
+install(
+ DIRECTORY ${PROJECT_SOURCE_DIR}/include
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
COMPONENT dev
FILES_MATCHING
PATTERN "*.h")
-
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index c95f71f..d8b48cc 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -1,80 +1,152 @@
-#
-# Compiling/running tests
-#
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${dist_dir}/test)
-if (COSE_C_USE_CONTEXT)
- add_definitions(-DUSE_CBOR_CONTEXT)
+add_executable(cose_test test.c json.c encrypt.c sign.c context.c mac_test.c)
+
+target_link_libraries(cose_test PRIVATE cose-c::cose-c cn-cbor::cn-cbor)
+
+if(COSE_C_USE_MBEDTLS)
+ # mbedtls
+ target_link_libraries(cose_test PRIVATE mbedtls)
+else()
+ # OpenSSL
+ target_include_directories(cose_test PRIVATE ${OPENSSL_INCLUDE_DIR})
+ target_link_libraries(cose_test PRIVATE ${OPENSSL_LIBRARIES})
endif()
-set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${dist_dir}/test )
-
-add_executable ( cose_test test.c json.c encrypt.c sign.c context.c mac_test.c)
-
-target_link_libraries (cose_test PRIVATE cose-c )
-if (COSE_C_USE_MBEDTLS)
- target_link_libraries ( cose_test PRIVATE mbedtls )
+if(MSVC)
+ target_link_libraries(cose_test PRIVATE ws2_32)
endif()
-## OpenSSL
-
-target_include_directories(cose_test PRIVATE ${OPENSSL_INCLUDE_DIR})
-target_link_libraries( cose_test PRIVATE ${OPENSSL_LIBRARIES} )
-
-target_link_libraries( cose_test PRIVATE cn-cbor )
-if ( MSVC )
- target_link_libraries( cose_test PRIVATE ws2_32 )
-endif ()
-
-target_include_directories ( cose_test PRIVATE ../include )
-target_include_directories ( cose_test PRIVATE ../src )
-target_include_directories ( cose_test PUBLIC ../../cose/cn-cbor/include )
-target_include_directories ( cose_test PUBLIC ../../cn-cbor/implement/cn-cbor/include )
+target_include_directories(cose_test PRIVATE ../src)
+# target_include_directories(cose_test PUBLIC ../../cose/cn-cbor/include)
enable_testing()
-add_test ( NAME cose_test COMMAND cose_test )
+add_test(NAME cose_test COMMAND cose_test)
-add_test ( NAME RFC8152 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND cose_test --dir Examples/RFC8152 )
+add_test(
+ NAME RFC8152
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+ COMMAND cose_test --dir Examples/RFC8152)
-add_test ( NAME aes-ccm WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND cose_test --dir Examples/aes-ccm-examples )
+add_test(
+ NAME aes-ccm
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+ COMMAND cose_test --dir Examples/aes-ccm-examples)
-add_test ( NAME aes-gcm WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND cose_test --dir Examples/aes-gcm-examples )
+add_test(
+ NAME aes-gcm
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+ COMMAND cose_test --dir Examples/aes-gcm-examples)
-add_test ( NAME enveloped WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND cose_test --dir Examples/enveloped-tests )
-add_test ( NAME encrypted WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND cose_test --dir Examples/encrypted-tests )
+add_test(
+ NAME enveloped
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+ COMMAND cose_test --dir Examples/enveloped-tests)
+add_test(
+ NAME encrypted
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+ COMMAND cose_test --dir Examples/encrypted-tests)
-add_test ( NAME cbc-mac WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND cose_test --dir Examples/cbc-mac-examples )
+add_test(
+ NAME cbc-mac
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+ COMMAND cose_test --dir Examples/cbc-mac-examples)
-add_test ( NAME ecdsa WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND cose_test --dir Examples/ecdsa-examples )
+add_test(
+ NAME ecdsa
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+ COMMAND cose_test --dir Examples/ecdsa-examples)
-add_test ( NAME hmac WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND cose_test --dir Examples/hmac-examples )
-add_test ( NAME mac WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND cose_test --dir Examples/mac-tests )
-add_test ( NAME mac0 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND cose_test --dir Examples/mac0-tests )
+add_test(
+ NAME hmac
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+ COMMAND cose_test --dir Examples/hmac-examples)
+add_test(
+ NAME mac
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+ COMMAND cose_test --dir Examples/mac-tests)
+add_test(
+ NAME mac0
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+ COMMAND cose_test --dir Examples/mac0-tests)
-add_test (NAME hkdf-hmac-sha WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND cose_test --dir Examples/hkdf-hmac-sha-examples )
-add_test (NAME hkdf-aes WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND cose_test --dir Examples/hkdf-aes-examples )
+add_test(
+ NAME hkdf-hmac-sha
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+ COMMAND cose_test --dir Examples/hkdf-hmac-sha-examples)
+add_test(
+ NAME hkdf-aes
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+ COMMAND cose_test --dir Examples/hkdf-aes-examples)
-add_test (NAME aes-wrap WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND cose_test --dir Examples/aes-wrap-examples )
+add_test(
+ NAME aes-wrap
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+ COMMAND cose_test --dir Examples/aes-wrap-examples)
-add_test (NAME ecdh-direct WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND cose_test --dir Examples/ecdh-direct-examples )
-add_test (NAME ecdh-wrap WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND cose_test --dir Examples/ecdh-wrap-examples )
-add_test ( NAME sign WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND cose_test --dir Examples/sign-tests )
-add_test ( NAME sign1 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND cose_test --dir Examples/sign1-tests )
+add_test(
+ NAME ecdh-direct
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+ COMMAND cose_test --dir Examples/ecdh-direct-examples)
+add_test(
+ NAME ecdh-wrap
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+ COMMAND cose_test --dir Examples/ecdh-wrap-examples)
+add_test(
+ NAME sign
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+ COMMAND cose_test --dir Examples/sign-tests)
+add_test(
+ NAME sign1
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+ COMMAND cose_test --dir Examples/sign1-tests)
+add_test(
+ NAME corner-cases
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+ COMMAND cose_test --corners)
-add_test (NAME corner-cases WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND cose_test --corners )
+add_test(
+ NAME Memory-mac-hmac
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+ COMMAND cose_test --memory Examples/hmac-examples/HMac-01.json)
+add_test(
+ NAME Memory-mac-cbc-mac
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+ COMMAND cose_test --memory Examples/cbc-mac-examples/cbc-mac-01.json)
+add_test(
+ NAME Memory-mac0
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+ COMMAND cose_test --memory Examples/hmac-examples/HMac-enc-01.json)
-add_test (NAME Memory-mac-hmac WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND cose_test --memory Examples/hmac-examples/HMac-01.json )
-add_test (NAME Memory-mac-cbc-mac WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND cose_test --memory Examples/cbc-mac-examples/cbc-mac-01.json )
-add_test (NAME Memory-mac0 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND cose_test --memory Examples/hmac-examples/HMac-enc-01.json )
+add_test(
+ NAME Memory-encrypt-gcm
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+ COMMAND cose_test --memory Examples/aes-gcm-examples/aes-gcm-enc-01.json)
+add_test(
+ NAME Memory-encrypt-ccm
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+ COMMAND cose_test --memory Examples/aes-ccm-examples/aes-ccm-enc-01.json)
+add_test(
+ NAME Memory-enveloped
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+ COMMAND cose_test --memory Examples/aes-gcm-examples/aes-gcm-01.json)
-add_test (NAME Memory-encrypt-gcm WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND cose_test --memory Examples/aes-gcm-examples/aes-gcm-enc-01.json )
-add_test (NAME Memory-encrypt-ccm WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND cose_test --memory Examples/aes-ccm-examples/aes-ccm-enc-01.json )
-add_test (NAME Memory-enveloped WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND cose_test --memory Examples/aes-gcm-examples/aes-gcm-01.json )
+add_test(
+ NAME Memory-ecdh
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+ COMMAND cose_test --memory Examples/ecdh-direct-examples/p256-hkdf-256-01.json)
+add_test(
+ NAME Memory-aes-kw
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+ COMMAND cose_test --memory Examples/aes-wrap-examples/aes-wrap-128-01.json)
-add_test (NAME Memory-ecdh WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND cose_test --memory Examples/ecdh-direct-examples/p256-hkdf-256-01.json )
-add_test (NAME Memory-aes-kw WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND cose_test --memory Examples/aes-wrap-examples/aes-wrap-128-01.json )
-
-add_test (NAME Memory-sign0 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND cose_test --memory Examples/ecdsa-examples/ecdsa-sig-01.json )
-add_test (NAME Memory-sign WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND cose_test --memory Examples/ecdsa-examples/ecdsa-01.json )
-
+add_test(
+ NAME Memory-sign0
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+ COMMAND cose_test --memory Examples/ecdsa-examples/ecdsa-sig-01.json)
+add_test(
+ NAME Memory-sign
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+ COMMAND cose_test --memory Examples/ecdsa-examples/ecdsa-01.json)