Commit b6e3fb126a5abddc11e7afbf9611d1eb6a3711d4

Authored by Henry Schreiner
Committed by GitHub
1 parent 10e4b078

Boost optional is no longer automatic (#279)

* Boost optional is no longer automatic

* Tighten up optional a bit

* Check times
.ci/azure-build.yml
@@ -5,7 +5,7 @@ steps: @@ -5,7 +5,7 @@ steps:
5 cmakeArgs: .. -DCLI11_SINGLE_FILE=$(cli11.single) -DCLI11_CXX_STD=$(cli11.std) -DCLI11_SINGLE_FILE_TESTS=$(cli11.single) -DCMAKE_BUILD_TYPE=$(cli11.build_type) $(cli11.options) 5 cmakeArgs: .. -DCLI11_SINGLE_FILE=$(cli11.single) -DCLI11_CXX_STD=$(cli11.std) -DCLI11_SINGLE_FILE_TESTS=$(cli11.single) -DCMAKE_BUILD_TYPE=$(cli11.build_type) $(cli11.options)
6 displayName: 'Configure' 6 displayName: 'Configure'
7 7
8 -- script: cmake --build . $(cli11.threadopt) 8 +- script: cmake --build .
9 displayName: 'Build' 9 displayName: 'Build'
10 workingDirectory: build 10 workingDirectory: build
11 11
CMakeLists.txt
@@ -11,6 +11,9 @@ else() @@ -11,6 +11,9 @@ else()
11 cmake_policy(VERSION 3.14) 11 cmake_policy(VERSION 3.14)
12 endif() 12 endif()
13 13
  14 +# TESTING: remove this later
  15 +set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CMAKE_COMMAND} -E time")
  16 +
14 set(VERSION_REGEX "#define CLI11_VERSION[ \t]+\"(.+)\"") 17 set(VERSION_REGEX "#define CLI11_VERSION[ \t]+\"(.+)\"")
15 18
16 # Read in the line containing the version 19 # Read in the line containing the version
azure-pipelines.yml
@@ -11,7 +11,7 @@ variables: @@ -11,7 +11,7 @@ variables:
11 cli11.std: 14 11 cli11.std: 14
12 cli11.build_type: Debug 12 cli11.build_type: Debug
13 cli11.options: 13 cli11.options:
14 - cli11.threadopt: -j 14 + CMAKE_BUILD_PARALLEL_LEVEL: 4
15 15
16 jobs: 16 jobs:
17 17
@@ -21,7 +21,7 @@ jobs: @@ -21,7 +21,7 @@ jobs:
21 cli11.options: -DCLANG_TIDY_FIX=ON 21 cli11.options: -DCLANG_TIDY_FIX=ON
22 cli11.std: 11 22 cli11.std: 11
23 cli11.single: OFF 23 cli11.single: OFF
24 - cli11.threadopt: 24 + CMAKE_BUILD_PARALLEL_LEVEL: 1
25 pool: 25 pool:
26 vmImage: 'ubuntu-16.04' 26 vmImage: 'ubuntu-16.04'
27 container: silkeh/clang:5 27 container: silkeh/clang:5
@@ -37,9 +37,9 @@ jobs: @@ -37,9 +37,9 @@ jobs:
37 strategy: 37 strategy:
38 matrix: 38 matrix:
39 Linux: 39 Linux:
40 - vmImage: 'ubuntu-16.04' 40 + vmImage: 'ubuntu-latest'
41 macOS: 41 macOS:
42 - vmImage: 'macOS-10.14' 42 + vmImage: 'macOS-latest'
43 Windows: 43 Windows:
44 vmImage: 'vs2017-win2016' 44 vmImage: 'vs2017-win2016'
45 pool: 45 pool:
@@ -52,7 +52,7 @@ jobs: @@ -52,7 +52,7 @@ jobs:
52 variables: 52 variables:
53 cli11.single: OFF 53 cli11.single: OFF
54 pool: 54 pool:
55 - vmImage: 'ubuntu-16.04' 55 + vmImage: 'ubuntu-latest'
56 strategy: 56 strategy:
57 matrix: 57 matrix:
58 gcc9: 58 gcc9:
include/CLI/Optional.hpp
@@ -8,30 +8,35 @@ @@ -8,30 +8,35 @@
8 #include "CLI/Macros.hpp" 8 #include "CLI/Macros.hpp"
9 9
10 // [CLI11:verbatim] 10 // [CLI11:verbatim]
11 -#ifdef __has_include  
12 11
13 // You can explicitly enable or disable support 12 // You can explicitly enable or disable support
14 -// by defining these to 1 or 0.  
15 -#if defined(CLI11_CPP17) && __has_include(<optional>) && \  
16 - !defined(CLI11_STD_OPTIONAL) 13 +// by defining to 1 or 0. Extra check here to ensure it's in the stdlib too.
  14 +// We nest the check for __has_include and it's usage
  15 +#ifndef CLI11_STD_OPTIONAL
  16 +#ifdef __has_include
  17 +#if defined(CLI11_CPP17) && __has_include(<optional>)
