mirror of
https://github.com/intrepidcs/libicsneo.git
synced 2026-08-06 09:58:41 +02:00
Optional: Move optional-lite to the include/third-party directory
This fixes the use case of adding the include folder manually to an outside project.
This commit is contained in:
@@ -0,0 +1,224 @@
|
||||
# Copyright 2017-2018 by Martin Moene
|
||||
#
|
||||
# https://github.com/martinmoene/optional-lite
|
||||
#
|
||||
# Distributed under the Boost Software License, Version 1.0.
|
||||
# (See accompanying file LICENSE.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
if( NOT DEFINED CMAKE_MINIMUM_REQUIRED_VERSION )
|
||||
cmake_minimum_required( VERSION 3.5 FATAL_ERROR )
|
||||
endif()
|
||||
|
||||
project( test LANGUAGES CXX )
|
||||
|
||||
set( unit_name "optional" )
|
||||
set( PACKAGE ${unit_name}-lite )
|
||||
set( PROGRAM ${unit_name}-lite )
|
||||
set( SOURCES ${unit_name}-main.t.cpp ${unit_name}.t.cpp )
|
||||
set( TWEAKD "." )
|
||||
|
||||
message( STATUS "Subproject '${PROJECT_NAME}', programs '${PROGRAM}-*'")
|
||||
|
||||
set( OPTIONS "" )
|
||||
set( DEFCMN "" )
|
||||
|
||||
set( HAS_STD_FLAGS FALSE )
|
||||
set( HAS_CPP98_FLAG FALSE )
|
||||
set( HAS_CPP11_FLAG FALSE )
|
||||
set( HAS_CPP14_FLAG FALSE )
|
||||
set( HAS_CPP17_FLAG FALSE )
|
||||
set( HAS_CPP20_FLAG FALSE )
|
||||
set( HAS_CPPLATEST_FLAG FALSE )
|
||||
|
||||
if( MSVC )
|
||||
message( STATUS "Matched: MSVC")
|
||||
|
||||
set( HAS_STD_FLAGS TRUE )
|
||||
|
||||
set( OPTIONS -W3 -EHsc )
|
||||
set( DEFINITIONS -D_SCL_SECURE_NO_WARNINGS ${DEFCMN} )
|
||||
|
||||
if( NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19.00 )
|
||||
set( HAS_CPP14_FLAG TRUE )
|
||||
set( HAS_CPPLATEST_FLAG TRUE )
|
||||
endif()
|
||||
if( NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19.11 )
|
||||
set( HAS_CPP17_FLAG TRUE )
|
||||
endif()
|
||||
|
||||
elseif( CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang|AppleClang" )
|
||||
message( STATUS "CompilerId: '${CMAKE_CXX_COMPILER_ID}'")
|
||||
|
||||
set( HAS_STD_FLAGS TRUE )
|
||||
set( HAS_CPP98_FLAG TRUE )
|
||||
|
||||
set( OPTIONS -Wall -Wextra -Wconversion -Wsign-conversion -Wno-missing-braces -fno-elide-constructors )
|
||||
set( DEFINITIONS ${DEFCMN} )
|
||||
|
||||
# GNU: available -std flags depends on version
|
||||
if( CMAKE_CXX_COMPILER_ID MATCHES "GNU" )
|
||||
message( STATUS "Matched: GNU")
|
||||
|
||||
if( NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.8.0 )
|
||||
set( HAS_CPP11_FLAG TRUE )
|
||||
endif()
|
||||
if( NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.9.2 )
|
||||
set( HAS_CPP14_FLAG TRUE )
|
||||
endif()
|
||||
if( NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7.1.0 )
|
||||
set( HAS_CPP17_FLAG TRUE )
|
||||
endif()
|
||||
|
||||
# AppleClang: available -std flags depends on version
|
||||
elseif( CMAKE_CXX_COMPILER_ID MATCHES "AppleClang" )
|
||||
message( STATUS "Matched: AppleClang")
|
||||
|
||||
if( NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0.0 )
|
||||
set( HAS_CPP11_FLAG TRUE )
|
||||
endif()
|
||||
if( NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.1.0 )
|
||||
set( HAS_CPP14_FLAG TRUE )
|
||||
endif()
|
||||
if( NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 9.2.0 )
|
||||
set( HAS_CPP17_FLAG TRUE )
|
||||
endif()
|
||||
|
||||
# Clang: available -std flags depends on version
|
||||
elseif( CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
|
||||
message( STATUS "Matched: Clang")
|
||||
|
||||
if( NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.3.0 )
|
||||
set( HAS_CPP11_FLAG TRUE )
|
||||
endif()
|
||||
if( NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.4.0 )
|
||||
set( HAS_CPP14_FLAG TRUE )
|
||||
endif()
|
||||
if( NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0.0 )
|
||||
set( HAS_CPP17_FLAG TRUE )
|
||||
endif()
|
||||
endif()
|
||||
|
||||
elseif( CMAKE_CXX_COMPILER_ID MATCHES "Intel" )
|
||||
# as is
|
||||
message( STATUS "Matched: Intel")
|
||||
else()
|
||||
# as is
|
||||
message( STATUS "Matched: nothing")
|
||||
endif()
|
||||
|
||||
# enable MS C++ Core Guidelines checker if MSVC:
|
||||
|
||||
function( enable_msvs_guideline_checker target )
|
||||
if( MSVC )
|
||||
set_target_properties( ${target} PROPERTIES
|
||||
VS_GLOBAL_EnableCppCoreCheck true
|
||||
VS_GLOBAL_CodeAnalysisRuleSet CppCoreCheckRules.ruleset
|
||||
VS_GLOBAL_RunCodeAnalysis true )
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
# make target, compile for given standard if specified:
|
||||
|
||||
function( make_target target std )
|
||||
message( STATUS "Make target: '${std}'" )
|
||||
|
||||
add_executable ( ${target} ${SOURCES} )
|
||||
target_include_directories( ${target} PRIVATE ${TWEAKD} )
|
||||
target_link_libraries ( ${target} PRIVATE ${PACKAGE} )
|
||||
target_compile_options ( ${target} PRIVATE ${OPTIONS} )
|
||||
target_compile_definitions( ${target} PRIVATE ${DEFINITIONS} )
|
||||
|
||||
if( std )
|
||||
if( MSVC )
|
||||
target_compile_options( ${target} PRIVATE -std:c++${std} )
|
||||
else()
|
||||
# Necessary for clang 3.x:
|
||||
target_compile_options( ${target} PRIVATE -std=c++${std} )
|
||||
# Ok for clang 4 and later:
|
||||
# set( CMAKE_CXX_STANDARD ${std} )
|
||||
# set( CMAKE_CXX_STANDARD_REQUIRED ON )
|
||||
# set( CMAKE_CXX_EXTENSIONS OFF )
|
||||
endif()
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
# add generic executable, unless -std flags can be specified:
|
||||
|
||||
if( NOT HAS_STD_FLAGS )
|
||||
make_target( ${PROGRAM}.t "" )
|
||||
else()
|
||||
# unconditionally add C++98 variant as MSVC has no option for it:
|
||||
if( HAS_CPP98_FLAG )
|
||||
make_target( ${PROGRAM}-cpp98.t 98 )
|
||||
else()
|
||||
make_target( ${PROGRAM}-cpp98.t "" )
|
||||
endif()
|
||||
|
||||
if( HAS_CPP11_FLAG )
|
||||
make_target( ${PROGRAM}-cpp11.t 11 )
|
||||
endif()
|
||||
|
||||
if( HAS_CPP14_FLAG )
|
||||
make_target( ${PROGRAM}-cpp14.t 14 )
|
||||
endif()
|
||||
|
||||
if( HAS_CPP17_FLAG )
|
||||
set( std17 17 )
|
||||
if( CMAKE_CXX_COMPILER_ID MATCHES "AppleClang" )
|
||||
set( std17 1z )
|
||||
endif()
|
||||
make_target( ${PROGRAM}-cpp17.t ${std17} )
|
||||
enable_msvs_guideline_checker( ${PROGRAM}-cpp17.t )
|
||||
endif()
|
||||
|
||||
if( HAS_CPPLATEST_FLAG )
|
||||
make_target( ${PROGRAM}-cpplatest.t latest )
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# with C++17, honour explicit request for std::optional or nonstd::optional:
|
||||
|
||||
if( HAS_CPP17_FLAG )
|
||||
set( WHICH optional_OPTIONAL_DEFAULT )
|
||||
|
||||
if( OPTIONAL_LITE_OPT_SELECT_STD )
|
||||
set( WHICH optional_OPTIONAL_STD )
|
||||
elseif( OPTIONAL_LITE_OPT_SELECT_NONSTD )
|
||||
set( WHICH optional_OPTIONAL_NONSTD )
|
||||
endif()
|
||||
|
||||
target_compile_definitions( ${PROGRAM}-cpp17.t PRIVATE optional_CONFIG_SELECT_OPTIONAL=${WHICH} )
|
||||
|
||||
if( HAS_CPPLATEST_FLAG )
|
||||
target_compile_definitions( ${PROGRAM}-cpplatest.t PRIVATE optional_CONFIG_SELECT_OPTIONAL=${WHICH} )
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# configure unit tests via CTest:
|
||||
|
||||
enable_testing()
|
||||
|
||||
if( HAS_STD_FLAGS )
|
||||
# unconditionally add C++98 variant for MSVC:
|
||||
add_test( NAME test-cpp98 COMMAND ${PROGRAM}-cpp98.t )
|
||||
|
||||
if( HAS_CPP11_FLAG )
|
||||
add_test( NAME test-cpp11 COMMAND ${PROGRAM}-cpp11.t )
|
||||
endif()
|
||||
if( HAS_CPP14_FLAG )
|
||||
add_test( NAME test-cpp14 COMMAND ${PROGRAM}-cpp14.t )
|
||||
endif()
|
||||
if( HAS_CPP17_FLAG )
|
||||
add_test( NAME test-cpp17 COMMAND ${PROGRAM}-cpp17.t )
|
||||
endif()
|
||||
if( HAS_CPPLATEST_FLAG )
|
||||
add_test( NAME test-cpplatest COMMAND ${PROGRAM}-cpplatest.t )
|
||||
endif()
|
||||
else()
|
||||
add_test( NAME test COMMAND ${PROGRAM}.t --pass )
|
||||
add_test( NAME list_version COMMAND ${PROGRAM}.t --version )
|
||||
add_test( NAME list_tags COMMAND ${PROGRAM}.t --list-tags )
|
||||
add_test( NAME list_tests COMMAND ${PROGRAM}.t --list-tests )
|
||||
endif()
|
||||
|
||||
# end of file
|
||||
Reference in New Issue
Block a user