| # 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() |