#==============================================================================
#   Copyright (c) 2021 Nikita Kniazev
#
#   Use, modification and distribution is subject to the Boost Software
#   License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
#   http://www.boost.org/LICENSE_1_0.txt)
#==============================================================================

import feature ;

if ! [ feature.valid known-warnings ] {
    feature.feature known-warnings : hide show : incidental propagated ;
}

local 9.0-14.0 = 9.0 10.0 11.0 12.0 14.0 ;

project spirit
    : requirements
        # Warnings that we have not managed to fix yet
        <known-warnings>hide,<toolset>msvc:<cxxflags>-wd4244  # conversion from 'T' to 'U', possible loss of data
        <known-warnings>hide,<toolset>msvc:<cxxflags>-wd4365  # conversion from 'T' to 'U', signed/unsigned mismatch
        <known-warnings>hide,<toolset>msvc:<cxxflags>-wd4459  # declaration of 'varname' hides global declaration

        # Enable additional useful warnings
        <warnings>extra,<toolset>gcc:<cxxflags>-Wshadow-local
        <warnings>extra,<toolset>clang-linux:<cxxflags>-Wshadow-field-in-constructor
        <warnings>extra,<toolset>clang-linux:<cxxflags>-Wshadow-uncaptured-local
        <warnings>extra,<toolset>clang-linux:<cxxflags>-Wundefined-reinterpret-cast
        <warnings>extra,<toolset>msvc:<cxxflags>-w44555  # result of expression not used

        # Broken or very high false-positive rate
        <known-warnings>hide,<toolset>gcc:<cxxflags>-Wno-maybe-uninitialized  # Too many pesky false-positives
        <known-warnings>hide,<toolset>msvc-$(9.0-14.0):<cxxflags>-wd4100  # unreferenced formal parameter
        <known-warnings>hide,<toolset>msvc-$(9.0-14.0):<cxxflags>-wd4512  # assignment operator could not be generated
        <known-warnings>hide,<toolset>msvc-$(9.0-14.0):<cxxflags>-wd4714  # function 'x' marked as __forceinline not inlined
    ;