Skip to content

Commit 348d45b

Browse files
authored
upgrade cmake (#8)
* upgrade cmake install --------- Co-authored-by: Artur Bać <artur@ebasoft.com.pl>
1 parent a1d1368 commit 348d45b

File tree

4 files changed

+117
-100
lines changed

4 files changed

+117
-100
lines changed

CMakeLists.txt

Lines changed: 69 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -1,126 +1,96 @@
11
cmake_minimum_required(VERSION 3.23)
22

33
include(${CMAKE_CURRENT_LIST_DIR}/cmake/extract_version.cmake)
4-
project(stralgo
5-
VERSION ${STRALGO_VERSION}
6-
LANGUAGES CXX
7-
HOMEPAGE_URL "https://github.com/arturbac/stralgo"
8-
)
4+
project(
5+
stralgo
6+
VERSION ${STRALGO_VERSION}
7+
LANGUAGES CXX
8+
HOMEPAGE_URL "https://github.com/arturbac/stralgo")
9+
include(GNUInstallDirs)
10+
include(CMakePackageConfigHelpers)
11+
912
if(PROJECT_SOURCE_DIR STREQUAL PROJECT_BINARY_DIR)
1013
message(
1114
FATAL_ERROR
1215
"In-source builds not allowed. Please make a new directory (called a build directory) and run CMake from there."
1316
)
1417
endif()
1518

16-
include(FeatureSummary)
17-
option(STRALGO_ENABLE_UNIT_TESTS "unit tests available from CTest" ${PROJECT_IS_TOP_LEVEL} )
18-
add_feature_info("STRALGO_ENABLE_UNIT_TESTS" STRALGO_ENABLE_UNIT_TESTS "unit test available from CTest")
19+
if(PROJECT_IS_TOP_LEVEL)
20+
include(FeatureSummary)
21+
endif()
1922

20-
if( PROJECT_IS_TOP_LEVEL AND STRALGO_ENABLE_UNIT_TESTS)
21-
set(SMALL_VECTORS_ENABLE_UNIT_TESTS ON)
22-
enable_testing()
23+
if(PROJECT_IS_TOP_LEVEL)
24+
option(STRALGO_ENABLE_UNIT_TESTS "unit tests available from CTest"
25+
${PROJECT_IS_TOP_LEVEL})
26+
add_feature_info("STRALGO_ENABLE_UNIT_TESTS" STRALGO_ENABLE_UNIT_TESTS
27+
"unit test available from CTest")
28+
29+
if(STRALGO_ENABLE_UNIT_TESTS)
30+
set(SMALL_VECTORS_ENABLE_UNIT_TESTS ON)
31+
enable_testing()
32+
endif()
2333
endif()
34+
option(STRALGO_EXPORT_CMAKE_TARGETS "Enable cmake targets" ON)
2435

25-
if(NOT DEFINED CMAKE_CXX_STANDARD OR CMAKE_CXX_STANDARD LESS 23 )
36+
if(NOT DEFINED CMAKE_CXX_STANDARD OR CMAKE_CXX_STANDARD LESS 23)
2637
message(STATUS "Assuming by default c++23 standard")
27-
set( CMAKE_CXX_STANDARD 23 )
38+
set(CMAKE_CXX_STANDARD 23)
2839
endif()
29-
set( CMAKE_CXX_STANDARD_REQUIRED ON )
30-
set( CMAKE_CXX_EXTENSIONS OFF)
31-
32-
include(cmake/get_cpm.cmake)
33-
# ---- Add dependencies via CPM ----
34-
# see https://github.com/cpm-cmake/CPM.cmake for more info
35-
CPMAddPackage(
36-
NAME PackageProject.cmake
37-
GITHUB_REPOSITORY TheLartians/PackageProject.cmake
38-
VERSION 1.12.0
39-
)
40+
set(CMAKE_CXX_STANDARD_REQUIRED ON)
41+
set(CMAKE_CXX_EXTENSIONS OFF)
4042

41-
#----------------------------------------------------------------
43+
# ----------------------------------------------------------------
4244
# small_vectors
43-
#----------------------------------------------------------------
44-
CPMAddPackage(
45-
small_vectors
46-
GITHUB_REPOSITORY arturbac/small_vectors
47-
GIT_TAG v3.2.0
48-
)
49-
50-
if( PROJECT_IS_TOP_LEVEL )
51-
#----------------------------------------------------------------
52-
# boost-ext/ut
53-
#----------------------------------------------------------------
54-
CPMAddPackage(
55-
ut
56-
GITHUB_REPOSITORY arturbac/ut-ext
57-
GIT_TAG master
58-
)
59-
endif()
60-
61-
62-
63-
64-
add_library(stralgo INTERFACE )
65-
66-
if(PROJECT_IS_TOP_LEVEL)
67-
add_library(stralgo::stralgo ALIAS stralgo )
45+
# ----------------------------------------------------------------
46+
find_package(small_vectors QUIET)
47+
if(NOT small_vectors_FOUND)
48+
include(cmake/get_cpm.cmake)
49+
cpmaddpackage(small_vectors GITHUB_REPOSITORY arturbac/small_vectors GIT_TAG
50+
v3.3.5
51+
)
52+
add_library(small_vectors::small_vectors ALIAS small_vectors )
6853
endif()
6954

70-
if(NOT DEFINED INCLUDE_INSTALL_DIR)
71-
set(INCLUDE_INSTALL_DIR include/${PROJECT_NAME})
72-
endif()
55+
add_library(stralgo INTERFACE)
7356

74-
target_include_directories(stralgo
75-
INTERFACE $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
76-
$<INSTALL_INTERFACE:${INCLUDE_INSTALL_DIR}>
77-
)
57+
target_sources(
58+
stralgo
59+
INTERFACE FILE_SET HEADERS BASE_DIRS
60+
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
61+
$<INSTALL_INTERFACE:include>)
7862
target_link_libraries(stralgo INTERFACE small_vectors::small_vectors)
7963

80-
packageProject(
81-
NAME ${PROJECT_NAME}
64+
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/ DESTINATION include)
65+
install(
66+
TARGETS stralgo
67+
EXPORT stralgo_targets
68+
INCLUDES
69+
DESTINATION include
70+
FILE_SET HEADERS)
71+
72+
configure_package_config_file(
73+
cmake/stralgoConfig.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/stralgoConfig.cmake
74+
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/stralgo)
75+
write_basic_package_version_file(
76+
${CMAKE_CURRENT_BINARY_DIR}/stralgoConfigVersion.cmake
8277
VERSION ${PROJECT_VERSION}
83-
NAMESPACE stralgo
84-
BINARY_DIR ${PROJECT_BINARY_DIR}
85-
INCLUDE_DIR ${PROJECT_SOURCE_DIR}/include
86-
INCLUDE_DESTINATION ${INCLUDE_INSTALL_DIR}
87-
COMPATIBILITY SameMajorVersion
88-
)
89-
90-
if( PROJECT_IS_TOP_LEVEL )
91-
92-
if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
93-
set(STRALGO_COMPILE_OPTIONS
94-
-Weverything
95-
-Werror
96-
-Wno-c++98-compat
97-
-Wno-c++98-compat-pedantic
98-
-Wno-pre-c++14-compat
99-
-Wno-pre-c++17-compat
100-
-Wno-pre-c++20-compat-pedantic
101-
-Wno-c++20-compat
102-
-Wno-c++2b-extensions
103-
-Wno-unused-parameter
104-
-Wno-padded
105-
-Wno-unused-command-line-argument
106-
-Wunsafe-buffer-usage
107-
)
108-
# check_cxx_compiler_flag(-Wunsafe-buffer-usage WUNSAFE_BUFFER_USAGE)
109-
# if(WUNSAFE_BUFFER_USAGE)
110-
# list(APPEND STRALGO_COMPILE_OPTIONS -Wunsafe-buffer-usage)
111-
# endif()
112-
endif()
113-
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
114-
set(STRALGO_COMPILE_OPTIONS
115-
-Wall
116-
-Wextra
117-
-Werror
118-
)
119-
endif()
78+
COMPATIBILITY SameMajorVersion ARCH_INDEPENDENT)
79+
80+
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/stralgoConfig.cmake
81+
${CMAKE_CURRENT_BINARY_DIR}/stralgoConfigVersion.cmake
82+
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/stralgo)
83+
84+
if(STRALGO_EXPORT_CMAKE_TARGETS)
85+
install(
86+
EXPORT stralgo_targets
87+
FILE stralgoTargets.cmake
88+
NAMESPACE stralgo::
89+
DESTINATION lib/cmake/stralgo)
12090
endif()
12191

