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 argparse 175f9996aaSopenharmony_ciimport os 185f9996aaSopenharmony_ciimport sys 195f9996aaSopenharmony_ciimport shutil 205f9996aaSopenharmony_ciimport subprocess 215f9996aaSopenharmony_cisys.path.append( 225f9996aaSopenharmony_ci os.path.dirname( 235f9996aaSopenharmony_ci os.path.dirname(os.path.dirname(os.path.abspath(__file__))))) 245f9996aaSopenharmony_cifrom scripts.util.file_utils import read_json_file, write_json_file 255f9996aaSopenharmony_ci 265f9996aaSopenharmony_ciINTERFACE_PATH = "interface/sdk-js" 275f9996aaSopenharmony_ciOUT_ROOT = "out/sdk-public" 285f9996aaSopenharmony_ciOUTPATH = os.path.join(OUT_ROOT, "public_interface/sdk-js") 295f9996aaSopenharmony_ciAPI_MODIFY_DIR = os.path.join(OUTPATH, "build-tools") 305f9996aaSopenharmony_ciAPI_MODIFY_TOOL = os.path.join(API_MODIFY_DIR, "delete_systemapi_plugin.js") 315f9996aaSopenharmony_ciAPI_PATH = os.path.join(OUTPATH, "api") 325f9996aaSopenharmony_ciAPI_GEN_PATH = os.path.join(OUTPATH, "build-tools/api") 335f9996aaSopenharmony_ciKITS_PATH = os.path.join(OUTPATH, "kits") 345f9996aaSopenharmony_ciKITS_GEN_PATH = os.path.join(OUTPATH, "build-tools/kits") 355f9996aaSopenharmony_ciARKTS_PATH = os.path.join(OUTPATH, "arkts") 365f9996aaSopenharmony_ciARKTS_GEN_PATH = os.path.join(OUTPATH, "build-tools/arkts") 375f9996aaSopenharmony_ciDEL_TARGET = ["//interface/sdk-js:bundle_api"] 385f9996aaSopenharmony_ci 395f9996aaSopenharmony_ci 405f9996aaSopenharmony_cidef copy_sdk_interface(source_root: str): 415f9996aaSopenharmony_ci source = os.path.join(source_root, INTERFACE_PATH) 425f9996aaSopenharmony_ci dest = os.path.join(source_root, OUTPATH) 435f9996aaSopenharmony_ci if os.path.exists(dest): 445f9996aaSopenharmony_ci shutil.rmtree(dest) 455f9996aaSopenharmony_ci shutil.copytree(source, dest) 465f9996aaSopenharmony_ci 475f9996aaSopenharmony_ci 485f9996aaSopenharmony_cidef replace_sdk_api_dir(source_root: str): 495f9996aaSopenharmony_ci dest = os.path.join(source_root, API_PATH) 505f9996aaSopenharmony_ci if os.path.exists: 515f9996aaSopenharmony_ci shutil.rmtree(dest) 525f9996aaSopenharmony_ci source = os.path.join(source_root, API_GEN_PATH) 535f9996aaSopenharmony_ci shutil.copytree(source, dest) 545f9996aaSopenharmony_ci 555f9996aaSopenharmony_ci 565f9996aaSopenharmony_cidef replace_sdk_kits_dir(source_root: str): 575f9996aaSopenharmony_ci dest = os.path.join(source_root, KITS_PATH) 585f9996aaSopenharmony_ci if os.path.exists: 595f9996aaSopenharmony_ci shutil.rmtree(dest) 605f9996aaSopenharmony_ci source = os.path.join(source_root, KITS_GEN_PATH) 615f9996aaSopenharmony_ci shutil.copytree(source, dest) 625f9996aaSopenharmony_ci 635f9996aaSopenharmony_ci 645f9996aaSopenharmony_cidef replace_sdk_arkts_dir(source_root: str): 655f9996aaSopenharmony_ci dest = os.path.join(source_root, ARKTS_PATH) 665f9996aaSopenharmony_ci if os.path.exists: 675f9996aaSopenharmony_ci shutil.rmtree(dest) 685f9996aaSopenharmony_ci source = os.path.join(source_root, ARKTS_GEN_PATH) 695f9996aaSopenharmony_ci shutil.copytree(source, dest) 705f9996aaSopenharmony_ci 715f9996aaSopenharmony_ci 725f9996aaSopenharmony_cidef remove_system_api_method(source_root: str, nodejs: str): 735f9996aaSopenharmony_ci tool = os.path.join(source_root, API_MODIFY_TOOL) 745f9996aaSopenharmony_ci tool = os.path.abspath(tool) 755f9996aaSopenharmony_ci nodejs = os.path.abspath(nodejs) 765f9996aaSopenharmony_ci cmd = "{} {}".format(nodejs, tool) 775f9996aaSopenharmony_ci p = subprocess.Popen(cmd, shell=True, 785f9996aaSopenharmony_ci cwd=os.path.abspath(os.path.join(source_root, API_MODIFY_DIR)), 795f9996aaSopenharmony_ci stdout=subprocess.PIPE) 805f9996aaSopenharmony_ci p.wait() 815f9996aaSopenharmony_ci 825f9996aaSopenharmony_ci 835f9996aaSopenharmony_cidef regenerate_sdk_description_file(source_root: str, sdk_description_file: str, output_pub_sdk_desc_file: str): 845f9996aaSopenharmony_ci info_list = read_json_file(sdk_description_file) 855f9996aaSopenharmony_ci public_info_list = [] 865f9996aaSopenharmony_ci for info in info_list: 875f9996aaSopenharmony_ci label = str(info.get("module_label")) 885f9996aaSopenharmony_ci if label in DEL_TARGET: 895f9996aaSopenharmony_ci continue 905f9996aaSopenharmony_ci if label.startswith("//{}".format(INTERFACE_PATH)): 915f9996aaSopenharmony_ci label = label.replace(INTERFACE_PATH, os.path.join(OUT_ROOT, "public_interface/sdk-js")) 925f9996aaSopenharmony_ci info["module_label"] = label 935f9996aaSopenharmony_ci public_info_list.append(info) 945f9996aaSopenharmony_ci write_json_file(output_pub_sdk_desc_file, public_info_list) 955f9996aaSopenharmony_ci 965f9996aaSopenharmony_ci 975f9996aaSopenharmony_cidef parse_step(sdk_description_file: str, source_root: str, nodejs: str, output_pub_sdk_desc_file: str): 985f9996aaSopenharmony_ci copy_sdk_interface(source_root) 995f9996aaSopenharmony_ci remove_system_api_method(source_root, nodejs) 1005f9996aaSopenharmony_ci replace_sdk_api_dir(source_root) 1015f9996aaSopenharmony_ci replace_sdk_kits_dir(source_root) 1025f9996aaSopenharmony_ci replace_sdk_arkts_dir(source_root) 1035f9996aaSopenharmony_ci regenerate_sdk_description_file(source_root, sdk_description_file, output_pub_sdk_desc_file) 1045f9996aaSopenharmony_ci 1055f9996aaSopenharmony_ci 1065f9996aaSopenharmony_cidef main(): 1075f9996aaSopenharmony_ci parser = argparse.ArgumentParser() 1085f9996aaSopenharmony_ci parser.add_argument('--sdk-description-file', required=True) 1095f9996aaSopenharmony_ci parser.add_argument('--root-build-dir', required=True) 1105f9996aaSopenharmony_ci parser.add_argument('--node-js', required=True) 1115f9996aaSopenharmony_ci parser.add_argument('--output-pub-sdk-desc-file', required=True) 1125f9996aaSopenharmony_ci 1135f9996aaSopenharmony_ci options = parser.parse_args() 1145f9996aaSopenharmony_ci parse_step(options.sdk_description_file, options.root_build_dir, 1155f9996aaSopenharmony_ci options.node_js, options.output_pub_sdk_desc_file) 1165f9996aaSopenharmony_ci 1175f9996aaSopenharmony_ci 1185f9996aaSopenharmony_ciif __name__ == '__main__': 1195f9996aaSopenharmony_ci sys.exit(main()) 120