|  | # Distributed under the OSI-approved BSD 3-Clause License.  See accompanying | 
|  | # file LICENSE.rst or https://cmake.org/licensing for details. | 
|  |  | 
|  | #[=======================================================================[.rst: | 
|  | TestForANSIStreamHeaders | 
|  | ------------------------ | 
|  |  | 
|  | This module checks whether the ``CXX`` compiler supports standard library | 
|  | headers without the ``.h`` extension (e.g. ``<iostream>``). | 
|  |  | 
|  | Load this module in a CMake project with: | 
|  |  | 
|  | .. code-block:: cmake | 
|  |  | 
|  | include(TestForANSIStreamHeaders) | 
|  |  | 
|  | Early versions of C++ (pre-C++98) didn't support including standard headers | 
|  | without extensions. | 
|  |  | 
|  | This module defines the following cache variable: | 
|  |  | 
|  | ``CMAKE_NO_ANSI_STREAM_HEADERS`` | 
|  | A cache variable containing the result of the check.  It will be set to value | 
|  | ``0`` if the standard headers can be included without the ``.h`` extension | 
|  | (``C++ 98`` and newer), and to value ``1`` if ``.h`` is required | 
|  | (``ANSI C++``). | 
|  |  | 
|  | .. note:: | 
|  |  | 
|  | The C++ standard headers without extensions got formally introduced in the | 
|  | ``C++ 98`` standard, making this issue obsolete. | 
|  |  | 
|  | Examples | 
|  | ^^^^^^^^ | 
|  |  | 
|  | Including this module will check how the C++ standard headers can be included | 
|  | and define the ``CMAKE_NO_ANSI_STREAM_HEADERS`` cache variable: | 
|  |  | 
|  | .. code-block:: cmake | 
|  | :caption: ``CMakeLists.txt`` | 
|  |  | 
|  | include(TestForANSIStreamHeaders) | 
|  | file( | 
|  | CONFIGURE | 
|  | OUTPUT config.h | 
|  | CONTENT "#cmakedefine CMAKE_NO_ANSI_STREAM_HEADERS" | 
|  | ) | 
|  |  | 
|  | C++ program can then include the available header conditionally: | 
|  |  | 
|  | .. code-block:: c++ | 
|  | :caption: ``example.cxx`` | 
|  |  | 
|  | #include "config.h" | 
|  |  | 
|  | #ifdef CMAKE_NO_ANSI_STREAM_HEADERS | 
|  | #  include <iostream.h> | 
|  | #else | 
|  | #  include <iostream> | 
|  | #endif | 
|  |  | 
|  | int main() { ... } | 
|  |  | 
|  | See Also | 
|  | ^^^^^^^^ | 
|  |  | 
|  | * The :module:`CMakeBackwardCompatibilityCXX` module. | 
|  | #]=======================================================================] | 
|  |  | 
|  | include(${CMAKE_CURRENT_LIST_DIR}/CheckIncludeFileCXX.cmake) | 
|  |  | 
|  | if(NOT CMAKE_NO_ANSI_STREAM_HEADERS) | 
|  | check_include_file_cxx(iostream CMAKE_ANSI_STREAM_HEADERS) | 
|  | if (CMAKE_ANSI_STREAM_HEADERS) | 
|  | set (CMAKE_NO_ANSI_STREAM_HEADERS 0 CACHE INTERNAL | 
|  | "Does the compiler support headers like iostream.") | 
|  | else () | 
|  | set (CMAKE_NO_ANSI_STREAM_HEADERS 1 CACHE INTERNAL | 
|  | "Does the compiler support headers like iostream.") | 
|  | endif () | 
|  |  | 
|  | mark_as_advanced(CMAKE_NO_ANSI_STREAM_HEADERS) | 
|  | endif() |