1- set (CMAKE_CXX_STANDARD 20)
2- set (CMAKE_CXX_STANDARD_REQUIRED YES )
3-
41set (SCHEMAS
52 schema/recipients.fbs
63 schema/header.fbs
@@ -20,9 +17,10 @@ set(PUBLIC_HEADERS
2017 PKCS11Backend.h
2118 ILogger.h
2219 ConsoleLogger.h
20+ $<$<PLATFORM_ID:Windows>:WinBackend.h>
2321)
2422
25- set (CDOC_SOURCES
23+ add_library (cdoc_obj OBJECT
2624 CDoc.cpp
2725 Io.cpp
2826 Recipient.cpp
@@ -31,33 +29,19 @@ set(CDOC_SOURCES
3129 NetworkBackend.cpp
3230 PKCS11Backend.cpp
3331 LogEngine.cpp
32+ $<$<PLATFORM_ID:Windows>:WinBackend.cpp>
3433)
3534
3635if (WIN32 )
37- add_definitions (-DUNICODE -DWIN32_LEAN_AND_MEAN)
38- list (APPEND LIBS Crypt32 NCrypt cryptui)
39- list (APPEND PUBLIC_HEADERS WinBackend.h)
40- list (APPEND CDOC_SOURCES WinBackend.cpp)
36+ add_compile_definitions (UNICODE WIN32_LEAN_AND_MEAN _CRT_SECURE_NO_WARNINGS _SCL_SECURE_NO_WARNINGS)
4137endif ()
4238
43- add_library (cdoc_obj OBJECT
44- ${CDOC_SOURCES}
45- )
46-
47- set_target_properties (cdoc_obj PROPERTIES
48- COMPILE_DEFINITIONS cdoc_EXPORTS
49- POSITION_INDEPENDENT_CODE YES
50- )
51-
52- target_include_directories (cdoc_obj PUBLIC
53- ${LIBXML2_INCLUDE_DIR}
54- ${OPENSSL_INCLUDE_DIR}
55- ${PROJECT_SOURCE_DIR}
56- ${CMAKE_CURRENT_SOURCE_DIR}
57- ${CMAKE_CURRENT_BINARY_DIR}
58- )
39+ set_target_properties (cdoc_obj PROPERTIES POSITION_INDEPENDENT_CODE YES )
40+ target_compile_definitions (cdoc_obj PRIVATE cdoc_EXPORTS)
41+ target_include_directories (cdoc_obj PUBLIC ${PROJECT_SOURCE_DIR} )
42+ target_link_libraries (cdoc_obj OpenSSL::SSL)
5943
60- set (CDOC_PRIV_SOURCES
44+ add_library (cdoc_priv OBJECT
6145 Certificate.cpp Certificate.h
6246 Crypto.cpp Crypto.h
6347 Tar.cpp
@@ -75,89 +59,42 @@ set(CDOC_PRIV_SOURCES
7559 RcptInfo.h
7660 ToolConf.h
7761 CDoc2.h
78- )
79-
80- add_library (cdoc_priv_obj OBJECT
81- ${CDOC_PRIV_SOURCES}
82- )
83-
84- set_property (TARGET cdoc_priv_obj PROPERTY POSITION_INDEPENDENT_CODE ON )
85-
86- target_include_directories (cdoc_priv_obj PUBLIC
87- ${LIBXML2_INCLUDE_DIR}
88- ${OPENSSL_INCLUDE_DIR}
89- ${PROJECT_SOURCE_DIR}
90- ${CMAKE_CURRENT_SOURCE_DIR}
91- ${CMAKE_CURRENT_BINARY_DIR}
92- )
93-
94- target_link_libraries (cdoc_priv_obj
95- $<TARGET_NAME_IF_EXISTS:flatbuffers::flatbuffers>
96- $<TARGET_NAME_IF_EXISTS:flatbuffers::flatbuffers_shared>
97- OpenSSL::SSL
98- )
99-
100- add_library (cdoc_priv STATIC
101- $<TARGET_OBJECTS:cdoc_priv_obj>
10262 Wrapper.h
10363)
10464
10565set_property (TARGET cdoc_priv PROPERTY POSITION_INDEPENDENT_CODE ON )
106-
107- target_include_directories (cdoc_priv PUBLIC
108- ${LIBXML2_INCLUDE_DIR}
109- ${OPENSSL_INCLUDE_DIR}
110- ${PROJECT_SOURCE_DIR}
111- ${CMAKE_CURRENT_SOURCE_DIR}
112- ${CMAKE_CURRENT_BINARY_DIR}
66+ target_include_directories (cdoc_priv
67+ PUBLIC ${PROJECT_SOURCE_DIR}
68+ PRIVATE ${CMAKE_CURRENT_BINARY_DIR}
11369)
114-
11570target_link_libraries (cdoc_priv
11671 $<TARGET_NAME_IF_EXISTS:flatbuffers::flatbuffers>
117- $<TARGET_NAME_IF_EXISTS:flatbuffers::flatbuffers_shared>
72+ #$<TARGET_NAME_IF_EXISTS:flatbuffers::flatbuffers_shared>
73+ OpenSSL::SSL
11874 ZLIB::ZLIB
119- # {$ZLIB_LIBRARIES}
12075 LibXml2::LibXml2
121- OpenSSL::SSL
122- ${LIBS}
123- )
124-
125- add_library (cdoc SHARED
126- ${PUBLIC_HEADERS}
127- ${CDOC_SOURCES}
128-
76+ $<$<PLATFORM_ID:Windows>:Crypt32 NCrypt cryptui>
12977)
13078
79+ add_library (cdoc SHARED ${PUBLIC_HEADERS} )
13180set_target_properties (cdoc PROPERTIES
132- VERSION ${PROJECT_VERSION_MAJOR} . ${PROJECT_VERSION_MINOR} . ${PROJECT_VERSION_PATCH }
81+ VERSION ${PROJECT_VERSION }
13382 SOVERSION 1
13483 PUBLIC_HEADER "${PUBLIC_HEADERS} "
13584 FRAMEWORK_VERSION 1
13685 FRAMEWORK "${FRAMEWORK} "
137- MACOSX_FRAMEWORK_IDENTIFIER "ee.ria.digidocpp "
86+ MACOSX_FRAMEWORK_IDENTIFIER "ee.ria.libcdoc "
13887 MACOSX_RPATH YES
13988 COMPILE_DEFINITIONS TARGET_NAME="$<TARGET_NAME:cdoc>"
14089)
141-
90+ target_link_libraries (cdoc PRIVATE ${CMAKE_DL_LIBS} cdoc_priv cdoc_obj)
14291target_include_directories (cdoc PUBLIC
14392 $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR} >
144- $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR} >
14593 $<INSTALL_INTERFACE:include >
14694)
147-
148- target_link_libraries (cdoc PRIVATE
149- ${CMAKE_DL_LIBS}
150- cdoc_priv
151- )
152-
153- add_library (cdoc_static STATIC
154- ${PUBLIC_HEADERS}
155- $<TARGET_OBJECTS:cdoc_priv_obj>
156- $<TARGET_OBJECTS:cdoc_obj>
157- )
158-
95+ add_library (cdoc_static STATIC ${PUBLIC_HEADERS} )
15996set_target_properties (cdoc_static PROPERTIES
160- VERSION ${PROJECT_VERSION_MAJOR} . ${PROJECT_VERSION_MINOR} . ${PROJECT_VERSION_PATCH }
97+ VERSION ${PROJECT_VERSION }
16198 SOVERSION 1
16299 PUBLIC_HEADER "${PUBLIC_HEADERS} "
163100 FRAMEWORK_VERSION 1
@@ -166,39 +103,28 @@ set_target_properties(cdoc_static PROPERTIES
166103 MACOSX_RPATH YES
167104 COMPILE_DEFINITIONS TARGET_NAME="$<TARGET_NAME:cdoc>"
168105)
169-
170- target_include_directories (cdoc_static PUBLIC
171- ${CMAKE_CURRENT_SOURCE_DIR}
172- )
173-
174- target_link_libraries (cdoc_static
175- ${ZLIB_LIBRARY}
176- ${LIBXML2_LIBRARIES}
177- ${OPENSSL_CRYPTO_LIBRARY}
178- ${LIBS}
179- )
106+ target_link_libraries (cdoc_static cdoc_priv cdoc_obj)
180107
181108add_executable (cdoc-tool cdoc-tool.cpp)
182-
183109target_link_libraries (cdoc-tool cdoc cdoc_priv)
184110
185111foreach (SCHEMA ${SCHEMAS} )
186- get_filename_component (stem ${SCHEMA} NAME_WE )
187- get_filename_component (name ${SCHEMA} NAME )
188- set (GENERATED_INCLUDE ${CMAKE_CURRENT_BINARY_DIR} /${stem} _generated.h)
189- add_custom_command (
190- OUTPUT ${GENERATED_INCLUDE}
191- COMMENT "Compiling flatbuffer for ${name} "
192- COMMAND flatbuffers::flatc
193- --cpp
194- --scoped-enums
195- -o ${CMAKE_CURRENT_BINARY_DIR}
196- -I ${CMAKE_CURRENT_SOURCE_DIR}
197- ${SCHEMA}
198- DEPENDS flatbuffers::flatc ${SCHEMA}
199- WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
200- )
201- target_sources (cdoc_priv_obj PRIVATE ${SCHEMA} ${GENERATED_INCLUDE} )
112+ get_filename_component (stem ${SCHEMA} NAME_WE )
113+ get_filename_component (name ${SCHEMA} NAME )
114+ set (GENERATED_INCLUDE ${CMAKE_CURRENT_BINARY_DIR} /${stem} _generated.h)
115+ add_custom_command (
116+ OUTPUT ${GENERATED_INCLUDE}
117+ COMMENT "Compiling flatbuffer for ${name} "
118+ COMMAND flatbuffers::flatc
119+ --cpp
120+ --scoped-enums
121+ -o ${CMAKE_CURRENT_BINARY_DIR}
122+ -I ${CMAKE_CURRENT_SOURCE_DIR}
123+ ${SCHEMA}
124+ DEPENDS flatbuffers::flatc ${SCHEMA}
125+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
126+ )
127+ target_sources (cdoc_priv PRIVATE ${SCHEMA} ${GENERATED_INCLUDE} )
202128endforeach ()
203129
204130if (SWIG_FOUND)
@@ -245,14 +171,34 @@ if(SWIG_FOUND)
245171 endif ()
246172endif ()
247173
174+ if (APPLE )
175+ set (MODULE_LIST ${PUBLIC_HEADERS} )
176+ list (TRANSFORM MODULE_LIST PREPEND " header \" " )
177+ list (TRANSFORM MODULE_LIST APPEND "\" " )
178+ list (JOIN MODULE_LIST "\n " MODULE_LIST)
179+ set (MODULE_MAP ${CMAKE_BINARY_DIR} /module.modulemap)
180+ file (WRITE ${MODULE_MAP} "framework module cdoc {
181+ ${MODULE_LIST}
182+ export *
183+ requires cplusplus
184+ }" )
185+ target_sources (cdoc PRIVATE ${MODULE_MAP} )
186+ set_source_files_properties (${MODULE_MAP} PROPERTIES MACOSX_PACKAGE_LOCATION Modules)
187+ if (IOS)
188+ add_custom_command (TARGET cdoc POST_BUILD
189+ COMMAND /usr/libexec/PlistBuddy -c "Add :MinimumOSVersion string ${CMAKE_OSX_DEPLOYMENT_TARGET} " $<TARGET_FILE_DIR:cdoc>/Info.plist
190+ )
191+ endif ()
192+ endif ()
193+
248194install (TARGETS cdoc
249195 EXPORT libcdocExport
250196 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
251197 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
252198 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
253199 RESOURCE DESTINATION ${CDOC_CONFIG_DIR}
254200 PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} /libcdoc
255- FRAMEWORK DESTINATION /Library/Frameworks
201+ FRAMEWORK DESTINATION ${FRAMEWORK_DESTINATION}
256202)
257203
258204install (TARGETS cdoc_static
0 commit comments