blob: 3f062eb57f2ec89c23b1bbb32dcc0669f664beb8 [file] [log] [blame]
# Copyright (c) 2018 The WebRTC project authors. All Rights Reserved.
#
# Use of this source code is governed by a BSD-style license
# that can be found in the LICENSE file in the root of the source
# tree. An additional intellectual property rights grant can be found
# in the file PATENTS. All contributing project authors may
# be found in the AUTHORS file in the root of the source tree.
import os
import shutil
import subprocess
import sys
import tempfile
from contextlib import contextmanager
# The module find_depot_tools lives into the ./build directory.
SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
SRC_DIR = os.path.normpath(os.path.join(SCRIPT_DIR, os.pardir, os.pardir))
sys.path.append(os.path.join(SRC_DIR, 'build'))
import find_depot_tools
@contextmanager
def DefaultGnProject():
"""Generates a GN projects with defaul args and returns the path to it."""
out_dir = tempfile.mkdtemp('gn')
gen_command = [
sys.executable,
os.path.join(find_depot_tools.DEPOT_TOOLS_PATH, 'gn.py'),
'gen',
out_dir,
]
subprocess.check_output(gen_command)
try:
yield out_dir
finally:
shutil.rmtree(out_dir, ignore_errors=True)
def BelongsToTestTarget(file_path, out_dir):
"""Returns True if file_path is part of a testonly build target.
This function relies on 'gn refs'. It actually runs:
$ gn refs <out_dir> file_path --testonly=true`
Which returns a list of build targets containing file_path (well, only
one build target should own a file, but that is not a strict rule).
If the list is empty, it means the file is owned by a non-testonly build
target and the function will return False. Otherwise it will return True.
Args:
file_path: string with the local path of the file to analyze.
out_dir: the path to the GN out directory to analyze.
Returns:
boolean: True if the file belongs to a testonly build target.
"""
refs_command = [
sys.executable,
os.path.join(find_depot_tools.DEPOT_TOOLS_PATH, 'gn.py'),
'refs',
out_dir,
file_path,
'--testonly=true'
]
output = subprocess.check_output(refs_command)
# If file_path belongs to a test target, output will contain a list of them.
return output != ''