CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
116 lines
5.0 KiB
Python
116 lines
5.0 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
# See https://llvm.org/LICENSE.txt for license information.
|
|
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
|
|
import libscanbuild.compilation as sut
|
|
import unittest
|
|
|
|
|
|
class CompilerTest(unittest.TestCase):
|
|
def test_is_compiler_call(self):
|
|
self.assertIsNotNone(sut.compiler_language(["clang"]))
|
|
self.assertIsNotNone(sut.compiler_language(["clang-3.6"]))
|
|
self.assertIsNotNone(sut.compiler_language(["clang++"]))
|
|
self.assertIsNotNone(sut.compiler_language(["clang++-3.5.1"]))
|
|
self.assertIsNotNone(sut.compiler_language(["cc"]))
|
|
self.assertIsNotNone(sut.compiler_language(["c++"]))
|
|
self.assertIsNotNone(sut.compiler_language(["gcc"]))
|
|
self.assertIsNotNone(sut.compiler_language(["g++"]))
|
|
self.assertIsNotNone(sut.compiler_language(["/usr/local/bin/gcc"]))
|
|
self.assertIsNotNone(sut.compiler_language(["/usr/local/bin/g++"]))
|
|
self.assertIsNotNone(sut.compiler_language(["/usr/local/bin/clang"]))
|
|
self.assertIsNotNone(sut.compiler_language(["armv7_neno-linux-gnueabi-g++"]))
|
|
|
|
self.assertIsNone(sut.compiler_language([]))
|
|
self.assertIsNone(sut.compiler_language([""]))
|
|
self.assertIsNone(sut.compiler_language(["ld"]))
|
|
self.assertIsNone(sut.compiler_language(["as"]))
|
|
self.assertIsNone(sut.compiler_language(["/usr/local/bin/compiler"]))
|
|
|
|
|
|
class SplitTest(unittest.TestCase):
|
|
def test_detect_cxx_from_compiler_name(self):
|
|
def test(cmd):
|
|
result = sut.split_command([cmd, "-c", "src.c"])
|
|
self.assertIsNotNone(result, "wrong input for test")
|
|
return result.compiler == "c++"
|
|
|
|
self.assertFalse(test("cc"))
|
|
self.assertFalse(test("gcc"))
|
|
self.assertFalse(test("clang"))
|
|
|
|
self.assertTrue(test("c++"))
|
|
self.assertTrue(test("g++"))
|
|
self.assertTrue(test("g++-5.3.1"))
|
|
self.assertTrue(test("clang++"))
|
|
self.assertTrue(test("clang++-3.7.1"))
|
|
self.assertTrue(test("armv7_neno-linux-gnueabi-g++"))
|
|
|
|
def test_action(self):
|
|
self.assertIsNotNone(sut.split_command(["clang", "source.c"]))
|
|
self.assertIsNotNone(sut.split_command(["clang", "-c", "source.c"]))
|
|
self.assertIsNotNone(
|
|
sut.split_command(["clang", "-c", "source.c", "-MF", "a.d"])
|
|
)
|
|
|
|
self.assertIsNone(sut.split_command(["clang", "-E", "source.c"]))
|
|
self.assertIsNone(sut.split_command(["clang", "-c", "-E", "source.c"]))
|
|
self.assertIsNone(sut.split_command(["clang", "-c", "-M", "source.c"]))
|
|
self.assertIsNone(sut.split_command(["clang", "-c", "-MM", "source.c"]))
|
|
|
|
def test_source_file(self):
|
|
def test(expected, cmd):
|
|
self.assertEqual(expected, sut.split_command(cmd).files)
|
|
|
|
test(["src.c"], ["clang", "src.c"])
|
|
test(["src.c"], ["clang", "-c", "src.c"])
|
|
test(["src.C"], ["clang", "-x", "c", "src.C"])
|
|
test(["src.cpp"], ["clang++", "-c", "src.cpp"])
|
|
test(["s1.c", "s2.c"], ["clang", "-c", "s1.c", "s2.c"])
|
|
test(["s1.c", "s2.c"], ["cc", "s1.c", "s2.c", "-ldep", "-o", "a.out"])
|
|
test(["src.c"], ["clang", "-c", "-I", "./include", "src.c"])
|
|
test(["src.c"], ["clang", "-c", "-I", "/opt/me/include", "src.c"])
|
|
test(["src.c"], ["clang", "-c", "-D", "config=file.c", "src.c"])
|
|
|
|
self.assertIsNone(sut.split_command(["cc", "this.o", "that.o", "-o", "a.out"]))
|
|
self.assertIsNone(sut.split_command(["cc", "this.o", "-lthat", "-o", "a.out"]))
|
|
|
|
def test_filter_flags(self):
|
|
def test(expected, flags):
|
|
command = ["clang", "-c", "src.c"] + flags
|
|
self.assertEqual(expected, sut.split_command(command).flags)
|
|
|
|
def same(expected):
|
|
test(expected, expected)
|
|
|
|
def filtered(flags):
|
|
test([], flags)
|
|
|
|
same([])
|
|
same(["-I", "/opt/me/include", "-DNDEBUG", "-ULIMITS"])
|
|
same(["-O", "-O2"])
|
|
same(["-m32", "-mmms"])
|
|
same(["-Wall", "-Wno-unused", "-g", "-funroll-loops"])
|
|
|
|
filtered([])
|
|
filtered(["-lclien", "-L/opt/me/lib", "-L", "/opt/you/lib"])
|
|
filtered(["-static"])
|
|
filtered(["-MD", "-MT", "something"])
|
|
filtered(["-MMD", "-MF", "something"])
|
|
|
|
|
|
class SourceClassifierTest(unittest.TestCase):
|
|
def test_sources(self):
|
|
self.assertIsNone(sut.classify_source("file.o"))
|
|
self.assertIsNone(sut.classify_source("file.exe"))
|
|
self.assertIsNone(sut.classify_source("/path/file.o"))
|
|
self.assertIsNone(sut.classify_source("clang"))
|
|
|
|
self.assertEqual("c", sut.classify_source("file.c"))
|
|
self.assertEqual("c", sut.classify_source("./file.c"))
|
|
self.assertEqual("c", sut.classify_source("/path/file.c"))
|
|
self.assertEqual("c++", sut.classify_source("file.c", False))
|
|
self.assertEqual("c++", sut.classify_source("./file.c", False))
|
|
self.assertEqual("c++", sut.classify_source("/path/file.c", False))
|