1f6603c60Sopenharmony_ci#!/usr/bin/env python
2f6603c60Sopenharmony_ci# -*- coding: utf-8 -*-
3f6603c60Sopenharmony_ci"""
4f6603c60Sopenharmony_ciCopyright (c) 2020-2021 Huawei Device Co., Ltd.
5f6603c60Sopenharmony_ciLicensed under the Apache License, Version 2.0 (the "License");
6f6603c60Sopenharmony_ciyou may not use this file except in compliance with the License.
7f6603c60Sopenharmony_ciYou may obtain a copy of the License at
8f6603c60Sopenharmony_ci
9f6603c60Sopenharmony_ci  http://www.apache.org/licenses/LICENSE-2.0
10f6603c60Sopenharmony_ci
11f6603c60Sopenharmony_ciUnless required by applicable law or agreed to in writing, software
12f6603c60Sopenharmony_cidistributed under the License is distributed on an "AS IS" BASIS,
13f6603c60Sopenharmony_ciWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14f6603c60Sopenharmony_ciSee the License for the specific language governing permissions and
15f6603c60Sopenharmony_cilimitations under the License.
16f6603c60Sopenharmony_ci"""
17f6603c60Sopenharmony_ci
18f6603c60Sopenharmony_ciimport os
19f6603c60Sopenharmony_ciimport sys
20f6603c60Sopenharmony_ciimport subprocess
21f6603c60Sopenharmony_ciimport hashlib
22f6603c60Sopenharmony_ciimport json5
23f6603c60Sopenharmony_ci
24f6603c60Sopenharmony_ci
25f6603c60Sopenharmony_cidef get_file_md5(file_path):
26f6603c60Sopenharmony_ci    hash_md5 = hashlib.md5()
27f6603c60Sopenharmony_ci    with open(file_path, "rb") as f:
28f6603c60Sopenharmony_ci        for chunk in iter(lambda: f.read(4096), b""):
29f6603c60Sopenharmony_ci            hash_md5.update(chunk)
30f6603c60Sopenharmony_ci    return hash_md5.hexdigest()
31f6603c60Sopenharmony_ci
32f6603c60Sopenharmony_ci
33f6603c60Sopenharmony_cidef get_hvigor_version(json_file):
34f6603c60Sopenharmony_ci    with open(json_file, 'r') as f:
35f6603c60Sopenharmony_ci        data = json5.load(f)
36f6603c60Sopenharmony_ci        return data.get('hvigorVersion')
37f6603c60Sopenharmony_ci    return "0.0.0"
38f6603c60Sopenharmony_ci
39f6603c60Sopenharmony_ci
40f6603c60Sopenharmony_cidef output_unmatched_project(prject_list, filename):
41f6603c60Sopenharmony_ci    print("")
42f6603c60Sopenharmony_ci    print(
43f6603c60Sopenharmony_ci        "Error: The {} in the following directory does not meet the requirements:"
44f6603c60Sopenharmony_ci        .format(filename))
45f6603c60Sopenharmony_ci    for prj in prject_list:
46f6603c60Sopenharmony_ci        print(prj[0], prj[1])
47f6603c60Sopenharmony_ci    print("")
48f6603c60Sopenharmony_ci
49f6603c60Sopenharmony_ci
50f6603c60Sopenharmony_cidef check_hvigor_wrapper_js(acts_root_dir, hvigor_prj_list):
51f6603c60Sopenharmony_ci    unmatch_info = []
52f6603c60Sopenharmony_ci    baseline_file = os.path.join(acts_root_dir, 'arkcompiler/ecmanewfeatures/hvigor/hvigor-wrapper.js')
53f6603c60Sopenharmony_ci    baseline_md5 = get_file_md5(os.path.join(baseline_file))
54f6603c60Sopenharmony_ci    for dir in hvigor_prj_list:
55f6603c60Sopenharmony_ci        filename = os.path.join(dir, 'hvigor', 'hvigor-wrapper.js')
56f6603c60Sopenharmony_ci        md5 = get_file_md5(filename)
57f6603c60Sopenharmony_ci        if md5 != baseline_md5:
58f6603c60Sopenharmony_ci            unmatch_info.append((md5, filename))
59f6603c60Sopenharmony_ci
60f6603c60Sopenharmony_ci    if len(unmatch_info):
61f6603c60Sopenharmony_ci        output_unmatched_project(unmatch_info, 'hvigor-wrapper.js')
62f6603c60Sopenharmony_ci        print('Please copy from {}'.format(baseline_file))
63f6603c60Sopenharmony_ci        return False
64f6603c60Sopenharmony_ci    return True
65f6603c60Sopenharmony_ci
66f6603c60Sopenharmony_cidef check_hvigor_version(hvigor_prj_list):
67f6603c60Sopenharmony_ci    unmatch_prj_list = []
68f6603c60Sopenharmony_ci    baseline_version = '4.0.5'
69f6603c60Sopenharmony_ci    for dir in hvigor_prj_list:
70f6603c60Sopenharmony_ci        filename = os.path.join(dir, 'hvigor', 'hvigor-config.json5')
71f6603c60Sopenharmony_ci        version = get_hvigor_version(filename)
72f6603c60Sopenharmony_ci        if version != baseline_version:
73f6603c60Sopenharmony_ci            unmatch_prj_list.append((version, filename))
74f6603c60Sopenharmony_ci
75f6603c60Sopenharmony_ci    if len(unmatch_prj_list):
76f6603c60Sopenharmony_ci        output_unmatched_project(unmatch_prj_list, 'hvigor-config.json5')
77f6603c60Sopenharmony_ci        print("Plesse use {}".format(baseline_version))
78f6603c60Sopenharmony_ci        return False
79f6603c60Sopenharmony_ci    return True
80f6603c60Sopenharmony_ci
81f6603c60Sopenharmony_cidef check_hvigorw_bat(acts_root_dir, hvigor_prj_list):
82f6603c60Sopenharmony_ci    unmatch_info = []
83f6603c60Sopenharmony_ci    baseline_file = os.path.join(acts_root_dir, 'arkcompiler/ecmanewfeatures/hvigorw.bat')
84f6603c60Sopenharmony_ci    baseline_md5 = get_file_md5(os.path.join(baseline_file))
85f6603c60Sopenharmony_ci    for dir in hvigor_prj_list:
86f6603c60Sopenharmony_ci        filename = os.path.join(dir, 'hvigorw.bat')
87f6603c60Sopenharmony_ci        md5 = get_file_md5(filename)
88f6603c60Sopenharmony_ci        if md5 != baseline_md5:
89f6603c60Sopenharmony_ci            unmatch_info.append((md5, filename))
90f6603c60Sopenharmony_ci
91f6603c60Sopenharmony_ci    if len(unmatch_info):
92f6603c60Sopenharmony_ci        output_unmatched_project(unmatch_info, 'hvigorw.bat')
93f6603c60Sopenharmony_ci        print('Please copy from {}'.format(baseline_file))
94f6603c60Sopenharmony_ci        return False
95f6603c60Sopenharmony_ci    return True
96f6603c60Sopenharmony_ci
97f6603c60Sopenharmony_ci
98f6603c60Sopenharmony_cidef get_hvigor_prject_list(directory):
99f6603c60Sopenharmony_ci    hvigor_prj_list = []
100f6603c60Sopenharmony_ci    for root, dirs, files in os.walk(directory):
101f6603c60Sopenharmony_ci        for dir in dirs:
102f6603c60Sopenharmony_ci            if dir == 'hvigor':
103f6603c60Sopenharmony_ci                hvigor_prj_list.append(root)
104f6603c60Sopenharmony_ci    return hvigor_prj_list
105f6603c60Sopenharmony_ci
106f6603c60Sopenharmony_ci
107f6603c60Sopenharmony_ciif __name__ == "__main__":
108f6603c60Sopenharmony_ci    this_file = os.path.realpath(__file__)
109f6603c60Sopenharmony_ci    acts_root_dir = os.path.dirname(this_file)
110f6603c60Sopenharmony_ci    hvigor_prj_list = get_hvigor_prject_list(acts_root_dir)
111f6603c60Sopenharmony_ci
112f6603c60Sopenharmony_ci    js_valid = check_hvigor_wrapper_js(acts_root_dir, hvigor_prj_list)
113f6603c60Sopenharmony_ci    json_valid = check_hvigor_version(hvigor_prj_list)
114f6603c60Sopenharmony_ci    bat_valid = check_hvigorw_bat(acts_root_dir, hvigor_prj_list)
115f6603c60Sopenharmony_ci
116f6603c60Sopenharmony_ci    if not js_valid or not json_valid or not bat_valid:
117f6603c60Sopenharmony_ci        sys.exit(1)
118f6603c60Sopenharmony_ci
119f6603c60Sopenharmony_ci    sys.exit(0)