122-
if( STRALGO_ENABLE_UNIT_TESTS)
123-
add_subdirectory( unittests )
92+
if(STRALGO_ENABLE_UNIT_TESTS)
93+
add_subdirectory(unittests)
12494
endif()
125-
#
95+
#
12696
# add_subdirectory(perf)

cmake/stralgoConfig.cmake.in

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
@PACKAGE_INIT@
2+
3+
include(CMakeFindDependencyMacro)
4+
5+
include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake")
6+
7+
check_required_components(@PROJECT_NAME@)
8+
9+

include/stralgo/version.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,5 @@
33
// SPDX-PackageHomePage: https://github.com/arturbac/stralgo
44
#pragma once
55

6-
#define STRALGO_VERSION "1.4.0"
6+
#define STRALGO_VERSION "1.4.1"
77

unittests/CMakeLists.txt

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,41 @@
1+
#----------------------------------------------------------------
2+
# boost-ext/ut
3+
#----------------------------------------------------------------
4+
CPMAddPackage(
5+
ut
6+
GITHUB_REPOSITORY arturbac/ut-ext
7+
GIT_TAG master
8+
)
9+
add_library(stralgo::stralgo ALIAS stralgo )
10+
if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
11+
set(STRALGO_COMPILE_OPTIONS
12+
-Weverything
13+
-Werror
14+
-Wno-c++98-compat
15+
-Wno-c++98-compat-pedantic
16+
-Wno-pre-c++14-compat
17+
-Wno-pre-c++17-compat
18+
-Wno-pre-c++20-compat-pedantic
19+
-Wno-c++20-compat
20+
-Wno-c++2b-extensions
21+
-Wno-unused-parameter
22+
-Wno-padded
23+
-Wno-unused-command-line-argument
24+
-Wunsafe-buffer-usage
25+
)
26+
# check_cxx_compiler_flag(-Wunsafe-buffer-usage WUNSAFE_BUFFER_USAGE)
27+
# if(WUNSAFE_BUFFER_USAGE)
28+
# list(APPEND STRALGO_COMPILE_OPTIONS -Wunsafe-buffer-usage)
29+
# endif()
30+
endif()
31+
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
32+
set(STRALGO_COMPILE_OPTIONS
33+
-Wall
34+
-Wextra
35+
-Werror
36+
)
37+
endif()
38+
139
add_subdirectory(ut_core)
240

341
function( stralgo_add_unittest name )

0 commit comments

Comments
 (0)