From a70fbdddfe6080ed3d2c5d9ba699f2e2f514cee1 Mon Sep 17 00:00:00 2001 From: SSE4 Date: Sun, 30 Sep 2018 15:09:37 +0700 Subject: [PATCH] - use major-only for Clang >= 7.0 Signed-off-by: SSE4 --- conans/client/cmd/new_ci.py | 4 ++-- conans/client/conf/__init__.py | 3 ++- conans/client/conf/detect.py | 5 +++++ conans/client/generators/cmake_common.py | 15 ++++++++++++++- conans/client/migrations.py | 3 ++- conans/test/build_helpers/cpp_std_flags_test.py | 5 +++++ 6 files changed, 30 insertions(+), 5 deletions(-) diff --git a/conans/client/cmd/new_ci.py b/conans/client/cmd/new_ci.py index f9a8b1378be..5377f65c1da 100644 --- a/conans/client/cmd/new_ci.py +++ b/conans/client/cmd/new_ci.py @@ -361,8 +361,8 @@ def ci_get_files(name, version, user, channel, visual_versions, linux_gcc_versio gitlab_gcc_versions or gitlab_clang_versions or circleci_gcc_versions or circleci_clang_versions or circleci_osx_versions): return {} - gcc_versions = ["4.9", "5", "6", "7"] - clang_versions = ["3.9", "4.0"] + gcc_versions = ["4.9", "5", "6", "7", "8"] + clang_versions = ["3.9", "4.0", "5.0", "6.0", "7"] if visual_versions is True: visual_versions = ["12", "14", "15"] if linux_gcc_versions is True: diff --git a/conans/client/conf/__init__.py b/conans/client/conf/__init__.py index f6477a3aeae..40de732183d 100644 --- a/conans/client/conf/__init__.py +++ b/conans/client/conf/__init__.py @@ -67,7 +67,8 @@ LLVM-vs2013, LLVM-vs2013_xp, LLVM-vs2014, LLVM-vs2014_xp, LLVM-vs2017, LLVM-vs2017_xp, v141, v141_xp, v141_clang_c2] clang: - version: ["3.3", "3.4", "3.5", "3.6", "3.7", "3.8", "3.9", "4.0", "5.0", "6.0", "7.0"] + version: ["3.3", "3.4", "3.5", "3.6", "3.7", "3.8", "3.9", "4.0", "5.0", "6.0", + "7", "7.0"] libcxx: [libstdc++, libstdc++11, libc++] apple-clang: version: ["5.0", "5.1", "6.0", "6.1", "7.0", "7.3", "8.0", "8.1", "9.0", "9.1", "10.0"] diff --git a/conans/client/conf/detect.py b/conans/client/conf/detect.py index 3f5a2dea0ec..33f0a638649 100644 --- a/conans/client/conf/detect.py +++ b/conans/client/conf/detect.py @@ -64,10 +64,15 @@ def _clang_compiler(output, compiler_exe="clang"): installed_version = re.search("([0-9]+\.[0-9])", out).group() if installed_version: output.success("Found %s %s" % (compiler, installed_version)) + major = installed_version.split(".")[0] + if int(major) >= 7 and compiler == "clang": + output.info("clang>=7, using the major as version") + installed_version = major return compiler, installed_version except: return None + def _sun_cc_compiler(output, compiler_exe="cc"): try: _, out = _execute('%s -V' % compiler_exe) diff --git a/conans/client/generators/cmake_common.py b/conans/client/generators/cmake_common.py index b2a14ddb579..e490afa9555 100644 --- a/conans/client/generators/cmake_common.py +++ b/conans/client/generators/cmake_common.py @@ -364,7 +364,20 @@ def generate_targets_section(dependencies): if(NOT ${_CHECK_VERSION} VERSION_EQUAL CONAN_COMPILER_VERSION) conan_error_compiler_version() endif() - elseif(CONAN_COMPILER MATCHES "clang" OR CONAN_COMPILER STREQUAL "sun-cc") + elseif(CONAN_COMPILER STREQUAL "clang") + set(_CHECK_VERSION ${VERSION_MAJOR}.${VERSION_MINOR}) + if(NOT ${CONAN_COMPILER_VERSION} VERSION_LESS 7.0) + message(STATUS "Conan: Compiler Clang>=7, checking major version ${CONAN_COMPILER_VERSION}") + conan_split_version(${CONAN_COMPILER_VERSION} CONAN_COMPILER_MAJOR CONAN_COMPILER_MINOR) + if("${CONAN_COMPILER_MINOR}" STREQUAL "") + set(_CHECK_VERSION ${VERSION_MAJOR}) + endif() + endif() + message(STATUS "Conan: Checking correct version: ${_CHECK_VERSION}") + if(NOT ${_CHECK_VERSION} VERSION_EQUAL CONAN_COMPILER_VERSION) + conan_error_compiler_version() + endif() + elseif(CONAN_COMPILER STREQUAL "apple-clang" OR CONAN_COMPILER STREQUAL "sun-cc") conan_split_version(${CONAN_COMPILER_VERSION} CONAN_COMPILER_MAJOR CONAN_COMPILER_MINOR) if(NOT ${VERSION_MAJOR}.${VERSION_MINOR} VERSION_EQUAL ${CONAN_COMPILER_MAJOR}.${CONAN_COMPILER_MINOR}) conan_error_compiler_version() diff --git a/conans/client/migrations.py b/conans/client/migrations.py index 7230e7e4326..62c7734a731 100644 --- a/conans/client/migrations.py +++ b/conans/client/migrations.py @@ -94,7 +94,8 @@ def _make_migrations(self, old_version): version: ["8", "9", "10", "11", "12", "14", "15"] toolset: [None, v90, v100, v110, v110_xp, v120, v120_xp, v140, v140_xp, v140_clang_c2, LLVM-vs2014, LLVM-vs2014_xp, v141, v141_xp, v141_clang_c2] clang: - version: ["3.3", "3.4", "3.5", "3.6", "3.7", "3.8", "3.9", "4.0", "5.0", "6.0", "7.0"] + version: ["3.3", "3.4", "3.5", "3.6", "3.7", "3.8", "3.9", "4.0", "5.0", "6.0", + "7", "7.0"] libcxx: [libstdc++, libstdc++11, libc++] apple-clang: version: ["5.0", "5.1", "6.0", "6.1", "7.0", "7.3", "8.0", "8.1", "9.0", "9.1", "10.0"] diff --git a/conans/test/build_helpers/cpp_std_flags_test.py b/conans/test/build_helpers/cpp_std_flags_test.py index 70f09e99026..42ab9e479b0 100644 --- a/conans/test/build_helpers/cpp_std_flags_test.py +++ b/conans/test/build_helpers/cpp_std_flags_test.py @@ -95,6 +95,11 @@ def test_clang_cppstd_flags(self): self.assertEquals(cppstd_flag("clang", "6", "17"), '-std=c++17') self.assertEquals(cppstd_flag("clang", "6", "20"), '-std=c++2a') + self.assertEquals(cppstd_flag("clang", "7", "11"), '-std=c++11') + self.assertEquals(cppstd_flag("clang", "7", "14"), '-std=c++14') + self.assertEquals(cppstd_flag("clang", "7", "17"), '-std=c++17') + self.assertEquals(cppstd_flag("clang", "7", "20"), '-std=c++2a') + def test_clang_cppstd_defaults(self): self.assertEquals(cppstd_default("clang", "2"), "gnu98") self.assertEquals(cppstd_default("clang", "2.1"), "gnu98")