| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 | 
#              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.0include(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} PUBLIC ${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 Clangfunction(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()
 |