Skip to content

Commit 427b154

Browse files
authored
Cmake updates (#160)
* Made some fixes to CMake so that it can be used differently from another project * Updated build scripts * Try again adjusting parts of CMake
1 parent ee5e90c commit 427b154

9 files changed

Lines changed: 130 additions & 251 deletions

File tree

CMakeLists.txt

Lines changed: 120 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Copyright (c) Glyn Matthews 2012-2020.
1+
# Copyright (c) Glyn Matthews 2012-2021.
22
# Distributed under the Boost Software License, Version 1.0.
33
# (See accompanying file LICENSE_1_0.txt or copy at
44
# http://www.boost.org/LICENSE_1_0.txt)
@@ -14,6 +14,12 @@ project(
1414
LANGUAGES CXX
1515
)
1616

17+
if(CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR)
18+
set(skyr_IS_TOP_LEVEL_PROJECT YES)
19+
else()
20+
set(skyr_IS_TOP_LEVEL_PROJECT NO)
21+
endif()
22+
1723
option(skyr_BUILD_TESTS "Build the URL tests." ON)
1824
option(skyr_BUILD_DOCS "Build the URL documentation." OFF)
1925
option(skyr_BUILD_EXAMPLES "Build the URL examples." OFF)
@@ -25,16 +31,18 @@ option(skyr_USE_STATIC_CRT "Use static C Runtime library (/MT or MTd)." ON)
2531
option(skyr_BUILD_WITH_LLVM_LIBCXX "Instruct Clang to use LLVM's implementation of C++ standard library" OFF)
2632
option(skyr_ENABLE_FILESYSTEM_FUNCTIONS "Enable functions to convert URL to std::filesystem::path" ON)
2733
option(skyr_ENABLE_JSON_FUNCTIONS "Enable functions to convert URL components to JSON" ON)
34+
option(skyr_BUILD_V1 "Build v1" ON)
2835
option(skyr_BUILD_V2 "Build v2, which uses C++20 features" OFF)
2936

30-
set(CMAKE_VERBOSE_MAKEFILE true)
31-
if (skyr_BUILD_V2)
32-
set(CMAKE_CXX_STANDARD 20)
33-
else()
37+
if (skyr_IS_TOP_LEVEL_PROJECT)
38+
set(CMAKE_VERBOSE_MAKEFILE true)
3439
set(CMAKE_CXX_STANDARD 17)
40+
if (skyr_BUILD_V2)
41+
set(CMAKE_CXX_STANDARD 20)
42+
endif()
43+
set(CMAKE_CXX_EXTENSIONS OFF)
44+
set(CMAKE_CXX_STANDARD_REQUIRED ON)
3545
endif()
36-
set(CMAKE_CXX_EXTENSIONS OFF)
37-
set(CMAKE_CXX_STANDARD_REQUIRED ON)
3846

3947
find_package(tl-expected CONFIG REQUIRED)
4048
find_package(range-v3 CONFIG REQUIRED)
@@ -48,6 +56,16 @@ if (skyr_USE_STATIC_CRT AND ${CMAKE_CXX_COMPILER_ID} MATCHES MSVC)
4856
skyr_replace_dynamic_msvcrt_linker_flags()
4957
endif()
5058

59+
set(full_warnings $<BOOL:${skyr_FULL_WARNINGS}>)
60+
set(warnings_as_errors $<BOOL:${skyr_WARNINGS_AS_ERRORS}>)
61+
set(no_exceptions $<BOOL:${skyr_BUILD_WITHOUT_EXCEPTIONS}>)
62+
set(no_rtti $<BOOL:${skyr_BUILD_WITHOUT_RTTI}>)
63+
64+
set(gnu $<CXX_COMPILER_ID:GNU>)
65+
set(clang $<OR:$<CXX_COMPILER_ID:Clang>,$<CXX_COMPILER_ID:AppleClang>>)
66+
set(libcxx $<AND:${clang},$<BOOL:${skyr_BUILD_WITH_LLVM_LIBCXX}>>)
67+
set(clang_with_gnu_stdlib $<AND:$<CXX_COMPILER_ID:Clang>,$<NOT:$<BOOL:${WIN32}>>,$<NOT:$<BOOL:${skyr_BUILD_WITH_LLVM_LIBCXX}>>>)
68+
set(msvc $<CXX_COMPILER_ID:MSVC>)
5169

5270
add_subdirectory(src)
5371

@@ -70,102 +88,107 @@ if (skyr_BUILD_EXAMPLES)
7088
add_subdirectory(examples)
7189
endif()
7290

73-
# Add an alias for projects that use skyr-url as a dependency
74-
if (NOT CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR)
75-
add_library(skyr::skyr-url ALIAS skyr-url-v1)
76-
if (skyr_ENABLE_FILESYSTEM_FUNCTIONS)
77-
add_library(skyr::skyr-filesystem ALIAS skyr-filesystem-v1)
91+
if (skyr_BUILD_V1)
92+
# Add an alias for projects that use skyr-url as a dependency
93+
if (NOT CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR)
94+
add_library(skyr::skyr-url ALIAS skyr-url-v1)
95+
add_library(skyr::url ALIAS skyr-url-v1)
96+
if (skyr_ENABLE_FILESYSTEM_FUNCTIONS)
97+
add_library(skyr::skyr-filesystem ALIAS skyr-filesystem-v1)
98+
add_library(skyr::filesystem ALIAS skyr-filesystem-v1)
99+
endif()
100+
if (skyr_ENABLE_JSON_FUNCTIONS)
101+
add_library(skyr::skyr-json ALIAS skyr-json-v1)
102+
add_library(skyr::json ALIAS skyr-json-v1)
103+
endif()
78104
endif()
79-
if (skyr_ENABLE_JSON_FUNCTIONS)
80-
add_library(skyr::skyr-json ALIAS skyr-json-v1)
81-
endif()
82-
endif()
83-
84-
## Install
85-
include(CMakePackageConfigHelpers)
86-
include(GNUInstallDirs)
87-
88-
configure_package_config_file(
89-
"${PROJECT_SOURCE_DIR}/cmake/${PROJECT_NAME}-config.cmake.in"
90-
"${PROJECT_BINARY_DIR}/${PROJECT_NAME}-config.cmake"
91-
INSTALL_DESTINATION "share/cmake/${PROJECT_NAME}")
92105

93-
write_basic_package_version_file(
94-
"${PROJECT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake"
95-
COMPATIBILITY SameMajorVersion
96-
ARCH_INDEPENDENT)
97-
98-
set(skyr_TARGETS skyr-url-v1)
99-
if (skyr_ENABLE_FILESYSTEM_FUNCTIONS)
100-
list(APPEND skyr_TARGETS skyr-filesystem-v1)
101-
endif()
102-
if (skyr_ENABLE_JSON_FUNCTIONS)
103-
list(APPEND skyr_TARGETS skyr-json-v1)
104-
endif()
106+
## Install
107+
include(CMakePackageConfigHelpers)
108+
include(GNUInstallDirs)
105109

106-
install(TARGETS ${skyr_TARGETS}
107-
EXPORT ${PROJECT_NAME}-targets
108-
INCLUDES DESTINATION "${CMAKE_INSTALL_DATADIR}"
109-
ARCHIVE DESTINATION lib
110-
LIBRARY DESTINATION lib)
111-
112-
install(EXPORT ${PROJECT_NAME}-targets
113-
DESTINATION "${CMAKE_INSTALL_DATADIR}/cmake/${PROJECT_NAME}"
114-
NAMESPACE skyr::
115-
FILE "${PROJECT_NAME}-targets.cmake")
116-
117-
install(FILES
118-
"${PROJECT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake"
119-
"${PROJECT_BINARY_DIR}/${PROJECT_NAME}-config.cmake"
120-
DESTINATION "${CMAKE_INSTALL_DATADIR}/cmake/${PROJECT_NAME}")
121-
122-
install(
123-
DIRECTORY
124-
"${PROJECT_SOURCE_DIR}/include/skyr/core"
125-
"${PROJECT_SOURCE_DIR}/include/skyr/domain"
126-
"${PROJECT_SOURCE_DIR}/include/skyr/network"
127-
"${PROJECT_SOURCE_DIR}/include/skyr/percent_encoding"
128-
DESTINATION
129-
include/skyr
130-
)
110+
configure_package_config_file(
111+
"${PROJECT_SOURCE_DIR}/cmake/${PROJECT_NAME}-config.cmake.in"
112+
"${PROJECT_BINARY_DIR}/${PROJECT_NAME}-config.cmake"
113+
INSTALL_DESTINATION "share/cmake/${PROJECT_NAME}")
131114

132-
install(
133-
DIRECTORY
134-
"${PROJECT_SOURCE_DIR}/include/skyr/v1/core"
135-
"${PROJECT_SOURCE_DIR}/include/skyr/v1/domain"
136-
"${PROJECT_SOURCE_DIR}/include/skyr/v1/network"
137-
"${PROJECT_SOURCE_DIR}/include/skyr/v1/percent_encoding"
138-
"${PROJECT_SOURCE_DIR}/include/skyr/v1/platform"
139-
"${PROJECT_SOURCE_DIR}/include/skyr/v1/string"
140-
"${PROJECT_SOURCE_DIR}/include/skyr/v1/traits"
141-
"${PROJECT_SOURCE_DIR}/include/skyr/v1/unicode"
142-
DESTINATION
143-
include/skyr/v1
144-
)
115+
write_basic_package_version_file(
116+
"${PROJECT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake"
117+
COMPATIBILITY SameMajorVersion
118+
ARCH_INDEPENDENT)
145119

146-
install(
147-
FILES
148-
"${PROJECT_BINARY_DIR}/include/skyr/version.hpp"
149-
"${PROJECT_SOURCE_DIR}/include/skyr/config.hpp"
150-
"${PROJECT_SOURCE_DIR}/include/skyr/url.hpp"
151-
DESTINATION
152-
include/skyr
153-
)
120+
set(skyr_TARGETS skyr-url-v1)
121+
if (skyr_ENABLE_FILESYSTEM_FUNCTIONS)
122+
list(APPEND skyr_TARGETS skyr-filesystem-v1)
123+
endif()
124+
if (skyr_ENABLE_JSON_FUNCTIONS)
125+
list(APPEND skyr_TARGETS skyr-json-v1)
126+
endif()
154127

155-
install(
156-
FILES
157-
"${PROJECT_SOURCE_DIR}/include/skyr/v1/url.hpp"
158-
"${PROJECT_SOURCE_DIR}/include/skyr/v1/url_search_parameters.hpp"
159-
DESTINATION
160-
include/skyr/v1
161-
)
128+
install(TARGETS ${skyr_TARGETS}
129+
EXPORT ${PROJECT_NAME}-targets
130+
INCLUDES DESTINATION "${CMAKE_INSTALL_DATADIR}"
131+
ARCHIVE DESTINATION lib
132+
LIBRARY DESTINATION lib)
133+
134+
install(EXPORT ${PROJECT_NAME}-targets
135+
DESTINATION "${CMAKE_INSTALL_DATADIR}/cmake/${PROJECT_NAME}"
136+
NAMESPACE skyr::
137+
FILE "${PROJECT_NAME}-targets.cmake")
138+
139+
install(FILES
140+
"${PROJECT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake"
141+
"${PROJECT_BINARY_DIR}/${PROJECT_NAME}-config.cmake"
142+
DESTINATION "${CMAKE_INSTALL_DATADIR}/cmake/${PROJECT_NAME}")
143+
144+
install(
145+
DIRECTORY
146+
"${PROJECT_SOURCE_DIR}/include/skyr/core"
147+
"${PROJECT_SOURCE_DIR}/include/skyr/domain"
148+
"${PROJECT_SOURCE_DIR}/include/skyr/network"
149+
"${PROJECT_SOURCE_DIR}/include/skyr/percent_encoding"
150+
DESTINATION
151+
include/skyr
152+
)
153+
154+
install(
155+
DIRECTORY
156+
"${PROJECT_SOURCE_DIR}/include/skyr/v1/core"
157+
"${PROJECT_SOURCE_DIR}/include/skyr/v1/domain"
158+
"${PROJECT_SOURCE_DIR}/include/skyr/v1/network"
159+
"${PROJECT_SOURCE_DIR}/include/skyr/v1/percent_encoding"
160+
"${PROJECT_SOURCE_DIR}/include/skyr/v1/platform"
161+
"${PROJECT_SOURCE_DIR}/include/skyr/v1/string"
162+
"${PROJECT_SOURCE_DIR}/include/skyr/v1/traits"
163+
"${PROJECT_SOURCE_DIR}/include/skyr/v1/unicode"
164+
DESTINATION
165+
include/skyr/v1
166+
)
167+
168+
install(
169+
FILES
170+
"${PROJECT_BINARY_DIR}/include/skyr/version.hpp"
171+
"${PROJECT_SOURCE_DIR}/include/skyr/config.hpp"
172+
"${PROJECT_SOURCE_DIR}/include/skyr/url.hpp"
173+
DESTINATION
174+
include/skyr
175+
)
176+
177+
install(
178+
FILES
179+
"${PROJECT_SOURCE_DIR}/include/skyr/v1/url.hpp"
180+
"${PROJECT_SOURCE_DIR}/include/skyr/v1/url_search_parameters.hpp"
181+
DESTINATION
182+
include/skyr/v1
183+
)
162184

163-
if (skyr_ENABLE_FILESYSTEM_FUNCTIONS)
164-
install(DIRECTORY "${PROJECT_SOURCE_DIR}/include/skyr/filesystem" DESTINATION include/skyr)
165-
install(DIRECTORY "${PROJECT_SOURCE_DIR}/include/skyr/v1/filesystem" DESTINATION include/skyr/v1)
166-
endif()
185+
if (skyr_ENABLE_FILESYSTEM_FUNCTIONS)
186+
install(DIRECTORY "${PROJECT_SOURCE_DIR}/include/skyr/filesystem" DESTINATION include/skyr)
187+
install(DIRECTORY "${PROJECT_SOURCE_DIR}/include/skyr/v1/filesystem" DESTINATION include/skyr/v1)
188+
endif()
167189

168-
if (skyr_ENABLE_JSON_FUNCTIONS)
169-
install(DIRECTORY "${PROJECT_SOURCE_DIR}/include/skyr/json" DESTINATION include/skyr)
170-
install(DIRECTORY "${PROJECT_SOURCE_DIR}/include/skyr/v1/json" DESTINATION include/skyr/v1)
190+
if (skyr_ENABLE_JSON_FUNCTIONS)
191+
install(DIRECTORY "${PROJECT_SOURCE_DIR}/include/skyr/json" DESTINATION include/skyr)
192+
install(DIRECTORY "${PROJECT_SOURCE_DIR}/include/skyr/v1/json" DESTINATION include/skyr/v1)
193+
endif()
171194
endif()

examples/CMakeLists.txt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
1-
add_subdirectory(v1)
1+
if (skyr_BUILD_V1)
2+
add_subdirectory(v1)
3+
endif()

examples/v1/CMakeLists.txt

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,6 @@
55

66
include(${PROJECT_SOURCE_DIR}/cmake/skyr-url-functions.cmake)
77

8-
set(full_warnings $<BOOL:${skyr_FULL_WARNINGS}>)
9-
set(warnings_as_errors $<BOOL:${skyr_WARNINGS_AS_ERRORS}>)
10-
set(no_exceptions $<BOOL:${skyr_BUILD_WITHOUT_EXCEPTIONS}>)
11-
set(no_rtti $<BOOL:${skyr_BUILD_WITHOUT_RTTI}>)
12-
13-
set(gnu $<CXX_COMPILER_ID:GNU>)
14-
set(clang $<OR:$<CXX_COMPILER_ID:Clang>,$<CXX_COMPILER_ID:AppleClang>>)
15-
set(libcxx $<AND:${clang},$<BOOL:${skyr_BUILD_WITH_LLVM_LIBCXX}>>)
16-
set(msvc $<CXX_COMPILER_ID:MSVC>)
17-
188
foreach(
199
file_name
2010
example_01.cpp

src/CMakeLists.txt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@ configure_file(
1010
${PROJECT_BINARY_DIR}/include/skyr/version.hpp
1111
)
1212

13-
add_subdirectory(v1)
13+
if (skyr_BUILD_V1)
14+
add_subdirectory(v1)
15+
endif()
1416
if (skyr_BUILD_V2)
1517
add_subdirectory(v2)
1618
endif()

src/v1/CMakeLists.txt

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -86,17 +86,6 @@ set_target_properties(
8686

8787
target_compile_features(skyr-url-v1 PUBLIC cxx_std_17)
8888

89-
set(full_warnings $<BOOL:${skyr_FULL_WARNINGS}>)
90-
set(warnings_as_errors $<BOOL:${skyr_WARNINGS_AS_ERRORS}>)
91-
set(no_exceptions $<BOOL:${skyr_BUILD_WITHOUT_EXCEPTIONS}>)
92-
set(no_rtti $<BOOL:${skyr_BUILD_WITHOUT_RTTI}>)
93-
94-
set(gnu $<CXX_COMPILER_ID:GNU>)
95-
set(clang $<OR:$<CXX_COMPILER_ID:Clang>,$<CXX_COMPILER_ID:AppleClang>>)
96-
set(libcxx $<AND:${clang},$<BOOL:${skyr_BUILD_WITH_LLVM_LIBCXX}>>)
97-
set(msvc $<CXX_COMPILER_ID:MSVC>)
98-
set(clang_with_gnu_stdlib $<AND:$<CXX_COMPILER_ID:Clang>,$<NOT:$<BOOL:${WIN32}>>,$<NOT:$<BOOL:${skyr_BUILD_WITH_LLVM_LIBCXX}>>>)
99-
10089
target_compile_definitions(
10190
skyr-url-v1
10291
PRIVATE

0 commit comments

Comments
 (0)