blob: 2b3ce96e75c556628eded1a73b164a5b529d6cf7 (
plain)
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
|
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this file,
# You can obtain one at http://mozilla.org/MPL/2.0/.
# This module provides a backend static-analysis, like clang-tidy and coverity.
# The main difference between this and the default database backend is that this one
# tracks folders that can be built in the non-unified environment and generates
# the coresponding build commands for the files.
import os
import mozpack.path as mozpath
from mozbuild.compilation.database import CompileDBBackend
class StaticAnalysisBackend(CompileDBBackend):
def _init(self):
CompileDBBackend._init(self)
self.non_unified_build = []
# List of directories can be built outside of the unified build system.
with open(
mozpath.join(self.environment.topsrcdir, "build", "non-unified-compat")
) as fh:
content = fh.readlines()
self.non_unified_build = [
mozpath.join(self.environment.topsrcdir, line.strip())
for line in content
]
def _build_cmd(self, cmd, filename, unified):
cmd = list(cmd)
# Maybe the file is in non-unified environment or it resides under a directory
# that can also be built in non-unified environment
if unified is None or any(
filename.startswith(path) for path in self.non_unified_build
):
cmd.append(filename)
else:
cmd.append(unified)
return cmd
def _outputfile_path(self):
database_path = os.path.join(self.environment.topobjdir, "static-analysis")
if not os.path.exists(database_path):
os.mkdir(database_path)
# Output the database (a JSON file) to objdir/static-analysis/compile_commands.json
return mozpath.join(database_path, "compile_commands.json")
|