From eecd93fccafc5335915be80b169866e9829912a7 Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Fri, 13 Jun 2014 10:30:57 +0200 Subject: Features: Escape the COMPILE_OPTIONS for dialects. Allow for future handling as a list, not a string which may contain whitespace. --- Source/cmLocalGenerator.cxx | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx index c8c8c79..8ae1157 100644 --- a/Source/cmLocalGenerator.cxx +++ b/Source/cmLocalGenerator.cxx @@ -2229,7 +2229,10 @@ AddCompilerRequirementFlag(std::string &flags, cmTarget* target, "does not know the compile flags to use to enable it."; this->GetMakefile()->IssueMessage(cmake::FATAL_ERROR, e.str()); } - this->AppendFlags(flags, opt); + else + { + this->AppendFlagEscape(flags, opt); + } return; } @@ -2275,7 +2278,7 @@ AddCompilerRequirementFlag(std::string &flags, cmTarget* target, if (const char *opt = target->GetMakefile()->GetDefinition(option_flag)) { - this->AppendFlags(flags, opt); + this->AppendFlagEscape(flags, opt); return; } } -- cgit v0.12 From bc950169c78e4c14771ca5cdb6ee0155e11fdda5 Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Fri, 13 Jun 2014 10:46:27 +0200 Subject: WCDH: Remove noise from generated defines. The DECL part is redundant, and the language part is not needed. The source language and context already determines the language, so there is no need to repeat it in the define name. --- Help/manual/cmake-compile-features.7.rst | 10 +++++----- Modules/WriteCompilerDetectionHeader.cmake | 14 +++++++------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/Help/manual/cmake-compile-features.7.rst b/Help/manual/cmake-compile-features.7.rst index d4bbecc..8a2fe30 100644 --- a/Help/manual/cmake-compile-features.7.rst +++ b/Help/manual/cmake-compile-features.7.rst @@ -166,11 +166,11 @@ symbol, and compiler support determines what it is expanded to: virtual void Execute() = 0; }; - struct Concrete Foo_CXX_FINAL { - void Execute() Foo_CXX_OVERRIDE; + struct Concrete Foo_FINAL { + 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. 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 ) - # 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 # CXX_STANDARD. add_library(foo foo.cpp) 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, # even though CXX_STANDARD is not set explicitly. The requirement of # cxx_constexpr causes CMake to set CXX_STANDARD internally, which diff --git a/Modules/WriteCompilerDetectionHeader.cmake b/Modules/WriteCompilerDetectionHeader.cmake index d7992fe..fb0dda1 100644 --- a/Modules/WriteCompilerDetectionHeader.cmake +++ b/Modules/WriteCompilerDetectionHeader.cmake @@ -99,14 +99,14 @@ # # .. 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 -# ``ClimbingStats_DECL_CXX_CONSTEXPR`` macro will expand to ``constexpr`` +# ``ClimbingStats_CONSTEXPR`` macro will expand to ``constexpr`` # if ``cxx_constexpr`` is supported. # # The following features generate corresponding symbol defines: @@ -386,7 +386,7 @@ function(write_compiler_detection_header \n") endif() if (feature STREQUAL cxx_constexpr) - set(def_value "${prefix_arg}_DECL_${feature_upper}") + set(def_value "${prefix_arg}_CONSTEXPR") set(file_content "${file_content} # if ${def_name} # define ${def_value} constexpr @@ -396,7 +396,7 @@ function(write_compiler_detection_header \n") endif() if (feature STREQUAL cxx_final) - set(def_value "${prefix_arg}_DECL_${feature_upper}") + set(def_value "${prefix_arg}_FINAL") set(file_content "${file_content} # if ${def_name} # define ${def_value} final @@ -406,7 +406,7 @@ function(write_compiler_detection_header \n") endif() if (feature STREQUAL cxx_override) - set(def_value "${prefix_arg}_DECL_${feature_upper}") + set(def_value "${prefix_arg}_OVERRIDE") set(file_content "${file_content} # if ${def_name} # define ${def_value} override -- cgit v0.12 From 627ad96bd38c37e338737ad656d98b24bd4f027d Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Fri, 13 Jun 2014 10:50:07 +0200 Subject: Project: Detect other compilers before detecting Clang. Commit v2.8.10.1~5^2 (Fix PathScale compiler id for Clang-based upstream, 2012-11-05) re-ordered the detection logic for PathScale. Other compiler vendors are also producing Clang-based frontends, so detect "actual" Clang as one of the last compilers to allow for others doing the same. http://llvm.org/devmtg/2014-04/PDFs/Posters/ClangIntel.pdf http://docwiki.embarcadero.com/RADStudio/XE5/en/Clang-based_C%2B%2B_Compilers --- Modules/CMakeCompilerIdDetection.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Modules/CMakeCompilerIdDetection.cmake b/Modules/CMakeCompilerIdDetection.cmake index 7f82a9d..e247885 100644 --- a/Modules/CMakeCompilerIdDetection.cmake +++ b/Modules/CMakeCompilerIdDetection.cmake @@ -61,8 +61,6 @@ function(compiler_id_detection outvar lang) list(APPEND ordered_compilers Intel PathScale - AppleClang - Clang Embarcadero Borland Watcom @@ -84,6 +82,8 @@ function(compiler_id_detection outvar lang) endif() list(APPEND ordered_compilers SCO + AppleClang + Clang GNU MSVC ADSP -- cgit v0.12 From f0a0f3dcb42ee249d7ba0c09e674900adfb9ea2e Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Fri, 13 Jun 2014 11:08:34 +0200 Subject: WCDH: Fix compiler id test for compatibility macros. Enable the alignment features for Clang. --- Modules/WriteCompilerDetectionHeader.cmake | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Modules/WriteCompilerDetectionHeader.cmake b/Modules/WriteCompilerDetectionHeader.cmake index fb0dda1..593176c 100644 --- a/Modules/WriteCompilerDetectionHeader.cmake +++ b/Modules/WriteCompilerDetectionHeader.cmake @@ -428,7 +428,7 @@ function(write_compiler_detection_header set(file_content "${file_content} # if ${def_name} # 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))) # else # define ${def_value} @@ -440,7 +440,7 @@ function(write_compiler_detection_header set(file_content "${file_content} # if ${def_name} # 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) # endif \n") @@ -495,10 +495,10 @@ function(write_compiler_detection_header # if ${def_name} # define ${def_value} [[deprecated]] # 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}_MSG(MSG) __attribute__((__deprecated__(MSG))) -# elif defined(_MSC_VER) +# elif ${prefix_arg}_COMPILER_IS_MSVC # define ${def_value} __declspec(deprecated) # define ${def_value}_MSG(MSG) __declspec(deprecated(MSG)) # else -- cgit v0.12