Skip to content

Commit c45d249

Browse files
committed
modernize cmake
1 parent 60b2f47 commit c45d249

File tree

18 files changed

+251
-492
lines changed

18 files changed

+251
-492
lines changed

.github/workflows/main.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,6 @@ jobs:
1818
- name: configure
1919
run: cmake -Bbuild -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON
2020
- name: build
21-
run: cmake --build build
21+
run: cmake --build build --parallel 2
2222
- name: test
2323
run: cd build && ctest -VV

CMakeLists.txt

Lines changed: 41 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -2,40 +2,63 @@
22
# refer to the root source directory of the project as ${MFAST_SOURCE_DIR} and
33
# to the root binary directory of the project as ${MFAST_BINARY_DIR}.
44

5-
cmake_minimum_required(VERSION 2.8.11)
6-
project (mFAST CXX)
5+
cmake_minimum_required(VERSION 3.23)
6+
project (mFAST VERSION 1.3.0 LANGUAGES CXX)
77

88
# options to build tests, examples and packages
99
option(BUILD_TESTS "Build tests" ON)
1010
option(BUILD_EXAMPLES "Build examples" ON)
1111
option(BUILD_PACKAGES "Build packages" ON)
1212

13+
# global options
14+
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
15+
set(CMAKE_CXX_VISIBILITY_PRESET hidden) ## hidden visibility by default is good for everyone
16+
set(CMAKE_VISIBILITY_INLINES_HIDDEN ON)
17+
set(BUILD_SHARED_LIBS OFF CACHE BOOL "build shared/dynamic library")
18+
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
19+
1320
# debug build by default
1421
if(NOT CMAKE_BUILD_TYPE)
1522
set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "Choose the type of build" FORCE)
16-
endif(NOT CMAKE_BUILD_TYPE)
17-
18-
if(POLICY CMP0054)
19-
cmake_policy(SET CMP0054 OLD)
2023
endif()
2124

22-
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
23-
24-
set(MFAST_MAJOR_VERSION 1)
25-
set(MFAST_MINOR_VERSION 3)
26-
set(MFAST_PATCH_VERSION 0)
27-
set(MFAST_VERSION ${MFAST_MAJOR_VERSION}.${MFAST_MINOR_VERSION}.${MFAST_PATCH_VERSION})
28-
set(MFAST_SOVERSION ${MFAST_MAJOR_VERSION}.${MFAST_MINOR_VERSION}.${MFAST_PATCH_VERSION})
29-
30-
include(SetInstallPaths)
25+
include(GNUInstallDirs)
3126
include(Emscripten)
32-
include(SetCXXStandard)
3327
include(SetCompilerWarnings)
3428
include(SetupCoverage)
29+
include(FastTypeGenTarget)
3530

36-
# flag to enable building shared/dynamic library
37-
set(BUILD_SHARED_LIBS OFF CACHE BOOL "build shared/dynamic library")
31+
# dependencies
32+
find_package(Boost 1.56.0 REQUIRED)
33+
34+
add_compile_definitions(SIZEOF_VOID_P=${CMAKE_SIZEOF_VOID_P})
3835

