mirror of
https://github.com/catchorg/Catch2.git
synced 2024-11-04 21:29:54 +01:00
8ce92d2c72
With the changes to how `-ffile-prefix-map` is detected, Catch2 started propagating the flag to its dependents, which isn't the desired behaviour, the normalization should only apply to Catch2's impl.
121 lines
4.1 KiB
CMake
121 lines
4.1 KiB
CMake
|
|
# Copyright Catch2 Authors
|
|
# Distributed under the Boost Software License, Version 1.0.
|
|
# (See accompanying file LICENSE_1_0.txt or copy at
|
|
# https://www.boost.org/LICENSE_1_0.txt)
|
|
|
|
# SPDX-License-Identifier: BSL-1.0
|
|
|
|
include(CheckCXXCompilerFlag)
|
|
function(add_cxx_flag_if_supported_to_targets flagname targets)
|
|
string(MAKE_C_IDENTIFIER ${flagname} flag_identifier )
|
|
check_cxx_compiler_flag("${flagname}" HAVE_FLAG_${flag_identifier})
|
|
|
|
if (HAVE_FLAG_${flag_identifier})
|
|
foreach(target ${targets})
|
|
target_compile_options(${target} PRIVATE ${flagname})
|
|
endforeach()
|
|
endif()
|
|
endfunction()
|
|
|
|
# Assumes that it is only called for development builds, where warnings
|
|
# and Werror is desired, so it also enables Werror.
|
|
function(add_warnings_to_targets targets)
|
|
LIST(LENGTH targets TARGETS_LEN)
|
|
# For now we just assume 2 possibilities: msvc and msvc-like compilers,
|
|
# and other.
|
|
if (MSVC)
|
|
foreach(target ${targets})
|
|
# Force MSVC to consider everything as encoded in utf-8
|
|
target_compile_options( ${target} PRIVATE /utf-8 )
|
|
# Enable Werror equivalent
|
|
if (CATCH_ENABLE_WERROR)
|
|
target_compile_options( ${target} PRIVATE /WX )
|
|
endif()
|
|
|
|
# MSVC is currently handled specially
|
|
if ( CMAKE_CXX_COMPILER_ID MATCHES "MSVC" )
|
|
STRING(REGEX REPLACE "/W[0-9]" "/W4" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) # override default warning level
|
|
target_compile_options( ${target} PRIVATE /w44265 /w44061 /w44062 /w45038 )
|
|
endif()
|
|
endforeach()
|
|
|
|
endif()
|
|
|
|
if (NOT MSVC)
|
|
set(CHECKED_WARNING_FLAGS
|
|
"-Wabsolute-value"
|
|
"-Wall"
|
|
"-Wc++20-compat"
|
|
"-Wcall-to-pure-virtual-from-ctor-dtor"
|
|
"-Wcast-align"
|
|
"-Wcatch-value"
|
|
"-Wdangling"
|
|
"-Wdeprecated"
|
|
"-Wdeprecated-register"
|
|
"-Wexceptions"
|
|
"-Wexit-time-destructors"
|
|
"-Wextra"
|
|
"-Wextra-semi"
|
|
"-Wfloat-equal"
|
|
"-Wglobal-constructors"
|
|
"-Winit-self"
|
|
"-Wmisleading-indentation"
|
|
"-Wmismatched-new-delete"
|
|
"-Wmismatched-return-types"
|
|
"-Wmismatched-tags"
|
|
"-Wmissing-braces"
|
|
"-Wmissing-declarations"
|
|
"-Wmissing-noreturn"
|
|
"-Wmissing-prototypes"
|
|
"-Wmissing-variable-declarations"
|
|
"-Wnull-dereference"
|
|
"-Wold-style-cast"
|
|
"-Woverloaded-virtual"
|
|
"-Wparentheses"
|
|
"-Wpedantic"
|
|
"-Wreorder"
|
|
"-Wreturn-std-move"
|
|
"-Wshadow"
|
|
"-Wstrict-aliasing"
|
|
"-Wsuggest-destructor-override"
|
|
"-Wsuggest-override"
|
|
"-Wundef"
|
|
"-Wuninitialized"
|
|
"-Wunneeded-internal-declaration"
|
|
"-Wunreachable-code"
|
|
"-Wunused"
|
|
"-Wunused-function"
|
|
"-Wunused-parameter"
|
|
"-Wvla"
|
|
"-Wweak-vtables"
|
|
|
|
# This is a useful warning, but our tests sometimes rely on
|
|
# functions being present, but not picked (e.g. various checks
|
|
# for stringification implementation ordering).
|
|
# Ergo, we should use it every now and then, but we cannot
|
|
# enable it by default.
|
|
# "-Wunused-member-function"
|
|
)
|
|
foreach(warning ${CHECKED_WARNING_FLAGS})
|
|
add_cxx_flag_if_supported_to_targets(${warning} "${targets}")
|
|
endforeach()
|
|
|
|
if (CATCH_ENABLE_WERROR)
|
|
foreach(target ${targets})
|
|
# Enable Werror equivalent
|
|
target_compile_options( ${target} PRIVATE -Werror )
|
|
endforeach()
|
|
endif()
|
|
endif()
|
|
endfunction()
|
|
|
|
# Adds flags required for reproducible build to the target
|
|
# Currently only supports GCC and Clang
|
|
function(add_build_reproducibility_settings target)
|
|
# Make the build reproducible on versions of g++ and clang that supports -ffile-prefix-map
|
|
if((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") OR (CMAKE_CXX_COMPILER_ID MATCHES "Clang"))
|
|
add_cxx_flag_if_supported_to_targets("-ffile-prefix-map=${CATCH_DIR}/=" "${target}")
|
|
endif()
|
|
endfunction()
|