15f9996aaSopenharmony_ci#!/usr/bin/env python3
25f9996aaSopenharmony_ci# -*- coding: utf-8 -*-
35f9996aaSopenharmony_ci# Copyright (c) 2023 Huawei Device Co., Ltd.
45f9996aaSopenharmony_ci# Licensed under the Apache License, Version 2.0 (the "License");
55f9996aaSopenharmony_ci# you may not use this file except in compliance with the License.
65f9996aaSopenharmony_ci# You may obtain a copy of the License at
75f9996aaSopenharmony_ci#
85f9996aaSopenharmony_ci#     http://www.apache.org/licenses/LICENSE-2.0
95f9996aaSopenharmony_ci#
105f9996aaSopenharmony_ci# Unless required by applicable law or agreed to in writing, software
115f9996aaSopenharmony_ci# distributed under the License is distributed on an "AS IS" BASIS,
125f9996aaSopenharmony_ci# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
135f9996aaSopenharmony_ci# See the License for the specific language governing permissions and
145f9996aaSopenharmony_ci# limitations under the License.
155f9996aaSopenharmony_ci
165f9996aaSopenharmony_ciimport argparse
175f9996aaSopenharmony_ciimport os
185f9996aaSopenharmony_ciimport sys
195f9996aaSopenharmony_ci
205f9996aaSopenharmony_cisys.path.append(
215f9996aaSopenharmony_ci    os.path.dirname(os.path.dirname(os.path.dirname(
225f9996aaSopenharmony_ci        os.path.abspath(__file__)))))
235f9996aaSopenharmony_cifrom scripts.util.file_utils import read_json_file # noqa: E402
245f9996aaSopenharmony_ci
255f9996aaSopenharmony_ci
265f9996aaSopenharmony_cidef check_parts_deps(args, external_part_name: str, parts_deps_info: dict):
275f9996aaSopenharmony_ci    compile_standard_allow_file = args.compile_standard_allow_file
285f9996aaSopenharmony_ci    compile_standard_allow_info = read_json_file(compile_standard_allow_file)
295f9996aaSopenharmony_ci    added_self_part_allow_list = compile_standard_allow_info.get("external_deps_added_self_part_module", [])
305f9996aaSopenharmony_ci    bundle_not_add_allow_list = compile_standard_allow_info.get("external_deps_bundle_not_add", [])
315f9996aaSopenharmony_ci    if external_part_name == args.part_name:
325f9996aaSopenharmony_ci        message = "{} in target {} is dependency within part {}, Need to used deps".format(
335f9996aaSopenharmony_ci            external_part_name, args.target_path, args.part_name)
345f9996aaSopenharmony_ci        if args.target_path in added_self_part_allow_list:
355f9996aaSopenharmony_ci            print(f"[0/0] WARNING: {message}")
365f9996aaSopenharmony_ci            return
375f9996aaSopenharmony_ci        else:
385f9996aaSopenharmony_ci            raise Exception(message)
395f9996aaSopenharmony_ci
405f9996aaSopenharmony_ci    _tips_info = "{} depend part {}, need set part deps info to".format(
415f9996aaSopenharmony_ci        args.target_path, external_part_name)
425f9996aaSopenharmony_ci
435f9996aaSopenharmony_ci    part_deps_info = parts_deps_info.get(args.part_name)
445f9996aaSopenharmony_ci    if not part_deps_info:
455f9996aaSopenharmony_ci        _warning_info = "{} {}.".format(_tips_info, args.part_name)
465f9996aaSopenharmony_ci    elif not part_deps_info.get('components') or \
475f9996aaSopenharmony_ci        not external_part_name in part_deps_info.get('components'):
485f9996aaSopenharmony_ci        _warning_info = "{} {}.".format(_tips_info, part_deps_info.get('build_config_file'))
495f9996aaSopenharmony_ci    else:
505f9996aaSopenharmony_ci        _warning_info = ""
515f9996aaSopenharmony_ci
525f9996aaSopenharmony_ci    if _warning_info != "":
535f9996aaSopenharmony_ci        if args.target_path in bundle_not_add_allow_list:
545f9996aaSopenharmony_ci            print(f"[0/0] WARNING: {_warning_info}")
555f9996aaSopenharmony_ci        else:
565f9996aaSopenharmony_ci            raise Exception(_warning_info)
575f9996aaSopenharmony_ci
585f9996aaSopenharmony_ci    return
595f9996aaSopenharmony_ci
605f9996aaSopenharmony_ci
615f9996aaSopenharmony_cidef check(args) -> list:
625f9996aaSopenharmony_ci    depfiles = []
635f9996aaSopenharmony_ci    if len(args.external_deps) == 0:
645f9996aaSopenharmony_ci        return depfiles
655f9996aaSopenharmony_ci
665f9996aaSopenharmony_ci    external_deps = args.external_deps
675f9996aaSopenharmony_ci
685f9996aaSopenharmony_ci    parts_deps_file = 'build_configs/parts_info/parts_deps.json'
695f9996aaSopenharmony_ci    parts_deps_info = read_json_file(parts_deps_file)
705f9996aaSopenharmony_ci    if parts_deps_info is None:
715f9996aaSopenharmony_ci        raise Exception("read pre_build parts_deps failed.")
725f9996aaSopenharmony_ci    depfiles.append(parts_deps_file)
735f9996aaSopenharmony_ci
745f9996aaSopenharmony_ci    for external_lib in external_deps:
755f9996aaSopenharmony_ci        deps_desc = external_lib.split(':')
765f9996aaSopenharmony_ci        external_part_name = deps_desc[0]
775f9996aaSopenharmony_ci        check_parts_deps(args, external_part_name, parts_deps_info)
785f9996aaSopenharmony_ci
795f9996aaSopenharmony_ci    return depfiles
805f9996aaSopenharmony_ci
815f9996aaSopenharmony_ci
825f9996aaSopenharmony_cidef main():
835f9996aaSopenharmony_ci    parser = argparse.ArgumentParser()
845f9996aaSopenharmony_ci    parser.add_argument('--external-deps', nargs='*', required=True)
855f9996aaSopenharmony_ci    parser.add_argument('--part-name', required=True, default='')
865f9996aaSopenharmony_ci    parser.add_argument('--target-path', required=True, default='')
875f9996aaSopenharmony_ci    parser.add_argument('--output', required=True, default='')
885f9996aaSopenharmony_ci    args = parser.parse_args()
895f9996aaSopenharmony_ci
905f9996aaSopenharmony_ci    check(args)
915f9996aaSopenharmony_ci
925f9996aaSopenharmony_ci    return 0
935f9996aaSopenharmony_ci
945f9996aaSopenharmony_ci
955f9996aaSopenharmony_ciif __name__ == '__main__':
965f9996aaSopenharmony_ci    sys.exit(main())
97