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+
1723option (skyr_BUILD_TESTS "Build the URL tests." ON )
1824option (skyr_BUILD_DOCS "Build the URL documentation." OFF )
1925option (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)
2531option (skyr_BUILD_WITH_LLVM_LIBCXX "Instruct Clang to use LLVM's implementation of C++ standard library" OFF )
2632option (skyr_ENABLE_FILESYSTEM_FUNCTIONS "Enable functions to convert URL to std::filesystem::path" ON )
2733option (skyr_ENABLE_JSON_FUNCTIONS "Enable functions to convert URL components to JSON" ON )
34+ option (skyr_BUILD_V1 "Build v1" ON )
2835option (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 )
3545endif ()
36- set (CMAKE_CXX_EXTENSIONS OFF )
37- set (CMAKE_CXX_STANDARD_REQUIRED ON )
3846
3947find_package (tl-expected CONFIG REQUIRED )
4048find_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 ()
4957endif ()
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
5270add_subdirectory (src )
5371
@@ -70,102 +88,107 @@ if (skyr_BUILD_EXAMPLES)
7088 add_subdirectory (examples )
7189endif ()
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 ()
171194endif ()
0 commit comments