1- set (CMAKE_CXX_STANDARD 20)
2- set (CMAKE_CXX_STANDARD_REQUIRED YES )
3-
41set (SCHEMAS
52 schema/recipients.fbs
63 schema/header.fbs
@@ -22,7 +19,7 @@ set(PUBLIC_HEADERS
2219 ConsoleLogger.h
2320)
2421
25- set (CDOC_SOURCES
22+ add_library (cdoc_obj OBJECT
2623 CDoc.cpp
2724 Io.cpp
2825 Recipient.cpp
@@ -40,24 +37,12 @@ if(WIN32)
4037 list (APPEND CDOC_SOURCES WinBackend.cpp)
4138endif ()
4239
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- )
40+ set_target_properties (cdoc_obj PROPERTIES POSITION_INDEPENDENT_CODE YES )
41+ target_compile_definitions (cdoc_obj PRIVATE cdoc_EXPORTS)
42+ target_include_directories (cdoc_obj PUBLIC ${PROJECT_SOURCE_DIR} )
43+ target_link_libraries (cdoc_obj OpenSSL::SSL)
5144
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- )
59-
60- set (CDOC_PRIV_SOURCES
45+ add_library (cdoc_priv OBJECT
6146 Certificate.cpp Certificate.h
6247 Crypto.cpp Crypto.h
6348 Tar.cpp
@@ -75,89 +60,41 @@ set(CDOC_PRIV_SOURCES
7560 RcptInfo.h
7661 ToolConf.h
7762 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>
10263 Wrapper.h
10364)
10465
10566set_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}
67+ target_include_directories (cdoc_priv
68+ PUBLIC ${PROJECT_SOURCE_DIR}
69+ PRIVATE ${CMAKE_CURRENT_BINARY_DIR}
11370)
114-
11571target_link_libraries (cdoc_priv
11672 $<TARGET_NAME_IF_EXISTS:flatbuffers::flatbuffers>
11773 $<TARGET_NAME_IF_EXISTS:flatbuffers::flatbuffers_shared>
74+ OpenSSL::SSL
11875 ZLIB::ZLIB
119- # {$ZLIB_LIBRARIES}
12076 LibXml2::LibXml2
121- OpenSSL::SSL
122- ${LIBS}
123- )
124-
125- add_library (cdoc SHARED
126- ${PUBLIC_HEADERS}
127- ${CDOC_SOURCES}
128-
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,20 +103,9 @@ 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} )
@@ -198,7 +124,7 @@ foreach(SCHEMA ${SCHEMAS})
198124 DEPENDS flatbuffers::flatc ${SCHEMA}
199125 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
200126 )
201- target_sources (cdoc_priv_obj PRIVATE ${SCHEMA} ${GENERATED_INCLUDE} )
127+ target_sources (cdoc_priv PRIVATE ${SCHEMA} ${GENERATED_INCLUDE} )
202128endforeach ()
203129
204130if (SWIG_FOUND)
@@ -245,14 +171,32 @@ 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+ add_custom_command (TARGET cdoc POST_BUILD
188+ COMMAND /usr/libexec/PlistBuddy -c "Add :MinimumOSVersion string ${CMAKE_OSX_DEPLOYMENT_TARGET} " $<TARGET_FILE_DIR:cdoc>/Info.plist
189+ )
190+ endif ()
191+
248192install (TARGETS cdoc
249193 EXPORT libcdocExport
250194 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
251195 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
252196 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
253197 RESOURCE DESTINATION ${CDOC_CONFIG_DIR}
254198 PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} /libcdoc
255- FRAMEWORK DESTINATION /Library/Frameworks
199+ FRAMEWORK DESTINATION ${FRAMEWORK_DESTINATION}
256200)
257201
258202install (TARGETS cdoc_static
0 commit comments