36+
add_subdirectory (src)
37+
38+
if(BUILD_TESTS)
39+
enable_testing()
40+
add_subdirectory (tests)
41+
endif(BUILD_TESTS)
42+
43+
if(BUILD_EXAMPLES)
44+
add_subdirectory (examples)
45+
endif(BUILD_EXAMPLES)
46+
47+
# Setting up dist target
48+
set(ARCHIVE_NAME ${CMAKE_PROJECT_NAME}-${MFAST_VERSION})
49+
add_custom_target(dist
50+
COMMAND git archive -o ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2 --prefix=${ARCHIVE_NAME}/ HEAD
51+
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
52+
53+
file(GLOB schema_files "${CMAKE_CURRENT_SOURCE_DIR}/schema/*.*")
54+
install(DIRECTORY
55+
schema/
56+
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/mfast)
57+
58+
# keep at the end, after target definitions
59+
include(GenProjectConfig)
60+
61+
# package support
3962
if(BUILD_PACKAGES)
4063
# Build deb package by default
4164
if(NOT CPACK_GENERATOR)
@@ -57,56 +80,8 @@ if(BUILD_PACKAGES)
5780
set(CPACK_DEBIAN_PACKAGE_SECTION "devel")
5881

5982
include(CPack)
60-
6183
endif(BUILD_PACKAGES)
6284

63-
find_package(Boost 1.56.0 REQUIRED)
64-
include_directories(${Boost_INCLUDE_DIR})
65-
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/tinyxml2)
66-
include_directories ("${PROJECT_SOURCE_DIR}/src")
67-
68-
add_definitions(-DSIZEOF_VOID_P=${CMAKE_SIZEOF_VOID_P})
69-
70-
# variables to be used later
71-
set(MFAST_SHARED_LIBRARIES CACHE INTERNAL "")
72-
set(MFAST_STATIC_LIBRARIES CACHE INTERNAL "")
73-
set(MFAST_DYNAMIC_COMPONENTS CACHE INTERNAL "")
74-
set(MFAST_STATIC_COMPONENTS CACHE INTERNAL "")
75-
76-
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
77-
78-
add_subdirectory (src)
79-
include(FastTypeGenTarget)
80-
81-
if(BUILD_TESTS)
82-
enable_testing()
83-
add_subdirectory (tests)
84-
endif(BUILD_TESTS)
85-
86-
if (BUILD_SHARED_LIBS)
87-
set(MFAST_LIBRARIES "${MFAST_SHARED_LIBRARIES}")
88-
else (BUILD_SHARED_LIBS)
89-
set(MFAST_LIBRARIES "${MFAST_STATIC_LIBRARIES}")
90-
endif (BUILD_SHARED_LIBS)
91-
92-
if(BUILD_EXAMPLES)
93-
add_subdirectory (examples)
94-
endif(BUILD_EXAMPLES)
95-
96-
# Setting up dist target
97-
set(ARCHIVE_NAME ${CMAKE_PROJECT_NAME}-${MFAST_VERSION})
98-
add_custom_target(dist
99-
COMMAND git archive --prefix=${ARCHIVE_NAME}/ HEAD
100-
| bzip2 > ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
101-
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
102-
103-
include(GenProjectConfig)
104-
105-
file(GLOB schema_files "${CMAKE_CURRENT_SOURCE_DIR}/schema/*.*")
106-
install(FILES
107-
${schema_files}
108-
DESTINATION ${INSTALL_DATA_DIR}/mfast)
109-
11085
# Print summary
11186
message(STATUS "")
11287
message(STATUS "CMAKE_COMMAND: " ${CMAKE_COMMAND})

cmake/GenProjectConfig.cmake

Lines changed: 15 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,23 @@
11
# Provide mfast-config.cmake and mfast-config.version to be used by other applications
22
# ===============================
33

4-
export(PACKAGE ${CMAKE_PROJECT_NAME})
5-
6-
if (CMAKE_CROSSCOMPILING)
7-
export(TARGETS ${MFAST_SHARED_LIBRARIES} ${MFAST_STATIC_LIBRARIES}
8-
FILE "${PROJECT_BINARY_DIR}/mFASTTargets.cmake")
9-
else(CMAKE_CROSSCOMPILING)
10-
export(TARGETS fast_type_gen ${MFAST_SHARED_LIBRARIES} ${MFAST_STATIC_LIBRARIES}
11-
FILE "${PROJECT_BINARY_DIR}/mFASTTargets.cmake")
12-
endif (CMAKE_CROSSCOMPILING)
13-
14-
# Create the mFASTConfig.cmake for the build tree
15-
set(CONF_INCLUDE_DIRS "${PROJECT_SOURCE_DIR}/src")
16-
configure_file(${PROJECT_SOURCE_DIR}/cmake/mFASTConfig.cmake.in
17-
"${PROJECT_BINARY_DIR}/mFASTConfig.cmake"
18-
@ONLY)
4+
include(CMakePackageConfigHelpers)
195

206
# Create the mFASTConfig.cmake for the install tree
21-
file(RELATIVE_PATH REL_INCLUDE_DIR "${ABSOLUTE_INSTALL_CMAKE_DIR}" "${ABSOLUTE_INSTALL_INCLUDE_DIR}")
22-
set(CONF_INCLUDE_DIRS "\${MFAST_CMAKE_DIR}/${REL_INCLUDE_DIR}")
23-
configure_file(${PROJECT_SOURCE_DIR}/cmake/mFASTConfig.cmake.in
24-
"${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/mFASTConfig.cmake"
25-
@ONLY)
267

27-
# Create the mFASTConfigVersion.cmake for both
28-
configure_file(${PROJECT_SOURCE_DIR}/cmake/mFASTConfigVersion.cmake.in
29-
"${PROJECT_BINARY_DIR}/mFASTConfigVersion.cmake"
30-
@ONLY)
8+
write_basic_package_version_file(${PROJECT_BINARY_DIR}/mFASTConfigVersion.cmake
9+
VERSION ${mFAST_VERSION}
10+
COMPATIBILITY SameMajorVersion)
11+
12+
configure_package_config_file(${PROJECT_SOURCE_DIR}/cmake/mFASTConfig.cmake.in
13+
${PROJECT_BINARY_DIR}/mFASTConfig.cmake
14+
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/mFAST)
3115

32-
configure_file(${PROJECT_SOURCE_DIR}/cmake/FastTypeGenTarget.cmake
33-
FastTypeGenTarget.cmake COPYONLY)
16+
install(FILES ${PROJECT_BINARY_DIR}/mFASTConfigVersion.cmake
17+
${PROJECT_BINARY_DIR}/mFASTConfig.cmake
18+
${PROJECT_SOURCE_DIR}/cmake/FastTypeGenTarget.cmake
19+
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/mFAST)
3420

35-
configure_file(${PROJECT_SOURCE_DIR}/cmake/SetCXXStandard.cmake
36-
SetCXXStandard.cmake COPYONLY)
37-
38-
# Install the mFASTConfig.cmake and mFASTConfigVersion.cmake
39-
install(FILES
40-
"${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/mFASTConfig.cmake"
41-
"${PROJECT_BINARY_DIR}/mFASTConfigVersion.cmake"
42-
"${PROJECT_SOURCE_DIR}/cmake/FastTypeGenTarget.cmake"
43-
"${PROJECT_SOURCE_DIR}/cmake/SetCXXStandard.cmake"
44-
DESTINATION "${INSTALL_CMAKE_DIR}" COMPONENT dev)
45-
46-
# Install the export set for use with the install-tree
47-
install(EXPORT mFASTTargets DESTINATION "${INSTALL_CMAKE_DIR}" COMPONENT dev)
21+
install(EXPORT mFASTTargets
22+
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/mFAST
23+
COMPONENT dev)

cmake/SetCXXStandard.cmake

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

cmake/SetCompilerWarnings.cmake

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# Initialize CXXFLAGS.
2-
if (NOT ${CMAKE_CXX_COMPILER_ID} STREQUAL "MSVC")
3-
set(CMAKE_CXX_FLAGS "-W -Wall ${CMAKE_CXX_FLAGS}")
4-
endif()
5-
if (MSVC)
6-
add_definitions(/D_SCL_SECURE_NO_WARNINGS /D_CRT_SECURE_NO_WARNINGS)
7-
endif()
2+
add_compile_options($<$<CXX_COMPILER_ID:MSVC>:/W4>
3+
$<$<CXX_COMPILER_ID:GNU,Clang>:-W>
4+
$<$<CXX_COMPILER_ID:GNU,Clang>:-Wall>)
5+
6+
add_compile_definitions($<$<CXX_COMPILER_ID:MSVC>:_SCL_SECURE_NO_WARNINGS>
7+
$<$<CXX_COMPILER_ID:MSVC>:_CRT_SECURE_NO_WARNINGS>)

cmake/SetInstallPaths.cmake

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

cmake/mFASTConfig.cmake.in

Lines changed: 52 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -1,65 +1,53 @@
11
# Config file for the mFAST package
2-
# It defines the following variables
3-
# MFAST_INCLUDE_DIR - include directories for mFAST
4-
# MFAST_LIBRARY_DIRS - library directories for mFAST
5-
# MFAST_LIBRARIES - libraries to link against
6-
# MFAST_COMPONENTS - installed components
7-
# MFAST_<component>_LIBRARY - particular component library
8-
# MFAST_EXECUTABLE - the fast_type_gen executable
9-
10-
# Compute paths
11-
get_filename_component(MFAST_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
12-
include("${MFAST_CMAKE_DIR}/mFASTTargets.cmake")
13-
14-
find_package( Boost 1.55.0 )
15-
set(MFAST_INCLUDE_DIR "${Boost_INCLUDE_DIR}")
16-
foreach (directory @CONF_INCLUDE_DIRS@)
17-
get_filename_component(directory "${directory}" ABSOLUTE)
18-
list(APPEND MFAST_INCLUDE_DIR "${directory}")
19-
endforeach (directory)
20-
set(MFAST_LIBRARY_DIRS "@CONF_LIBRARY_DIRS@")
21-
22-
list(REMOVE_DUPLICATES MFAST_INCLUDE_DIR)
23-
24-
set(MFAST_EXECUTABLE @FAST_TYPE_GEN_INSTALL_LOCATION@)
25-
# These are IMPORTED targets created by mFASTTargets.cmake
26-
set(MFAST_FOUND "TRUE")
27-
28-
29-
# Make dependent targets automatically pick up include directory and definitions for CMake 2.8.12 and later
30-
set_property(TARGET @MFAST_SHARED_LIBRARIES@ @MFAST_STATIC_LIBRARIES@
31-
APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${MFAST_INCLUDE_DIR})
32-
33-
34-
if (NOT DEFINED MFAST_USE_STATIC_LIBS OR MFAST_USE_STATIC_LIBS)
35-
set(STATIC_SUFFIX "_static")
36-
set(components @MFAST_STATIC_COMPONENTS@)
37-
else ()
38-
set(components @MFAST_DYNAMIC_COMPONENTS@)
39-
endif ()
40-
41-
foreach (entry IN LISTS mFAST_FIND_COMPONENTS)
42-
foreach (component IN LISTS components)
43-
if ("${entry}${STATIC_SUFFIX}" STREQUAL "${component}")
44-
set("MFAST_${entry}_FOUND" Yes)
45-
endif ()
46-
endforeach (component)
47-
48-
if (MFAST_${entry}_FOUND)
49-
list(REMOVE_ITEM mFAST_FIND_COMPONENTS "${entry}")
50-
list(APPEND MFAST_LIBRARIES "mfast_${entry}${STATIC_SUFFIX}")
51-
52-
set(MFAST_USED_COMPONENTS "${MFAST_USED_COMPONENTS} ${entry}")
53-
set("MFAST_${entry}_LIBRARY" "mfast_${entry}${STATIC_SUFFIX}")
54-
else ()
55-
message(SEND_ERROR "mFAST component ${entry} NOT FOUND! Available components: ${components}")
56-
endif ()
57-
endforeach (entry)
58-
59-
list(APPEND MFAST_LIBRARIES "mfast${STATIC_SUFFIX}")
60-
61-
message(STATUS "mFAST Found! Used components:${MFAST_USED_COMPONENTS}")
62-
message(STATUS "Used libraries: ${MFAST_LIBRARIES}")
63-
64-
include("${MFAST_CMAKE_DIR}/FastTypeGenTarget.cmake")
65-
include("${MFAST_CMAKE_DIR}/SetCXXStandard.cmake")
2+
# It defines the following targets
3+
# mfast_static - base library, for static link
4+
# mfast_coder_static - codecs library, for static link
5+
# mfast_xml_parser_static - xml parsing library, for static link
6+
# mfast_json_static - json output library, for static link
7+
# mfast_sqlite3_static - sqlite library, for static link
8+
# mfast - base library, for dynamic link
9+
# mfast_coder - codecs library, for dynamic link
10+
# mfast_xml_parser - xml parsing library, for dynamic link
11+
# mfast_json - json output library, for dynamic link
12+
# mfast_sqlite3 - sqlite library, for dynamic link
13+
#
14+
# For convenience it also defines:
15+
# mFAST_INCLUDE_DIR - include directories for mFAST
16+
# mFAST_LIBRARY_DIRS - library directories for mFAST
17+
# mFAST_LIBRARIES - libraries to link against
18+
# mFAST_EXECUTABLE - the fast_type_gen executable
19+
20+
set(mFAST_VERSION @mFAST_VERSION@)
21+
include(CMakeFindDependencyMacro)
22+
23+
@PACKAGE_INIT@
24+
25+
find_dependency(Boost 1.56.0)
26+
27+
include("${CMAKE_CURRENT_LIST_DIR}/mFASTTargets.cmake")
28+
include("${CMAKE_CURRENT_LIST_DIR}/FastTypeGenTarget.cmake")
29+
set(mFAST_FOUND TRUE)
30+
set(mFAST_INCLUDE_DIR ${PACKAGE_PREFIX_DIR}/include)
31+
set(mFAST_LIBRARY_DIRS ${PACKAGE_PREFIX_DIR}/lib)
32+
33+
macro(add_to_libraries_if_exists TARGET)
34+
if (TARGET ${TARGET})
35+
list(APPEND mFAST_LIBRARIES ${TARGET})
36+
set(mFAST_${TARGET}_FOUND TRUE)
37+
endif()
38+
endmacro()
39+
40+
add_to_libraries_if_exists(mfast)
41+
add_to_libraries_if_exists(mfast_xml_parser)
42+
add_to_libraries_if_exists(mfast_xml_parser_static)
43+
add_to_libraries_if_exists(mfast_static)
44+
add_to_libraries_if_exists(mfast_sqlite3)
45+
add_to_libraries_if_exists(mfast_sqlite3_static)
46+
add_to_libraries_if_exists(mfast_json)
47+
add_to_libraries_if_exists(mfast_json_static)
48+
add_to_libraries_if_exists(mfast_coder)
49+
add_to_libraries_if_exists(mfast_coder_static)
50+
51+
set(mFAST_EXECUTABLE fast_type_gen)
52+
53+
check_required_components(mFAST)

0 commit comments

Comments
 (0)