1#!/usr/bin/env python3 2# -*- coding: utf-8 -*- 3# Copyright (c) 2023 Huawei Device Co., Ltd. 4# Licensed under the Apache License, Version 2.0 (the "License"); 5# you may not use this file except in compliance with the License. 6# You may obtain a copy of the License at 7# 8# http://www.apache.org/licenses/LICENSE-2.0 9# 10# Unless required by applicable law or agreed to in writing, software 11# distributed under the License is distributed on an "AS IS" BASIS, 12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13# See the License for the specific language governing permissions and 14# limitations under the License. 15 16import argparse 17import os 18import sys 19 20sys.path.append( 21 os.path.dirname(os.path.dirname(os.path.dirname( 22 os.path.abspath(__file__))))) 23from scripts.util.file_utils import read_json_file # noqa: E402 24 25 26def check_parts_deps(args, external_part_name: str, parts_deps_info: dict): 27 compile_standard_allow_file = args.compile_standard_allow_file 28 compile_standard_allow_info = read_json_file(compile_standard_allow_file) 29 added_self_part_allow_list = compile_standard_allow_info.get("external_deps_added_self_part_module", []) 30 bundle_not_add_allow_list = compile_standard_allow_info.get("external_deps_bundle_not_add", []) 31 if external_part_name == args.part_name: 32 message = "{} in target {} is dependency within part {}, Need to used deps".format( 33 external_part_name, args.target_path, args.part_name) 34 if args.target_path in added_self_part_allow_list: 35 print(f"[0/0] WARNING: {message}") 36 return 37 else: 38 raise Exception(message) 39 40 _tips_info = "{} depend part {}, need set part deps info to".format( 41 args.target_path, external_part_name) 42 43 part_deps_info = parts_deps_info.get(args.part_name) 44 if not part_deps_info: 45 _warning_info = "{} {}.".format(_tips_info, args.part_name) 46 elif not part_deps_info.get('components') or \ 47 not external_part_name in part_deps_info.get('components'): 48 _warning_info = "{} {}.".format(_tips_info, part_deps_info.get('build_config_file')) 49 else: 50 _warning_info = "" 51 52 if _warning_info != "": 53 if args.target_path in bundle_not_add_allow_list: 54 print(f"[0/0] WARNING: {_warning_info}") 55 else: 56 raise Exception(_warning_info) 57 58 return 59 60 61def check(args) -> list: 62 depfiles = [] 63 if len(args.external_deps) == 0: 64 return depfiles 65 66 external_deps = args.external_deps 67 68 parts_deps_file = 'build_configs/parts_info/parts_deps.json' 69 parts_deps_info = read_json_file(parts_deps_file) 70 if parts_deps_info is None: 71 raise Exception("read pre_build parts_deps failed.") 72 depfiles.append(parts_deps_file) 73 74 for external_lib in external_deps: 75 deps_desc = external_lib.split(':') 76 external_part_name = deps_desc[0] 77 check_parts_deps(args, external_part_name, parts_deps_info) 78 79 return depfiles 80 81 82def main(): 83 parser = argparse.ArgumentParser() 84 parser.add_argument('--external-deps', nargs='*', required=True) 85 parser.add_argument('--part-name', required=True, default='') 86 parser.add_argument('--target-path', required=True, default='') 87 parser.add_argument('--output', required=True, default='') 88 args = parser.parse_args() 89 90 check(args) 91 92 return 0 93 94 95if __name__ == '__main__': 96 sys.exit(main()) 97