1## @file 2# process Version section generation 3# 4# Copyright (c) 2007 - 2015, Intel Corporation. All rights reserved.<BR> 5# 6# This program and the accompanying materials 7# are licensed and made available under the terms and conditions of the BSD License 8# which accompanies this distribution. The full text of the license may be found at 9# http://opensource.org/licenses/bsd-license.php 10# 11# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 12# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 13# 14 15## 16# Import Modules 17# 18from Ffs import Ffs 19import Section 20import Common.LongFilePathOs as os 21import subprocess 22from GenFdsGlobalVariable import GenFdsGlobalVariable 23from CommonDataClass.FdfClass import VerSectionClassObject 24from Common.LongFilePathSupport import OpenLongFilePath as open 25 26## generate version section 27# 28# 29class VerSection (VerSectionClassObject): 30 31 ## The constructor 32 # 33 # @param self The object pointer 34 # 35 def __init__(self): 36 VerSectionClassObject.__init__(self) 37 38 ## GenSection() method 39 # 40 # Generate version section 41 # 42 # @param self The object pointer 43 # @param OutputPath Where to place output file 44 # @param ModuleName Which module this section belongs to 45 # @param SecNum Index of section 46 # @param KeyStringList Filter for inputs of section generation 47 # @param FfsInf FfsInfStatement object that contains this section data 48 # @param Dict dictionary contains macro and its value 49 # @retval tuple (Generated file name, section alignment) 50 # 51 def GenSection(self, OutputPath, ModuleName, SecNum, KeyStringList, FfsInf=None, Dict={}): 52 # 53 # Prepare the parameter of GenSection 54 # 55 if FfsInf != None: 56 self.Alignment = FfsInf.__ExtendMacro__(self.Alignment) 57 self.BuildNum = FfsInf.__ExtendMacro__(self.BuildNum) 58 self.StringData = FfsInf.__ExtendMacro__(self.StringData) 59 self.FileName = FfsInf.__ExtendMacro__(self.FileName) 60 61 OutputFile = os.path.join(OutputPath, 62 ModuleName + 'SEC' + SecNum + Ffs.SectionSuffix.get('VERSION')) 63 OutputFile = os.path.normpath(OutputFile) 64 65 # Get String Data 66 StringData = '' 67 if self.StringData != None: 68 StringData = self.StringData 69 elif self.FileName != None: 70 FileNameStr = GenFdsGlobalVariable.ReplaceWorkspaceMacro(self.FileName) 71 FileNameStr = GenFdsGlobalVariable.MacroExtend(FileNameStr, Dict) 72 FileObj = open(FileNameStr, 'r') 73 StringData = FileObj.read() 74 StringData = '"' + StringData + '"' 75 FileObj.close() 76 else: 77 StringData = '' 78 79 GenFdsGlobalVariable.GenerateSection(OutputFile, [], 'EFI_SECTION_VERSION', 80 Ver=StringData, BuildNumber=self.BuildNum) 81 OutputFileList = [] 82 OutputFileList.append(OutputFile) 83 return OutputFileList, self.Alignment 84