diff options
Diffstat (limited to 'share/cmake-3.6/Modules/WriteCompilerDetectionHeader.cmake')
-rw-r--r-- | share/cmake-3.6/Modules/WriteCompilerDetectionHeader.cmake | 665 |
1 files changed, 0 insertions, 665 deletions
diff --git a/share/cmake-3.6/Modules/WriteCompilerDetectionHeader.cmake b/share/cmake-3.6/Modules/WriteCompilerDetectionHeader.cmake deleted file mode 100644 index 2669a84..0000000 --- a/share/cmake-3.6/Modules/WriteCompilerDetectionHeader.cmake +++ /dev/null @@ -1,665 +0,0 @@ -#.rst: -# WriteCompilerDetectionHeader -# ---------------------------- -# -# This module provides the function write_compiler_detection_header(). -# -# The ``WRITE_COMPILER_DETECTION_HEADER`` function can be used to generate -# a file suitable for preprocessor inclusion which contains macros to be -# used in source code:: -# -# write_compiler_detection_header( -# FILE <file> -# PREFIX <prefix> -# [OUTPUT_FILES_VAR <output_files_var> OUTPUT_DIR <output_dir>] -# COMPILERS <compiler> [...] -# FEATURES <feature> [...] -# [VERSION <version>] -# [PROLOG <prolog>] -# [EPILOG <epilog>] -# ) -# -# The ``write_compiler_detection_header`` function generates the -# file ``<file>`` with macros which all have the prefix ``<prefix>``. -# -# By default, all content is written directly to the ``<file>``. The -# ``OUTPUT_FILES_VAR`` may be specified to cause the compiler-specific -# content to be written to separate files. The separate files are then -# available in the ``<output_files_var>`` and may be consumed by the caller -# for installation for example. The ``OUTPUT_DIR`` specifies a relative -# path from the main ``<file>`` to the compiler-specific files. For example: -# -# .. code-block:: cmake -# -# write_compiler_detection_header( -# FILE climbingstats_compiler_detection.h -# PREFIX ClimbingStats -# OUTPUT_FILES_VAR support_files -# OUTPUT_DIR compilers -# COMPILERS GNU Clang MSVC Intel -# FEATURES cxx_variadic_templates -# ) -# install(FILES -# ${CMAKE_CURRENT_BINARY_DIR}/climbingstats_compiler_detection.h -# DESTINATION include -# ) -# install(FILES -# ${support_files} -# DESTINATION include/compilers -# ) -# -# -# ``VERSION`` may be used to specify the API version to be generated. -# Future versions of CMake may introduce alternative APIs. A given -# API is selected by any ``<version>`` value greater than or equal -# to the version of CMake that introduced the given API and less -# than the version of CMake that introduced its succeeding API. -# The value of the :variable:`CMAKE_MINIMUM_REQUIRED_VERSION` -# variable is used if no explicit version is specified. -# (As of CMake version |release| there is only one API version.) -# -# ``PROLOG`` may be specified as text content to write at the start of the -# header. ``EPILOG`` may be specified as text content to write at the end -# of the header -# -# At least one ``<compiler>`` and one ``<feature>`` must be listed. Compilers -# which are known to CMake, but not specified are detected and a preprocessor -# ``#error`` is generated for them. A preprocessor macro matching -# ``<PREFIX>_COMPILER_IS_<compiler>`` is generated for each compiler -# known to CMake to contain the value ``0`` or ``1``. -# -# Possible compiler identifiers are documented with the -# :variable:`CMAKE_<LANG>_COMPILER_ID` variable. -# Available features in this version of CMake are listed in the -# :prop_gbl:`CMAKE_C_KNOWN_FEATURES` and -# :prop_gbl:`CMAKE_CXX_KNOWN_FEATURES` global properties. -# -# See the :manual:`cmake-compile-features(7)` manual for information on -# compile features. -# -# Feature Test Macros -# =================== -# -# For each compiler, a preprocessor macro is generated matching -# ``<PREFIX>_COMPILER_IS_<compiler>`` which has the content either ``0`` -# or ``1``, depending on the compiler in use. Preprocessor macros for -# compiler version components are generated matching -# ``<PREFIX>_COMPILER_VERSION_MAJOR`` ``<PREFIX>_COMPILER_VERSION_MINOR`` -# and ``<PREFIX>_COMPILER_VERSION_PATCH`` containing decimal values -# for the corresponding compiler version components, if defined. -# -# A preprocessor test is generated based on the compiler version -# denoting whether each feature is enabled. A preprocessor macro -# matching ``<PREFIX>_COMPILER_<FEATURE>``, where ``<FEATURE>`` is the -# upper-case ``<feature>`` name, is generated to contain the value -# ``0`` or ``1`` depending on whether the compiler in use supports the -# feature: -# -# .. code-block:: cmake -# -# write_compiler_detection_header( -# FILE climbingstats_compiler_detection.h -# PREFIX ClimbingStats -# COMPILERS GNU Clang AppleClang MSVC Intel -# FEATURES cxx_variadic_templates -# ) -# -# .. code-block:: c++ -# -# #if ClimbingStats_COMPILER_CXX_VARIADIC_TEMPLATES -# template<typename... T> -# void someInterface(T t...) { /* ... */ } -# #else -# // Compatibility versions -# template<typename T1> -# void someInterface(T1 t1) { /* ... */ } -# template<typename T1, typename T2> -# void someInterface(T1 t1, T2 t2) { /* ... */ } -# template<typename T1, typename T2, typename T3> -# void someInterface(T1 t1, T2 t2, T3 t3) { /* ... */ } -# #endif -# -# Symbol Macros -# ============= -# -# Some additional symbol-defines are created for particular features for -# use as symbols which may be conditionally defined empty: -# -# .. code-block:: c++ -# -# class MyClass ClimbingStats_FINAL -# { -# ClimbingStats_CONSTEXPR int someInterface() { return 42; } -# }; -# -# The ``ClimbingStats_FINAL`` macro will expand to ``final`` if the -# compiler (and its flags) support the ``cxx_final`` feature, and the -# ``ClimbingStats_CONSTEXPR`` macro will expand to ``constexpr`` -# if ``cxx_constexpr`` is supported. -# -# The following features generate corresponding symbol defines: -# -# ========================== =================================== ================= -# Feature Define Symbol -# ========================== =================================== ================= -# ``c_restrict`` ``<PREFIX>_RESTRICT`` ``restrict`` -# ``cxx_constexpr`` ``<PREFIX>_CONSTEXPR`` ``constexpr`` -# ``cxx_deleted_functions`` ``<PREFIX>_DELETED_FUNCTION`` ``= delete`` -# ``cxx_extern_templates`` ``<PREFIX>_EXTERN_TEMPLATE`` ``extern`` -# ``cxx_final`` ``<PREFIX>_FINAL`` ``final`` -# ``cxx_noexcept`` ``<PREFIX>_NOEXCEPT`` ``noexcept`` -# ``cxx_noexcept`` ``<PREFIX>_NOEXCEPT_EXPR(X)`` ``noexcept(X)`` -# ``cxx_override`` ``<PREFIX>_OVERRIDE`` ``override`` -# ========================== =================================== ================= -# -# Compatibility Implementation Macros -# =================================== -# -# Some features are suitable for wrapping in a macro with a backward -# compatibility implementation if the compiler does not support the feature. -# -# When the ``cxx_static_assert`` feature is not provided by the compiler, -# a compatibility implementation is available via the -# ``<PREFIX>_STATIC_ASSERT(COND)`` and -# ``<PREFIX>_STATIC_ASSERT_MSG(COND, MSG)`` function-like macros. The macros -# expand to ``static_assert`` where that compiler feature is available, and -# to a compatibility implementation otherwise. In the first form, the -# condition is stringified in the message field of ``static_assert``. In -# the second form, the message ``MSG`` is passed to the message field of -# ``static_assert``, or ignored if using the backward compatibility -# implementation. -# -# The ``cxx_attribute_deprecated`` feature provides a macro definition -# ``<PREFIX>_DEPRECATED``, which expands to either the standard -# ``[[deprecated]]`` attribute or a compiler-specific decorator such -# as ``__attribute__((__deprecated__))`` used by GNU compilers. -# -# The ``cxx_alignas`` feature provides a macro definition -# ``<PREFIX>_ALIGNAS`` which expands to either the standard ``alignas`` -# decorator or a compiler-specific decorator such as -# ``__attribute__ ((__aligned__))`` used by GNU compilers. -# -# The ``cxx_alignof`` feature provides a macro definition -# ``<PREFIX>_ALIGNOF`` which expands to either the standard ``alignof`` -# decorator or a compiler-specific decorator such as ``__alignof__`` -# used by GNU compilers. -# -# ============================= ================================ ===================== -# Feature Define Symbol -# ============================= ================================ ===================== -# ``cxx_alignas`` ``<PREFIX>_ALIGNAS`` ``alignas`` -# ``cxx_alignof`` ``<PREFIX>_ALIGNOF`` ``alignof`` -# ``cxx_nullptr`` ``<PREFIX>_NULLPTR`` ``nullptr`` -# ``cxx_static_assert`` ``<PREFIX>_STATIC_ASSERT`` ``static_assert`` -# ``cxx_static_assert`` ``<PREFIX>_STATIC_ASSERT_MSG`` ``static_assert`` -# ``cxx_attribute_deprecated`` ``<PREFIX>_DEPRECATED`` ``[[deprecated]]`` -# ``cxx_attribute_deprecated`` ``<PREFIX>_DEPRECATED_MSG`` ``[[deprecated]]`` -# ``cxx_thread_local`` ``<PREFIX>_THREAD_LOCAL`` ``thread_local`` -# ============================= ================================ ===================== -# -# A use-case which arises with such deprecation macros is the deprecation -# of an entire library. In that case, all public API in the library may -# be decorated with the ``<PREFIX>_DEPRECATED`` macro. This results in -# very noisy build output when building the library itself, so the macro -# may be may be defined to empty in that case when building the deprecated -# library: -# -# .. code-block:: cmake -# -# add_library(compat_support ${srcs}) -# target_compile_definitions(compat_support -# PRIVATE -# CompatSupport_DEPRECATED= -# ) - -#============================================================================= -# Copyright 2014 Stephen Kelly <steveire@gmail.com> -# -# Distributed under the OSI-approved BSD License (the "License"); -# see accompanying file Copyright.txt for details. -# -# This software is distributed WITHOUT ANY WARRANTY; without even the -# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the License for more information. -#============================================================================= -# (To distribute this file outside of CMake, substitute the full -# License text for the above reference.) - -include(${CMAKE_CURRENT_LIST_DIR}/CMakeParseArguments.cmake) -include(${CMAKE_CURRENT_LIST_DIR}/CMakeCompilerIdDetection.cmake) - -function(_load_compiler_variables CompilerId lang) - include("${CMAKE_ROOT}/Modules/Compiler/${CompilerId}-${lang}-FeatureTests.cmake" OPTIONAL) - set(_cmake_oldestSupported_${CompilerId} ${_cmake_oldestSupported} PARENT_SCOPE) - foreach(feature ${ARGN}) - set(_cmake_feature_test_${CompilerId}_${feature} ${_cmake_feature_test_${feature}} PARENT_SCOPE) - endforeach() - include("${CMAKE_ROOT}/Modules/Compiler/${CompilerId}-${lang}-DetermineCompiler.cmake" OPTIONAL - RESULT_VARIABLE determinedCompiler) - if (NOT determinedCompiler) - include("${CMAKE_ROOT}/Modules/Compiler/${CompilerId}-DetermineCompiler.cmake" OPTIONAL) - endif() - set(_compiler_id_version_compute_${CompilerId} ${_compiler_id_version_compute} PARENT_SCOPE) -endfunction() - -function(write_compiler_detection_header - file_keyword file_arg - prefix_keyword prefix_arg - ) - if (NOT "x${file_keyword}" STREQUAL "xFILE") - message(FATAL_ERROR "write_compiler_detection_header: FILE parameter missing.") - endif() - if (NOT "x${prefix_keyword}" STREQUAL "xPREFIX") - message(FATAL_ERROR "write_compiler_detection_header: PREFIX parameter missing.") - endif() - set(options) - set(oneValueArgs VERSION EPILOG PROLOG OUTPUT_FILES_VAR OUTPUT_DIR) - set(multiValueArgs COMPILERS FEATURES) - cmake_parse_arguments(_WCD "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) - - if (NOT _WCD_COMPILERS) - message(FATAL_ERROR "Invalid arguments. write_compiler_detection_header requires at least one compiler.") - endif() - if (NOT _WCD_FEATURES) - message(FATAL_ERROR "Invalid arguments. write_compiler_detection_header requires at least one feature.") - endif() - - if(_WCD_UNPARSED_ARGUMENTS) - message(FATAL_ERROR "Unparsed arguments: ${_WCD_UNPARSED_ARGUMENTS}") - endif() - - if (prefix_arg STREQUAL "") - message(FATAL_ERROR "A prefix must be specified") - endif() - string(MAKE_C_IDENTIFIER ${prefix_arg} cleaned_prefix) - if (NOT prefix_arg STREQUAL cleaned_prefix) - message(FATAL_ERROR "The prefix must be a valid C identifier.") - endif() - - if(NOT _WCD_VERSION) - set(_WCD_VERSION ${CMAKE_MINIMUM_REQUIRED_VERSION}) - endif() - set(_min_version 3.1.0) # Version which introduced this function - if (_WCD_VERSION VERSION_LESS _min_version) - set(err "VERSION compatibility for write_compiler_detection_header is set to ${_WCD_VERSION}, which is too low.") - set(err "${err} It must be set to at least ${_min_version}. ") - set(err "${err} Either set the VERSION parameter to the write_compiler_detection_header function, or update") - set(err "${err} your minimum required CMake version with the cmake_minimum_required command.") - message(FATAL_ERROR "${err}") - endif() - - if(_WCD_OUTPUT_FILES_VAR) - if(NOT _WCD_OUTPUT_DIR) - message(FATAL_ERROR "If OUTPUT_FILES_VAR is specified, then OUTPUT_DIR must also be specified.") - endif() - endif() - if(_WCD_OUTPUT_DIR) - if(NOT _WCD_OUTPUT_FILES_VAR) - message(FATAL_ERROR "If OUTPUT_DIR is specified, then OUTPUT_FILES_VAR must also be specified.") - endif() - get_filename_component(main_file_dir ${file_arg} DIRECTORY) - if (NOT IS_ABSOLUTE ${main_file_dir}) - set(main_file_dir "${CMAKE_CURRENT_BINARY_DIR}/${main_file_dir}") - endif() - if (NOT IS_ABSOLUTE ${_WCD_OUTPUT_DIR}) - set(_WCD_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/${_WCD_OUTPUT_DIR}") - endif() - get_filename_component(out_file_dir ${_WCD_OUTPUT_DIR} ABSOLUTE) - string(FIND ${out_file_dir} ${main_file_dir} idx) - if (NOT idx EQUAL 0) - message(FATAL_ERROR "The compiler-specific output directory must be within the same directory as the main file.") - endif() - - if (main_file_dir STREQUAL out_file_dir) - unset(_WCD_OUTPUT_DIR) - else() - string(REPLACE "${main_file_dir}/" "" _WCD_OUTPUT_DIR "${out_file_dir}/") - endif() - endif() - - set(compilers - GNU - Clang - AppleClang - MSVC - SunPro - Intel - ) - - set(_hex_compilers ADSP Borland Embarcadero SunPro) - - foreach(_comp ${_WCD_COMPILERS}) - list(FIND compilers ${_comp} idx) - if (idx EQUAL -1) - message(FATAL_ERROR "Unsupported compiler ${_comp}.") - endif() - if (NOT _need_hex_conversion) - list(FIND _hex_compilers ${_comp} idx) - if (NOT idx EQUAL -1) - set(_need_hex_conversion TRUE) - endif() - endif() - endforeach() - - set(file_content " -// This is a generated file. Do not edit! - -#ifndef ${prefix_arg}_COMPILER_DETECTION_H -#define ${prefix_arg}_COMPILER_DETECTION_H -") - - if (_WCD_PROLOG) - set(file_content "${file_content}\n${_WCD_PROLOG}\n") - endif() - - if (_need_hex_conversion) - set(file_content "${file_content} -#define ${prefix_arg}_DEC(X) (X) -#define ${prefix_arg}_HEX(X) ( \\ - ((X)>>28 & 0xF) * 10000000 + \\ - ((X)>>24 & 0xF) * 1000000 + \\ - ((X)>>20 & 0xF) * 100000 + \\ - ((X)>>16 & 0xF) * 10000 + \\ - ((X)>>12 & 0xF) * 1000 + \\ - ((X)>>8 & 0xF) * 100 + \\ - ((X)>>4 & 0xF) * 10 + \\ - ((X) & 0xF) \\ - )\n") - endif() - - foreach(feature ${_WCD_FEATURES}) - if (feature MATCHES "^cxx_") - list(APPEND _langs CXX) - list(APPEND CXX_features ${feature}) - elseif (feature MATCHES "^c_") - list(APPEND _langs C) - list(APPEND C_features ${feature}) - else() - message(FATAL_ERROR "Unsupported feature ${feature}.") - endif() - endforeach() - list(REMOVE_DUPLICATES _langs) - - if(_WCD_OUTPUT_FILES_VAR) - get_filename_component(main_file_name ${file_arg} NAME) - set(compiler_file_content_ -"#ifndef ${prefix_arg}_COMPILER_DETECTION_H -# error This file may only be included from ${main_file_name} -#endif\n") - endif() - - foreach(_lang ${_langs}) - set(target_compilers) - foreach(compiler ${_WCD_COMPILERS}) - _load_compiler_variables(${compiler} ${_lang} ${${_lang}_features}) - if(_cmake_oldestSupported_${compiler}) - list(APPEND target_compilers ${compiler}) - endif() - endforeach() - - get_property(known_features GLOBAL PROPERTY CMAKE_${_lang}_KNOWN_FEATURES) - foreach(feature ${${_lang}_features}) - list(FIND known_features ${feature} idx) - if (idx EQUAL -1) - message(FATAL_ERROR "Unsupported feature ${feature}.") - endif() - endforeach() - - if(_lang STREQUAL CXX) - set(file_content "${file_content}\n#ifdef __cplusplus\n") - else() - set(file_content "${file_content}\n#ifndef __cplusplus\n") - endif() - - compiler_id_detection(ID_CONTENT ${_lang} PREFIX ${prefix_arg}_ - ID_DEFINE - ) - - set(file_content "${file_content}${ID_CONTENT}\n") - - set(pp_if "if") - foreach(compiler ${target_compilers}) - set(file_content "${file_content}\n# ${pp_if} ${prefix_arg}_COMPILER_IS_${compiler}\n") - - if(_WCD_OUTPUT_FILES_VAR) - set(compile_file_name "${_WCD_OUTPUT_DIR}${prefix_arg}_COMPILER_INFO_${compiler}_${_lang}.h") - set(file_content "${file_content}\n# include \"${compile_file_name}\"\n") - endif() - - if(_WCD_OUTPUT_FILES_VAR) - set(compiler_file_content compiler_file_content_${compiler}_${_lang}) - else() - set(compiler_file_content file_content) - endif() - - set(${compiler_file_content} "${${compiler_file_content}} -# if !(${_cmake_oldestSupported_${compiler}}) -# error Unsupported compiler version -# endif\n") - - set(PREFIX ${prefix_arg}_) - if (_need_hex_conversion) - set(MACRO_DEC ${prefix_arg}_DEC) - set(MACRO_HEX ${prefix_arg}_HEX) - else() - set(MACRO_DEC) - set(MACRO_HEX) - endif() - string(CONFIGURE "${_compiler_id_version_compute_${compiler}}" VERSION_BLOCK @ONLY) - set(${compiler_file_content} "${${compiler_file_content}}${VERSION_BLOCK}\n") - set(PREFIX) - set(MACRO_DEC) - set(MACRO_HEX) - - set(pp_if "elif") - foreach(feature ${${_lang}_features}) - string(TOUPPER ${feature} feature_upper) - set(feature_PP "COMPILER_${feature_upper}") - set(_define_item "\n# define ${prefix_arg}_${feature_PP} 0\n") - if (_cmake_feature_test_${compiler}_${feature} STREQUAL "1") - set(_define_item "\n# define ${prefix_arg}_${feature_PP} 1\n") - elseif (_cmake_feature_test_${compiler}_${feature}) - set(_define_item "\n# define ${prefix_arg}_${feature_PP} 0\n") - set(_define_item "\n# if ${_cmake_feature_test_${compiler}_${feature}}\n# define ${prefix_arg}_${feature_PP} 1\n# else${_define_item}# endif\n") - endif() - set(${compiler_file_content} "${${compiler_file_content}}${_define_item}") - endforeach() - endforeach() - if(pp_if STREQUAL "elif") - set(file_content "${file_content} -# else -# error Unsupported compiler -# endif\n") - endif() - foreach(feature ${${_lang}_features}) - string(TOUPPER ${feature} feature_upper) - set(feature_PP "COMPILER_${feature_upper}") - set(def_name ${prefix_arg}_${feature_PP}) - if (feature STREQUAL c_restrict) - set(def_value "${prefix_arg}_RESTRICT") - set(file_content "${file_content} -# if ${def_name} -# define ${def_value} restrict -# else -# define ${def_value} -# endif -\n") - endif() - if (feature STREQUAL cxx_constexpr) - set(def_value "${prefix_arg}_CONSTEXPR") - set(file_content "${file_content} -# if ${def_name} -# define ${def_value} constexpr -# else -# define ${def_value} -# endif -\n") - endif() - if (feature STREQUAL cxx_final) - set(def_value "${prefix_arg}_FINAL") - set(file_content "${file_content} -# if ${def_name} -# define ${def_value} final -# else -# define ${def_value} -# endif -\n") - endif() - if (feature STREQUAL cxx_override) - set(def_value "${prefix_arg}_OVERRIDE") - set(file_content "${file_content} -# if ${def_name} -# define ${def_value} override -# else -# define ${def_value} -# endif -\n") - endif() - if (feature STREQUAL cxx_static_assert) - set(def_value "${prefix_arg}_STATIC_ASSERT(X)") - set(def_value_msg "${prefix_arg}_STATIC_ASSERT_MSG(X, MSG)") - set(static_assert_struct "template<bool> struct ${prefix_arg}StaticAssert;\ntemplate<> struct ${prefix_arg}StaticAssert<true>{};\n") - set(def_standard "# define ${def_value} static_assert(X, #X)\n# define ${def_value_msg} static_assert(X, MSG)") - set(def_alternative "${static_assert_struct}# define ${def_value} sizeof(${prefix_arg}StaticAssert<X>)\n# define ${def_value_msg} sizeof(${prefix_arg}StaticAssert<X>)") - set(file_content "${file_content}# if ${def_name}\n${def_standard}\n# else\n${def_alternative}\n# endif\n\n") - endif() - if (feature STREQUAL cxx_alignas) - set(def_value "${prefix_arg}_ALIGNAS(X)") - set(file_content "${file_content} -# if ${def_name} -# define ${def_value} alignas(X) -# elif ${prefix_arg}_COMPILER_IS_GNU || ${prefix_arg}_COMPILER_IS_Clang || ${prefix_arg}_COMPILER_IS_AppleClang -# define ${def_value} __attribute__ ((__aligned__(X))) -# elif ${prefix_arg}_COMPILER_IS_MSVC -# define ${def_value} __declspec(align(X)) -# else -# define ${def_value} -# endif -\n") - endif() - if (feature STREQUAL cxx_alignof) - set(def_value "${prefix_arg}_ALIGNOF(X)") - set(file_content "${file_content} -# if ${def_name} -# define ${def_value} alignof(X) -# elif ${prefix_arg}_COMPILER_IS_GNU || ${prefix_arg}_COMPILER_IS_Clang || ${prefix_arg}_COMPILER_IS_AppleClang -# define ${def_value} __alignof__(X) -# elif ${prefix_arg}_COMPILER_IS_MSVC -# define ${def_value} __alignof(X) -# endif -\n") - endif() - if (feature STREQUAL cxx_deleted_functions) - set(def_value "${prefix_arg}_DELETED_FUNCTION") - set(file_content "${file_content} -# if ${def_name} -# define ${def_value} = delete -# else -# define ${def_value} -# endif -\n") - endif() - if (feature STREQUAL cxx_extern_templates) - set(def_value "${prefix_arg}_EXTERN_TEMPLATE") - set(file_content "${file_content} -# if ${def_name} -# define ${def_value} extern -# else -# define ${def_value} -# endif -\n") - endif() - if (feature STREQUAL cxx_noexcept) - set(def_value "${prefix_arg}_NOEXCEPT") - set(file_content "${file_content} -# if ${def_name} -# define ${def_value} noexcept -# define ${def_value}_EXPR(X) noexcept(X) -# else -# define ${def_value} -# define ${def_value}_EXPR(X) -# endif -\n") - endif() - if (feature STREQUAL cxx_nullptr) - set(def_value "${prefix_arg}_NULLPTR") - set(file_content "${file_content} -# if ${def_name} -# define ${def_value} nullptr -# else -# define ${def_value} 0 -# endif -\n") - endif() - if (feature STREQUAL cxx_thread_local) - set(def_value "${prefix_arg}_THREAD_LOCAL") - set(file_content "${file_content} -# if ${def_name} -# define ${def_value} thread_local -# elif ${prefix_arg}_COMPILER_IS_GNU || ${prefix_arg}_COMPILER_IS_Clang || ${prefix_arg}_COMPILER_IS_AppleClang -# define ${def_value} __thread -# elif ${prefix_arg}_COMPILER_IS_MSVC -# define ${def_value} __declspec(thread) -# else -// ${def_value} not defined for this configuration. -# endif -\n") - endif() - if (feature STREQUAL cxx_attribute_deprecated) - set(def_name ${prefix_arg}_${feature_PP}) - set(def_value "${prefix_arg}_DEPRECATED") - set(file_content "${file_content} -# ifndef ${def_value} -# if ${def_name} -# define ${def_value} [[deprecated]] -# define ${def_value}_MSG(MSG) [[deprecated(MSG)]] -# elif ${prefix_arg}_COMPILER_IS_GNU || ${prefix_arg}_COMPILER_IS_Clang -# define ${def_value} __attribute__((__deprecated__)) -# define ${def_value}_MSG(MSG) __attribute__((__deprecated__(MSG))) -# elif ${prefix_arg}_COMPILER_IS_MSVC -# define ${def_value} __declspec(deprecated) -# define ${def_value}_MSG(MSG) __declspec(deprecated(MSG)) -# else -# define ${def_value} -# define ${def_value}_MSG(MSG) -# endif -# endif -\n") - endif() - endforeach() - - set(file_content "${file_content}#endif\n") - - endforeach() - - if(_WCD_OUTPUT_FILES_VAR) - foreach(compiler ${_WCD_COMPILERS}) - foreach(_lang ${_langs}) - if(compiler_file_content_${compiler}_${_lang}) - set(CMAKE_CONFIGURABLE_FILE_CONTENT "${compiler_file_content_}") - set(CMAKE_CONFIGURABLE_FILE_CONTENT "${CMAKE_CONFIGURABLE_FILE_CONTENT}${compiler_file_content_${compiler}_${_lang}}") - - set(compile_file_name "${_WCD_OUTPUT_DIR}${prefix_arg}_COMPILER_INFO_${compiler}_${_lang}.h") - set(full_path "${main_file_dir}/${compile_file_name}") - list(APPEND ${_WCD_OUTPUT_FILES_VAR} ${full_path}) - configure_file("${CMAKE_ROOT}/Modules/CMakeConfigurableFile.in" - "${full_path}" - @ONLY - ) - endif() - endforeach() - endforeach() - set(${_WCD_OUTPUT_FILES_VAR} ${${_WCD_OUTPUT_FILES_VAR}} PARENT_SCOPE) - endif() - - if (_WCD_EPILOG) - set(file_content "${file_content}\n${_WCD_EPILOG}\n") - endif() - set(file_content "${file_content}\n#endif") - - set(CMAKE_CONFIGURABLE_FILE_CONTENT ${file_content}) - configure_file("${CMAKE_ROOT}/Modules/CMakeConfigurableFile.in" - "${file_arg}" - @ONLY - ) -endfunction() |