Skip to content

Commit cc0e689

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

File tree

3 files changed

+84
-159
lines changed

3 files changed

+84
-159
lines changed

CMakeLists.txt

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,21 @@ endif()
66

77
project(libcdoc VERSION 0.1.5)
88

9-
set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules)
10-
11-
include(VersionInfo)
12-
include(GNUInstallDirs)
9+
macro(SET_ENV NAME DEF)
10+
if(DEFINED ENV{${NAME}})
11+
set(${NAME} $ENV{${NAME}} ${ARGN})
12+
else()
13+
set(${NAME} ${DEF} ${ARGN})
14+
endif()
15+
endmacro()
1316

17+
SET_ENV(BUILD_NUMBER 0)
18+
set(VERSION ${PROJECT_VERSION}.${BUILD_NUMBER})
1419
set(CMAKE_CXX_STANDARD 20)
1520
set(CMAKE_CXX_STANDARD_REQUIRED YES)
21+
set(CMAKE_C_VISIBILITY_PRESET hidden)
22+
set(CMAKE_CXX_VISIBILITY_PRESET hidden)
23+
set(CMAKE_VISIBILITY_INLINES_HIDDEN YES)
1624
set(CMAKE_DEBUG_POSTFIX "d" CACHE STRING "Adds a postfix for debug-built libraries.")
1725
set(CPACK_PACKAGE_VERSION ${VERSION})
1826
set(CPACK_GENERATOR RPM)
@@ -22,17 +30,27 @@ set(CPACK_PACKAGING_INSTALL_PREFIX /usr)
2230
list(APPEND CPACK_RPM_RELOCATION_PATHS ${CMAKE_INSTALL_SYSCONFDIR})
2331
set(CPACK_RPM_FILE_NAME RPM-DEFAULT)
2432
set(CPACK_RPM_PACKAGE_RELEASE_DIST ON)
33+
set(MACOSX_BUNDLE_COPYRIGHT "(C) 2017-2025 Estonian Information System Authority")
34+
set(MACOSX_FRAMEWORK_SHORT_VERSION_STRING ${PROJECT_VERSION})
35+
set(MACOSX_FRAMEWORK_BUNDLE_VERSION ${BUILD_NUMBER})
36+
if(APPLE)
37+
set(FRAMEWORK YES CACHE BOOL "Build library as Mac OS X Framework")
38+
set(FRAMEWORK_DESTINATION /Library/Frameworks CACHE PATH "Mac OS X Framework install destination")
39+
endif()
2540
include(CPack)
41+
include(GNUInstallDirs)
2642

27-
find_package(Doxygen)
2843
find_package(OpenSSL 3.0.0 REQUIRED)
2944
find_package(ZLIB REQUIRED)
3045
find_package(LibXml2 REQUIRED)
3146
find_package(FlatBuffers CONFIG REQUIRED NAMES FlatBuffers Flatbuffers flatbuffers)
3247
find_package(SWIG)
33-
find_package(JNI)
34-
find_package(Python3 COMPONENTS Interpreter Development)
48+
if(SWIG_FOUND)
49+
find_package(JNI)
50+
find_package(Python3 COMPONENTS Interpreter Development)
51+
endif()
3552

53+
find_package(Doxygen)
3654
if( DOXYGEN_FOUND )
3755
configure_file(${CMAKE_SOURCE_DIR}/etc/Doxyfile.in Doxyfile @ONLY )
3856
add_custom_target(docs ALL
@@ -44,10 +62,6 @@ if( DOXYGEN_FOUND )
4462
install(DIRECTORY doc/ DESTINATION ${CMAKE_INSTALL_DOCDIR} )
4563
endif()
4664

47-
if( WIN32 )
48-
add_definitions( -DUNICODE -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS -DWIN32_LEAN_AND_MEAN )
49-
endif()
50-
5165
enable_testing()
5266
add_subdirectory(libcdoc)
5367

cmake/modules/VersionInfo.cmake

Lines changed: 0 additions & 35 deletions
This file was deleted.

libcdoc/CMakeLists.txt

Lines changed: 59 additions & 113 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
@@ -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

3635
if(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)
4137
endif()
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

10565
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}
66+
target_include_directories(cdoc_priv
67+
PUBLIC ${PROJECT_SOURCE_DIR}
68+
PRIVATE ${CMAKE_CURRENT_BINARY_DIR}
11369
)
114-
11570
target_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})
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,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

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

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

204130
if(SWIG_FOUND)
@@ -245,14 +171,34 @@ 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+
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+
248194
install(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

258204
install(TARGETS cdoc_static

0 commit comments

Comments
 (0)