1#!/usr/bin/env python 2# -*- coding: utf-8 -*- 3 4# Copyright (c) 2020-2021 Huawei Device Co., Ltd. 5# 6# HDF is dual licensed: you can use it either under the terms of 7# the GPL, or the BSD license, at your option. 8# See the LICENSE file in the root of this repository for complete details. 9 10 11import os 12import re 13 14import hdf_utils 15from hdf_tool_exception import HdfToolException 16from .hdf_command_error_code import CommandErrorCode 17 18 19class HdfLiteSettingsMkFile(object): 20 def __init__(self, root_dir): 21 self.root_dir = root_dir 22 self.file_path = hdf_utils.get_hdf_lite_settings_mk_path(root_dir) 23 if os.path.exists(self.file_path): 24 self.lines = hdf_utils.read_file_lines(self.file_path) 25 else: 26 dir_path = os.path.dirname(self.file_path) 27 if not os.path.exists(dir_path): 28 os.makedirs(dir_path) 29 self.lines = [] 30 self.line_pattern = r'(%s\s*:=\s*)(.*)' 31 self.hdf_vendor_var_name = 'HDF_COMPILE_VENDOR' 32 self.board_vendor_path_var_name = 'HDF_SET_BOARD_VENDOR_PATH' 33 34 def _save(self): 35 if self.lines: 36 hdf_utils.write_file(self.file_path, ''.join(self.lines)) 37 38 def _append(self, new_line): 39 self.lines.append(new_line) 40 self._save() 41 42 def _find_var_line(self, var_name): 43 for index, line in enumerate(self.lines): 44 if var_name in line: 45 return index, line 46 return 0, '' 47 48 def _is_vendor_valid(self, vendor_name): 49 vendor_hdf_path = \ 50 hdf_utils.get_vendor_hdf_dir(self.root_dir, vendor_name) 51 if os.path.exists(vendor_hdf_path): 52 return True 53 return False 54 55 def _set_var_value(self, var_name, var_value): 56 idx, var_line = self._find_var_line(var_name) 57 if var_line: 58 self.lines[idx] = re.sub(self.line_pattern % var_name, 59 r'\g<1>%s' % var_value, var_line) 60 self._save() 61 else: 62 new_line = '\n%s := %s' % (var_name, var_value) 63 self._append(new_line) 64 65 def _get_var_value(self, var_name): 66 idx, var_line = self._find_var_line(var_name) 67 var_value = '' 68 if var_line: 69 match_obj = re.search(self.line_pattern % var_name, var_line) 70 if match_obj: 71 var_value = match_obj.group(2) 72 return var_value.strip() 73 74 def set_vendor(self, vendor_name): 75 if not self._is_vendor_valid(vendor_name): 76 raise HdfToolException('vendor: "%s" not exist' % vendor_name, 77 CommandErrorCode.TARGET_NOT_EXIST) 78 self._set_var_value(self.hdf_vendor_var_name, vendor_name) 79 80 def get_vendor(self): 81 vendor_name = self._get_var_value(self.hdf_vendor_var_name) 82 if self._is_vendor_valid(vendor_name): 83 return vendor_name 84 return '' 85 86 def set_board_vendor_path(self, board_vendor_path): 87 self._set_var_value(self.board_vendor_path_var_name, board_vendor_path) 88