forked from conan-io/conan
/
test_cmake_toolchain_win_clang.py
102 lines (89 loc) · 3.51 KB
/
test_cmake_toolchain_win_clang.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
import platform
import textwrap
import pytest
from conans.test.assets.cmake import gen_cmakelists
from conans.test.assets.sources import gen_function_cpp
from conans.test.utils.tools import TestClient
from conans.util.files import save
@pytest.fixture
def client():
c = TestClient()
save(c.cache.new_config_path, "tools.env.virtualenv:auto_use=True")
clang_profile = textwrap.dedent("""
[settings]
os=Windows
arch=x86_64
build_type=Release
compiler=clang
compiler.version=12
[buildenv]
CC=clang
CXX=clang++
RC=clang
""")
conanfile = textwrap.dedent("""
import os
from conans import ConanFile
from conan.tools.cmake import CMake
from conan.tools.layout import cmake_layout
class Pkg(ConanFile):
settings = "os", "compiler", "build_type", "arch"
exports_sources = "*"
generators = "CMakeToolchain"
def layout(self):
cmake_layout(self)
def build(self):
cmake = CMake(self)
cmake.configure()
cmake.build()
cmd = os.path.join(self.cpp.build.bindirs[0], "my_app")
self.run(cmd, env=["conanrunenv"])
""")
c.save({"conanfile.py": conanfile,
"clang": clang_profile,
"src/CMakeLists.txt": gen_cmakelists(appname="my_app", appsources=["main.cpp"]),
"src/main.cpp": gen_function_cpp(name="main")})
return c
@pytest.mark.tool_cmake
@pytest.mark.tool_mingw64
@pytest.mark.tool_clang(version="12")
@pytest.mark.skipif(platform.system() != "Windows", reason="requires Win")
def test_clang(client):
client.run("create . pkg/0.1@ -pr=clang")
# clang compilations in Windows will use MinGW Makefiles by default
assert 'cmake -G "MinGW Makefiles"' in client.out
assert "main __clang_major__12" in client.out
# Check this! Clang compiler in Windows is reporting MSC_VER and MSVC_LANG!
assert "main _MSC_VER19" in client.out
assert "main _MSVC_LANG2014" in client.out
@pytest.mark.tool_cmake
@pytest.mark.tool_clang(version="12")
@pytest.mark.skipif(platform.system() != "Windows", reason="requires Win")
def test_clang_cmake_ninja(client):
client.run("create . pkg/0.1@ -pr=clang -c tools.cmake.cmaketoolchain:generator=Ninja")
assert 'cmake -G "Ninja"' in client.out
assert "main __clang_major__12" in client.out
# Check this! Clang compiler in Windows is reporting MSC_VER and MSVC_LANG!
assert "main _MSC_VER19" in client.out
assert "main _MSVC_LANG2014" in client.out
@pytest.mark.tool_cmake
@pytest.mark.tool_visual_studio(version="16") # With Clang distributed in VS!
@pytest.mark.skipif(platform.system() != "Windows", reason="requires Win")
def test_clang_cmake_visual(client):
clang_profile = textwrap.dedent("""
[settings]
os=Windows
arch=x86_64
build_type=Release
compiler=clang
compiler.version=11
""")
# TODO: Clang version is unused, it can change, still 11 from inside VS is used
client.save({"clang": clang_profile})
client.run("create . pkg/0.1@ -pr=clang "
'-c tools.cmake.cmaketoolchain:generator="Visual Studio 16"')
assert 'cmake -G "Visual Studio 16"' in client.out
assert "main __clang_major__11" in client.out
# Check this! Clang compiler in Windows is reporting MSC_VER and MSVC_LANG!
assert "main _MSC_VER19" in client.out
assert "main _MSVC_LANG2014" in client.out