10826e83eSopenharmony_ci#!/usr/bin/env python
20826e83eSopenharmony_ci# -*- coding: utf-8 -*-
30826e83eSopenharmony_ci# Copyright (c) 2021 Huawei Device Co., Ltd.
40826e83eSopenharmony_ci# Licensed under the Apache License, Version 2.0 (the "License");
50826e83eSopenharmony_ci# you may not use this file except in compliance with the License.
60826e83eSopenharmony_ci# You may obtain a copy of the License at
70826e83eSopenharmony_ci#
80826e83eSopenharmony_ci#     http://www.apache.org/licenses/LICENSE-2.0
90826e83eSopenharmony_ci#
100826e83eSopenharmony_ci# Unless required by applicable law or agreed to in writing, software
110826e83eSopenharmony_ci# distributed under the License is distributed on an "AS IS" BASIS,
120826e83eSopenharmony_ci# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
130826e83eSopenharmony_ci# See the License for the specific language governing permissions and
140826e83eSopenharmony_ci# limitations under the License.
150826e83eSopenharmony_ci
160826e83eSopenharmony_ciimport sys
170826e83eSopenharmony_ciimport os
180826e83eSopenharmony_ciimport argparse
190826e83eSopenharmony_ciimport shutil
200826e83eSopenharmony_ci
210826e83eSopenharmony_ciWORK_SPACE = os.path.dirname(os.path.abspath(__file__))
220826e83eSopenharmony_ciPROJECT_DIR = os.path.dirname(os.path.dirname(os.path.dirname(WORK_SPACE)))
230826e83eSopenharmony_ci
240826e83eSopenharmony_cisys.path.append(os.path.join(PROJECT_DIR, 'build'))
250826e83eSopenharmony_cisys.path.append(os.path.join(PROJECT_DIR, 'build/hb'))
260826e83eSopenharmony_cifrom hb.util import log_util  # noqa: E402
270826e83eSopenharmony_cifrom scripts.util import file_utils  # noqa: E402
280826e83eSopenharmony_cifrom scripts.util import build_utils  # noqa: E402
290826e83eSopenharmony_ci
300826e83eSopenharmony_ciINTERFACE_DIR = os.path.join(WORK_SPACE, 'ohos_interface')
310826e83eSopenharmony_ciINTERFACE_INCLUDE_DIR = os.path.join(INTERFACE_DIR, 'include')
320826e83eSopenharmony_ciINTERFACE_OHOS_GLUE_DIR = os.path.join(INTERFACE_DIR, 'ohos_glue')
330826e83eSopenharmony_ci
340826e83eSopenharmony_cidef copy_dir(src_dir: str, dst_dir: str):
350826e83eSopenharmony_ci    log_util.LogUtil.hb_info("begin to copy dir from '{}' to '{}'".format(src_dir, dst_dir))
360826e83eSopenharmony_ci    if os.path.isdir(dst_dir):
370826e83eSopenharmony_ci        shutil.rmtree(dst_dir)
380826e83eSopenharmony_ci
390826e83eSopenharmony_ci    if os.path.isdir(src_dir) and os.listdir(src_dir):
400826e83eSopenharmony_ci        shutil.copytree(src_dir, dst_dir)
410826e83eSopenharmony_ci
420826e83eSopenharmony_ci    source_files = []
430826e83eSopenharmony_ci    for root, dirs, files in os.walk(src_dir):
440826e83eSopenharmony_ci        for name in files:
450826e83eSopenharmony_ci            source_files.append(os.path.join(root, name))
460826e83eSopenharmony_ci    return source_files
470826e83eSopenharmony_ci
480826e83eSopenharmony_cidef copy_files(src_dir: str, dst_dir: str):
490826e83eSopenharmony_ci    log_util.LogUtil.hb_info("begin to copy files from '{}' to '{}'".format(src_dir, dst_dir))
500826e83eSopenharmony_ci    source_files = []
510826e83eSopenharmony_ci    for item in os.listdir(src_dir):
520826e83eSopenharmony_ci        src_file = os.path.join(src_dir, item)
530826e83eSopenharmony_ci        dst_file = os.path.join(dst_dir, item)
540826e83eSopenharmony_ci        if os.path.isfile(src_file):
550826e83eSopenharmony_ci            source_files.append(src_file)
560826e83eSopenharmony_ci            shutil.copy2(src_file, dst_file)
570826e83eSopenharmony_ci    return source_files
580826e83eSopenharmony_ci
590826e83eSopenharmony_cidef copy_include():
600826e83eSopenharmony_ci    log_util.LogUtil.hb_info("begin to copy include dir")
610826e83eSopenharmony_ci    nweb_include = os.path.join('ohos_nweb', 'include')
620826e83eSopenharmony_ci    include_source_files = copy_files(os.path.join(INTERFACE_INCLUDE_DIR, 'ohos_nweb'),
630826e83eSopenharmony_ci            os.path.join(WORK_SPACE, nweb_include))
640826e83eSopenharmony_ci
650826e83eSopenharmony_ci    adapter_include = os.path.join('ohos_adapter', 'interfaces')
660826e83eSopenharmony_ci    include_source_files += copy_dir(os.path.join(INTERFACE_INCLUDE_DIR, 'ohos_adapter'),
670826e83eSopenharmony_ci            os.path.join(WORK_SPACE, adapter_include))
680826e83eSopenharmony_ci    return include_source_files
690826e83eSopenharmony_ci
700826e83eSopenharmony_cidef copy_glue_base(glue_dir: str):
710826e83eSopenharmony_ci    log_util.LogUtil.hb_info("begin to copy glue base dir")
720826e83eSopenharmony_ci    base_dir = os.path.join(glue_dir, 'base')
730826e83eSopenharmony_ci    base_source_files = copy_dir(os.path.join(INTERFACE_OHOS_GLUE_DIR, 'base'), base_dir)
740826e83eSopenharmony_ci
750826e83eSopenharmony_ci    script_dir = os.path.join(glue_dir, 'scripts')
760826e83eSopenharmony_ci    base_source_files += copy_dir(os.path.join(INTERFACE_OHOS_GLUE_DIR, 'scripts'), script_dir)
770826e83eSopenharmony_ci    return base_source_files
780826e83eSopenharmony_ci
790826e83eSopenharmony_cidef copy_glue_module(glue_dir: str, module_name: str):
800826e83eSopenharmony_ci    dir_name = 'ohos_' + module_name;
810826e83eSopenharmony_ci    log_util.LogUtil.hb_info("begin to copy glue '{}' dir".format(dir_name))
820826e83eSopenharmony_ci    dst_dir = os.path.join(glue_dir, dir_name)
830826e83eSopenharmony_ci    if os.path.isdir(dst_dir):
840826e83eSopenharmony_ci        shutil.rmtree(dst_dir)
850826e83eSopenharmony_ci
860826e83eSopenharmony_ci    src_dir = os.path.join(INTERFACE_OHOS_GLUE_DIR, dir_name)
870826e83eSopenharmony_ci    module_source_files = copy_dir(os.path.join(src_dir, 'include'), os.path.join(dst_dir, 'include'))
880826e83eSopenharmony_ci    module_source_files += copy_dir(os.path.join(os.path.join(src_dir, 'bridge'), 'webview'),
890826e83eSopenharmony_ci            os.path.join(dst_dir, 'bridge'))
900826e83eSopenharmony_ci    module_source_files += copy_dir(os.path.join(os.path.join(src_dir, 'cpptoc'), 'webview'),
910826e83eSopenharmony_ci            os.path.join(dst_dir, 'cpptoc'))
920826e83eSopenharmony_ci    module_source_files += copy_dir(os.path.join(os.path.join(src_dir, 'ctocpp'), 'webview'),
930826e83eSopenharmony_ci            os.path.join(dst_dir, 'ctocpp'))
940826e83eSopenharmony_ci    return module_source_files
950826e83eSopenharmony_ci
960826e83eSopenharmony_cidef main():
970826e83eSopenharmony_ci    parser = argparse.ArgumentParser()
980826e83eSopenharmony_ci    parser.add_argument('--command-type', required=True)
990826e83eSopenharmony_ci    parser.add_argument('--ohos-glue-dir', required=True)
1000826e83eSopenharmony_ci    parser.add_argument('--outfile', required=True)
1010826e83eSopenharmony_ci    parser.add_argument('--depfile', required=False)
1020826e83eSopenharmony_ci    args = parser.parse_args()
1030826e83eSopenharmony_ci
1040826e83eSopenharmony_ci    if args.command_type == "include":
1050826e83eSopenharmony_ci        source_file_list = copy_include()
1060826e83eSopenharmony_ci    elif args.command_type == "base":
1070826e83eSopenharmony_ci        source_file_list = copy_glue_base(args.ohos_glue_dir)
1080826e83eSopenharmony_ci    else:
1090826e83eSopenharmony_ci        source_file_list = copy_glue_module(args.ohos_glue_dir, args.command_type)
1100826e83eSopenharmony_ci
1110826e83eSopenharmony_ci    file_utils.write_file(args.outfile, '\n'.join(source_file_list))
1120826e83eSopenharmony_ci
1130826e83eSopenharmony_ci    if args.depfile:
1140826e83eSopenharmony_ci        _dep_files = []
1150826e83eSopenharmony_ci        _dep_files.extend(source_file_list)
1160826e83eSopenharmony_ci        _dep_files.sort()
1170826e83eSopenharmony_ci        build_utils.write_depfile(args.depfile,
1180826e83eSopenharmony_ci                                  args.outfile,
1190826e83eSopenharmony_ci                                  _dep_files,
1200826e83eSopenharmony_ci                                  add_pydeps=False)
1210826e83eSopenharmony_ci
1220826e83eSopenharmony_ciif __name__ == '__main__':
1230826e83eSopenharmony_ci    sys.exit(main())
1240826e83eSopenharmony_ci
125