15f9996aaSopenharmony_ci#!/usr/bin/env python 25f9996aaSopenharmony_ci# -*- coding: utf-8 -*- 35f9996aaSopenharmony_ci# Copyright (c) 2021 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 sys 175f9996aaSopenharmony_ciimport argparse 185f9996aaSopenharmony_ciimport os 195f9996aaSopenharmony_ciimport shutil 205f9996aaSopenharmony_ciimport json 215f9996aaSopenharmony_ciimport glob 225f9996aaSopenharmony_cisys.path.append( 235f9996aaSopenharmony_ci os.path.dirname(os.path.dirname(os.path.dirname( 245f9996aaSopenharmony_ci os.path.abspath(__file__))))) 255f9996aaSopenharmony_cifrom scripts.util import build_utils # noqa: E402 265f9996aaSopenharmony_ci 275f9996aaSopenharmony_ci 285f9996aaSopenharmony_cidef collect_notice_files(options, dest_dir: str, depfiles: str): 295f9996aaSopenharmony_ci subsystem_info_files = [] 305f9996aaSopenharmony_ci with open(options.install_info_file, 'r') as file: 315f9996aaSopenharmony_ci install_info = json.load(file) 325f9996aaSopenharmony_ci for item in install_info: 335f9996aaSopenharmony_ci subsystem_info_files.append(item['part_info_file']) 345f9996aaSopenharmony_ci depfiles.extend(subsystem_info_files) 355f9996aaSopenharmony_ci 365f9996aaSopenharmony_ci module_info_files = [] 375f9996aaSopenharmony_ci for subsystem_info in subsystem_info_files: 385f9996aaSopenharmony_ci with open(subsystem_info, 'r') as file: 395f9996aaSopenharmony_ci subsystem_info = json.load(file) 405f9996aaSopenharmony_ci for item in subsystem_info: 415f9996aaSopenharmony_ci module_info_files.append(item['module_info_file']) 425f9996aaSopenharmony_ci depfiles.extend(module_info_files) 435f9996aaSopenharmony_ci 445f9996aaSopenharmony_ci for module_info in module_info_files: 455f9996aaSopenharmony_ci with open(module_info, 'r') as file: 465f9996aaSopenharmony_ci module_info = json.load(file) 475f9996aaSopenharmony_ci if 'notice' in module_info and module_info[ 485f9996aaSopenharmony_ci 'type'] != "java_library": 495f9996aaSopenharmony_ci notice_file = module_info['notice'] 505f9996aaSopenharmony_ci if os.path.exists(notice_file) is False or os.stat( 515f9996aaSopenharmony_ci notice_file).st_size == 0: 525f9996aaSopenharmony_ci continue 535f9996aaSopenharmony_ci dest = os.path.join(dest_dir, 545f9996aaSopenharmony_ci "{}.txt".format(module_info['dest'][0])) 555f9996aaSopenharmony_ci os.makedirs(os.path.dirname(dest), exist_ok=True) 565f9996aaSopenharmony_ci shutil.copyfile(module_info['notice'], dest) 575f9996aaSopenharmony_ci depfiles.append(module_info['notice']) 585f9996aaSopenharmony_ci if os.path.isfile("{}.json".format(module_info['notice'])): 595f9996aaSopenharmony_ci os.makedirs(os.path.dirname("{}.json".format(dest)), exist_ok=True) 605f9996aaSopenharmony_ci shutil.copyfile("{}.json".format(module_info['notice']), "{}.json".format(dest)) 615f9996aaSopenharmony_ci 625f9996aaSopenharmony_ci notice_files = build_utils.get_all_files(options.notice_root_dir) 635f9996aaSopenharmony_ci depfiles.extend(notice_files) 645f9996aaSopenharmony_ci for file in notice_files: 655f9996aaSopenharmony_ci dest = os.path.join(dest_dir, 665f9996aaSopenharmony_ci os.path.relpath(file, options.notice_root_dir)) 675f9996aaSopenharmony_ci os.makedirs(os.path.dirname(dest), exist_ok=True) 685f9996aaSopenharmony_ci shutil.copyfile(file, dest) 695f9996aaSopenharmony_ci if os.path.isfile("{}.json".format(file)): 705f9996aaSopenharmony_ci os.makedirs(os.path.dirname("{}.json".format(dest)), exist_ok=True) 715f9996aaSopenharmony_ci shutil.copyfile("{}.json".format(file), "{}.json".format(dest)) 725f9996aaSopenharmony_ci 735f9996aaSopenharmony_ci 745f9996aaSopenharmony_cidef main(): 755f9996aaSopenharmony_ci parser = argparse.ArgumentParser() 765f9996aaSopenharmony_ci parser.add_argument('--install-info-file', required=True) 775f9996aaSopenharmony_ci parser.add_argument('--notice-root-dir', required=True) 785f9996aaSopenharmony_ci parser.add_argument('--output-file', required=True) 795f9996aaSopenharmony_ci parser.add_argument('--depfile', required=False) 805f9996aaSopenharmony_ci args = parser.parse_args() 815f9996aaSopenharmony_ci 825f9996aaSopenharmony_ci depfiles = [args.install_info_file] 835f9996aaSopenharmony_ci with build_utils.temp_dir() as tmp: 845f9996aaSopenharmony_ci collect_notice_files(args, tmp, depfiles) 855f9996aaSopenharmony_ci build_utils.zip_dir(args.output_file, tmp) 865f9996aaSopenharmony_ci 875f9996aaSopenharmony_ci if args.depfile: 885f9996aaSopenharmony_ci build_utils.write_depfile(args.depfile, 895f9996aaSopenharmony_ci args.output_file, 905f9996aaSopenharmony_ci sorted(depfiles), 915f9996aaSopenharmony_ci add_pydeps=False) 925f9996aaSopenharmony_ci return 0 935f9996aaSopenharmony_ci 945f9996aaSopenharmony_ci 955f9996aaSopenharmony_ciif __name__ == '__main__': 965f9996aaSopenharmony_ci sys.exit(main()) 97