blob: 76067d4941aa8bc0e9bb7ee1c2545a301ea02889 [file] [log] [blame]
#!/usr/bin/env python
#
# Copyright (C) 2023 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
from pathlib import Path
import glob
import os
import subprocess
def parse_set(param : str) -> set[str]:
"""Parse symbol set based on a file or comma-separate symbols."""
symbol_set = set()
if len(param) == 0:
return symbol_set
if param[0] == "@":
with open(param[1:], "r") as f:
for line in f:
line = line.strip()
symbol_set.add(line)
return symbol_set
list_symbols = param.split(",")
symbol_set.update(list_symbols)
return symbol_set
def parse_list(param : str) -> list[str]:
"""Parse partial order based on a file or comma-separate symbols."""
symbol_order = []
if len(param) == 0:
return symbol_order
if param[0] == "@":
with open(param[1:], "r") as f:
for line in f:
line = line.strip()
symbol_order.append(line)
return symbol_order
symbol_order = param.split(",")
return symbol_order
def parse_merge_list(param : str) -> list[tuple[str,int]]:
"""Parse partial order based on a file, folder, or comma-separate symbols."""
file_list = []
if len(param) == 0:
return file_list
if param[0] == "@":
file_dir = Path(param[1:]).resolve().parent
with open(param[1:], "r") as f:
for line in f:
line = line.strip()
line_list = line.split(",")
# Name, Weight
file_list.append((file_dir / line_list[0], int(line_list[1])))
return file_list
if param[0] == "^":
file_lst = glob.glob(param[1:]+"/*.orderfile")
# Assumig weight of 1 for all the files. Sorting of files provides
# a deterministic order of orderfile.
file_list = sorted([(orderfile, 1) for orderfile in file_lst])
return file_list
file_lst = param.split(",")
file_list = [(orderfile, 1) for orderfile in file_lst]
return file_list
def check_call(cmd, *args, **kwargs):
"""subprocess.check_call."""
subprocess.check_call(cmd, *args, **kwargs)
def check_output(cmd, *args, **kwargs):
"""subprocess.check_output."""
return subprocess.run(
cmd, *args, **kwargs, check=True, text=True,
stdout=subprocess.PIPE).stdout
def check_error(cmd, *args, **kwargs):
"""subprocess.check_error."""
return subprocess.run(
cmd, *args, **kwargs, check=True, text=True,
stdout=subprocess.PIPE, stderr=subprocess.STDOUT).stdout
def android_build_top():
"""Get top directory to find files."""
THIS_DIR = os.path.realpath(os.path.dirname(__file__))
return os.path.realpath(os.path.join(THIS_DIR, '../../../..'))