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