mirror of https://github.com/acidanthera/audk.git
75 lines
2.2 KiB
Python
75 lines
2.2 KiB
Python
# @file codeql_plugin.py
|
|
#
|
|
# Common logic shared across the CodeQL plugin.
|
|
#
|
|
# Copyright (c) Microsoft Corporation. All rights reserved.
|
|
# SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
##
|
|
|
|
import os
|
|
import shutil
|
|
from os import PathLike
|
|
|
|
from edk2toollib.utility_functions import GetHostInfo
|
|
|
|
|
|
def get_codeql_db_path(workspace: PathLike, package: str, target: str,
|
|
new_path: bool = True) -> str:
|
|
"""Return the CodeQL database path for this build.
|
|
|
|
Args:
|
|
workspace (PathLike): The workspace path.
|
|
package (str): The package name (e.g. "MdeModulePkg")
|
|
target (str): The target (e.g. "DEBUG")
|
|
new_path (bool, optional): Whether to create a new database path or
|
|
return an existing path. Defaults to True.
|
|
|
|
Returns:
|
|
str: The absolute path to the CodeQL database directory.
|
|
"""
|
|
codeql_db_dir_name = "codeql-db-" + package + "-" + target
|
|
codeql_db_dir_name = codeql_db_dir_name.lower()
|
|
codeql_db_path = os.path.join("Build", codeql_db_dir_name)
|
|
codeql_db_path = os.path.join(workspace, codeql_db_path)
|
|
|
|
i = 0
|
|
while os.path.isdir(f"{codeql_db_path + '-%s' % i}"):
|
|
i += 1
|
|
|
|
if not new_path:
|
|
if i == 0:
|
|
return None
|
|
else:
|
|
i -= 1
|
|
|
|
return codeql_db_path + f"-{i}"
|
|
|
|
|
|
def get_codeql_cli_path() -> str:
|
|
"""Return the current CodeQL CLI path.
|
|
|
|
Returns:
|
|
str: The absolute path to the CodeQL CLI application to use for
|
|
this build.
|
|
"""
|
|
# The CodeQL executable path can be passed via the
|
|
# STUART_CODEQL_PATH environment variable (to override with a
|
|
# custom value for this run) or read from the system path.
|
|
codeql_path = None
|
|
|
|
if "STUART_CODEQL_PATH" in os.environ:
|
|
codeql_path = os.environ["STUART_CODEQL_PATH"]
|
|
|
|
if GetHostInfo().os == "Windows":
|
|
codeql_path = os.path.join(codeql_path, "codeql.exe")
|
|
else:
|
|
codeql_path = os.path.join(codeql_path, "codeql")
|
|
|
|
if not os.path.isfile(codeql_path):
|
|
codeql_path = None
|
|
|
|
if not codeql_path:
|
|
codeql_path = shutil.which("codeql")
|
|
|
|
return codeql_path
|