diff --git a/CMakeLists.txt b/CMakeLists.txt index 164ca727..162a9327 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,13 +6,21 @@ endif() project(libcdoc VERSION 0.1.5) -set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules) - -include(VersionInfo) -include(GNUInstallDirs) +macro(SET_ENV NAME DEF) + if(DEFINED ENV{${NAME}}) + set(${NAME} $ENV{${NAME}} ${ARGN}) + else() + set(${NAME} ${DEF} ${ARGN}) + endif() +endmacro() +SET_ENV(BUILD_NUMBER 0) +set(VERSION ${PROJECT_VERSION}.${BUILD_NUMBER}) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED YES) +set(CMAKE_C_VISIBILITY_PRESET hidden) +set(CMAKE_CXX_VISIBILITY_PRESET hidden) +set(CMAKE_VISIBILITY_INLINES_HIDDEN YES) set(CMAKE_DEBUG_POSTFIX "d" CACHE STRING "Adds a postfix for debug-built libraries.") set(CPACK_PACKAGE_VERSION ${VERSION}) set(CPACK_GENERATOR RPM) @@ -22,17 +30,27 @@ set(CPACK_PACKAGING_INSTALL_PREFIX /usr) list(APPEND CPACK_RPM_RELOCATION_PATHS ${CMAKE_INSTALL_SYSCONFDIR}) set(CPACK_RPM_FILE_NAME RPM-DEFAULT) set(CPACK_RPM_PACKAGE_RELEASE_DIST ON) +set(MACOSX_BUNDLE_COPYRIGHT "(C) 2017-2025 Estonian Information System Authority") +set(MACOSX_FRAMEWORK_SHORT_VERSION_STRING ${PROJECT_VERSION}) +set(MACOSX_FRAMEWORK_BUNDLE_VERSION ${BUILD_NUMBER}) +if(APPLE) + set(FRAMEWORK YES CACHE BOOL "Build library as Mac OS X Framework") + set(FRAMEWORK_DESTINATION /Library/Frameworks CACHE PATH "Mac OS X Framework install destination") +endif() include(CPack) +include(GNUInstallDirs) -find_package(Doxygen) find_package(OpenSSL 3.0.0 REQUIRED) find_package(ZLIB REQUIRED) find_package(LibXml2 REQUIRED) find_package(FlatBuffers CONFIG REQUIRED NAMES FlatBuffers Flatbuffers flatbuffers) find_package(SWIG) -find_package(JNI) -find_package(Python3 COMPONENTS Interpreter Development) +if(SWIG_FOUND) + find_package(JNI) + find_package(Python3 COMPONENTS Interpreter Development) +endif() +find_package(Doxygen) if( DOXYGEN_FOUND ) configure_file(${CMAKE_SOURCE_DIR}/etc/Doxyfile.in Doxyfile @ONLY ) add_custom_target(docs ALL @@ -44,14 +62,10 @@ if( DOXYGEN_FOUND ) install(DIRECTORY doc/ DESTINATION ${CMAKE_INSTALL_DOCDIR} ) endif() -if( WIN32 ) - add_definitions( -DUNICODE -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS -DWIN32_LEAN_AND_MEAN ) -endif() - -enable_testing() add_subdirectory(libcdoc) find_package(Boost COMPONENTS unit_test_framework QUIET) if (TARGET Boost::unit_test_framework) + enable_testing() add_subdirectory(test) endif() diff --git a/cmake/modules/VersionInfo.cmake b/cmake/modules/VersionInfo.cmake deleted file mode 100644 index aae2a33c..00000000 --- a/cmake/modules/VersionInfo.cmake +++ /dev/null @@ -1,35 +0,0 @@ -if( $ENV{BUILD_NUMBER} ) - set( BUILD_VER $ENV{BUILD_NUMBER} ) -elseif(PROJECT_VERSION_TWEAK) - set( BUILD_VER ${PROJECT_VERSION_TWEAK} ) -else() - set( BUILD_VER 0 ) -endif() - -set( VERSION ${PROJECT_VERSION}.${BUILD_VER} ) -add_definitions( - -DMAJOR_VER=${PROJECT_VERSION_MAJOR} - -DMINOR_VER=${PROJECT_VERSION_MINOR} - -DRELEASE_VER=${PROJECT_VERSION_PATCH} - -DBUILD_VER=${BUILD_VER} -) - -set(CMAKE_C_VISIBILITY_PRESET hidden) -set(CMAKE_CXX_VISIBILITY_PRESET hidden) -set(CMAKE_VISIBILITY_INLINES_HIDDEN YES) -set(CMAKE_CXX_STANDARD 17) -set(CMAKE_CXX_STANDARD_REQUIRED YES) -set(MACOSX_BUNDLE_COPYRIGHT "(C) 2010-2023 Estonian Information System Authority") -set( MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION} ) -set( MACOSX_BUNDLE_BUNDLE_VERSION ${BUILD_VER} ) -set( MACOSX_BUNDLE_ICON_FILE Icon.icns ) -set( MACOSX_FRAMEWORK_SHORT_VERSION_STRING ${PROJECT_VERSION} ) -set( MACOSX_FRAMEWORK_BUNDLE_VERSION ${BUILD_VER} ) - -macro( SET_ENV NAME DEF ) - if( DEFINED ENV{${NAME}} ) - set( ${NAME} $ENV{${NAME}} ${ARGN} ) - else() - set( ${NAME} ${DEF} ${ARGN} ) - endif() -endmacro() diff --git a/libcdoc/CMakeLists.txt b/libcdoc/CMakeLists.txt index ea2466e5..c1218022 100644 --- a/libcdoc/CMakeLists.txt +++ b/libcdoc/CMakeLists.txt @@ -1,6 +1,3 @@ -set(CMAKE_CXX_STANDARD 20) -set(CMAKE_CXX_STANDARD_REQUIRED YES) - set(SCHEMAS schema/recipients.fbs schema/header.fbs @@ -20,9 +17,10 @@ set(PUBLIC_HEADERS PKCS11Backend.h ILogger.h ConsoleLogger.h + $<$:WinBackend.h> ) -set(CDOC_SOURCES +add_library(cdoc_obj OBJECT CDoc.cpp Io.cpp Recipient.cpp @@ -31,33 +29,19 @@ set(CDOC_SOURCES NetworkBackend.cpp PKCS11Backend.cpp LogEngine.cpp + $<$:WinBackend.cpp> ) if(WIN32) - add_definitions(-DUNICODE -DWIN32_LEAN_AND_MEAN) - list(APPEND LIBS Crypt32 NCrypt cryptui) - list(APPEND PUBLIC_HEADERS WinBackend.h) - list(APPEND CDOC_SOURCES WinBackend.cpp) + add_compile_definitions(UNICODE WIN32_LEAN_AND_MEAN) endif() -add_library(cdoc_obj OBJECT - ${CDOC_SOURCES} -) - -set_target_properties(cdoc_obj PROPERTIES - COMPILE_DEFINITIONS cdoc_EXPORTS - POSITION_INDEPENDENT_CODE YES -) +set_target_properties(cdoc_obj PROPERTIES POSITION_INDEPENDENT_CODE YES) +target_compile_definitions(cdoc_obj PRIVATE cdoc_EXPORTS) +target_include_directories(cdoc_obj PUBLIC ${PROJECT_SOURCE_DIR}) +target_link_libraries(cdoc_obj OpenSSL::SSL) -target_include_directories(cdoc_obj PUBLIC - ${LIBXML2_INCLUDE_DIR} - ${OPENSSL_INCLUDE_DIR} - ${PROJECT_SOURCE_DIR} - ${CMAKE_CURRENT_SOURCE_DIR} - ${CMAKE_CURRENT_BINARY_DIR} -) - -set(CDOC_PRIV_SOURCES +add_library(cdoc_priv OBJECT Certificate.cpp Certificate.h Crypto.cpp Crypto.h Tar.cpp @@ -75,89 +59,42 @@ set(CDOC_PRIV_SOURCES RcptInfo.h ToolConf.h CDoc2.h -) - -add_library(cdoc_priv_obj OBJECT - ${CDOC_PRIV_SOURCES} -) - -set_property(TARGET cdoc_priv_obj PROPERTY POSITION_INDEPENDENT_CODE ON) - -target_include_directories(cdoc_priv_obj PUBLIC - ${LIBXML2_INCLUDE_DIR} - ${OPENSSL_INCLUDE_DIR} - ${PROJECT_SOURCE_DIR} - ${CMAKE_CURRENT_SOURCE_DIR} - ${CMAKE_CURRENT_BINARY_DIR} -) - -target_link_libraries(cdoc_priv_obj - $ - $ - OpenSSL::SSL -) - -add_library(cdoc_priv STATIC - $ Wrapper.h ) set_property(TARGET cdoc_priv PROPERTY POSITION_INDEPENDENT_CODE ON) - -target_include_directories(cdoc_priv PUBLIC - ${LIBXML2_INCLUDE_DIR} - ${OPENSSL_INCLUDE_DIR} - ${PROJECT_SOURCE_DIR} - ${CMAKE_CURRENT_SOURCE_DIR} - ${CMAKE_CURRENT_BINARY_DIR} +target_include_directories(cdoc_priv + PUBLIC ${PROJECT_SOURCE_DIR} + PRIVATE ${CMAKE_CURRENT_BINARY_DIR} ) - target_link_libraries(cdoc_priv $ - $ + #$ + OpenSSL::SSL ZLIB::ZLIB -# {$ZLIB_LIBRARIES} LibXml2::LibXml2 - OpenSSL::SSL - ${LIBS} -) - -add_library(cdoc SHARED - ${PUBLIC_HEADERS} - ${CDOC_SOURCES} - + $<$:Crypt32 NCrypt cryptui> ) +add_library(cdoc SHARED ${PUBLIC_HEADERS}) set_target_properties(cdoc PROPERTIES - VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH} + VERSION ${PROJECT_VERSION} SOVERSION 1 PUBLIC_HEADER "${PUBLIC_HEADERS}" FRAMEWORK_VERSION 1 FRAMEWORK "${FRAMEWORK}" - MACOSX_FRAMEWORK_IDENTIFIER "ee.ria.digidocpp" + MACOSX_FRAMEWORK_IDENTIFIER "ee.ria.libcdoc" MACOSX_RPATH YES COMPILE_DEFINITIONS TARGET_NAME="$" ) - +target_link_libraries(cdoc PRIVATE ${CMAKE_DL_LIBS} cdoc_priv cdoc_obj) target_include_directories(cdoc PUBLIC $ - $ $ ) - -target_link_libraries(cdoc PRIVATE - ${CMAKE_DL_LIBS} - cdoc_priv -) - -add_library(cdoc_static STATIC - ${PUBLIC_HEADERS} - $ - $ -) - +add_library(cdoc_static STATIC ${PUBLIC_HEADERS}) set_target_properties(cdoc_static PROPERTIES - VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH} + VERSION ${PROJECT_VERSION} SOVERSION 1 PUBLIC_HEADER "${PUBLIC_HEADERS}" FRAMEWORK_VERSION 1 @@ -166,39 +103,28 @@ set_target_properties(cdoc_static PROPERTIES MACOSX_RPATH YES COMPILE_DEFINITIONS TARGET_NAME="$" ) - -target_include_directories(cdoc_static PUBLIC - ${CMAKE_CURRENT_SOURCE_DIR} -) - -target_link_libraries(cdoc_static - ${ZLIB_LIBRARY} - ${LIBXML2_LIBRARIES} - ${OPENSSL_CRYPTO_LIBRARY} - ${LIBS} -) +target_link_libraries(cdoc_static cdoc_priv cdoc_obj) add_executable(cdoc-tool cdoc-tool.cpp) - target_link_libraries(cdoc-tool cdoc cdoc_priv) foreach(SCHEMA ${SCHEMAS}) - get_filename_component(stem ${SCHEMA} NAME_WE) - get_filename_component(name ${SCHEMA} NAME) - set(GENERATED_INCLUDE ${CMAKE_CURRENT_BINARY_DIR}/${stem}_generated.h) - add_custom_command( - OUTPUT ${GENERATED_INCLUDE} - COMMENT "Compiling flatbuffer for ${name}" - COMMAND flatbuffers::flatc - --cpp - --scoped-enums - -o ${CMAKE_CURRENT_BINARY_DIR} - -I ${CMAKE_CURRENT_SOURCE_DIR} - ${SCHEMA} - DEPENDS flatbuffers::flatc ${SCHEMA} - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - ) - target_sources(cdoc_priv_obj PRIVATE ${SCHEMA} ${GENERATED_INCLUDE}) + get_filename_component(stem ${SCHEMA} NAME_WE) + get_filename_component(name ${SCHEMA} NAME) + set(GENERATED_INCLUDE ${CMAKE_CURRENT_BINARY_DIR}/${stem}_generated.h) + add_custom_command( + OUTPUT ${GENERATED_INCLUDE} + COMMENT "Compiling flatbuffer for ${name}" + COMMAND flatbuffers::flatc + --cpp + --scoped-enums + -o ${CMAKE_CURRENT_BINARY_DIR} + -I ${CMAKE_CURRENT_SOURCE_DIR} + ${SCHEMA} + DEPENDS flatbuffers::flatc ${SCHEMA} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + ) + target_sources(cdoc_priv PRIVATE ${SCHEMA} ${GENERATED_INCLUDE}) endforeach() if(SWIG_FOUND) @@ -245,6 +171,26 @@ if(SWIG_FOUND) endif() endif() +if(APPLE) + set(MODULE_LIST ${PUBLIC_HEADERS}) + list(TRANSFORM MODULE_LIST PREPEND " header \"") + list(TRANSFORM MODULE_LIST APPEND "\"") + list(JOIN MODULE_LIST "\n" MODULE_LIST) + set(MODULE_MAP ${CMAKE_BINARY_DIR}/module.modulemap) + file(WRITE ${MODULE_MAP} "framework module cdoc { +${MODULE_LIST} + export * + requires cplusplus +}") + target_sources(cdoc PRIVATE ${MODULE_MAP}) + set_source_files_properties(${MODULE_MAP} PROPERTIES MACOSX_PACKAGE_LOCATION Modules) + if(IOS) + add_custom_command(TARGET cdoc POST_BUILD + COMMAND /usr/libexec/PlistBuddy -c "Add :MinimumOSVersion string ${CMAKE_OSX_DEPLOYMENT_TARGET}" $/Info.plist + ) + endif() +endif() + install(TARGETS cdoc EXPORT libcdocExport LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} @@ -252,12 +198,12 @@ install(TARGETS cdoc RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} RESOURCE DESTINATION ${CDOC_CONFIG_DIR} PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/libcdoc - FRAMEWORK DESTINATION /Library/Frameworks + FRAMEWORK DESTINATION ${FRAMEWORK_DESTINATION} ) install(TARGETS cdoc_static ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} - FRAMEWORK DESTINATION /Library/Frameworks + FRAMEWORK DESTINATION ${FRAMEWORK_DESTINATION} ) if(NOT ANDROID) diff --git a/vcpkg.json b/vcpkg.json index dde0907f..c281c29b 100644 --- a/vcpkg.json +++ b/vcpkg.json @@ -1,8 +1,14 @@ { "dependencies": [ "zlib", - "libxml2", + { + "name": "libxml2", + "default-features": false + }, "flatbuffers", "openssl" - ] -} + ], + "features": { + "tests": { "description": "Build tests", "dependencies": ["boost-test"] } + } +} \ No newline at end of file