153aa9179Sopenharmony_ci#!/usr/bin/env python 253aa9179Sopenharmony_ci# -*- coding: utf-8 -*- 353aa9179Sopenharmony_ci 453aa9179Sopenharmony_ci# 553aa9179Sopenharmony_ci# Copyright (c) 2022 Huawei Device Co., Ltd. 653aa9179Sopenharmony_ci# Licensed under the Apache License, Version 2.0 (the "License"); 753aa9179Sopenharmony_ci# you may not use this file except in compliance with the License. 853aa9179Sopenharmony_ci# You may obtain a copy of the License at 953aa9179Sopenharmony_ci# 1053aa9179Sopenharmony_ci# http://www.apache.org/licenses/LICENSE-2.0 1153aa9179Sopenharmony_ci# 1253aa9179Sopenharmony_ci# Unless required by applicable law or agreed to in writing, software 1353aa9179Sopenharmony_ci# distributed under the License is distributed on an "AS IS" BASIS, 1453aa9179Sopenharmony_ci# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1553aa9179Sopenharmony_ci# See the License for the specific language governing permissions and 1653aa9179Sopenharmony_ci# limitations under the License. 1753aa9179Sopenharmony_ci# 1853aa9179Sopenharmony_ci 1953aa9179Sopenharmony_ciimport argparse 2053aa9179Sopenharmony_ciimport json 2153aa9179Sopenharmony_ciimport os 2253aa9179Sopenharmony_ciimport re 2353aa9179Sopenharmony_ci 2453aa9179Sopenharmony_ci 2553aa9179Sopenharmony_ciclass ConfigHeader: 2653aa9179Sopenharmony_ci 2753aa9179Sopenharmony_ci def __init__(self, config_json_path): 2853aa9179Sopenharmony_ci self.read_buffer = [] 2953aa9179Sopenharmony_ci self.write_buffer = [] 3053aa9179Sopenharmony_ci with os.fdopen(os.open(config_json_path, os.O_RDONLY, 0o755), 'r') as file: 3153aa9179Sopenharmony_ci self.configs = json.load(file) 3253aa9179Sopenharmony_ci 3353aa9179Sopenharmony_ci def parse_file(self, file_path): 3453aa9179Sopenharmony_ci with os.fdopen(os.open(file_path, os.O_RDONLY, 0o755), 'r') as file: 3553aa9179Sopenharmony_ci self.read_buffer = file.readlines() 3653aa9179Sopenharmony_ci for item in self.read_buffer: 3753aa9179Sopenharmony_ci if not item.startswith("#cmakedefine") and not item.startswith("#define"): 3853aa9179Sopenharmony_ci self.write_buffer.append(item) 3953aa9179Sopenharmony_ci continue 4053aa9179Sopenharmony_ci 4153aa9179Sopenharmony_ci value = item 4253aa9179Sopenharmony_ci if item.startswith("#cmakedefine"): 4353aa9179Sopenharmony_ci value = item.replace("#cmakedefine", "#define") 4453aa9179Sopenharmony_ci match_object = re.search(r' \w+ ', value) 4553aa9179Sopenharmony_ci if match_object is None: 4653aa9179Sopenharmony_ci self.write_buffer.append("/* " + item + " */") 4753aa9179Sopenharmony_ci continue 4853aa9179Sopenharmony_ci key = match_object.group() 4953aa9179Sopenharmony_ci key_index = key.replace(" ", "") 5053aa9179Sopenharmony_ci if key_index not in self.configs: 5153aa9179Sopenharmony_ci self.write_buffer.append("/* " + item + " */") 5253aa9179Sopenharmony_ci continue 5353aa9179Sopenharmony_ci 5453aa9179Sopenharmony_ci match_object = re.search(r'@\w+@', value) 5553aa9179Sopenharmony_ci if match_object is None: 5653aa9179Sopenharmony_ci self.write_buffer.append(value) 5753aa9179Sopenharmony_ci continue 5853aa9179Sopenharmony_ci key = match_object.group() 5953aa9179Sopenharmony_ci key_index = key.replace("@", "") 6053aa9179Sopenharmony_ci if key_index not in self.configs: 6153aa9179Sopenharmony_ci self.write_buffer.append("/* " + item + " */") 6253aa9179Sopenharmony_ci continue 6353aa9179Sopenharmony_ci value = value.replace(key, self.configs[key_index]) 6453aa9179Sopenharmony_ci self.write_buffer.append(value) 6553aa9179Sopenharmony_ci 6653aa9179Sopenharmony_ci def write_file(self, file_path): 6753aa9179Sopenharmony_ci with os.fdopen(os.open(file_path, os.O_WRONLY | os.O_CREAT, 0o755), 'w') as file: 6853aa9179Sopenharmony_ci file.writelines(self.write_buffer) 6953aa9179Sopenharmony_ci 7053aa9179Sopenharmony_ci 7153aa9179Sopenharmony_ciclass XmlVersionHeader: 7253aa9179Sopenharmony_ci 7353aa9179Sopenharmony_ci def __init__(self, xmlversion_json_path): 7453aa9179Sopenharmony_ci self.read_buffer = [] 7553aa9179Sopenharmony_ci self.write_buffer = [] 7653aa9179Sopenharmony_ci with os.fdopen(os.open(xmlversion_json_path, os.O_RDONLY, 0o755), 'r') as file: 7753aa9179Sopenharmony_ci self.configs = json.load(file) 7853aa9179Sopenharmony_ci 7953aa9179Sopenharmony_ci def parse_file(self, file_path): 8053aa9179Sopenharmony_ci with os.fdopen(os.open(file_path, os.O_RDONLY, 0o755), 'r') as file: 8153aa9179Sopenharmony_ci self.read_buffer = file.readlines() 8253aa9179Sopenharmony_ci for item in self.read_buffer: 8353aa9179Sopenharmony_ci if not item.startswith("#if") and not item.startswith("#define"): 8453aa9179Sopenharmony_ci self.write_buffer.append(item) 8553aa9179Sopenharmony_ci continue 8653aa9179Sopenharmony_ci 8753aa9179Sopenharmony_ci match_object = re.search(r'@\w+@', item) 8853aa9179Sopenharmony_ci if match_object is None: 8953aa9179Sopenharmony_ci self.write_buffer.append(item) 9053aa9179Sopenharmony_ci continue 9153aa9179Sopenharmony_ci key = match_object.group() 9253aa9179Sopenharmony_ci index_key = key.replace("@", "") 9353aa9179Sopenharmony_ci value = "" 9453aa9179Sopenharmony_ci if index_key in self.configs: 9553aa9179Sopenharmony_ci value = item.replace(key, self.configs[index_key]) 9653aa9179Sopenharmony_ci else: 9753aa9179Sopenharmony_ci value = item.replace(key, "0") 9853aa9179Sopenharmony_ci self.write_buffer.append(value) 9953aa9179Sopenharmony_ci 10053aa9179Sopenharmony_ci def write_file(self, file_path): 10153aa9179Sopenharmony_ci with os.fdopen(os.open(file_path, os.O_WRONLY | os.O_CREAT, 0o755), 'w') as file: 10253aa9179Sopenharmony_ci file.writelines(self.write_buffer) 10353aa9179Sopenharmony_ci 10453aa9179Sopenharmony_ciif __name__ == "__main__": 10553aa9179Sopenharmony_ci parser = argparse.ArgumentParser() 10653aa9179Sopenharmony_ci parser.add_argument('--config-input-path', help='input path to config.h') 10753aa9179Sopenharmony_ci parser.add_argument('--config-path', help='output path to config.h') 10853aa9179Sopenharmony_ci parser.add_argument('--xmlversion-input-path', help='input path to xmlversion.h') 10953aa9179Sopenharmony_ci parser.add_argument('--xmlversion-path', help='output path to xmlversion.h') 11053aa9179Sopenharmony_ci parser.add_argument('--config-json', help='config value for config.h') 11153aa9179Sopenharmony_ci parser.add_argument('--xmlversion-json', help='config value for xmlversion.h') 11253aa9179Sopenharmony_ci options = parser.parse_args() 11353aa9179Sopenharmony_ci config_header = ConfigHeader(options.config_json) 11453aa9179Sopenharmony_ci config_header.parse_file(options.config_input_path) 11553aa9179Sopenharmony_ci config_header.write_file(options.config_path) 11653aa9179Sopenharmony_ci 11753aa9179Sopenharmony_ci xmlversion_header = XmlVersionHeader(options.xmlversion_json) 11853aa9179Sopenharmony_ci xmlversion_header.parse_file(options.xmlversion_input_path) 11953aa9179Sopenharmony_ci xmlversion_header.write_file(options.xmlversion_path) 120