-
Notifications
You must be signed in to change notification settings - Fork 0
/
CMakeLists.txt
94 lines (89 loc) · 3.52 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# ----------------------------------------------------------------------------------------
# uri (header only)
# Copyright (C) 2024 Fix8 Market Technologies Pty Ltd
# by David L. Dight
# see https://github.com/fix8mt/uri
#
# Lightweight header-only C++20 URI parser
#
# Distributed under the Boost Software License, Version 1.0 August 17th, 2003
#
# Permission is hereby granted, free of charge, to any person or organization
# obtaining a copy of the software and accompanying documentation covered by
# this license (the "Software") to use, reproduce, display, distribute,
# execute, and transmit the Software, and to prepare derivative works of the
# Software, and to permit third-parties to whom the Software is furnished to
# do so, all subject to the following:
#
# The copyright notices in the Software and this entire statement, including
# the above license grant, this restriction and the following disclaimer,
# must be included in all copies of the Software, in whole or in part, and
# all derivative works of the Software, unless such copies or derivative
# works are solely in the form of machine-executable object code generated by
# a source language processor.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
# SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
# FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
# DEALINGS IN THE SOFTWARE.
#
# ----------------------------------------------------------------------------------------
# cmake config
# clang
# CXX="clang++" CC="clang" cmake ..
# gcc
# CXX="g++" CC="gcc" cmake ..
#
# min cmake version 3.20 (Mar 24, 2021)
# ----------------------------------------------------------------------------------------
cmake_minimum_required (VERSION 3.20)
project (uri
LANGUAGES CXX
HOMEPAGE_URL https://github.com/fix8mt/uri
DESCRIPTION "Lightweight header-only C++20 URI parser"
VERSION 1.3.1
)
include(FetchContent)
# to disable building benchmarking tests:
# cmake -DBUILD_BENCHMARKS=false ..
option(BUILD_BENCHMARKS "enable building benchmarking tests" true)
message("-- Build benchmarking tests: ${BUILD_BENCHMARKS}")
if(BUILD_BENCHMARKS)
message(STATUS "Downloading Criterion...")
FetchContent_Declare(Criterion
GIT_REPOSITORY https://github.com/p-ranav/criterion.git
GIT_SHALLOW ON
)
FetchContent_MakeAvailable(Criterion)
endif()
message(STATUS "Downloading Catch2...")
FetchContent_Declare(Catch2
GIT_REPOSITORY https://github.com/catchorg/Catch2.git
GIT_SHALLOW ON
GIT_TAG devel
)
FetchContent_MakeAvailable(Catch2)
list(APPEND CMAKE_MODULE_PATH ${catch2_SOURCE_DIR}/extras)
set(files uritest.cpp unittests.cpp)
if(BUILD_BENCHMARKS)
list(APPEND files benchmarks.cpp)
endif()
foreach(x IN LISTS files)
cmake_path(GET x STEM LAST_ONLY target)
add_executable(${target} examples/${x})
set_target_properties(${target} PROPERTIES CXX_STANDARD 20 CXX_STANDARD_REQUIRED true)
target_include_directories(${target} PRIVATE include examples)
target_link_libraries(${target} PRIVATE Catch2::Catch2WithMain)
if(BUILD_BENCHMARKS)
target_link_libraries(${target} PRIVATE Criterion)
endif()
cmake_path(GET x FILENAME fname)
get_target_property(cppstd ${target} CXX_STANDARD)
message("-- adding ${fname} cxx std: C++${cppstd}")
endforeach()
include(Catch)
enable_testing()
catch_discover_tests(unittests)