From c531443efd3022dab96e481fd85563af91675a2b Mon Sep 17 00:00:00 2001 From: bergmann Date: Wed, 6 Nov 2019 23:34:22 +0100 Subject: [PATCH] * Updated project structure --- .gitmodules | 2 +- CMakeLists.txt | 98 ++++++------- README.md | 3 + cmake/FindGTest.cmake | 282 ++++++++++++++++++++++++++++++++++++ cmake/cppcurl-const.cmake | 34 ++--- cmake/cppcurl-options.cmake | 18 +-- cmake/cppcurl-var.cmake | 48 +++--- cmake/modules | 2 +- src/CMakeLists.txt | 95 ++++++------ test/CMakeLists.txt | 118 ++++++++------- 10 files changed, 502 insertions(+), 198 deletions(-) create mode 100644 README.md create mode 100644 cmake/FindGTest.cmake diff --git a/.gitmodules b/.gitmodules index a89889c..37e8830 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ [submodule "cmake/modules"] path = cmake/modules - url = b3rgmann@git.bergmann89.de:cpp/CmakeModules.git + url = b3rgmann@git.bergmann89.de:cpp/CMakeModules.git diff --git a/CMakeLists.txt b/CMakeLists.txt index 5e7fad1..9e4e0bf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,63 +1,63 @@ # Initialize CMake ################################################################################ -CMake_Minimum_Required ( VERSION 3.12.0 FATAL_ERROR ) +CMake_Minimum_Required ( VERSION 3.12.0 FATAL_ERROR ) # Set CMAKE_BUILD_TYPE -If ( NOT CMAKE_BUILD_TYPE ) - Set ( CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build!" FORCE ) -EndIf ( NOT CMAKE_BUILD_TYPE ) -Set_Property ( CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS Debug Release RelWithDebInfo MinSizeRel ) +If ( NOT CMAKE_BUILD_TYPE ) + Set ( CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build!" FORCE ) +EndIf ( NOT CMAKE_BUILD_TYPE ) +Set_Property ( CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS Debug Release RelWithDebInfo MinSizeRel ) # Set CMAKE_MODULE_PATH -If ( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/cmake/" ) - Set ( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} - "${CMAKE_CURRENT_SOURCE_DIR}/cmake/" ) -EndIf ( ) -If ( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/cmake/" ) - Set ( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} - "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules" ) -EndIf ( ) +If ( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/cmake/" ) + Set ( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} + "${CMAKE_CURRENT_SOURCE_DIR}/cmake/" ) +EndIf ( ) +If ( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules/cmake" ) + Set ( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} + "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules/cmake" ) +EndIf ( ) # Project ######################################################################################### -Include ( CTest ) -Include ( GNUInstallDirs ) -Include ( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/cppcurl-options.cmake ) -Include ( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/cppcurl-const.cmake ) -Include ( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/cppcurl-var.cmake ) -Project ( ${CPPCURL_PROJECT_NAME} - DESCRIPTION "${CPPCURL_PROJECT_DESCRIPTION}" - VERSION "${CPPCURL_VERSION}" ) +Include ( GNUInstallDirs ) +Include ( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/cppcurl-options.cmake ) +Include ( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/cppcurl-const.cmake ) +Include ( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/cppcurl-var.cmake ) +Project ( ${CPPCURL_PROJECT_NAME} + DESCRIPTION "${CPPCURL_PROJECT_DESCRIPTION}" + VERSION "${CPPCURL_VERSION}" ) +Include ( CTest ) # Subdirectories -Add_SubDirectory ( ${CMAKE_CURRENT_SOURCE_DIR}/src ) -Add_SubDirectory ( ${CMAKE_CURRENT_SOURCE_DIR}/test ) +Add_SubDirectory ( ${CMAKE_CURRENT_SOURCE_DIR}/src ) +Add_SubDirectory ( ${CMAKE_CURRENT_SOURCE_DIR}/test ) # Install -If ( NOT CPPCURL_HAS_EXPORT - OR NOT CPPCURL_INSTALL_PACKAGE ) - Return ( ) -EndIf ( ) - -Include ( CMakePackageConfigHelpers ) -Write_Basic_Package_Version_File ( "${CMAKE_CURRENT_BINARY_DIR}/cmake/cppcurl-config-version.cmake" - VERSION ${CPPCURL_VERSION} - COMPATIBILITY AnyNewerVersion ) -Configure_File ( "${CMAKE_CURRENT_SOURCE_DIR}/cmake/cppcurl-config.cmake" - "${CMAKE_CURRENT_BINARY_DIR}/cmake/cppcurl-config.cmake" - @ONLY ) - -Set ( ConfigPackageLocation "${CPPCURL_INSTALL_DIR_SHARE}/cmake" ) -Install ( EXPORT - cppcurl - NAMESPACE - cppcurl:: - DESTINATION - ${ConfigPackageLocation} ) -Install ( FILES +If ( NOT CPPCURL_HAS_EXPORT + OR NOT CPPCURL_INSTALL_PACKAGE ) + Return ( ) +EndIf ( ) + +Include ( CMakePackageConfigHelpers ) +Write_Basic_Package_Version_File ( "${CMAKE_CURRENT_BINARY_DIR}/cmake/cppcurl-config-version.cmake" + VERSION ${CPPCURL_VERSION} + COMPATIBILITY AnyNewerVersion ) +Configure_File ( "${CMAKE_CURRENT_SOURCE_DIR}/cmake/cppcurl-config.cmake" "${CMAKE_CURRENT_BINARY_DIR}/cmake/cppcurl-config.cmake" - "${CMAKE_CURRENT_BINARY_DIR}/cmake/cppcurl-config-version.cmake" - DESTINATION - ${ConfigPackageLocation} - COMPONENT - Devel ) + @ONLY ) + +Set ( ConfigPackageLocation "${CPPCURL_INSTALL_DIR_SHARE}/cmake" ) +Install ( EXPORT + cppcurl + NAMESPACE + cppcurl:: + DESTINATION + ${ConfigPackageLocation} ) +Install ( FILES + "${CMAKE_CURRENT_BINARY_DIR}/cmake/cppcurl-config.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/cmake/cppcurl-config-version.cmake" + DESTINATION + ${ConfigPackageLocation} + COMPONENT + Devel ) diff --git a/README.md b/README.md new file mode 100644 index 0000000..87da854 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# cppcurl + +C++ wrapper library for curl. diff --git a/cmake/FindGTest.cmake b/cmake/FindGTest.cmake new file mode 100644 index 0000000..470b9e8 --- /dev/null +++ b/cmake/FindGTest.cmake @@ -0,0 +1,282 @@ +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file Copyright.txt or https://cmake.org/licensing for details. + +#[=======================================================================[.rst: +FindGTest +--------- + +Locate the Google C++ Testing Framework. + +Imported targets +^^^^^^^^^^^^^^^^ + +This module defines the following :prop_tgt:`IMPORTED` targets: + +``GTest::GTest`` + The Google Test ``gtest`` library, if found; adds Thread::Thread + automatically +``GTest::Main`` + The Google Test ``gtest_main`` library, if found + + +Result variables +^^^^^^^^^^^^^^^^ + +This module will set the following variables in your project: + +``GTEST_FOUND`` + Found the Google Testing framework +``GTEST_INCLUDE_DIRS`` + the directory containing the Google Test headers + +The library variables below are set as normal variables. These +contain debug/optimized keywords when a debugging library is found. + +``GTEST_LIBRARIES`` + The Google Test ``gtest`` library; note it also requires linking + with an appropriate thread library +``GTEST_MAIN_LIBRARIES`` + The Google Test ``gtest_main`` library +``GTEST_BOTH_LIBRARIES`` + Both ``gtest`` and ``gtest_main`` + +Cache variables +^^^^^^^^^^^^^^^ + +The following cache variables may also be set: + +``GTEST_ROOT`` + The root directory of the Google Test installation (may also be + set as an environment variable) +``GTEST_MSVC_SEARCH`` + If compiling with MSVC, this variable can be set to ``MT`` or + ``MD`` (the default) to enable searching a GTest build tree + + +Example usage +^^^^^^^^^^^^^ + +:: + + enable_testing() + find_package(GTest REQUIRED) + + add_executable(foo foo.cc) + target_link_libraries(foo GTest::GTest GTest::Main) + + add_test(AllTestsInFoo foo) + + +Deeper integration with CTest +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +See :module:`GoogleTest` for information on the :command:`gtest_add_tests` +and :command:`gtest_discover_tests` commands. +#]=======================================================================] + +include(GoogleTest) + +function(__gtest_append_debugs _endvar _library) + if(${_library} AND ${_library}_DEBUG) + set(_output optimized ${${_library}} debug ${${_library}_DEBUG}) + else() + set(_output ${${_library}}) + endif() + set(${_endvar} ${_output} PARENT_SCOPE) +endfunction() + +function(__gtest_find_library _name) + find_library(${_name} + NAMES ${ARGN} + HINTS + ENV GTEST_ROOT + ${GTEST_ROOT} + PATH_SUFFIXES ${_gtest_libpath_suffixes} + ) + mark_as_advanced(${_name}) +endfunction() + +macro(__gtest_determine_windows_library_type _var) + if(EXISTS "${${_var}}") + file(TO_NATIVE_PATH "${${_var}}" _lib_path) + get_filename_component(_name "${${_var}}" NAME_WE) + file(STRINGS "${${_var}}" _match REGEX "${_name}\\.dll" LIMIT_COUNT 1) + if(NOT _match STREQUAL "") + set(${_var}_TYPE SHARED PARENT_SCOPE) + else() + set(${_var}_TYPE UNKNOWN PARENT_SCOPE) + endif() + return() + endif() +endmacro() + +function(__gtest_determine_library_type _var) + if(WIN32) + # For now, at least, only Windows really needs to know the library type + __gtest_determine_windows_library_type(${_var}) + __gtest_determine_windows_library_type(${_var}_RELEASE) + __gtest_determine_windows_library_type(${_var}_DEBUG) + endif() + # If we get here, no determination was made from the above checks + set(${_var}_TYPE UNKNOWN PARENT_SCOPE) +endfunction() + +function(__gtest_import_library _target _var _config) + if(_config) + set(_config_suffix "_${_config}") + else() + set(_config_suffix "") + endif() + + set(_lib "${${_var}${_config_suffix}}") + if(EXISTS "${_lib}") + if(_config) + set_property(TARGET ${_target} APPEND PROPERTY + IMPORTED_CONFIGURATIONS ${_config}) + endif() + set_target_properties(${_target} PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES${_config_suffix} "CXX") + if(WIN32 AND ${_var}_TYPE STREQUAL SHARED) + set_target_properties(${_target} PROPERTIES + IMPORTED_IMPLIB${_config_suffix} "${_lib}") + else() + set_target_properties(${_target} PROPERTIES + IMPORTED_LOCATION${_config_suffix} "${_lib}") + endif() + endif() +endfunction() + +# + +if(NOT DEFINED GTEST_MSVC_SEARCH) + set(GTEST_MSVC_SEARCH MD) +endif() + +set(_gtest_libpath_suffixes lib) +if(MSVC) + if(GTEST_MSVC_SEARCH STREQUAL "MD") + list(APPEND _gtest_libpath_suffixes + msvc/gtest-md/Debug + msvc/gtest-md/Release + msvc/x64/Debug + msvc/x64/Release + ) + elseif(GTEST_MSVC_SEARCH STREQUAL "MT") + list(APPEND _gtest_libpath_suffixes + msvc/gtest/Debug + msvc/gtest/Release + msvc/x64/Debug + msvc/x64/Release + ) + endif() +endif() + + +find_path(GTEST_INCLUDE_DIR gtest/gtest.h + HINTS + $ENV{GTEST_ROOT}/include + ${GTEST_ROOT}/include +) +mark_as_advanced(GTEST_INCLUDE_DIR) + +find_path(GMOCK_INCLUDE_DIR gmock/gmock.h + HINTS + $ENV{GTEST_ROOT}/include + ${GTEST_ROOT}/include +) +mark_as_advanced(GMOCK_INCLUDE_DIR) + +if(MSVC AND GTEST_MSVC_SEARCH STREQUAL "MD") + # The provided /MD project files for Google Test add -md suffixes to the + # library names. + __gtest_find_library(GTEST_LIBRARY gtest-md gtest) + __gtest_find_library(GTEST_LIBRARY_DEBUG gtest-mdd gtestd) + __gtest_find_library(GTEST_MAIN_LIBRARY gtest_main-md gtest_main) + __gtest_find_library(GTEST_MAIN_LIBRARY_DEBUG gtest_main-mdd gtest_maind) +else() + __gtest_find_library(GTEST_LIBRARY gtest) + __gtest_find_library(GTEST_LIBRARY_DEBUG gtestd) + __gtest_find_library(GTEST_MAIN_LIBRARY gtest_main) + __gtest_find_library(GTEST_MAIN_LIBRARY_DEBUG gtest_maind) + + __gtest_find_library(GMOCK_LIBRARY gmock) + __gtest_find_library(GMOCK_LIBRARY_DEBUG gmockd) + __gtest_find_library(GMOCK_MAIN_LIBRARY gmock_main) + __gtest_find_library(GMOCK_MAIN_LIBRARY_DEBUG gmock_maind) +endif() + +include(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(GTest DEFAULT_MSG + GTEST_LIBRARY + GTEST_INCLUDE_DIR + GTEST_MAIN_LIBRARY + GMOCK_LIBRARY + GMOCK_INCLUDE_DIR + GMOCK_MAIN_LIBRARY) + +if(GTEST_FOUND) + set(GTEST_INCLUDE_DIRS ${GTEST_INCLUDE_DIR}) + __gtest_append_debugs(GTEST_LIBRARIES GTEST_LIBRARY) + __gtest_append_debugs(GTEST_MAIN_LIBRARIES GTEST_MAIN_LIBRARY) + set(GTEST_BOTH_LIBRARIES ${GTEST_LIBRARIES} ${GTEST_MAIN_LIBRARIES}) + + find_package(Threads QUIET) + + if(NOT TARGET GTest::GTest) + __gtest_determine_library_type(GTEST_LIBRARY) + add_library(GTest::GTest ${GTEST_LIBRARY_TYPE} IMPORTED) + if(TARGET Threads::Threads) + set_target_properties(GTest::GTest PROPERTIES + INTERFACE_LINK_LIBRARIES Threads::Threads) + endif() + if(GTEST_LIBRARY_TYPE STREQUAL "SHARED") + set_target_properties(GTest::GTest PROPERTIES + INTERFACE_COMPILE_DEFINITIONS "GTEST_LINKED_AS_SHARED_LIBRARY=1") + endif() + if(GTEST_INCLUDE_DIRS) + set_target_properties(GTest::GTest PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${GTEST_INCLUDE_DIRS}") + endif() + __gtest_import_library(GTest::GTest GTEST_LIBRARY "") + __gtest_import_library(GTest::GTest GTEST_LIBRARY "RELEASE") + __gtest_import_library(GTest::GTest GTEST_LIBRARY "DEBUG") + endif() + if(NOT TARGET GTest::Main) + __gtest_determine_library_type(GTEST_MAIN_LIBRARY) + add_library(GTest::Main ${GTEST_MAIN_LIBRARY_TYPE} IMPORTED) + set_target_properties(GTest::Main PROPERTIES + INTERFACE_LINK_LIBRARIES "GTest::GTest") + __gtest_import_library(GTest::Main GTEST_MAIN_LIBRARY "") + __gtest_import_library(GTest::Main GTEST_MAIN_LIBRARY "RELEASE") + __gtest_import_library(GTest::Main GTEST_MAIN_LIBRARY "DEBUG") + endif() + + if(NOT TARGET GMock::GMock) + __gtest_determine_library_type(GMOCK_LIBRARY) + add_library(GMock::GMock ${GMOCK_LIBRARY_TYPE} IMPORTED) + if(TARGET Threads::Threads) + set_target_properties(GMock::GMock PROPERTIES + INTERFACE_LINK_LIBRARIES GTest::GTest) + endif() + if(GTEST_LIBRARY_TYPE STREQUAL "SHARED") + set_target_properties(GMock::GMock PROPERTIES + INTERFACE_COMPILE_DEFINITIONS "GMOCK_LINKED_AS_SHARED_LIBRARY=1") + endif() + if(GMOCK_INCLUDE_DIRS) + set_target_properties(GMock::GMock PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${GMOCK_INCLUDE_DIRS}") + endif() + __gtest_import_library(GMock::GMock GMOCK_LIBRARY "") + __gtest_import_library(GMock::GMock GMOCK_LIBRARY "RELEASE") + __gtest_import_library(GMock::GMock GMOCK_LIBRARY "DEBUG") + endif() + if(NOT TARGET GMock::Main) + __gtest_determine_library_type(GMOCK_MAIN_LIBRARY) + add_library(GMock::Main ${GTEST_MAIN_LIBRARY_TYPE} IMPORTED) + set_target_properties(GMock::Main PROPERTIES + INTERFACE_LINK_LIBRARIES GMock::GMock) + __gtest_import_library(GMock::Main GMOCK_MAIN_LIBRARY "") + __gtest_import_library(GMock::Main GMOCK_MAIN_LIBRARY "RELEASE") + __gtest_import_library(GMock::Main GMOCK_MAIN_LIBRARY "DEBUG") + endif() +endif() diff --git a/cmake/cppcurl-const.cmake b/cmake/cppcurl-const.cmake index 1e27e20..6467f97 100644 --- a/cmake/cppcurl-const.cmake +++ b/cmake/cppcurl-const.cmake @@ -1,28 +1,28 @@ # This file contains constant variables that are fixed to this project # Version -Set ( CPPCURL_VERSION_MAJOR 1 ) -Set ( CPPCURL_VERSION_MINOR 0 ) -Set ( CPPCURL_VERSION_PATCH 0 ) -Set ( CPPCURL_VERSION_BUILD 0 ) -Set ( CPPCURL_VERSION_HASH "" ) -Set ( CPPCURL_VERSION_BEHIND 0 ) -Set ( CPPCURL_VERSION_DIRTY 0 ) +Set ( CPPCURL_VERSION_MAJOR 1 ) +Set ( CPPCURL_VERSION_MINOR 0 ) +Set ( CPPCURL_VERSION_PATCH 0 ) +Set ( CPPCURL_VERSION_BUILD 0 ) +Set ( CPPCURL_VERSION_HASH "" ) +Set ( CPPCURL_VERSION_BEHIND 0 ) +Set ( CPPCURL_VERSION_DIRTY 0 ) # Names -Set ( CPPCURL_PROJECT_NAME "cppcurl" ) -Set ( CPPCURL_PROJECT_DESCRIPTION "C++ wrapper for the curl library." ) +Set ( CPPCURL_PROJECT_NAME "cppcurl" ) +Set ( CPPCURL_PROJECT_DESCRIPTION "C++ wrapper library for curl." ) # Include generated variables for further usage -Include ( ${CMAKE_CURRENT_LIST_DIR}/cppcurl-var.cmake ) +Include ( ${CMAKE_CURRENT_LIST_DIR}/cppcurl-var.cmake ) # Install directories -Set ( CPPCURL_INSTALL_DIR_INCLUDE "${CMAKE_INSTALL_INCLUDEDIR}/${CPPCURL_NAME}" ) -Set ( CPPCURL_INSTALL_DIR_LIB "${CMAKE_INSTALL_LIBDIR}" ) -Set ( CPPCURL_INSTALL_DIR_SHARE "${CMAKE_INSTALL_DATAROOTDIR}/${CPPCURL_NAME}" ) +Set ( CPPCURL_INSTALL_DIR_INCLUDE "${CMAKE_INSTALL_INCLUDEDIR}/${CPPCURL_NAME}" ) +Set ( CPPCURL_INSTALL_DIR_LIB "${CMAKE_INSTALL_LIBDIR}" ) +Set ( CPPCURL_INSTALL_DIR_SHARE "${CMAKE_INSTALL_DATAROOTDIR}/${CPPCURL_NAME}" ) # C Standard -Set ( CMAKE_C_STANDARD 11 ) -Set ( CMAKE_CXX_STANDARD 17 ) -Set ( CMAKE_C_STANDARD_REQUIRED ON ) -Set ( CMAKE_CXX_STANDARD_REQUIRED ON ) +Set ( CMAKE_C_STANDARD 11 ) +Set ( CMAKE_CXX_STANDARD 17 ) +Set ( CMAKE_C_STANDARD_REQUIRED ON ) +Set ( CMAKE_CXX_STANDARD_REQUIRED ON ) diff --git a/cmake/cppcurl-options.cmake b/cmake/cppcurl-options.cmake index 0cd119c..8fbbf45 100644 --- a/cmake/cppcurl-options.cmake +++ b/cmake/cppcurl-options.cmake @@ -1,11 +1,11 @@ # This file contains options that can be passed to the cmake command -Option ( CPPCURL_INSTALL_HEADER - "Install headers of cppcurl." - ON ) -Option ( CPPCURL_INSTALL_PACKAGE - "Install the cmake package of cppcurl." - ON ) -Option ( CPPCURL_USE_GIT_VERSION - "Read the git tags to get the version of cppcurl" - ON ) +Option ( CPPCURL_INSTALL_HEADER + "Install headers of cppcurl." + ON ) +Option ( CPPCURL_INSTALL_PACKAGE + "Install the cmake package of cppcurl." + ON ) +Option ( CPPCURL_USE_GIT_VERSION + "Read the git tags to get the version of cppcurl" + ON ) diff --git a/cmake/cppcurl-var.cmake b/cmake/cppcurl-var.cmake index 04a69fd..8ac9692 100644 --- a/cmake/cppcurl-var.cmake +++ b/cmake/cppcurl-var.cmake @@ -1,26 +1,32 @@ # This file contains generated variables that are needed for the project # Git Version -If ( CPPCURL_USE_GIT_VERSION ) - Include ( git_helper OPTIONAL RESULT_VARIABLE HAS_GIT_HELPER ) - If ( HAS_GIT_HELPER ) - GitGetVersion ( ${CMAKE_CURRENT_LIST_DIR}/.. - CPPCURL_VERSION_MAJOR - CPPCURL_VERSION_MINOR - CPPCURL_VERSION_PATCH - CPPCURL_VERSION_BUILD - CPPCURL_VERSION_HASH - CPPCURL_VERSION_BEHIND - CPPCURL_VERSION_DIRTY ) - EndIf ( ) -EndIf ( ) +If ( CPPCURL_USE_GIT_VERSION ) + Include ( git_helper OPTIONAL RESULT_VARIABLE HAS_GIT_HELPER ) + If ( HAS_GIT_HELPER ) + GitGetVersion ( ${CMAKE_CURRENT_LIST_DIR}/.. + CPPCURL_VERSION_MAJOR + CPPCURL_VERSION_MINOR + CPPCURL_VERSION_PATCH + CPPCURL_VERSION_BUILD + CPPCURL_VERSION_HASH + CPPCURL_VERSION_BEHIND + CPPCURL_VERSION_DIRTY ) + EndIf ( ) +EndIf ( ) # Strings -Set ( CPPCURL_VERSION_SHORT "${CPPCURL_VERSION_MAJOR}.${CPPCURL_VERSION_MINOR}" ) -Set ( CPPCURL_VERSION "${CPPCURL_VERSION_SHORT}.${CPPCURL_VERSION_PATCH}.${CPPCURL_VERSION_BUILD}" ) -Set ( CPPCURL_VERSION_COMPLETE "${CPPCURL_VERSION}" ) -Set ( CPPCURL_NAME "${CPPCURL_PROJECT_NAME}-${CPPCURL_VERSION_SHORT}" ) -Set ( CPPCURL_OUTPUTNAME "${CPPCURL_PROJECT_NAME}" ) -If ( CPPCURL_VERSION_BEHIND ) - Set ( CPPCURL_VERSION_COMPLETE "${CPPCURL_VERSION_COMPLETE}+${CPPCURL_VERSION_BEHIND}" ) -EndIf ( ) +Set ( CPPCURL_VERSION_SHORT + "${CPPCURL_VERSION_MAJOR}.${CPPCURL_VERSION_MINOR}" ) +Set ( CPPCURL_VERSION + "${CPPCURL_VERSION_SHORT}.${CPPCURL_VERSION_PATCH}.${CPPCURL_VERSION_BUILD}" ) +Set ( CPPCURL_VERSION_COMPLETE + "${CPPCURL_VERSION}" ) +Set ( CPPCURL_NAME + "${CPPCURL_PROJECT_NAME}-${CPPCURL_VERSION_SHORT}" ) +Set ( CPPCURL_OUTPUTNAME + "${CPPCURL_PROJECT_NAME}" ) +If ( CPPCURL_VERSION_BEHIND ) + Set ( CPPCURL_VERSION_COMPLETE + "${CPPCURL_VERSION_COMPLETE}+${CPPCURL_VERSION_BEHIND}" ) +EndIf ( ) diff --git a/cmake/modules b/cmake/modules index ebbae4f..94b9877 160000 --- a/cmake/modules +++ b/cmake/modules @@ -1 +1 @@ -Subproject commit ebbae4fbb42d671331b4c6e9d1d142f41dcacc1b +Subproject commit 94b9877d65e46c9d8169ebc46f163d02e4d9dcf3 diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index ac111a0..23568aa 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,58 +1,59 @@ # Initialize ###################################################################################### -Include ( cotire OPTIONAL RESULT_VARIABLE HAS_COTIRE ) -Include ( pedantic OPTIONAL RESULT_VARIABLE HAS_PEDANTIC ) -Include ( strip_symbols OPTIONAL RESULT_VARIABLE HAS_STRIP_SYMBOLS ) +Include ( cotire OPTIONAL RESULT_VARIABLE HAS_COTIRE ) +Include ( pedantic OPTIONAL RESULT_VARIABLE HAS_PEDANTIC ) +Include ( strip_symbols OPTIONAL RESULT_VARIABLE HAS_STRIP_SYMBOLS ) -Find_Package ( CURL REQUIRED) -Find_Package ( cppcore QUIET ) -If ( cppcore_FOUND ) - Set ( CPPCURL_HAS_CPPCORE true ) -EndIf ( ) +Find_Package ( CURL REQUIRED) +Find_Package ( cppcore QUIET ) +If ( cppcore_FOUND ) + Set ( CPPCURL_HAS_CPPCORE true ) +EndIf ( ) # Interface Library ############################################################################### -Set ( CPPCURL_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../include ) -Set ( CPPCURL_GENERATED_INCLUDE_DIR ${CMAKE_CURRENT_BINARY_DIR}/generated/include ) -Configure_File ( ${CMAKE_CURRENT_SOURCE_DIR}/../cmake/config.h.in - ${CPPCURL_GENERATED_INCLUDE_DIR}/cppcurl/config.h ) -Add_Library ( cppcurl-mock INTERFACE ) -Get_Target_Property ( CURL_INCLUDE CURL::libcurl INTERFACE_INCLUDE_DIRECTORIES ) -Target_Include_Directories ( cppcurl-mock - INTERFACE - ${CURL_INCLUDE} - $ - $ - $ ) -If ( CPPCURL_HAS_CPPCORE ) - Target_Link_Libraries ( cppcurl-mock - INTERFACE - cppcore::cppcore ) -EndIf ( ) - -Add_Library ( cppcurl INTERFACE ) -Target_Link_Libraries ( cppcurl - INTERFACE - CURL::libcurl - cppcurl-mock ) +Set ( CPPCURL_GENERATED_INCLUDE_DIR ${CMAKE_CURRENT_BINARY_DIR}/generated/include ) +Configure_File ( ${CMAKE_CURRENT_SOURCE_DIR}/../cmake/config.h.in + ${CPPCURL_GENERATED_INCLUDE_DIR}/cppcurl/config.h ) + +Set ( CPPCURL_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../include ) +Add_Library ( cppcurl-mock INTERFACE ) +Get_Target_Property ( CURL_INCLUDE CURL::libcurl INTERFACE_INCLUDE_DIRECTORIES ) +Target_Include_Directories ( cppcurl-mock + INTERFACE + ${CURL_INCLUDE} + $ + $ + $ ) +If ( CPPCURL_HAS_CPPCORE ) + Target_Link_Libraries ( cppcurl-mock + INTERFACE + cppcore::cppcore ) +EndIf ( ) + +Add_Library ( cppcurl INTERFACE ) +Target_Link_Libraries ( cppcurl + INTERFACE + CURL::libcurl + cppcurl-mock ) # Install ######################################################################################### -Set ( CPPCURL_HAS_EXPORT False PARENT_SCOPE ) +Set ( CPPCURL_HAS_EXPORT False PARENT_SCOPE ) # Header -If ( CPPCURL_INSTALL_HEADER ) - Set ( CPPCURL_HAS_EXPORT True PARENT_SCOPE ) - Install ( FILES ${CPPCURL_INCLUDE_DIR}/cppcurl.h - DESTINATION ${CPPCURL_INSTALL_DIR_INCLUDE} ) - Install ( DIRECTORY ${CPPCURL_INCLUDE_DIR}/cppcurl - DESTINATION ${CPPCURL_INSTALL_DIR_INCLUDE} ) - Install ( DIRECTORY ${CPPCURL_GENERATED_INCLUDE_DIR}/cppcurl - DESTINATION ${CPPCURL_INSTALL_DIR_INCLUDE} ) - Install ( TARGETS cppcurl-mock - EXPORT cppcurl - DESTINATION ${CPPCURL_INSTALL_DIR_INCLUDE} ) - Install ( TARGETS cppcurl - EXPORT cppcurl - DESTINATION ${CPPCURL_INSTALL_DIR_INCLUDE} ) -EndIf ( ) +If ( CPPCURL_INSTALL_HEADER ) + Set ( CPPCURL_HAS_EXPORT True PARENT_SCOPE ) + Install ( FILES ${CPPCURL_INCLUDE_DIR}/cppcurl.h + DESTINATION ${CPPCURL_INSTALL_DIR_INCLUDE} ) + Install ( DIRECTORY ${CPPCURL_INCLUDE_DIR}/cppcurl + DESTINATION ${CPPCURL_INSTALL_DIR_INCLUDE} ) + Install ( DIRECTORY ${CPPCURL_GENERATED_INCLUDE_DIR}/cppcurl + DESTINATION ${CPPCURL_INSTALL_DIR_INCLUDE} ) + Install ( TARGETS cppcurl-mock + EXPORT cppcurl + DESTINATION ${CPPCURL_INSTALL_DIR_INCLUDE} ) + Install ( TARGETS cppcurl + EXPORT cppcurl + DESTINATION ${CPPCURL_INSTALL_DIR_INCLUDE} ) +EndIf ( ) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index a0b3fcb..4807a47 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,68 +1,80 @@ # Initialize ###################################################################################### -Include ( cotire OPTIONAL RESULT_VARIABLE HAS_COTIRE ) -Include ( pedantic OPTIONAL RESULT_VARIABLE HAS_PEDANTIC ) -Include ( cmake_tests OPTIONAL RESULT_VARIABLE HAS_CMAKE_TESTS ) +Include ( cotire OPTIONAL RESULT_VARIABLE HAS_COTIRE ) +Include ( pedantic OPTIONAL RESULT_VARIABLE HAS_PEDANTIC ) +Include ( cmake_tests OPTIONAL RESULT_VARIABLE HAS_CMAKE_TESTS ) + +Find_Package ( Sanitizers QUIET ) # Test Helper ##################################################################################### -File ( GLOB_RECURSE SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/helper/*.cpp ) -Add_Library ( cppcurl-test-helper STATIC ${SOURCE_FILES} ) -Target_Include_Directories ( cppcurl-test-helper - PUBLIC - $ - $ ) -Target_Include_Directories ( cppcurl-test-helper - SYSTEM PUBLIC - ${MICROHTTPD_INCLUDE_DIRS} ) -Target_Link_Libraries ( cppcurl-test-helper - PUBLIC - cppcurl-mock - GMock::GMock ) +File ( GLOB_RECURSE SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/helper/*.cpp ) +Add_Library ( cppcurl-test-helper STATIC ${SOURCE_FILES} ) +Target_Include_Directories ( cppcurl-test-helper + PUBLIC + $ + $ ) +Target_Include_Directories ( cppcurl-test-helper + SYSTEM PUBLIC + ${MICROHTTPD_INCLUDE_DIRS} ) +Target_Link_Libraries ( cppcurl-test-helper + PUBLIC + cppcurl-mock + GMock::GMock ) + +# Sanitizers +If ( Sanitizers_FOUND ) + Add_Sanitizers ( cppcurl-test-helper ) +EndIf ( ) # Test ############################################################################################ -Find_Package ( GTest ) -If ( NOT "${GTest_FOUND}" ) - Return ( ) -EndIf ( ) +Find_Package ( GTest ) +If ( NOT "${GTest_FOUND}" ) + Return ( ) +EndIf ( ) -File ( GLOB_RECURSE CPPCURL_TEST_HEADER_FILES - ${CMAKE_CURRENT_SOURCE_DIR}/*.h ) -File ( GLOB_RECURSE CPPCURL_TEST_INLINE_FILES - ${CMAKE_CURRENT_SOURCE_DIR}/*.inl ) -File ( GLOB_RECURSE CPPCURL_TEST_SOURCE_FILES - RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} - ${CMAKE_CURRENT_SOURCE_DIR}/cppcurl/*.cpp ) +File ( GLOB_RECURSE CPPCURL_TEST_HEADER_FILES + ${CMAKE_CURRENT_SOURCE_DIR}/*.h ) +File ( GLOB_RECURSE CPPCURL_TEST_INLINE_FILES + ${CMAKE_CURRENT_SOURCE_DIR}/*.inl ) +File ( GLOB_RECURSE CPPCURL_TEST_SOURCE_FILES + RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/cppcurl/*.cpp ) -ForEach ( FILE IN LISTS CPPCURL_TEST_SOURCE_FILES ) +ForEach ( FILE IN LISTS CPPCURL_TEST_SOURCE_FILES ) # add test - Get_Filename_Component ( TEST_DIR ${FILE} DIRECTORY ) - Get_Filename_Component ( TEST_NAME ${FILE} NAME_WE ) - Set ( TEST_NAME "${TEST_DIR}/${TEST_NAME}" ) - String ( REPLACE "\\" "-" TEST_NAME "${TEST_NAME}" ) - String ( REPLACE "/" "-" TEST_NAME "${TEST_NAME}" ) - String ( REPLACE "_" "-" TEST_NAME "${TEST_NAME}" ) - Set ( TEST_NAME "test-${TEST_NAME}" ) - Add_Executable ( ${TEST_NAME} - EXCLUDE_FROM_ALL - ${CPPCURL_TEST_HEADER_FILES} - ${CPPCURL_TEST_INLINE_FILES} - ${FILE} ) - Target_Link_Libraries ( ${TEST_NAME} - PUBLIC - cppcurl - GTest::Main ) + Get_Filename_Component ( TEST_DIR ${FILE} DIRECTORY ) + Get_Filename_Component ( TEST_NAME ${FILE} NAME_WE ) + Set ( TEST_NAME "${TEST_DIR}/${TEST_NAME}" ) + String ( REPLACE "\\" "-" TEST_NAME "${TEST_NAME}" ) + String ( REPLACE "/" "-" TEST_NAME "${TEST_NAME}" ) + String ( REPLACE "_" "-" TEST_NAME "${TEST_NAME}" ) + Set ( TEST_NAME "test-${TEST_NAME}" ) + Add_Executable ( ${TEST_NAME} + EXCLUDE_FROM_ALL + ${CPPCURL_TEST_HEADER_FILES} + ${CPPCURL_TEST_INLINE_FILES} + ${FILE} ) + Target_Link_Libraries ( ${TEST_NAME} + PUBLIC + cppcurl + GTest::Main ) + + # Sanitizers + If ( Sanitizers_FOUND ) + Add_Sanitizers ( ${TEST_NAME} ) + EndIf ( ) # pedantic - If ( HAS_PEDANTIC ) - Pedantic_Apply_Flags_Target ( ${TEST_NAME} ALL ) - EndIf ( ) + If ( HAS_PEDANTIC ) + Pedantic_Apply_Flags_Target ( ${TEST_NAME} ALL ) + EndIf ( ) # test - If ( HAS_CMAKE_TESTS ) - Add_CMake_Test ( NAME ${TEST_NAME} TARGET ${TEST_NAME} GROUP cppcurl ) - Else ( ) - Add_Test ( NAME ${TEST_NAME} COMMAND ${TEST_NAME} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} ) - EndIf ( ) -EndForEach ( ) + If ( HAS_CMAKE_TESTS ) + Add_CMake_Test ( NAME ${TEST_NAME} TARGET ${TEST_NAME} GROUP cppcurl ) + Else ( ) + Add_Test ( NAME ${TEST_NAME} COMMAND ${TEST_NAME} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} ) + EndIf ( ) +EndForEach ( )