From d603ccdc3b67501ef3375d347864f04e682d6547 Mon Sep 17 00:00:00 2001 From: Vitalii Shylienkov Date: Thu, 9 Apr 2020 13:58:45 +0200 Subject: [PATCH] cmake: update CMake --- CMakeLists.txt | 116 +++++++++++++++++++++++++---- cmake/templates/unity_version.h.in | 12 +++ src/CMakeLists.txt | 22 ------ src/unity.h | 5 +- unityConfig.cmake | 1 + 5 files changed, 114 insertions(+), 42 deletions(-) create mode 100644 cmake/templates/unity_version.h.in delete mode 100644 src/CMakeLists.txt create mode 100644 unityConfig.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 08fafd9..ecfb539 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,24 +8,108 @@ # License: MIT # # # ################################################################################### -cmake_minimum_required(VERSION 3.0 FATAL_ERROR) - -project(unity LANGUAGES C DESCRIPTION "C Unit testing framework.") - -add_subdirectory(src) -target_include_directories(unity - PUBLIC - "$" - "$" - - PRIVATE "src" +cmake_minimum_required(VERSION 3.12) +project(unity + VERSION 2.5.0 + LANGUAGES C + DESCRIPTION "C Unit testing framework." ) -add_library(unity::framework ALIAS unity) +# Main target ------------------------------------------------------------------ +add_library(${PROJECT_NAME} STATIC) +add_library(${PROJECT_NAME}::framework ALIAS ${PROJECT_NAME}) -install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/src/ DESTINATION src) -install(EXPORT unityConfig DESTINATION share/unityConfig/cmake) +# Includes --------------------------------------------------------------------- +include(GNUInstallDirs) +include(CMakePackageConfigHelpers) -# This makes the project importable from the build directory -export(TARGETS unity FILE unityConfig.cmake) +# Configuration ---------------------------------------------------------------- +configure_file(cmake/templates/${PROJECT_NAME}_version.h.in + ${PROJECT_NAME}_version.h + @ONLY +) + +target_sources(${PROJECT_NAME} + PRIVATE + src/unity.c +) + +target_include_directories(${PROJECT_NAME} + PUBLIC + $ + $ + $ +) + +set(${PROJECT_NAME}_PUBLIC_HEADERS src/unity.h + src/unity_internals.h + ${CMAKE_CURRENT_BINARY_DIR}/unity_version.h +) + +set_target_properties(${PROJECT_NAME} + PROPERTIES + C_STANDARD 11 + C_STANDARD_REQUIRED ON + C_EXTENSIONS OFF + PUBLIC_HEADER "${${PROJECT_NAME}_PUBLIC_HEADERS}" + EXPORT_NAME framework +) + +target_compile_options(${PROJECT_NAME} + PRIVATE + $<$:-Wcast-align> + $<$:-Wcast-qual> + $<$:-Wconversion> + $<$:-Wexit-time-destructors> + $<$:-Wglobal-constructors> + $<$:-Wmissing-noreturn> + $<$:-Wmissing-prototypes> + $<$:-Wno-missing-braces> + $<$:-Wold-style-cast> + $<$:-Wshadow> + $<$:-Wweak-vtables> + $<$:-Waddress> + $<$:-Waggregate-return> + $<$:-Wformat-nonliteral> + $<$:-Wformat-security> + $<$:-Wformat> + $<$:-Winit-self> + $<$:-Wmissing-declarations> + $<$:-Wmissing-include-dirs> + $<$:-Wno-multichar> + $<$:-Wno-parentheses> + $<$:-Wno-type-limits> + $<$:-Wno-unused-parameter> + $<$:-Wunreachable-code> + $<$:-Wwrite-strings> + -Wpointer-arith + -Wall + -Werror +) + +write_basic_package_version_file(${PROJECT_NAME}ConfigVersion.cmake + VERSION ${PROJECT_VERSION} + COMPATIBILITY SameMajorVersion +) + +## Target installation +install(TARGETS ${PROJECT_NAME} + EXPORT ${PROJECT_NAME}Targets + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME} + COMPONENT library +) + +## Target's cmake files: targets export +install(EXPORT ${PROJECT_NAME}Targets + NAMESPACE ${PROJECT_NAME}:: + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME} +) + +## Target's cmake files: config and version config for find_package() +install(FILES ${PROJECT_NAME}Config.cmake + ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME} +) diff --git a/cmake/templates/unity_version.h.in b/cmake/templates/unity_version.h.in new file mode 100644 index 0000000..7c89e77 --- /dev/null +++ b/cmake/templates/unity_version.h.in @@ -0,0 +1,12 @@ +#ifndef UNITY_CONFIG_H +#define UNITY_CONFIG_H + +#define UNITY_VERSION_STRING "@PROJECT_VERSION@" +#define UNITY_VERSION_MAJOR @PROJECT_VERSION_MAJOR@ +#define UNITY_VERSION_MINOR @PROJECT_VERSION_MINOR@ +#define UNITY_VERSION_BUILD @PROJECT_VERSION_PATCH@ +#define UNITY_VERSION ((UNITY_VERSION_MAJOR << 16) | \ + (UNITY_VERSION_MINOR << 8) | \ + UNITY_VERSION_BUILD) + +#endif /* UNITY_CONFIG_H */ diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt deleted file mode 100644 index c747cb0..0000000 --- a/src/CMakeLists.txt +++ /dev/null @@ -1,22 +0,0 @@ -################################################################################### -# # -# NAME: CMakeLists.txt # -# # -# AUTHOR: Mike Karlesky, Mark VanderVoord, Greg Williams. # -# WRITTEN BY: Michael Brockus. # -# # -# License: MIT # -# # -################################################################################### -cmake_minimum_required(VERSION 3.0 FATAL_ERROR) - - -add_library(unity STATIC "unity.c") - -install(TARGETS unity EXPORT unityConfig - ARCHIVE DESTINATION "${CMAKE_CURRENT_SOURCE_DIR}/${CMAKE_INSTALL_LIBDIR}" - LIBRARY DESTINATION "${CMAKE_CURRENT_SOURCE_DIR}/${CMAKE_INSTALL_LIBDIR}" - RUNTIME DESTINATION "${CMAKE_CURRENT_SOURCE_DIR}/${CMAKE_INSTALL_BINDIR}" - INCLUDES DESTINATION "${CMAKE_INSTALL_LIBDIR}") - - diff --git a/src/unity.h b/src/unity.h index 925cd4d..6eceb8d 100644 --- a/src/unity.h +++ b/src/unity.h @@ -8,10 +8,7 @@ #define UNITY_FRAMEWORK_H #define UNITY -#define UNITY_VERSION_MAJOR 2 -#define UNITY_VERSION_MINOR 5 -#define UNITY_VERSION_BUILD 0 -#define UNITY_VERSION ((UNITY_VERSION_MAJOR << 16) | (UNITY_VERSION_MINOR << 8) | UNITY_VERSION_BUILD) +#include "unity_version.h" #ifdef __cplusplus extern "C" diff --git a/unityConfig.cmake b/unityConfig.cmake new file mode 100644 index 0000000..55410cc --- /dev/null +++ b/unityConfig.cmake @@ -0,0 +1 @@ +include(${CMAKE_CURRENT_LIST_DIR}/unityTargets.cmake) \ No newline at end of file