Merge topic 'features-cleanups'
f0a0f3dc
WCDH: Fix compiler id test for compatibility macros.627ad96b
Project: Detect other compilers before detecting Clang.bc950169
WCDH: Remove noise from generated defines.eecd93fc
Features: Escape the COMPILE_OPTIONS for dialects.
This commit is contained in:
commit
e2789429aa
|
@ -166,11 +166,11 @@ symbol, and compiler support determines what it is expanded to:
|
||||||
virtual void Execute() = 0;
|
virtual void Execute() = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Concrete Foo_CXX_FINAL {
|
struct Concrete Foo_FINAL {
|
||||||
void Execute() Foo_CXX_OVERRIDE;
|
void Execute() Foo_OVERRIDE;
|
||||||
};
|
};
|
||||||
|
|
||||||
In this case, ``Foo_CXX_FINAL`` will expand to ``final`` if the
|
In this case, ``Foo_FINAL`` will expand to ``final`` if the
|
||||||
compiler supports the keyword, or to empty otherwise.
|
compiler supports the keyword, or to empty otherwise.
|
||||||
|
|
||||||
In this use-case, the CMake code will wish to enable a particular language
|
In this use-case, the CMake code will wish to enable a particular language
|
||||||
|
@ -189,13 +189,13 @@ set to influence all following targets:
|
||||||
cxx_final cxx_override
|
cxx_final cxx_override
|
||||||
)
|
)
|
||||||
|
|
||||||
# Includes foo_compiler_detection.h and uses the Foo_DECL_CXX_FINAL symbol
|
# Includes foo_compiler_detection.h and uses the Foo_FINAL symbol
|
||||||
# which will expand to 'final' if the compiler supports the requested
|
# which will expand to 'final' if the compiler supports the requested
|
||||||
# CXX_STANDARD.
|
# CXX_STANDARD.
|
||||||
add_library(foo foo.cpp)
|
add_library(foo foo.cpp)
|
||||||
set_property(TARGET foo PROPERTY CXX_STANDARD 11)
|
set_property(TARGET foo PROPERTY CXX_STANDARD 11)
|
||||||
|
|
||||||
# Includes foo_compiler_detection.h and uses the Foo_DECL_CXX_FINAL symbol
|
# Includes foo_compiler_detection.h and uses the Foo_FINAL symbol
|
||||||
# which will expand to 'final' if the compiler supports the feature,
|
# which will expand to 'final' if the compiler supports the feature,
|
||||||
# even though CXX_STANDARD is not set explicitly. The requirement of
|
# even though CXX_STANDARD is not set explicitly. The requirement of
|
||||||
# cxx_constexpr causes CMake to set CXX_STANDARD internally, which
|
# cxx_constexpr causes CMake to set CXX_STANDARD internally, which
|
||||||
|
|
|
@ -61,8 +61,6 @@ function(compiler_id_detection outvar lang)
|
||||||
list(APPEND ordered_compilers
|
list(APPEND ordered_compilers
|
||||||
Intel
|
Intel
|
||||||
PathScale
|
PathScale
|
||||||
AppleClang
|
|
||||||
Clang
|
|
||||||
Embarcadero
|
Embarcadero
|
||||||
Borland
|
Borland
|
||||||
Watcom
|
Watcom
|
||||||
|
@ -84,6 +82,8 @@ function(compiler_id_detection outvar lang)
|
||||||
endif()
|
endif()
|
||||||
list(APPEND ordered_compilers
|
list(APPEND ordered_compilers
|
||||||
SCO
|
SCO
|
||||||
|
AppleClang
|
||||||
|
Clang
|
||||||
GNU
|
GNU
|
||||||
MSVC
|
MSVC
|
||||||
ADSP
|
ADSP
|
||||||
|
|
|
@ -99,14 +99,14 @@
|
||||||
#
|
#
|
||||||
# .. code-block:: c++
|
# .. code-block:: c++
|
||||||
#
|
#
|
||||||
# class MyClass ClimbingStats_DECL_CXX_FINAL
|
# class MyClass ClimbingStats_FINAL
|
||||||
# {
|
# {
|
||||||
# ClimbingStats_DECL_CXX_CONSTEXPR int someInterface() { return 42; }
|
# ClimbingStats_CONSTEXPR int someInterface() { return 42; }
|
||||||
# };
|
# };
|
||||||
#
|
#
|
||||||
# The ``ClimbingStats_DECL_CXX_FINAL`` macro will expand to ``final`` if the
|
# The ``ClimbingStats_FINAL`` macro will expand to ``final`` if the
|
||||||
# compiler (and its flags) support the ``cxx_final`` feature, and the
|
# compiler (and its flags) support the ``cxx_final`` feature, and the
|
||||||
# ``ClimbingStats_DECL_CXX_CONSTEXPR`` macro will expand to ``constexpr``
|
# ``ClimbingStats_CONSTEXPR`` macro will expand to ``constexpr``
|
||||||
# if ``cxx_constexpr`` is supported.
|
# if ``cxx_constexpr`` is supported.
|
||||||
#
|
#
|
||||||
# The following features generate corresponding symbol defines:
|
# The following features generate corresponding symbol defines:
|
||||||
|
@ -386,7 +386,7 @@ function(write_compiler_detection_header
|
||||||
\n")
|
\n")
|
||||||
endif()
|
endif()
|
||||||
if (feature STREQUAL cxx_constexpr)
|
if (feature STREQUAL cxx_constexpr)
|
||||||
set(def_value "${prefix_arg}_DECL_${feature_upper}")
|
set(def_value "${prefix_arg}_CONSTEXPR")
|
||||||
set(file_content "${file_content}
|
set(file_content "${file_content}
|
||||||
# if ${def_name}
|
# if ${def_name}
|
||||||
# define ${def_value} constexpr
|
# define ${def_value} constexpr
|
||||||
|
@ -396,7 +396,7 @@ function(write_compiler_detection_header
|
||||||
\n")
|
\n")
|
||||||
endif()
|
endif()
|
||||||
if (feature STREQUAL cxx_final)
|
if (feature STREQUAL cxx_final)
|
||||||
set(def_value "${prefix_arg}_DECL_${feature_upper}")
|
set(def_value "${prefix_arg}_FINAL")
|
||||||
set(file_content "${file_content}
|
set(file_content "${file_content}
|
||||||
# if ${def_name}
|
# if ${def_name}
|
||||||
# define ${def_value} final
|
# define ${def_value} final
|
||||||
|
@ -406,7 +406,7 @@ function(write_compiler_detection_header
|
||||||
\n")
|
\n")
|
||||||
endif()
|
endif()
|
||||||
if (feature STREQUAL cxx_override)
|
if (feature STREQUAL cxx_override)
|
||||||
set(def_value "${prefix_arg}_DECL_${feature_upper}")
|
set(def_value "${prefix_arg}_OVERRIDE")
|
||||||
set(file_content "${file_content}
|
set(file_content "${file_content}
|
||||||
# if ${def_name}
|
# if ${def_name}
|
||||||
# define ${def_value} override
|
# define ${def_value} override
|
||||||
|
@ -428,7 +428,7 @@ function(write_compiler_detection_header
|
||||||
set(file_content "${file_content}
|
set(file_content "${file_content}
|
||||||
# if ${def_name}
|
# if ${def_name}
|
||||||
# define ${def_value} alignas(X)
|
# define ${def_value} alignas(X)
|
||||||
# elif ${prefix_arg}_COMPILER_IS_GNU
|
# elif ${prefix_arg}_COMPILER_IS_GNU || ${prefix_arg}_COMPILER_IS_Clang
|
||||||
# define ${def_value} __attribute__ ((__aligned__(X)))
|
# define ${def_value} __attribute__ ((__aligned__(X)))
|
||||||
# else
|
# else
|
||||||
# define ${def_value}
|
# define ${def_value}
|
||||||
|
@ -440,7 +440,7 @@ function(write_compiler_detection_header
|
||||||
set(file_content "${file_content}
|
set(file_content "${file_content}
|
||||||
# if ${def_name}
|
# if ${def_name}
|
||||||
# define ${def_value} alignof(X)
|
# define ${def_value} alignof(X)
|
||||||
# elif ${prefix_arg}_COMPILER_IS_GNU
|
# elif ${prefix_arg}_COMPILER_IS_GNU || ${prefix_arg}_COMPILER_IS_Clang
|
||||||
# define ${def_value} __alignof__(X)
|
# define ${def_value} __alignof__(X)
|
||||||
# endif
|
# endif
|
||||||
\n")
|
\n")
|
||||||
|
@ -495,10 +495,10 @@ function(write_compiler_detection_header
|
||||||
# if ${def_name}
|
# if ${def_name}
|
||||||
# define ${def_value} [[deprecated]]
|
# define ${def_value} [[deprecated]]
|
||||||
# define ${def_value}_MSG(MSG) [[deprecated(MSG)]]
|
# define ${def_value}_MSG(MSG) [[deprecated(MSG)]]
|
||||||
# elif defined(__GNUC__) || defined(__clang__)
|
# elif ${prefix_arg}_COMPILER_IS_GNU || ${prefix_arg}_COMPILER_IS_Clang
|
||||||
# define ${def_value} __attribute__((__deprecated__))
|
# define ${def_value} __attribute__((__deprecated__))
|
||||||
# define ${def_value}_MSG(MSG) __attribute__((__deprecated__(MSG)))
|
# define ${def_value}_MSG(MSG) __attribute__((__deprecated__(MSG)))
|
||||||
# elif defined(_MSC_VER)
|
# elif ${prefix_arg}_COMPILER_IS_MSVC
|
||||||
# define ${def_value} __declspec(deprecated)
|
# define ${def_value} __declspec(deprecated)
|
||||||
# define ${def_value}_MSG(MSG) __declspec(deprecated(MSG))
|
# define ${def_value}_MSG(MSG) __declspec(deprecated(MSG))
|
||||||
# else
|
# else
|
||||||
|
|
|
@ -2229,7 +2229,10 @@ AddCompilerRequirementFlag(std::string &flags, cmTarget* target,
|
||||||
"does not know the compile flags to use to enable it.";
|
"does not know the compile flags to use to enable it.";
|
||||||
this->GetMakefile()->IssueMessage(cmake::FATAL_ERROR, e.str());
|
this->GetMakefile()->IssueMessage(cmake::FATAL_ERROR, e.str());
|
||||||
}
|
}
|
||||||
this->AppendFlags(flags, opt);
|
else
|
||||||
|
{
|
||||||
|
this->AppendFlagEscape(flags, opt);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2275,7 +2278,7 @@ AddCompilerRequirementFlag(std::string &flags, cmTarget* target,
|
||||||
|
|
||||||
if (const char *opt = target->GetMakefile()->GetDefinition(option_flag))
|
if (const char *opt = target->GetMakefile()->GetDefinition(option_flag))
|
||||||
{
|
{
|
||||||
this->AppendFlags(flags, opt);
|
this->AppendFlagEscape(flags, opt);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue