Skip to content

Commit fa002c7

Browse files
committed
Cleanup CMake project file
Signed-off-by: Raul Metsma <[email protected]>
1 parent be790ed commit fa002c7

File tree

2 files changed

+46
-96
lines changed

2 files changed

+46
-96
lines changed

CMakeLists.txt

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,17 +22,23 @@ set(CPACK_PACKAGING_INSTALL_PREFIX /usr)
2222
list(APPEND CPACK_RPM_RELOCATION_PATHS ${CMAKE_INSTALL_SYSCONFDIR})
2323
set(CPACK_RPM_FILE_NAME RPM-DEFAULT)
2424
set(CPACK_RPM_PACKAGE_RELEASE_DIST ON)
25+
if(APPLE)
26+
set(FRAMEWORK YES CACHE BOOL "Build library as Mac OS X Framework")
27+
set(FRAMEWORK_DESTINATION /Library/Frameworks CACHE PATH "Mac OS X Framework install destination")
28+
endif()
2529
include(CPack)
2630

27-
find_package(Doxygen)
2831
find_package(OpenSSL 3.0.0 REQUIRED)
2932
find_package(ZLIB REQUIRED)
3033
find_package(LibXml2 REQUIRED)
3134
find_package(FlatBuffers CONFIG REQUIRED NAMES FlatBuffers Flatbuffers flatbuffers)
3235
find_package(SWIG)
33-
find_package(JNI)
34-
find_package(Python3 COMPONENTS Interpreter Development)
36+
if(SWIG_FOUND)
37+
find_package(JNI)
38+
find_package(Python3 COMPONENTS Interpreter Development)
39+
endif()
3540

41+
find_package(Doxygen)
3642
if( DOXYGEN_FOUND )
3743
configure_file(${CMAKE_SOURCE_DIR}/etc/Doxyfile.in Doxyfile @ONLY )
3844
add_custom_target(docs ALL

libcdoc/CMakeLists.txt

Lines changed: 37 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
set(CMAKE_CXX_STANDARD 20)
2-
set(CMAKE_CXX_STANDARD_REQUIRED YES)
3-
41
set(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)
4138
endif()
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

10566
set_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-
11571
target_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})
13180
set_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)
14291
target_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})
15996
set_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

181108
add_executable(cdoc-tool cdoc-tool.cpp)
182-
183109
target_link_libraries(cdoc-tool cdoc cdoc_priv)
184110

185111
foreach(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})
202128
endforeach()
203129

204130
if(SWIG_FOUND)
@@ -245,14 +171,32 @@ if(SWIG_FOUND)
245171
endif()
246172
endif()
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+
248192
install(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

258202
install(TARGETS cdoc_static

0 commit comments

Comments
 (0)