2009-07-17 11:10:31 +02:00
|
|
|
## @file
|
|
|
|
# process Version section generation
|
|
|
|
#
|
BaseTools/GenFds: Fix 'NoneType' object is not iterable error.
When adding section VERSION in FDF file, for example:
FILE FREEFORM = PCD(gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdLogoFile) {
SECTION RAW = MdeModulePkg/Logo/Logo.bmp
SECTION UI = "Logo"
SECTION VERSION = "0001"
}
GenFds will report the following error:
Traceback (most recent call last):
File "GenFds.py", line 276, in main
File "GenFds.py", line 391, in GenFd
File "Fd.py", line 93, in GenFd
File "Region.py", line 106, in AddToBuffer
File "Fv.py", line 114, in AddToBuffer
File "FfsFileStatement.py", line 117, in GenFfs
File "VerSection.py", line 80, in GenSection
File "GenFdsGlobalVariable.py", line 401, in GenerateSection
TypeError: 'NoneType' object is not iterable.
We found in GenFdsGlobalVariable.py line 401 'list' requires a iteralbe object as parameter while the 'Input' is None.
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Qiu Shumin <shumin.qiu@intel.com>
Reviewed-by: Yingke Liu <yingke.d.liu@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18205 6f19259b-4bc3-4df7-8a09-765794883524
2015-08-12 03:27:31 +02:00
|
|
|
# Copyright (c) 2007 - 2015, Intel Corporation. All rights reserved.<BR>
|
2009-07-17 11:10:31 +02:00
|
|
|
#
|
2010-05-18 07:04:32 +02:00
|
|
|
# This program and the accompanying materials
|
2009-07-17 11:10:31 +02:00
|
|
|
# are licensed and made available under the terms and conditions of the BSD License
|
|
|
|
# which accompanies this distribution. The full text of the license may be found at
|
|
|
|
# http://opensource.org/licenses/bsd-license.php
|
|
|
|
#
|
|
|
|
# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
|
|
|
# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|
|
|
#
|
|
|
|
|
|
|
|
##
|
|
|
|
# Import Modules
|
|
|
|
#
|
|
|
|
from Ffs import Ffs
|
|
|
|
import Section
|
2014-08-15 05:06:48 +02:00
|
|
|
import Common.LongFilePathOs as os
|
2009-07-17 11:10:31 +02:00
|
|
|
import subprocess
|
|
|
|
from GenFdsGlobalVariable import GenFdsGlobalVariable
|
|
|
|
from CommonDataClass.FdfClass import VerSectionClassObject
|
2014-08-15 05:06:48 +02:00
|
|
|
from Common.LongFilePathSupport import OpenLongFilePath as open
|
2009-07-17 11:10:31 +02:00
|
|
|
|
|
|
|
## generate version section
|
|
|
|
#
|
|
|
|
#
|
|
|
|
class VerSection (VerSectionClassObject):
|
|
|
|
|
|
|
|
## The constructor
|
|
|
|
#
|
|
|
|
# @param self The object pointer
|
|
|
|
#
|
|
|
|
def __init__(self):
|
|
|
|
VerSectionClassObject.__init__(self)
|
|
|
|
|
|
|
|
## GenSection() method
|
|
|
|
#
|
|
|
|
# Generate version section
|
|
|
|
#
|
|
|
|
# @param self The object pointer
|
|
|
|
# @param OutputPath Where to place output file
|
|
|
|
# @param ModuleName Which module this section belongs to
|
|
|
|
# @param SecNum Index of section
|
|
|
|
# @param KeyStringList Filter for inputs of section generation
|
|
|
|
# @param FfsInf FfsInfStatement object that contains this section data
|
|
|
|
# @param Dict dictionary contains macro and its value
|
|
|
|
# @retval tuple (Generated file name, section alignment)
|
|
|
|
#
|
2015-12-01 05:22:16 +01:00
|
|
|
def GenSection(self, OutputPath, ModuleName, SecNum, KeyStringList, FfsInf=None, Dict={}):
|
2009-07-17 11:10:31 +02:00
|
|
|
#
|
|
|
|
# Prepare the parameter of GenSection
|
|
|
|
#
|
|
|
|
if FfsInf != None:
|
|
|
|
self.Alignment = FfsInf.__ExtendMacro__(self.Alignment)
|
|
|
|
self.BuildNum = FfsInf.__ExtendMacro__(self.BuildNum)
|
|
|
|
self.StringData = FfsInf.__ExtendMacro__(self.StringData)
|
|
|
|
self.FileName = FfsInf.__ExtendMacro__(self.FileName)
|
|
|
|
|
|
|
|
OutputFile = os.path.join(OutputPath,
|
|
|
|
ModuleName + 'SEC' + SecNum + Ffs.SectionSuffix.get('VERSION'))
|
|
|
|
OutputFile = os.path.normpath(OutputFile)
|
|
|
|
|
|
|
|
# Get String Data
|
|
|
|
StringData = ''
|
|
|
|
if self.StringData != None:
|
|
|
|
StringData = self.StringData
|
|
|
|
elif self.FileName != None:
|
|
|
|
FileNameStr = GenFdsGlobalVariable.ReplaceWorkspaceMacro(self.FileName)
|
|
|
|
FileNameStr = GenFdsGlobalVariable.MacroExtend(FileNameStr, Dict)
|
|
|
|
FileObj = open(FileNameStr, 'r')
|
|
|
|
StringData = FileObj.read()
|
|
|
|
StringData = '"' + StringData + '"'
|
|
|
|
FileObj.close()
|
|
|
|
else:
|
|
|
|
StringData = ''
|
|
|
|
|
BaseTools/GenFds: Fix 'NoneType' object is not iterable error.
When adding section VERSION in FDF file, for example:
FILE FREEFORM = PCD(gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdLogoFile) {
SECTION RAW = MdeModulePkg/Logo/Logo.bmp
SECTION UI = "Logo"
SECTION VERSION = "0001"
}
GenFds will report the following error:
Traceback (most recent call last):
File "GenFds.py", line 276, in main
File "GenFds.py", line 391, in GenFd
File "Fd.py", line 93, in GenFd
File "Region.py", line 106, in AddToBuffer
File "Fv.py", line 114, in AddToBuffer
File "FfsFileStatement.py", line 117, in GenFfs
File "VerSection.py", line 80, in GenSection
File "GenFdsGlobalVariable.py", line 401, in GenerateSection
TypeError: 'NoneType' object is not iterable.
We found in GenFdsGlobalVariable.py line 401 'list' requires a iteralbe object as parameter while the 'Input' is None.
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Qiu Shumin <shumin.qiu@intel.com>
Reviewed-by: Yingke Liu <yingke.d.liu@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18205 6f19259b-4bc3-4df7-8a09-765794883524
2015-08-12 03:27:31 +02:00
|
|
|
GenFdsGlobalVariable.GenerateSection(OutputFile, [], 'EFI_SECTION_VERSION',
|
2013-08-23 04:18:16 +02:00
|
|
|
Ver=StringData, BuildNumber=self.BuildNum)
|
2009-07-17 11:10:31 +02:00
|
|
|
OutputFileList = []
|
|
|
|
OutputFileList.append(OutputFile)
|
|
|
|
return OutputFileList, self.Alignment
|