# Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file LICENSE.rst or https://cmake.org/licensing for details. #[=======================================================================[.rst: CMakeBackwardCompatibilityCXX ----------------------------- This module defines several backward compatibility cache variables for the ``CXX`` language to support early C++ (pre-C++98, ANSI C++). Load this module in a CMake project with: .. code-block:: cmake include(CMakeBackwardCompatibilityCXX) The following modules are included by this module: * :module:`TestForANSIForScope` * :module:`TestForANSIStreamHeaders` * :module:`TestForSSTREAM` * :module:`TestForSTDNamespace` Additionally, the following cache variable may be defined: ``CMAKE_ANSI_CXXFLAGS`` A space-separated string of compiler options for enabling ANSI C++ mode, if available. .. note:: This module is intended for C++ code written before ``C++ 98``. As of the ``C++ 98`` standard, these issues have been formally addressed, making such checks obsolete. Examples ^^^^^^^^ Including this module provides backward compatibility cache variables, which can be used in C++. For example: .. code-block:: cmake :caption: ``CMakeLists.txt`` include(CMakeBackwardCompatibilityCXX) file( CONFIGURE OUTPUT config.h CONTENT [[ #cmakedefine CMAKE_NO_ANSI_FOR_SCOPE #cmakedefine CMAKE_NO_ANSI_STRING_STREAM #cmakedefine CMAKE_NO_ANSI_STREAM_HEADERS #cmakedefine CMAKE_NO_STD_NAMESPACE ]] ) #]=======================================================================] if(NOT CMAKE_SKIP_COMPATIBILITY_TESTS) # check for some ANSI flags in the CXX compiler if it is not gnu if(NOT CMAKE_CXX_COMPILER_ID STREQUAL "GNU") include(TestCXXAcceptsFlag) set(CMAKE_TRY_ANSI_CXX_FLAGS "") if(CMAKE_SYSTEM_NAME MATCHES "OSF") set(CMAKE_TRY_ANSI_CXX_FLAGS "-std strict_ansi -nopure_cname") endif() # if CMAKE_TRY_ANSI_CXX_FLAGS has something in it, see # if the compiler accepts it if(NOT CMAKE_TRY_ANSI_CXX_FLAGS STREQUAL "") check_cxx_accepts_flag(${CMAKE_TRY_ANSI_CXX_FLAGS} CMAKE_CXX_ACCEPTS_FLAGS) # if the compiler liked the flag then set CMAKE_ANSI_CXXFLAGS # to the flag if(CMAKE_CXX_ACCEPTS_FLAGS) set(CMAKE_ANSI_CXXFLAGS ${CMAKE_TRY_ANSI_CXX_FLAGS} CACHE INTERNAL "What flags are required by the c++ compiler to make it ansi." ) endif() endif() endif() set(CMAKE_CXX_FLAGS_SAVE ${CMAKE_CXX_FLAGS}) string(APPEND CMAKE_CXX_FLAGS " ${CMAKE_ANSI_CXXFLAGS}") include(TestForANSIStreamHeaders) include(CheckIncludeFileCXX) include(TestForSTDNamespace) include(TestForANSIForScope) include(TestForSSTREAM) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS_SAVE}") endif()