blob: 6db6a1d12b6f7ccf41c1762023f425240395af84 [file] [log] [blame]
# 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()