17 #define CLI11_STD_OPTIONAL 1 18 #define CLI11_STD_OPTIONAL 1
18 -#elif !defined(CLI11_STD_OPTIONAL) 19 +#else
19 #define CLI11_STD_OPTIONAL 0 20 #define CLI11_STD_OPTIONAL 0
20 #endif 21 #endif
  22 +#else
  23 +#define CLI11_STD_OPTIONAL 0
  24 +#endif
  25 +#endif
21 26
22 -#if !defined(CLI11_EXPERIMENTAL_OPTIONAL) 27 +#ifndef CLI11_EXPERIMENTAL_OPTIONAL
23 #define CLI11_EXPERIMENTAL_OPTIONAL 0 28 #define CLI11_EXPERIMENTAL_OPTIONAL 0
24 #endif 29 #endif
25 30
26 -#if __has_include(<boost/optional.hpp>) && !defined(CLI11_BOOST_OPTIONAL)  
27 -#include <boost/version.hpp>  
28 -#if BOOST_VERSION >= 106100  
29 -#define CLI11_BOOST_OPTIONAL 1  
30 -#endif  
31 -#elif !defined(CLI11_BOOST_OPTIONAL) 31 +#ifndef CLI11_BOOST_OPTIONAL
32 #define CLI11_BOOST_OPTIONAL 0 32 #define CLI11_BOOST_OPTIONAL 0
33 #endif 33 #endif
34 34
  35 +#if CLI11_BOOST_OPTIONAL
  36 +#include <boost/version.hpp>
  37 +#if BOOST_VERSION < 106100
  38 +#error "This boost::optional version is not supported, use 1.61 or better"
  39 +#endif
35 #endif 40 #endif
36 41
37 #if CLI11_STD_OPTIONAL 42 #if CLI11_STD_OPTIONAL
tests/CMakeLists.txt
@@ -115,15 +115,15 @@ file(WRITE &quot;${PROJECT_BINARY_DIR}/CTestCustom.cmake&quot; @@ -115,15 +115,15 @@ file(WRITE &quot;${PROJECT_BINARY_DIR}/CTestCustom.cmake&quot;
115 find_package(Boost 1.61) 115 find_package(Boost 1.61)
116 if(Boost_FOUND) 116 if(Boost_FOUND)
117 if(TARGET Boost::boost) 117 if(TARGET Boost::boost)
118 - target_link_libraries(informational PUBLIC Boost::boost)  
119 - target_link_libraries(OptionalTest PUBLIC Boost::boost) 118 + target_link_libraries(informational PRIVATE Boost::boost)
  119 + target_link_libraries(OptionalTest PRIVATE Boost::boost)
120 else() 120 else()
121 - target_include_directories(informational PUBLIC ${Boost_INCLUDE_DIRS})  
122 - target_include_directories(OptionalTest PUBLIC ${Boost_INCLUDE_DIRS}) 121 + target_include_directories(informational PRIVATE ${Boost_INCLUDE_DIRS})
  122 + target_include_directories(OptionalTest PRIVATE ${Boost_INCLUDE_DIRS})
123 endif() 123 endif()
124 - # Enforce Boost::Optional even if __has_include is missing on your compiler  
125 - target_compile_definitions(informational PUBLIC CLI11_BOOST_OPTIONAL)  
126 - target_compile_definitions(OptionalTest PUBLIC CLI11_BOOST_OPTIONAL) 124 +
  125 + target_compile_definitions(informational PRIVATE CLI11_BOOST_OPTIONAL)
  126 + target_compile_definitions(OptionalTest PRIVATE CLI11_BOOST_OPTIONAL)
127 endif() 127 endif()
128 128
129 if(CMAKE_BUILD_TYPE STREQUAL Coverage) 129 if(CMAKE_BUILD_TYPE STREQUAL Coverage)