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 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
|
# -*- python -*-
# test_toolchain.py - Unit tests for swift_build_support.toolchain
#
# This source file is part of the Swift.org open source project
#
# Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors
# Licensed under Apache License v2.0 with Runtime Library Exception
#
# See https://swift.org/LICENSE.txt for license information
# See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
import os
import platform
import unittest
from swift_build_support import toolchain
from swift_build_support.toolchain import host_toolchain
def get_suffix(path, prefix):
basename = os.path.basename(path)
return basename[len(prefix):]
class ToolchainTestCase(unittest.TestCase):
def test_clang_tools(self):
tc = host_toolchain()
self.assertIsNotNone(tc.cc)
self.assertIsNotNone(tc.cxx)
self.assertTrue(
os.path.isabs(tc.cc) and
os.path.basename(tc.cc).startswith(self._platform_cc_name()))
self.assertTrue(
os.path.isabs(tc.cxx) and
os.path.basename(tc.cxx).startswith(self._platform_cxx_name()))
def test_llvm_tools(self):
tc = host_toolchain()
self.assertTrue(
tc.llvm_profdata is None or
os.path.isabs(tc.llvm_profdata) and
os.path.basename(tc.llvm_profdata).startswith('llvm-profdata'))
self.assertTrue(
tc.llvm_cov is None or
os.path.isabs(tc.llvm_cov) and
os.path.basename(tc.llvm_cov).startswith('llvm-cov'))
def test_misc_tools(self):
tc = host_toolchain()
# CMake
self.assertIsNotNone(tc.cmake)
self.assertTrue(
os.path.basename(tc.cmake).startswith('cmake'))
# Ninja
self.assertTrue(tc.ninja is None or
os.path.basename(tc.ninja) == 'ninja' or
os.path.basename(tc.ninja) == 'ninja-build')
# distcc
self.assertTrue(tc.distcc is None or
os.path.basename(tc.distcc) == 'distcc')
# pump
self.assertTrue(tc.distcc_pump is None or
os.path.basename(tc.distcc_pump) == 'pump' or
os.path.basename(tc.distcc_pump) == 'distcc-pump')
# sccache
self.assertTrue(tc.sccache is None or
os.path.basename(tc.sccache) == 'sccache')
def test_find_tool(self):
tc = host_toolchain()
# Toolchain.find_tool(path) can find arbitrary tool in PATH
sh = tc.find_tool('sh')
self.assertTrue(sh is not None and
os.path.isabs(sh) and
os.path.basename(sh) == 'sh')
tar = tc.find_tool('tar')
self.assertTrue(tar is not None and
os.path.isabs(tar) and
os.path.basename(tar) == 'tar')
def test_tools_suffix_match(self):
tc = host_toolchain()
# CC and CXX must have consistent suffix
cc_suffix = get_suffix(tc.cc, self._platform_cc_name())
cxx_suffix = get_suffix(tc.cxx, self._platform_cxx_name())
self.assertEqual(cc_suffix, cxx_suffix)
def test_tools_llvm_suffix(self):
tc = host_toolchain()
cov_suffix = None
profdata_suffix = None
if tc.llvm_cov:
cov_suffix = get_suffix(tc.llvm_cov, 'llvm-cov')
if tc.llvm_profdata:
profdata_suffix = get_suffix(tc.llvm_profdata, 'llvm-profdata')
if profdata_suffix is not None and cov_suffix is not None:
self.assertEqual(profdata_suffix, cov_suffix)
# If we have suffixed clang, llvm tools must have the same suffix.
cc_suffix = get_suffix(tc.cc, self._platform_cc_name())
if cc_suffix != '':
if cov_suffix is not None:
self.assertEqual(cc_suffix, cov_suffix)
if profdata_suffix is not None:
self.assertEqual(cc_suffix, profdata_suffix)
def test_toolchain_instances(self):
# Check that we can instantiate every toolchain, even if it isn't the
# current platform.
toolchain.MacOSX()
toolchain.Linux()
toolchain.FreeBSD()
toolchain.Cygwin()
def _platform_cc_name(self):
if platform.system() == 'Windows':
return 'clang-cl'
else:
return 'clang'
def _platform_cxx_name(self):
if platform.system() == 'Windows':
return 'clang-cl'
else:
return 'clang++'
if __name__ == '__main__':
unittest.main()
|