| # Distributed under the OSI-approved BSD 3-Clause License. See accompanying |
| # file LICENSE.rst or https://cmake.org/licensing for details. |
| |
| #[=======================================================================[.rst: |
| TestForSSTREAM |
| -------------- |
| |
| This module checks whether the C++ standard header ``<sstream>`` exists and |
| functions correctly. |
| |
| Load this module in a CMake project with: |
| |
| .. code-block:: cmake |
| |
| include(TestForSSTREAM) |
| |
| In early versions of C++ (pre-C++98), the ``<sstream>`` header was not |
| formally standardized and may not have been available. |
| |
| This module defines the following cache variables: |
| |
| ``CMAKE_NO_ANSI_STRING_STREAM`` |
| A cache variable indicating whether the ``<sstream>`` header is available. It |
| will be set to value ``0`` if ``<sstream>`` is available (``C++ 98`` and |
| newer), and to value ``1`` if ``<sstream>`` is missing (``ANSI C++``). |
| |
| ``CMAKE_HAS_ANSI_STRING_STREAM`` |
| A cache variable that is the opposite of ``CMAKE_NO_ANSI_STRING_STREAM`` |
| (true if ``<sstream>`` is available and false if ``<sstream>`` is missing). |
| |
| .. note:: |
| |
| The ``<sstream>`` header was formally introduced in the ``C++ 98`` standard, |
| making this check obsolete for modern compilers. |
| |
| Examples |
| ^^^^^^^^ |
| |
| Including this module will check for ``<sstream>`` support and define the |
| ``CMAKE_NO_ANSI_STRING_STREAM`` cache variable: |
| |
| .. code-block:: cmake |
| :caption: ``CMakeLists.txt`` |
| |
| include(TestForSSTREAM) |
| file( |
| CONFIGURE |
| OUTPUT config.h |
| CONTENT "#cmakedefine CMAKE_NO_ANSI_STRING_STREAM" |
| ) |
| |
| Then it can be used in a C++ program: |
| |
| .. code-block:: c++ |
| :caption: ``example.cxx`` |
| |
| #include "config.h" |
| |
| #ifndef CMAKE_NO_ANSI_STRING_STREAM |
| # include <sstream> |
| #endif |
| |
| int main() { ... } |
| |
| See Also |
| ^^^^^^^^ |
| |
| * The :module:`CMakeBackwardCompatibilityCXX` module. |
| #]=======================================================================] |
| |
| if(NOT DEFINED CMAKE_HAS_ANSI_STRING_STREAM) |
| message(CHECK_START "Check for sstream") |
| try_compile(CMAKE_HAS_ANSI_STRING_STREAM |
| SOURCES ${CMAKE_ROOT}/Modules/TestForSSTREAM.cxx |
| ) |
| if (CMAKE_HAS_ANSI_STRING_STREAM) |
| message(CHECK_PASS "found") |
| set (CMAKE_NO_ANSI_STRING_STREAM 0 CACHE INTERNAL |
| "Does the compiler support sstream") |
| else () |
| message(CHECK_FAIL "not found") |
| set (CMAKE_NO_ANSI_STRING_STREAM 1 CACHE INTERNAL |
| "Does the compiler support sstream") |
| endif () |
| endif() |