diff options
Diffstat (limited to 'BaseTools/Source/Python/MigrationMsa2Inf/MigrationMsa2Inf.py')
-rw-r--r-- | BaseTools/Source/Python/MigrationMsa2Inf/MigrationMsa2Inf.py | 2477 |
1 files changed, 0 insertions, 2477 deletions
diff --git a/BaseTools/Source/Python/MigrationMsa2Inf/MigrationMsa2Inf.py b/BaseTools/Source/Python/MigrationMsa2Inf/MigrationMsa2Inf.py deleted file mode 100644 index 2c81c995bd..0000000000 --- a/BaseTools/Source/Python/MigrationMsa2Inf/MigrationMsa2Inf.py +++ /dev/null @@ -1,2477 +0,0 @@ -#!/usr/bin/env python -# -# -# Copyright (c) 2007 - 2010, Intel Corporation. All rights reserved.<BR> -# This program and the accompanying materials -# 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. - - -""" This program converts EDK II MSA files into EDK II Extended INF format files """ - -import os, re, sys, fnmatch, xml.dom.minidom -from optparse import OptionParser -from AutoGenExterns import * -from Common.XmlRoutines import * # XmlParseFile, XmlElement, XmlAttribute, XmlList, XmlElementData, XmlNode -from Common.EdkIIWorkspace import * - -versionNumber = "0.9" -__version__ = "%prog Version " + versionNumber -__copyright__ = "Copyright (c) 2007 - 2010, Intel Corporation All rights reserved." - -commonHeaderFilename = "CommonHeader.h" -entryPointFilename = "EntryPoint.c" - -AutoGenLibraryMapping = { - "HiiLib":"HiiLibFramework", - "EdkIfrSupportLib":"IfrSupportLibFramework", - "EdkScsiLib":"ScsiLib", - "EdkUsbLib":"UsbLib", - "EdkFvbServiceLib":"FvbServiceLib", - "EdkGraphicsLib":"GraphicsLib" - } - -def myOptionParser(): - """ Argument Parser """ - usage = "%prog [options] -f input_filename" - parser = OptionParser(usage=usage,description=__copyright__,version="%prog " + str(versionNumber)) - parser.add_option("-f", "--file", dest="filename", help="Name of MSA file to convert") - parser.add_option("-o", "--output", dest="outfile", help="Specific Name of the INF file to create, otherwise it is the MSA filename with the extension repalced.") - parser.add_option("-a", "--auto", action="store_true", dest="autowrite", default=False, help="Automatically create output files and write the INF file") - parser.add_option("-i", "--interactive", action="store_true", dest="interactive", default=False, help="Set Interactive mode, user must approve each change.") - parser.add_option("-q", "--quiet", action="store_const", const=0, dest="verbose", help="Do not print any messages, just return either 0 for succes or 1 for failure") - parser.add_option("-v", "--verbose", action="count", dest="verbose", help="Do not print any messages, just return either 0 for succes or 1 for failure") - parser.add_option("-d", "--debug", action="store_true", dest="debug", default=False, help="Enable printing of debug messages.") - parser.add_option("-c", "--convert", action="store_true", dest="convert", default=False, help="Convert package: OldMdePkg->MdePkg EdkModulePkg->MdeModulePkg.") - parser.add_option("-e", "--event", action="store_true", dest="event", default=False, help="Enable handling of Exit Boot Services & Virtual Address Changed Event") - parser.add_option("-m", "--manual", action="store_true", dest="manual", default=False, help="Generate CommonHeader.txt, user picks up & copy it to a module common header") - parser.add_option("-w", "--workspace", dest="workspace", default=str(os.environ.get('WORKSPACE')), help="Specify workspace directory.") - (options, args) = parser.parse_args(sys.argv[1:]) - - return options,args - - -def openDatabase(f): - """ Parse XML in the FrameworkDatabase.db file pointed to by f """ - if (options.debug and options.verbose > 1): - print "Opening the database file:", f - if os.path.exists(f): - fdb = XmlParseFile(f) - else: - return "None" - return fdb - -def openSpd(s): - """ Parse XML in the SPD file pointed to by s """ - if (options.debug and options.verbose > 1): - print "Opening the SPD file:", s - if os.path.exists(s): - spd = XmlParseFile(s) - else: - return "None" - return spd - -def openMsa(m): - """ Parse XML in the MSA file pointed to by m """ - if (options.debug and options.verbose > 1): - print "Opening the MSA file:", m - if os.path.exists(m): - msa = XmlParseFile(m) - else: - return "None" - return msa - -def AddGuid(ArchList, CName, Usage): - """ Add a GUID to the Architecture array that the GUID is valid for. """ - if "IA32" in ArchList: - GuidCNameIa32.insert(0, str(" %-45s # %s" % (CName, Usage))) - if "X64" in ArchList: - GuidCNameX64.insert(0, str(" %-45s # %s" % (CName, Usage))) - if "IPF" in ArchList: - GuidCNameIPF.insert(0, str(" %-45s # %s" % (CName, Usage))) - if "EBC" in ArchList: - GuidCNameEBC.insert(0, str(" %-45s # %s" % (CName, Usage))) - if "ALL" in ArchList: - GuidCName.insert(0, str(" %-45s # %s" % (CName, Usage))) - - -def removeDups(CN, ListName): - """ Remove Duplicate Entries from the Guid List passed in """ - for Entry in ListName[:]: - if " " + CN + " " in Entry: - if (options.verbose > 1): - print "Removing C Name %s Entry from Guids List." % (CN) - ListName.remove(Entry) - -def chkArch(Archs): - """ Process the supported architectures passed in to combine if possible """ - Archs = Archs.upper() - if (("IA32" in Archs) & ("X64" in Archs) & ("IPF" in Archs) & ("EBC" in Archs)): - Archs = "ALL" - if (len(Archs) == 0): - Archs = "ALL" - return Archs - -def saveSourceFile(moduleDir, sourceFilename, sourceFileContents): - newFilename = os.path.join(moduleDir, sourceFilename) - - try: - f = open(newFilename, "w+") - f.write(sourceFileContents) - f.close() - except: - print "IO error in saving %s" % sourceFilename - - return sourceFilename - -def openSourceFile(moduleDir, sourceFilename): - newFilename = os.path.join(moduleDir, sourceFilename) - sourceFileContents = "" - try: - f = open(newFilename, "r") - sourceFileContents = f.read() - f.close() - except: - print "IO error in opening %s" % sourceFilename - - return sourceFileContents - -def MatchOption(eline, ToolChainFamily, Targets, Archs, ToolCode, Value): - IDs = eline.split("_") - - if len(IDs) < 5: - return [] - - MatchedTargets = [] - if (Targets[0] == "*") or IDs[0] in Targets: - MatchedTargets.append(IDs[0]) - elif IDs[0] == "*": - MatchedTargets = Targets - - MatchedArchs = [] - if Archs[0] == "*" or IDs[2] in Archs: - MatchedArchs.append(IDs[2]) - elif IDs[2] == "*": - MatchedArchs = Archs - - if IDs[3] != ToolCode and IDs[3] != "*": - return [] - - result = [] - for arch in MatchedArchs: - for target in MatchedTargets: - line = "%s:%s_%s_%s_%s_FLAGS = %s" % (ToolChainFamily, target, IDs[1], arch, ToolCode, Value) - result.append(line) - - return result - -def main(): - - AutoGenSource = "" - AutoGenHeader = "" - AutoGenDeclaration = "" - AutoGenModuleFolder = None - - workspace = "" - - if (options.workspace == None): - print "ERROR: E0000: WORKSPACE not defined.\n Please set the WORKSPACE environment variable to the location of the EDK II install directory." - sys.exit(1) - else: - workspace = options.workspace - if (options.debug): - print "Using Workspace:", workspace - - try: - options.verbose +=1 - except: - options.verbose = 1 - pass - - - FdbPath = os.path.join(workspace, "Conf") - FdbPath = os.path.join(FdbPath, "FrameworkDatabase.db") - if os.path.exists(FdbPath): - FdbFile = FdbPath - else: - print "ERROR: E0001: WORKSPACE does not contain the FrameworkDatabase File.\n Please run EdkSetup from the EDK II install directory.\n" - sys.exit(1) - - Fdb = openDatabase(FdbFile) - if (Fdb == 'None'): - print "ERROR: E0002 Could not open the Framework Database file:", FdbFile - sys.exit(1) - - if (options.debug): - print "FrameworkDataBase.db file:", FdbFile - - # - InitializeAutoGen(workspace, Fdb) - - if (options.filename): - filename = options.filename - if ((options.verbose > 1) | (options.autowrite)): - print "Filename:", filename - else: - print "ERROR: E0001 - You must specify an input filename" - sys.exit(1) - - if (options.outfile): - outputFile = options.outfile - else: - outputFile = filename.replace('.msa', '.inf') - - if ((options.verbose > 2) or (options.debug)): - print "Output Filename:", outputFile - - Msa = openMsa(filename) - if (Msa == 'None'): - ## Maybe developer think WORKSPACE macro is the root directory of file name - ## So we will try to add WORKSPACE path into filename - MsaFileName = "" - MsaFileName = os.path.join(workspace, filename) - Msa = openMsa(MsaFileName) - if (Msa == 'None'): - print "ERROR: E0002: Could not open the file:", filename - sys.exit(1) - - AutoGenModuleFolder = os.path.dirname(filename) - - MsaHeader = "/ModuleSurfaceArea/MsaHeader/" - MsaDefs = "/ModuleSurfaceArea/ModuleDefinitions/" - BaseName = str(XmlElement(Msa, MsaDefs + "OutputFileBasename")).strip() - - if (len(BaseName) < 1): - BaseName = str(XmlElement(Msa, MsaHeader + "BaseName")).strip() - BaseName = re.sub(' ', '_', BaseName) - - GuidValue = str(XmlElement(Msa, MsaHeader + "GuidValue")).strip() - VerString = str(XmlElement(Msa, MsaHeader + "Version")).strip() - ModType = str(XmlElement(Msa, MsaHeader + "ModuleType")).strip() - CopyRight = str(XmlElement(Msa, MsaHeader + "Copyright")).strip() - Abstract = str(XmlElement(Msa, MsaHeader + "Abstract")).strip() - Description = str(XmlElement(Msa, MsaHeader + "Description")).strip().replace(" ", " ").replace(" ", " ").replace(" ", " ") - if not CopyRight.find("2007"): - CopyRight = CopyRight.replace("2006", "2007") - License = str(XmlElement(Msa, MsaHeader + "License")).strip().replace(" ", " ") - MsaDefs = "/ModuleSurfaceArea/ModuleDefinitions/" - BinModule = "" - try: - BinModule = str(XmlElement(Msa, MsaDefs + "BinaryModule")).strip() - except: - pass - - SupportedArchitectures = "" - try: - SupportedArchitectures = str(XmlElement(Msa, MsaDefs + "SupportedArchitectures")).strip() - except: - pass - - DefinesComments = [] - if (len(SupportedArchitectures) > 0): - DefinesComments.insert(0, "\n#\n# The following information is for reference only and not required by the build tools.\n#\n") - DefinesComments.append("# VALID_ARCHITECTURES = " + SupportedArchitectures + "\n") - DefinesComments.append("#\n") - - MsaExtern = "/ModuleSurfaceArea/Externs/" - PcdIsDriver = "" - try: - PcdIsDriver = str(XmlElement(Msa, MsaExtern + "PcdIsDriver")).strip() - except: - pass - - SpecList = [] - List = [] - try: - List = XmlList(Msa, MsaExtern + "Specification") - except: - pass - - if (len(List) > 0): - for spec in List[:]: - SpecList.insert(0, str(XmlElementData(spec)).strip()) - - DriverModules = [] - LibraryModules = [] - Externlist = [] - Flag = (DefinesComments == []) - - # Data structure to insert autogen code - AutoGenDriverModel = [] - AutoGenExitBootServices = [] - AutoGenVirtualAddressChanged = [] - AutoGenEntryPoint = "" - AutoGenUnload = "" - AutoGenGuid = [] - AutoGenLibClass = [] - AutoGenPackage = [] - AutoGenSourceFiles = [] - OldEntryPoint = "" - OldUnload = "" - - try: - Externlist = XmlList(Msa, MsaExtern + "Extern") - except: - pass - - if (len(Externlist) > 0): - if (options.debug and options.verbose > 2): - print "In Extern Parsing Routine" - for extern in Externlist: - EntryPoint = "" - Unload = "" - DBinding = "" - CompName = "" - Diag = "" - Config = "" - Constr = "" - Destr = "" - CallBack = "" - lFlag = False - AutoGenDriverModelItem = [] - try: - EntryPoint = str(XmlElementData(extern.getElementsByTagName("ModuleEntryPoint")[0])).strip() - AutoGenEntryPoint = EntryPoint - #DriverModules.append(" %-30s = %s\n" % ("ENTRY_POINT" , EntryPoint)) - except: - pass - - try: - Unload = str(XmlElementData(extern.getElementsByTagName("ModuleUnloadImage")[0])).strip() - AutoGenUnload = Unload - DriverModules.append(" %-30s = %s\n" % ("UNLOAD_IMAGE", Unload)) - except: - pass - - try: - DBinding = str(XmlElementData(extern.getElementsByTagName("DriverBinding")[0])).strip() - AutoGenDriverModelItem.append("&" + DBinding) - DefinesComments.append("# %-29s = %-45s\n" % ("DRIVER_BINDING", DBinding)) - lFlag = True - except: - pass - - try: - CompName = str(XmlElementData(extern.getElementsByTagName("ComponentName")[0])).strip() - AutoGenDriverModelItem.append("&" + CompName) - DefinesComments.append("# %-29s = %-45s\n" % ("COMPONENT_NAME", CompName)) - lFlag = True - except: - if lFlag: - AutoGenDriverModelItem.append("NULL") - pass - - try: - Config = str(XmlElementData(extern.getElementsByTagName("DriverConfig")[0])).strip() - AutoGenDriverModelItem.append("&" + Config) - DefinesComments.append("# %-29s = %-45s\n" % ("DRIVER_CONFIG", Config)) - lFlag = True - except: - if lFlag: - AutoGenDriverModelItem.append("NULL") - pass - - try: - Diag = str(XmlElementData(extern.getElementsByTagName("DriverDiag")[0])).strip() - AutoGenDriverModelItem.append("&" + Diag) - DefinesComments.append("# %-29s = %-45s\n" % ("DRIVER_DIAG", Diag)) - lFlag = True - except: - if lFlag: - AutoGenDriverModelItem.append("NULL") - pass - - if len(AutoGenDriverModelItem) > 0: - AutoGenDriverModel.append(AutoGenDriverModelItem) - - try: - Constr = str(XmlElementData(extern.getElementsByTagName("Constructor")[0])).strip() - LibraryModules.append(" %-30s = %s\n" % ("CONSTRUCTOR", Constr)) - except: - pass - - try: - Destr = str(XmlElementData(extern.getElementsByTagName("Destructor")[0])).strip() - LibraryModules.append(" %-30s = %s\n" % ("DESTRUCTOR", Destr)) - except: - pass - - try: - CallBack = str(XmlElement(extern, "Extern/SetVirtualAddressMapCallBack")).strip() - if CallBack != "": - AutoGenVirtualAddressChanged.append(CallBack) - DefinesComments.append("# %-29s = %-45s\n" % ("VIRTUAL_ADDRESS_MAP_CALLBACK", CallBack)) - lFlag = True - except: - - pass - - try: - CallBack = str(XmlElement(extern, "Extern/ExitBootServicesCallBack")).strip() - if CallBack != "": - AutoGenExitBootServices.append(CallBack) - DefinesComments.append("# %-29s = %-45s\n" % ("EXIT_BOOT_SERVICES_CALLBACK", CallBack)) - lFlag = True - except: - pass - - - Flag = False - - """ Get the Module's custom build options """ - MBOlines = [] - MBO = "/ModuleSurfaceArea/ModuleBuildOptions/Options/Option" - mboList = [] - try: - mboList = XmlList(Msa, MBO) - except: - pass - - if (len(mboList) > 0): - for Option in mboList: - Targets = [] - Archs = [] - - bt = "" - try: - bt = str(Option.getAttribute("BuildTargets")) - except: - pass - - if (len(bt) > 0): - if (re.findall(" ", bt) > 0): - Targets = bt.split() - else: - Targets.insert(0, bt) - else: - Targets.insert(0, "*") - - if (options.debug and options.verbose > 2): - print "Targets", len(Targets), Targets - - pro = "" - try: - pro = Option.getAttribute("SupArchList") - if (re.findall(" ", pro) > 0): - Archs = pro.split() - elif (re.findall(",", pro) > 0): - Archs = pro.split(",") - except: - pass - - if (len(pro) == 0): - Archs.insert(0, "*") - - if (options.debug and options.verbose > 2): - print "Archs", len(Archs), Archs - - ToolCode = "" - try: - ToolCode = str(Option.getAttribute("ToolCode")) - except: - pass - - if (len(ToolCode) == 0): - ToolCode="*" - - value = "" - try: - value = str(XmlElementData(Option)) - except: - pass - Tags = [] - TagName = "" - try: - TagName = str(Option.getAttribute("TagName")) - except: - pass - - if (len(TagName) > 0) : - if (options.debug and options.verbose > 2): - print "TagName was defined:", TagName - Tags.insert(0, TagName) - else: - if (options.debug and options.verbose > 2): - print "TagName was NOT defined!" - TagName = "*" - Tags.insert(0, "*") - - Family = "" - try: - Family = str(Option.getAttribute("ToolChainFamily")).strip() - except: - pass - - if (len(Family) > 0): - if (options.debug): - print "Searching tools_def.txt for Tool Tags that belong to:", Family, "family" - TCF = [] - tdFile = "" - tdPath = os.path.join(workspace, "Tools") - tdPath = os.path.join(tdPath, "Conf") - tdPath = os.path.join(tdPath, "tools_def.txt") - tdPath = tdPath.replace("\\", "/") - if os.path.exists(tdPath): - tdFile = tdPath - else: - tdPath = os.path.join(workspace, "Conf") - tdPath = os.path.join(tdPath, "tools_def.txt") - if os.path.exists(tdPath): - tdFile = tdPath - else: - print "ERROR: E0001: WORKSPACE does not contain the tools_def.txt File.\n Please run EdkSetup from the EDK II install directory.\n" - sys.exit(1) - - if (options.debug and options.verbose > 2): - print "Opening:", tdFile - - TagNameList = [] - tools_def = open(tdFile, "r") - for tdline in tools_def: - if "# " in tdline: - continue - if "FAMILY" in tdline: - if (options.debug and options.verbose > 2): - print "Testing for FAMILY:", Family, "in the line:", tdline.strip() - if Family in tdline: - enter = tdline.split("=")[0] - if (options.debug and options.verbose > 2): - print "Adding TNL:", tdline - TagNameList.insert(0, enter) - tools_def.close() - - if (options.debug and options.verbose > 2): - print "TagNameList:", TagNameList - - olinesSet = {} - for eline in TagNameList: - if "# " in eline: - continue - if (options.debug and options.verbose > 2): - print "ToolsDef entry:", eline - - olines = MatchOption(eline, Family, Targets, Archs, ToolCode, value) - for oline in olines: - olinesSet[oline] = 1 - - for oline in olinesSet: - if (options.debug and options.verbose > 2): - print "Adding:", str(oline) - MBOlines.insert(0, oline) - else: - for targ in Targets: - for arch in Archs: - oline = " %s_%s_%s_%s_FLAGS = %s" % (targ, Tags[0], arch, str(ToolCode), str(Value)) - if (options.debug and options.verbose > 2): - print "Adding:", str(oline) - MBOlines.insert(0, oline) - - - - - for tag in Tags: - for targ in Targets: - for arch in Archs: - oline = " " + str(targ) + "_" + str(tag) + "_" + str(arch) + "_" + str(ToolCode) + "_FLAGS = " + str(value) - if (options.debug and options.verbose > 2): - print "Adding:", str(oline) - #MBOlines.insert(0, oline) - - - """ Get the Library Class information """ - MsaLcDefs = "/ModuleSurfaceArea/LibraryClassDefinitions/LibraryClass" - LcDefList = [] - try: - LcDefList = XmlList(Msa, MsaLcDefs) - except: - pass - - IamLibrary = [] - LibClassList = [] - LibClassListIa32 = [] - LibClassListX64 = [] - LibClassListIpf = [] - LibClassListEbc = [] - - - if (len(LcDefList) > 0): - for Lc in LcDefList: - lcKeyword = "" - try: - lcKeyword = str(XmlElementData(Lc.getElementsByTagName("Keyword")[0])) - except: - raise SyntaxError, "The MSA is not correctly formed, a Library Class Keyword Element is required" - - lcUsage = "" - try: - lcUsage = str(XmlAttribute(Lc, "Usage")) - except: - raise SyntaxError, "The MSA is not correctly formed, a Usage Attribute is required for all Library Class Elements" - - Archs = "" - try: - Archs = str(XmlAttribute(Lc, "SupArchList")) - except: - pass - - Archs = chkArch(Archs) - - if (options.debug and options.verbose > 2): - print "Attr: ", lcUsage, lcKeyword, Archs - - if (options.convert): - lcKeyword = AutoGenLibraryMapping.get(lcKeyword, lcKeyword) - - if re.findall("PRODUCED", lcUsage, re.IGNORECASE): - try: - lcSupModList = "" - - try: - lcSupModList = str(XmlAttribute(Lc, "SupModuleList")) - except: - lcSupModList = "" - pass - - lcLine = lcKeyword - AutoGenLibClass.append(lcKeyword) - if len(lcSupModList) > 0: - lcLine = lcLine + "|" + lcSupModList - IamLibrary.insert(0, lcLine) - except: - pass - elif lcKeyword != "UefiDriverModelLib": - AutoGenLibClass.append(lcKeyword) - # This section handles the library classes that are CONSUMED - if "IA32" in Archs: - LibClassListIa32.insert(0, lcKeyword) - if "X64" in Archs: - LibClassListX64.insert(0, lcKeyword) - if "IPF" in Archs: - LibClassListIpf.insert(0, lcKeyword) - if "EBC" in Archs: - LibClassListEbc.insert(0, lcKeyword) - if "ALL" in Archs: - LibClassList.insert(0, lcKeyword) - if len(AutoGenDriverModel) > 0 and "UefiLib" not in LibClassList: - AutoGenLibClass.append("UefiLib") - LibClassList.insert(0, "UefiLib") - - AutoGenDxsFiles = [] - """ Get the Source File list """ - SrcFilenames = [] - SrcFilenamesIa32 = [] - SrcFilenamesX64 = [] - SrcFilenamesIpf = [] - SrcFilenamesEbc = [] - SrcFiles = "/ModuleSurfaceArea/SourceFiles/Filename" - SrcList = [] - try: - SrcList = XmlList(Msa, SrcFiles) - except: - pass - - if (len(SrcList) > 0): - for fn in SrcList: - file = "" - Archs = "" - - try: - Archs = fn.getAttribute("SupArchList") - except: - pass - - Archs = chkArch(Archs) - - try: - file = str(XmlElementData(fn)) - except: - pass - - if file.endswith(".dxs"): - AutoGenDxsFiles.append((file, Archs)) - else: - AutoGenSourceFiles.append(file) - if "IA32" in Archs: - SrcFilenamesIa32.insert(0, file) - if "X64" in Archs: - SrcFilenamesX64.insert(0, file) - if "IPF" in Archs: - SrcFilenamesIpf.insert(0, file) - if "EBC" in Archs: - SrcFilenamesEbc.insert(0, file) - if "ALL" in Archs: - SrcFilenames.insert(0, file) - - """ Package Dependency section """ - DbPkgList = "/FrameworkDatabase/PackageList/Filename" - WorkspacePkgs = [] - try: - WorkspacePkgs = XmlList(Fdb, DbPkgList) - except: - print "Could not tet the package data from the database" - sys.exit(1) - - PkgDb = [] - HeaderLocations = [] - - if (options.debug and options.verbose > 1): - print "Found %s packages in the WORKSPACE" % (len(WorkspacePkgs)) - - Dirs = [] - GuidDecls = [] - if (len(WorkspacePkgs) > 0): - SpdHeader = "/PackageSurfaceArea/SpdHeader/" - for Pkg in WorkspacePkgs[:]: - PackageGuid = "" - PackageVersion = "" - file = "" - try: - file = str(XmlElementData(Pkg)) - except: - pass - - if (options.debug and options.verbose > 2): - print "PKG:", file - - if fnmatch.fnmatch(file, "*.dec"): - print "parsing " + os.path.join(workspace, file) - PackageGuid = "" - PackageVersion = "" - try: - Lines = open(os.path.join(workspace, file)).readlines() - except: - print "Could not parse the Package file:", file - sys.exit(1) - - for Line in Lines: - Line = Line.split("#")[0] - Items = Line.split("=") - if len(Items) != 2: - continue - - Key = Items[0].strip().upper() - if Key == "PACKAGE_GUID": - PackageGuid = Items[1].strip() - if Key == "PACKAGE_VERSION": - PackageVersion = Items[1].strip() - - else: - Spd = openSpd(os.path.join(workspace, file)) - if (Spd == 'None'): - print "Could not parse the Package file:", file - sys.exit(1) - - path = os.path.split(file)[0] - file = file.replace(".nspd", ".dec") - file = file.replace(".spd", ".dec") - - try: - PackageGuid = str(XmlElement(Spd, SpdHeader + "GuidValue")) - except: - pass - - try: - PackageVersion = str(XmlElement(Spd, SpdHeader + "Version")) - except: - pass - - file = file + "|" + PackageGuid + "|" + PackageVersion - PkgDb.insert(0, file) - - GuidEntries = [] - try: - GuidEntries = XmlList(Spd, "/PackageSurfaceArea/GuidDeclarations/Entry") - except: - pass - - if (len(GuidEntries) > 0): - for Entry in GuidEntries[:]: - try: - GuidDecls.append(str(XmlElementData(Entry.getElementsByTagName("C_Name")[0])).strip()) - except: - pass - - - pHdrs = [] - try: - pHdrs = XmlList(Spd, "/PackageSurfaceArea/PackageHeaders/IncludePkgHeader") - except: - pass - - if (len(pHdrs) > 0): - for Hdr in pHdrs[:]: - try: - ModTypeList = str(Hdr.getAttribute("ModuleType")) - if (ModType in ModTypeList): - HeaderName= str(XmlElementData(Hdr))[0] - Dirs.insert(0, os.path.join(packagepath,str(os.path.split(HeaderName)))) - except: - pass - - # Get the Guid:Header from the Packages - SpdLcDec = "/PackageSurfaceArea/LibraryClassDeclarations/LibraryClass" - lcList = [] - try: - lcList = XmlList(Spd, SpdLcDec) - except: - pass - - if (len(lcList) > 0): - for Lc in lcList[:]: - Name = "" - try: - Name = Lc.getAttribute("Name") - except: - pass - - Header = "" - try: - Header = XmlElementData(Lc.getElementsByTagName("IncludeHeader")[0]) - except: - pass - - if ((len(Name) > 0) and (len(Header) > 0)): - line = Name + "|" + os.path.join(path, Header) - if (options.debug and options.verbose > 2): - print "Adding:", line - HeaderLocations.insert(0, line) - - ishList = [] - try: - IndStdHeaders = "/PackageSurfaceArea/IndustryStdIncludes/IndustryStdHeader" - ishList = XmlList(Spd, IndStdHeaders) - except: - pass - - if (len(ishList) > 0): - for Lc in ishList[:]: - Name = "" - try: - Name = str(Lc.getAttribute("Name")).strip() - except: - pass - - Header = "" - try: - Header = str(XmlElementData(Lc.getElementsByTagName("IncludeHeader")[0])).strip() - except: - pass - - if ((len(Name) > 0) and (len(Header) > 0)): - line = Name + "|" + os.path.join(path, Header) - HeaderLocations.insert(0, str(line)) - - PkgList = [] - PkgListIa32 = [] - PkgListX64 = [] - PkgListIpf = [] - PkgListEbc = [] - Pkgs = "/ModuleSurfaceArea/PackageDependencies/Package" - pkgL = [] - try: - pkgL = XmlList(Msa, Pkgs) - except: - pass - - - gUnknownPkgGuid = {} - if (len(pkgL) > 0): - if (options.debug and options.verbose > 1): - print "Found %s packages in the module" % (len(pkgL)) - for pkg in pkgL[:]: - Archs = "" - pkgGuid = "" - pkgVer = "" - - FindPkgGuid = False - try: - Archs = pkg.getAttribute("SupArchList") - except: - pass - - Archs = chkArch(Archs) - - try: - pkgGuid = pkg.getAttribute("PackageGuid") - except: - pass - - if options.convert: - if pkgGuid.lower() == "5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec": - pkgGuid = "1E73767F-8F52-4603-AEB4-F29B510B6766" - if pkgGuid.lower() == "68169ab0-d41b-4009-9060-292c253ac43d": - pkgGuid = "BA0D78D6-2CAF-414b-BD4D-B6762A894288" - AutoGenPackage.append(pkgGuid) - try: - pkgVer = pkg.getAttribute("PackageVersion") - except: - pass - - for PkgEntry in PkgDb[:]: - if pkgGuid in PkgEntry: - if len(pkgVer) > 0: - if pkgVer in PkgEntry: - FindPkgGuid = True - if "IA32" in Archs: - PkgListIa32.insert(0, PkgEntry.split("|")[0]) - if "X64" in Archs: - PkgListX64.insert(0, PkgEntry.split("|")[0]) - if "IPF" in Archs: - PkgListIpf.insert(0, PkgEntry.split("|")[0]) - if "EBC" in Archs: - PkgListEbc.insert(0, PkgEntry.split("|")[0]) - if "ALL" in Archs: - PkgList.insert(0, PkgEntry.split("|")[0]) - else: - FindPkgGuid = True - if "IA32" in Archs: - PkgListIa32.insert(0, PkgEntry.split("|")[0]) - if "X64" in Archs: - PkgListX64.insert(0, PkgEntry.split("|")[0]) - if "IPF" in Archs: - PkgListIpf.insert(0, PkgEntry.split("|")[0]) - if "EBC" in Archs: - PkgListEbc.insert(0, PkgEntry.split("|")[0]) - if "ALL" in Archs: - PkgList.insert(0, PkgEntry.split("|")[0]) - - if not FindPkgGuid: - gUnknownPkgGuid[str(pkgGuid)] = 1 - - for UnknownPkgGuid in gUnknownPkgGuid: - print "Cannot resolve package dependency Guid:", UnknownPkgGuid - - PkgList.reverse() - PkgListIa32.reverse() - PkgListX64.reverse() - PkgListIpf.reverse() - PkgListEbc.reverse() - if (options.debug): - print "Package List:", PkgList - - - - """ Setup the Global GuidCName arrays that will hold data from various MSA locations """ - global GuidCName - global GuidCNameIa32 - global GuidCNameX64 - global GuidCNameIPF - global GuidCNameEBC - GuidCName = [] - GuidCNameIa32 = [] - GuidCNameX64 = [] - GuidCNameIPF = [] - GuidCNameEBC = [] - - """ Check for the GUIDs Element """ - Guids = "/ModuleSurfaceArea/Guids/GuidCNames" - GuidList = [] - try: - GuidList = XmlList(Msa, Guids) - except: - pass - - if (len(GuidList) > 0): - for Guid in GuidList: - Archs = "" - Usage = "" - CName = "" - - try: - Archs = Guid.getAttribute("SupArchList") - except: - pass - - Archs = chkArch(Archs) - - try: - Usage = Guid.getAttribute("Usage") - except: - pass - - try: - CName = str(XmlElementData(Guid.getElementsByTagName("GuidCName")[0])) - if CName in GuidDecls: - if (options.debug and options.verbose > 1): - print "Guids Adding Guid CName: %-45s # %s Archs: %s" % (CName, Usage, Archs) - AddGuid(Archs, CName, Usage) - AutoGenGuid.append(CName) - else: - raise AssertionError, "Guid %s defined in %s is not declared in any package (.dec) file!" % (CName, filename) - except: - pass - - if (options.debug and options.verbose > 2): - print "Guid C Name List:", GuidCName - - """ Check for Events """ - Guids = "/ModuleSurfaceArea/Events/CreateEvents/EventTypes" - GuidList = [] - try: - GuidList = XmlList(Msa, Guids) - except: - pass - - if (len(GuidList) > 0): - for Guid in GuidList: - Archs = "" - Usage = "" - CName = "" - - try: - Archs = Guid.getAttribute("SupArchList") - except: - pass - - Archs = chkArch(Archs) - - try: - Usage = Guid.getAttribute("Usage") - Type = str(XmlElementData(Guid.getElementsByTagName("EventType")[0])) - Usage += " Create Event: " + Type - except: - pass - - try: - CName = str(Guid.getAttribute("EventGuidCName")) - if CName in GuidDecls: - if (options.debug and options.verbose > 1): - print "CreateEvent Adding Guid CName: %-45s # %s Archs: %s" % (CName, Usage, Archs) - AddGuid(Archs, CName, Usage) - AutoGenGuid.append(CName) - else: - if (len(DefinesComments) == 0): - DefinesComments.insert(0, "\n#\n# The following information is for reference only and not required by the build tools.\n#\n") - DefinesComments.append("# Create Event Guid C Name: " + CName + " Event Type: " + Type + "\n") - Flag = True - except: - pass - - if (Flag): - DefinesComments.append("#\n") - Flag = False - - Guids = "/ModuleSurfaceArea/Events/SignalEvents/EventTypes" - GuidList = [] - try: - GuidList = XmlList(Msa, Guids) - except: - pass - - if (len(GuidList) > 0): - for Guid in GuidList: - Archs = "" - Usage = "" - CName = "" - - try: - Archs = Guid.getAttribute("SupArchList") - except: - pass - - Archs = chkArch(Archs) - - try: - Usage = Guid.getAttribute("Usage") - Type = str(XmlElementData(Guid.getElementsByTagName("EventType")[0])) - Usage += " Signal Event: " + Type - except: - pass - - try: - CName = str(Guid.getAttribute("EventGuidCName")) - if CName in GuidDecls: - if (options.debug and options.verbose > 1): - print "SignalEvent Adding Guid CName: %-45s # %s Archs: %s" % (CName, Usage, Archs) - AddGuid(Archs, CName, Usage) - AutoGenGuid.append(CName) - else: - if (len(DefinesComments) == 0): - DefinesComments.insert(0, "\n#\n# The following information is for reference only and not required by the build tools.\n#\n") - DefinesComments.append("# Signal Event Guid C Name: " + CName + " Event Type: " + Type + "\n") - Flag = True - except: - pass - - if (Flag): - DefinesComments.append("#\n") - Flag = False - - """ Check the HOB guids """ - Guids = "/ModuleSurfaceArea/Hobs/HobTypes" - GuidList = [] - try: - GuidList = XmlList(Msa, Guids) - except: - pass - - if (len(GuidList) > 0): - for Guid in GuidList: - Archs = "" - Usage = "" - CName = "" - - try: - Archs = Guid.getAttribute("SupArchList") - except: - pass - - Archs = chkArch(Archs) - - try: - Usage = Guid.getAttribute("Usage") - Type = str(XmlElementData(Guid.getElementsByTagName("HobType")[0])) - Usage += " Hob: " + Type - except: - pass - - try: - CName = str(Guid.getAttribute("HobGuidCName")) - if CName in GuidDecls: - if (options.debug and options.verbose > 1): - print "Hob Adding Guid CName: %-45s # %s Archs: %s" % (CName, Usage, Archs) - AddGuid(Archs, CName, Usage) - AutoGenGuid.append(CName) - else: - if (len(DefinesComments) == 0): - DefinesComments.insert(0, "\n#\n# The following information is for reference only and not required by the build tools.\n#\n") - DefinesComments.append("# HOB Guid C Name: " + CName + " Hob Type: " + Type + "\n") - Flag = True - except: - if (len(DefinesComments) == 0): - DefinesComments.insert(0, "\n#\n# The following information is for reference only and not required by the build tools.\n#\n") - DefinesComments.append("# HOB: " + Type + "\n") - Flag = True - pass - - if (Flag): - DefinesComments.append("#\n") - Flag = False - - """ Check for the SystemTables Element """ - Guids = "/ModuleSurfaceArea/SystemTables/SystemTableCNames" - GuidList = [] - try: - GuidList = XmlList(Msa, Guids) - except: - pass - - if (len(GuidList) > 0): - for Guid in GuidList: - Archs = "" - Usage = "" - CName = "" - - try: - Archs = Guid.getAttribute("SupArchList") - except: - pass - - Archs = chkArch(Archs) - - try: - Usage = Guid.getAttribute("Usage") - Usage += " System Table" - except: - pass - - try: - CName = str(XmlElementData(Guid.getElementsByTagName("SystemTableCName")[0])) - if (options.debug and options.verbose > 1): - print "System Table Adding Guid CName: %-45s # %s Archs: %s" % (CName, Usage, Archs) - AddGuid(Archs, CName, Usage) - AutoGenGuid.append(CName) - except: - pass - - """ Check for the DataHubs Element """ - Guids = "/ModuleSurfaceArea/DataHubs/DataHubRecord" - GuidList = [] - try: - GuidList = XmlList(Msa, Guids) - except: - pass - - if (len(GuidList) > 0): - for Guid in GuidList: - Archs = "" - Usage = "" - CName = "" - - try: - Archs = Guid.getAttribute("SupArchList") - except: - pass - - Archs = chkArch(Archs) - - try: - Usage = Guid.getAttribute("Usage") - Usage += " Data Hub" - except: - pass - - try: - CName = str(XmlElementData(Guid.getElementsByTagName("DataHubCName")[0])) - if (options.debug and options.verbose > 1): - print "Data Hub Adding Guid CName: %-45s # %s Archs: %s" % (CName, Usage, Archs) - AddGuid(Archs, CName, Usage) - AutoGenGuid.append(CName) - except: - pass - - """ Check for the HiiPackages Element """ - Guids = "/ModuleSurfaceArea/HiiPackages/HiiPackage" - GuidList = [] - try: - GuidList = XmlList(Msa, Guids) - except: - pass - - if (len(GuidList) > 0): - for Guid in GuidList: - Archs = "" - Usage = "" - CName = "" - - try: - Archs = Guid.getAttribute("SupArchList") - except: - pass - - Archs = chkArch(Archs) - - try: - Usage = Guid.getAttribute("Usage") - Usage += " HII Formset" - except: - pass - - try: - CName = str(XmlElementData(Guid.getElementsByTagName("HiiCName")[0])) - if (options.debug and options.verbose > 1): - print "Hii Formset Adding Guid CName: %-45s # %s Archs: %s" % (CName, Usage, Archs) - AddGuid(Archs, CName, Usage) - AutoGenGuid.append(CName) - except: - pass - - """ Check for the Variables Element """ - Guids = "/ModuleSurfaceArea/Variables/Variable" - GuidList = [] - try: - GuidList = XmlList(Msa, Guids) - except: - pass - - if (len(GuidList) > 0): - for Guid in GuidList: - Archs = "" - Usage = "" - CName = "" - VariableName = "" - - try: - Archs = Guid.getAttribute("SupArchList") - except: - pass - - Archs = chkArch(Archs) - - try: - Usage = Guid.getAttribute("Usage") - except: - pass - - try: - VariableName = str(XmlElementData(Guid.getElementsByTagName("VariableName")[0])) - CName = str(XmlElementData(Guid.getElementsByTagName("GuidC_Name")[0])) - - HexData = VariableName.strip().split() - UniString = " L\"" - for dig in HexData[:]: - UniString += str(unichr(eval(dig))) - UniString += "\"" - - Usage += UniString - - if CName in set(GuidDecls): - removeDups(CName, GuidCName) - removeDups(CName, GuidCNameIa32) - removeDups(CName, GuidCNameX64) - removeDups(CName, GuidCNameIPF) - removeDups(CName, GuidCNameEBC) - - if (options.debug): - print "Variable Adding Guid CName: %-45s # %s Archs: %s" % (CName, Usage, Archs) - AddGuid(Archs, CName, Usage) - AutoGenGuid.append(CName) - else: - if (len(DefinesComments) == 0): - DefinesComments.insert(0, "\n#\n# The following information is for reference only and not required by the build tools.\n#\n") - DefinesComments.append("# Variable Guid C Name: " + CName + " Variable Name:" + UniString + "\n") - Flag = True - except: - pass - - if (Flag): - DefinesComments.append("#\n") - Flag = False - - """ Check for the Protocol Element """ - Protocols = "/ModuleSurfaceArea/Protocols/Protocol" - ProtocolList = [] - ProtocolCName = [] - ProtocolCNameIa32 = [] - ProtocolCNameX64 = [] - ProtocolCNameIPF = [] - ProtocolCNameEBC = [] - - try: - ProtocolList = XmlList(Msa, Protocols) - except: - pass - - if (len(ProtocolList) > 0): - for Protocol in ProtocolList: - Archs = "" - Usage = "" - CName = "" - - try: - Archs = Protocol.getAttribute("SupArchList") - except: - pass - - Archs = chkArch(Archs) - - try: - Usage = Protocol.getAttribute("Usage") - except: - pass - - try: - CName = str(XmlElementData(Protocol.getElementsByTagName("ProtocolCName")[0])) - AutoGenGuid.append(CName) - removeDups(CName, GuidCName) - removeDups(CName, GuidCNameIa32) - removeDups(CName, GuidCNameX64) - removeDups(CName, GuidCNameIPF) - removeDups(CName, GuidCNameEBC) - - if (options.debug and options.verbose > 1): - print "Found %s - %s - %s " % (CName, Usage, str(len(Archs))) - - if "IA32" in Archs: - ProtocolCNameIa32.insert(0, str(" %-45s # PROTOCOL %s" % (CName, Usage))) - if "X64" in Archs: - ProtocolCNameX64.insert(0, str(" %-45s # PROTOCOL %s" % (CName, Usage))) - if "IPF" in Archs: - ProtocolCNameIPF.insert(0, str(" %-45s # PROTOCOL %s" % (CName, Usage))) - if "EBC" in Archs: - ProtocolCNameEBC.insert(0, str(" %-45s # PROTOCOL %s" % (CName, Usage))) - if "ALL" in Archs: - ProtocolCName.insert(0, str(" %-45s # PROTOCOL %s" % (CName, Usage))) - except: - pass - - - Protocols = "/ModuleSurfaceArea/Protocols/ProtocolNotify" - try: - ProtocolList = XmlList(Msa, Protocols) - except: - pass - - if (len(ProtocolList) > 0): - for Protocol in ProtocolList: - Archs = "" - Usage = "" - CName = "" - - try: - Archs = Protocol.getAttribute("SupArchList") - except: - pass - - Archs = chkArch(Archs) - - try: - Usage = Protocol.getAttribute("Usage") - except: - pass - - try: - CName = str(XmlElementData(Protocol.getElementsByTagName("ProtocolNotifyCName")[0])) - AutoGenGuid.append(CName) - removeDups(CName, GuidCName) - removeDups(CName, GuidCNameIa32) - removeDups(CName, GuidCNameX64) - removeDups(CName, GuidCNameIPF) - removeDups(CName, GuidCNameEBC) - - if "IA32" in Archs: - ProtocolCNameIa32.insert(0, " %-45s # PROTOCOL_NOTIFY %s" % (CName, Usage)) - if "X64" in Archs: - ProtocolCNameX64.insert(0, " %-45s # PROTOCOL_NOTIFY %s" % (CName, Usage)) - if "IPF" in Archs: - ProtocolCNameIPF.insert(0, " %-45s # PROTOCOL_NOTIFY %s" % (CName, Usage)) - if "EBC" in Archs: - ProtocolCNameEBC.insert(0, " %-45s # PROTOCOL_NOTIFY %s" % (CName, Usage)) - if "ALL" in Archs: - ProtocolCName.insert(0, " %-45s # PROTOCOL_NOTIFY %s" % (CName, Usage)) - except: - pass - - """ Check for the PPIs Element """ - PPIs = "/ModuleSurfaceArea/PPIs/Ppi" - PPIsList = [] - PpiCName = [] - PpiCNameIa32 = [] - PpiCNameX64 = [] - PpiCNameIPF = [] - PpiCNameEBC = [] - - try: - PPIsList = XmlList(Msa, PPIs) - except: - pass - - if (len(PPIsList) > 0): - for Ppi in PPIsList: - Archs = "" - Usage = "" - CName = "" - - try: - Archs = str(Ppi.getAttribute("SupArchList")) - except: - pass - - Archs = chkArch(Archs) - - try: - Usage = str(Ppi.getAttribute("Usage")) - except: - pass - - try: - CName = str(XmlElementData(Ppi.getElementsByTagName("PpiCName")[0])).strip() - AutoGenGuid.append(CName) - removeDups(CName, GuidCName) - removeDups(CName, GuidCNameIa32) - removeDups(CName, GuidCNameX64) - removeDups(CName, GuidCNameIPF) - removeDups(CName, GuidCNameEBC) - - if "IA32" in Archs: - PpiCNameIa32.insert(0, " %-45s # PPI %s" % (CName, Usage)) - if "X64" in Archs: - PpiCNameX64.insert(0, " %-45s # PPI %s" % (CName, Usage)) - if "IPF" in Archs: - PpiCNameIPF.insert(0, " %-45s # PPI %s" % (CName, Usage)) - if "EBC" in Archs: - PpiCNameEBC.insert(0, " %-45s # PPI %s" % (CName, Usage)) - if "ALL" in Archs: - PpiCName.insert(0, " %-45s # PPI %s" % (CName, Usage)) - except: - pass - - - PPIs = "/ModuleSurfaceArea/PPIs/PpiNotify" - try: - PPIsList = XmlList(Msa, PPIs) - except: - pass - - if (len(PPIsList) > 0): - for Ppi in PPIsList: - Archs = "" - Usage = "" - CName = "" - - try: - Archs = Ppi.getAttribute("SupArchList") - except: - pass - - Archs = chkArch(Archs) - - try: - Usage = Ppi.getAttribute("Usage") - except: - pass - - try: - CName = str(XmlElementData(Ppi.getElementsByTagName("PpiNotifyCName")[0])) - AutoGenGuid.append(CName) - removeDups(CName, GuidCName) - removeDups(CName, GuidCNameIa32) - removeDups(CName, GuidCNameX64) - removeDups(CName, GuidCNameIPF) - removeDups(CName, GuidCNameEBC) - - if "IA32" in Archs: - PpiCNameIa32.insert(0, " %-45s # PPI_NOTIFY %s" % (CName, Usage)) - if "X64" in Archs: - PpiCNameX64.insert(0, " %-45s # PPI_NOTIFY %s" % (CName, Usage)) - if "IPF" in Archs: - PpiCNameIPF.insert(0, " %-45s # PPI_NOTIFY %s" % (CName, Usage)) - if "EBC" in Archs: - PpiCNameEBC.insert(0, " %-45s # PPI_NOTIFY %s" % (CName, Usage)) - if "ALL" in Archs: - PpiCName.insert(0, " %-45s # PPI_NOTIFY %s" % (CName, Usage)) - except: - pass - - - """ Get the PCD entries now """ - PcdCoded = "/ModuleSurfaceArea/PcdCoded/PcdEntry" - PcdList = [] - try: - PcdList = XmlList(Msa, PcdCoded) - except: - pass - - (PcdFF, PcdFFIa32, PcdFFX64, PcdFFIpf, PcdFFEbc) = ([],[],[],[],[]) - (PcdFAB, PcdFABIa32, PcdFABX64, PcdFABIpf, PcdFABEbc) = ([],[],[],[],[]) - (PcdPIM, PcdPIMIa32, PcdPIMX64, PcdPIMIpf, PcdPIMEbc) = ([],[],[],[],[]) - (PcdDY, PcdDYIa32, PcdDYX64, PcdDYIpf, PcdDYEbc) = ([],[],[],[],[]) - (PcdDYE, PcdDYEIa32, PcdDYEX64, PcdDYEIpf, PcdDYEEbc) = ([],[],[],[],[]) - - if (len(PcdList) > 0): - for Pcd in PcdList: - Archs = "" - Usage = "" - CName = "" - DefVal = "" - - try: - Archs = Pcd.getAttribute("SupArchList") - except: - pass - - Archs = chkArch(Archs) - - try: - ItemType = Pcd.getAttribute("PcdItemType") - except: - pass - - try: - CName = str(XmlElementData(Pcd.getElementsByTagName("C_Name")[0])) - except: - raise SyntaxError, "ERROR: MSA has a PCD with no Pcd C_Name defined" - - try: - TSGC = str(XmlElementData(Pcd.getElementsByTagName("TokenSpaceGuidCName")[0])) - except: - pass - - try: - DefVal = str(XmlElementData(Pcd.getElementsByTagName("DefaultValue"))) - except: - pass - - if (len(DefVal) > 0): - line = TSGC + "." + CName + "|" + DefVal - else: - line = TSGC + "." + CName - - if (ItemType == "FEATURE_FLAG"): - if ("IA32" in Archs): - PcdFFIa32.insert(0, line) - if ("IPF" in Archs): - PcdFFIpf.insert(0, line) - if ("X64" in Archs): - PcdFFX64.insert(0, line) - if ("EBC" in Archs): - PcdFFEbc.insert(0, line) - if ("ALL" in Archs): - PcdFF.insert(0, line) - elif (ItemType == "FIXED_AT_BUILD"): - if ("IA32" in Archs): - PcdFABIa32.insert(0, line) - if ("IPF" in Archs): - PcdFABIpf.insert(0, line) - if ("X64" in Archs): - PcdFABX64.insert(0, line) - if ("EBC" in Archs): - PcdFABEbc.insert(0, line) - if ("ALL" in Archs): - PcdFAB.insert(0, line) - elif (ItemType == "PATCHABLE_IN_MODULE"): - if ("IA32" in Archs): - PcdPIMIa32.insert(0, line) - if ("IPF" in Archs): - PcdPIMIpf.insert(0, line) - if ("X64" in Archs): - PcdPIMX64.insert(0, line) - if ("EBC" in Archs): - PcdPIMEbc.insert(0, line) - if ("ALL" in Archs): - PcdFAB.insert(0, line) - elif (ItemType == "DYNAMIC_EX"): - if ("IA32" in Archs): - PcdDYEIa32.insert(0, line) - if ("IPF" in Archs): - PcdDYEIpf.insert(0, line) - if ("X64" in Archs): - PcdDYEX64.insert(0, line) - if ("EBC" in Archs): - PcdDYEEbc.insert(0, line) - if ("ALL" in Archs): - PcdDYE.insert(0, line) - else: - if ("IA32" in Archs): - PcdDYIa32.insert(0, line) - if ("IPF" in Archs): - PcdDYIpf.insert(0, line) - if ("X64" in Archs): - PcdDYX64.insert(0, line) - if ("EBC" in Archs): - PcdDYEbc.insert(0, line) - if ("ALL" in Archs): - PcdDY.insert(0, line) - - """ User Extensions Section """ - UEList = [] - UESectionList = [] - try: - UESectionList = XmlList(Msa, "/ModuleSurfaceArea/UserExtensions") - except: - pass - - if (len(UESectionList) > 0): - for UE in UESectionList[:]: - UserId = "" - Identifier = "" - Value = "" - - try: - UserId = str(UE.getAttribute("UserID")) - except: - raise SyntaxError, "ERROR: Malformed MSA, No UserID Specified in UserExtensions element" - - try: - Identifier = str(UE.getAttribute("Identifier")) - except: - raise SyntaxError, "ERROR: Malformed MSA, No Identifier Specified in UserExtensions element" - - if (options.debug): - print "FOUND A UE Element", UserId, Identifier - - try: - Value = str(XmlElementData(UE)) - except: - pass - - Entry = [UserId, Identifier, Value] - UEList.insert(0, Entry) - - - - if (len(Externlist) > 0): - AutoGenSource = "" - AutoGenDefinitionSource = "" - AutoGenEntryPointSource = "" - AutoGenUnloadSource = "" - if (len(AutoGenDriverModel) > 0): - AutoGenCode = AddDriverBindingProtocolStatement(AutoGenDriverModel) - AutoGenEntryPointSource += AutoGenCode[0] - AutoGenUnloadSource += AutoGenCode[1] - AutoGenDeclaration += AutoGenCode[3] - - - if (len(AutoGenExitBootServices) > 0): - print "[Warning] Please manually add Create Event statement for Exit Boot Service Event!" - if options.event: - AutoGenCode = AddBootServiceEventStatement(AutoGenExitBootServices) - AutoGenEntryPointSource += AutoGenCode[0] - AutoGenUnloadSource += AutoGenCode[1] - AutoGenDefinitionSource += AutoGenCode[2] - AutoGenDeclaration += AutoGenCode[3] - - if (len(AutoGenVirtualAddressChanged) > 0): - print "[Warning] Please manually add Create Event statement for Virtual Address Change Event!" - if options.event: - AutoGenCode = AddVirtualAddressEventStatement(AutoGenVirtualAddressChanged) - AutoGenEntryPointSource += AutoGenCode[0] - AutoGenUnloadSource += AutoGenCode[1] - AutoGenDefinitionSource += AutoGenCode[2] - AutoGenDeclaration += AutoGenCode[3] - - if AutoGenEntryPointSource != "": - OldEntryPoint = AutoGenEntryPoint - AutoGenCode = AddNewEntryPointContentsStatement(BaseName, AutoGenEntryPoint, AutoGenEntryPointSource) - AutoGenEntryPoint = AutoGenCode[0] - AutoGenEntryPointSource = AutoGenCode[1] - AutoGenDeclaration += AutoGenCode[2] - - - if AutoGenEntryPoint != "": - DriverModules.insert(0, " %-30s = %s\n" % ("ENTRY_POINT" , AutoGenEntryPoint)) - - AutoGenSource = AutoGenDefinitionSource + AutoGenEntryPointSource + AutoGenUnloadSource - - if (lFlag): - DefinesComments.append("#\n") - - if (Flag and len(DefinesComments) > 0): - DefinesComments.insert(0, "\n#\n# The following information is for reference only and not required by the build tools.\n#\n") - - if (options.debug and options.verbose > 2): - if (len(DriverModules) > 0): - print DriverModules - if (len(LibraryModules) > 0): - print LibraryModules - if (len(DefinesComments) > 0): - print DefinesComments - - Depex = [] - DepexIa32 = [] - DepexX64 = [] - DepexIpf = [] - DepexEbc = [] - - for DxsFile, Archs in AutoGenDxsFiles: - fileContents = openSourceFile(AutoGenModuleFolder, DxsFile) - Contents, Unresolved = TranslateDpxSection(fileContents) - if Contents == "": - print "[warning] Cannot read dxs expression" - else: - if (len(Unresolved) > 0): - print "[warning] Guid Macro(s): %s cannot find corresponding cNames. Please resolve it in [depex] section in extened inf" % ",".join(Unresolved) - - if ("IA32" in Archs): - DepexIa32.insert(0, Contents) - if ("IPF" in Archs): - DepexIpf.insert(0, Contents) - if ("X64" in Archs): - DepexX64.insert(0, Contents) - if ("EBC" in Archs): - DepexEbc.insert(0, Contents) - if ("ALL" in Archs): - Depex.insert(0, Contents) - - AutoGenSourceHeaderFormat = "/**@file\n %s\n\n %s\n %s\n %s\n**/\n\n%s" - includeCommonHeaderFileStatement = "#include \"%s\"" % commonHeaderFilename - - AutoGenHeader += AddSystemIncludeStatement(ModType, AutoGenPackage) - AutoGenHeader += AddGuidStatement(AutoGenGuid) - AutoGenHeader += AddLibraryClassStatement(AutoGenLibClass) - - if options.manual: - saveSourceFile(AutoGenModuleFolder, "CommonHeader.txt", AutoGenHeader) - else: - - commonHeaderFilename2 = re.sub("(?=[^a-z])", "_", commonHeaderFilename) - commonHeaderFilename2 = "_" + commonHeaderFilename2.replace(".", "").upper() + "_" - briefDiscription = "Common header file shared by all source files." - detailedDiscription = "This file includes package header files, library classes and protocol, PPI & GUID definitions.\n" - AutoGenHeader += AutoGenDeclaration - AutoGenHeader = "#ifndef %s\n#define %s\n\n\n%s\n#endif\n" % (commonHeaderFilename2, commonHeaderFilename2, AutoGenHeader) - AutoGenHeader = AutoGenSourceHeaderFormat % (briefDiscription, detailedDiscription, CopyRight, License, AutoGenHeader) - saveSourceFile(AutoGenModuleFolder, commonHeaderFilename, AutoGenHeader) - SrcFilenames.append(commonHeaderFilename) - - for source in AutoGenSourceFiles: - extension = os.path.splitext(source)[1] - if extension == ".c": - sourceContents = openSourceFile(AutoGenModuleFolder, source) - sourceContents = AddCommonInclusionStatement(sourceContents, includeCommonHeaderFileStatement) - saveSourceFile(AutoGenModuleFolder, source, sourceContents) - - - if AutoGenSource != "": - briefDiscription = "Entry Point Source file." - detailedDiscription = "This file contains the user entry point \n" - AutoGenSource = AutoGenSourceHeaderFormat % (briefDiscription, detailedDiscription, CopyRight, License, AutoGenSource) - AutoGenSource = AddCommonInclusionStatement(AutoGenSource, includeCommonHeaderFileStatement) - - saveSourceFile(AutoGenModuleFolder, entryPointFilename, AutoGenSource) - SrcFilenames.append(entryPointFilename) - - - - - # DONE Getting data, now output it in INF format. - Msa.unlink() - Fdb.unlink() - Output = [] - - """ Print the converted data format """ - head = "#/** @file\n" - head += "# " + str(Abstract) + "\n#\n" - head += "# " + str(Description).strip().replace("\n", "\n# ") + "\n" - head += "# " + str(CopyRight) + "\n#\n" - head += "# " + str(License).replace("\n", "\n# ").replace(" ", " ").strip() + "\n#\n" - head += "#\n#**/\n" - - Output.append(head) - if (options.debug): - print head - -## Defines = "\n" + "#"*80+ "\n#\n" -## if (BinModule != "false"): -## Defines += "# Defines Section - statements that will be processed to generate a binary image.\n" -## else: -## Defines += "# Defines Section - statements that will be processed to create a Makefile.\n" -## Defines += "#\n" + "#"*80 + "\n" - - Defines = "\n" - Defines += "[Defines]\n" - Defines += " %-30s = %s\n" % ("INF_VERSION", "0x00010005") - Defines += " %-30s = %s\n" % ("BASE_NAME", BaseName) - Defines += " %-30s = %s\n" % ("FILE_GUID", GuidValue) - Defines += " %-30s = %s\n" % ("MODULE_TYPE", ModType) - Defines += " %-30s = %s\n" % ("VERSION_STRING", VerString) - - if (len(PcdIsDriver) > 0): - Defines += " %-30s = %s\n" % ("PCD_DRIVER", PcdIsDriver) - - if (len(IamLibrary) > 0): - lcstr = "" - for lc in IamLibrary[:]: - lcstr += lc + " " - Defines += " %-30s = %s" % ("LIBRARY_CLASS", lcstr) - Defines += "\n" - - if (len(SpecList) > 0): - for spec in SpecList[:]: - (specname, specval) = spec.split() - Defines += " %-30s = %s\n" % (specname, specval) - Defines += "\n" - - if (len(DriverModules) > 0): - for line in DriverModules[:]: - Defines += line - - if (len(LibraryModules) > 0): - for line in LibraryModules[:]: - Defines += line - - if (len(DefinesComments) > 0): - for line in DefinesComments[:]: - Defines += line - - Output.append(Defines) - - if (options.debug): - print Defines - - if (BinModule != "false"): - """ Binary Module, so sources are really binaries. """ -## Sources = "\n" + "#"*80 + "\n#\n" -## Sources += "# Binaries Section - list of binary files that are required for the build\n# to succeed.\n" -## Sources += "#\n" + "#"*80 + "\n\n" - Sources = "\n" - if ModType == "UEFI_APPLICATION": - FileType = "UEFI_APP" - if options.verbose > 0: - print "WARNING: Binary Module: %s is assuming UEFI_APPLICATION file type." % (options.filename) - else: - FileType = "FV" - if options.verbose > 0: - print "WARNING: Binary Module: %s is assuming FV file type." % (options.filename) - - if (len(SrcFilenames) > 0): - Sources += "[Binaries.common]\n" - for file in SrcFilenames[:]: - file = file.replace("\\", "/") - Sources += " " + FileType + "|" + file + "\n" - Sources += "\n" - - if (len(SrcFilenamesIa32) > 0): - Sources += "[Binaries.Ia32]\n" - for file in SrcFilenamesIa32[:]: - file = file.replace("\\", "/") - Sources += " " + FileType + "|" + file + "\n" - Sources += "\n" - - if (len(SrcFilenamesX64) > 0): - Sources += "[Binaries.X64]\n" - for file in SrcFilenamesX64[:]: - file = file.replace("\\", "/") - Sources += " " + FileType + "|" + file + "\n" - Sources += "\n" - - if (len(SrcFilenamesIpf) > 0): - Sources += "[Binaries.IPF]\n" - for file in SrcFilenamesIpf[:]: - file = file.replace("\\", "/") - Sources += " " + FileType + "|" + file + "\n" - Sources += "\n" - - if (len(SrcFilenamesEbc) > 0): - Sources += "[Binaries.EBC]\n" - for file in SrcFilenamesEbc[:]: - file = file.replace("\\", "/") - Sources += " " + FileType + "|" + file + "\n" - Sources += "\n" - - Output.append(Sources) - if (options.debug): - print Sources - else: -## Sources = "\n" + "#"*80 + "\n#\n" -## Sources += "# Sources Section - list of files that are required for the build to succeed.\n" -## Sources += "#\n" + "#"*80 + "\n\n" - Sources = "\n" - if (len(SrcFilenames) > 0): - Sources += "[Sources.common]\n" - for file in SrcFilenames[:]: - Sources += " " + file + "\n" - Sources += "\n" - - if (len(SrcFilenamesIa32) > 0): - Sources += "[Sources.Ia32]\n" - for file in SrcFilenamesIa32[:]: - Sources += " " + file + "\n" - Sources += "\n" - - if (len(SrcFilenamesX64) > 0): - Sources += "[Sources.X64]\n" - for file in SrcFilenamesX64[:]: - Sources += " " + file + "\n" - Sources += "\n" - - if (len(SrcFilenamesIpf) > 0): - Sources += "[Sources.IPF]\n" - for file in SrcFilenamesIpf[:]: - Sources += " " + file + "\n" - Sources += "\n" - - if (len(SrcFilenamesEbc) > 0): - Sources += "[Sources.EBC]\n" - for file in SrcFilenamesEbc[:]: - Sources += " " + file + "\n" - Sources += "\n" - - Output.append(Sources) - if (options.debug): - print Sources - - - includeLine = "" - if ((len(HeaderLocations) > 0) or (len(Dirs) > 0)): - allLcs = set(LibClassList + LibClassListIa32 + LibClassListX64 + LibClassListIpf + LibClassListEbc + Dirs) - Lines = [] - for line in HeaderLocations[:]: - for Lc in allLcs: - (keyword, header) = line.split("|") - if Lc in keyword: - if (options.debug): - print "FOUND", Lc, "in", keyword, "header", header - path = "$(WORKSPACE)/" + os.path.split(header)[0] - Lines.insert(0, path.strip()) - Includes = "" -## Includes = "\n" + "#"*80 + "\n#\n" -## Includes += "# Includes Section - list of Include locations that are required for\n" -## Includes += "# this module.\n" -## Includes += "#\n" + "#"*80 + "\n\n" -## Includes += "[Includes]\n" -## includeLines = [] -## includeLines = set(Lines) -## if (options.debug): -## print "There are", len(includeLines), "entries" -## for Line in includeLines: -## Includes += " " + str(Line).strip().replace("\\", "/") + "\n" - - Output.append(Includes) - if (options.debug): - print Includes - - - - if ((len(PkgList) + len(PkgListIa32) + len(PkgListX64) + len(PkgListIpf) + len(PkgListEbc)) > 0): - """ We do this if and only if we have Package Dependencies """ -## PackageDepends = "\n" + "#"*80 + "\n#\n" -## PackageDepends += "# Package Dependency Section - list of Package files that are required for\n" -## PackageDepends += "# this module.\n" -## PackageDepends += "#\n" + "#"*80 + "\n\n" - PackageDepends = "\n" - if (len(PkgList) > 0): - PackageDepends += "[Packages]\n" - for lc in PkgList[:]: - lc = lc.replace("\\", "/") - PackageDepends += " " + lc + "\n" - PackageDepends += "\n" - - if (len(PkgListIa32) > 0): - PackageDepends += "[Packages.IA32]\n" - for lc in PkgListIa32[:]: - lc = lc.replace("\\", "/") - PackageDepends += " " + lc + "\n" - PackageDepends += "\n" - - if (len(PkgListX64) > 0): - PackageDepends += "[Packages.X64]\n" - for lc in PkgListX64[:]: - lc = lc.replace("\\", "/") - PackageDepends += " " + lc + "\n" - PackageDepends += "\n" - - if (len(PkgListIpf) > 0): - PackageDepends += "[Packages.IPF]\n" - for lc in PkgListIpf[:]: - lc = lc.replace("\\", "/") - PackageDepends += " " + lc + "\n" - PackageDepends += "\n" - - if (len(PkgListEbc) > 0): - PackageDepends += "[Packages.EBC]\n" - for lc in PkgListEbc[:]: - lc = lc.replace("\\", "/") - PackageDepends += " " + lc + "\n" - PackageDepends += "\n" - - Output.append(PackageDepends) - if (options.debug): - print PackageDepends - - if ((len(LibClassList) + len(LibClassListIa32) + len(LibClassListX64) + len(LibClassListIpf) + len(LibClassListEbc)) > 0): -## LibraryClasses = "\n" + "#"*80 + "\n#\n" -## LibraryClasses += "# Library Class Section - list of Library Classes that are required for\n" -## LibraryClasses += "# this module.\n" -## LibraryClasses += "#\n" + "#"*80 + "\n\n" - - LibraryClasses = "\n" - if (len(LibClassList) > 0): - LibraryClasses += "[LibraryClasses]\n" - for lc in LibClassList[:]: - LibraryClasses += " " + lc + "\n" - LibraryClasses += "\n" - - if (len(LibClassListIa32) > 0): - LibraryClasses += "[LibraryClasses.IA32]\n" - for lc in LibClassListIa32[:]: - LibraryClasses += " " + lc + "\n" - LibraryClasses += "\n" - - if (len(LibClassListX64) > 0): - LibraryClasses += "[LibraryClasses.X64]\n" - for lc in LibClassListX64[:]: - LibraryClasses += " " + lc + "\n" - LibraryClasses += "\n" - - if (len(LibClassListIpf) > 0): - LibraryClasses += "[LibraryClasses.IPF]\n" - for lc in LibClassListIpf[:]: - LibraryClasses += " " + lc + "\n" - LibraryClasses += "\n" - - if (len(LibClassListEbc) > 0): - LibraryClasses += "[LibraryClasses.EBC]\n" - for lc in LibClassListEbc[:]: - LibraryClasses += " " + lc + "\n" - LibraryClasses += "\n" - - Output.append(LibraryClasses) - if (options.debug): - print LibraryClasses - - # Print the Guids sections - if (len(GuidCName) + len(GuidCNameIa32) + len(GuidCNameIPF) + len(GuidCNameX64) + len(GuidCNameEBC)) > 0: -## GuidSection = "\n" + "#"*80 + "\n#\n" -## GuidSection += "# Guid C Name Section - list of Guids that this module uses or produces.\n" -## GuidSection += "#\n" + "#"*80 + "\n\n" - GuidSection = "\n" - if (len(GuidCName) > 0): - GuidSection += "[Guids]\n" - for Guid in GuidCName[:]: - GuidSection += Guid + "\n" - GuidSection += "\n" - - if (len(GuidCNameIa32) > 0): - GuidSection += "[Guids.IA32]\n" - for Guid in GuidCNameIa32[:]: - GuidSection += Guid + "\n" - GuidSection += "\n" - - if (len(GuidCNameX64) > 0): - GuidSection += "[Guids.X64]\n" - for Guid in GuidCNameX64[:]: - GuidSection += Guid + "\n" - GuidSection += "\n" - - if (len(GuidCNameIPF) > 0): - GuidSection += "[Guids.IPF]\n" - for Guid in GuidCNameIPF[:]: - GuidSection += Guid + "\n" - GuidSection += "\n" - - if (len(GuidCNameEBC) > 0): - GuidSection += "[Guids.EBC]\n" - for Guid in GuidCNameEBC[:]: - GuidSection += Guid + "\n" - GuidSection += "\n" - - Output.append(GuidSection) - if (options.debug and options.verbose > 1): - print GuidSection - - # Print the Protocol sections - if (len(ProtocolCName) + len(ProtocolCNameIa32) + len(ProtocolCNameIPF) + len(ProtocolCNameX64) + len(ProtocolCNameEBC)) > 0: -## ProtocolsSection = "\n" + "#"*80 + "\n#\n" -## ProtocolsSection += "# Protocol C Name Section - list of Protocol and Protocol Notify C Names\n" -## ProtocolsSection += "# that this module uses or produces.\n" -## ProtocolsSection += "#\n" + "#"*80 + "\n\n" - - ProtocolsSection = "\n" - if (len(ProtocolCName) > 0): - ProtocolsSection += "[Protocols]\n" - for Guid in ProtocolCName[:]: - ProtocolsSection += Guid + "\n" - ProtocolsSection += "\n" - - if (len(ProtocolCNameIa32) > 0): - ProtocolsSection += "[Protocols.IA32]\n" - for Guid in ProtocolCNameIa32[:]: - ProtocolsSection += Guid + "\n" - ProtocolsSection += "\n" - - if (len(ProtocolCNameX64) > 0): - ProtocolsSection += "[Protocols.X64]\n" - for Guid in ProtocolCNameX64[:]: - ProtocolsSection += Guid + "\n" - ProtocolsSection += "\n" - - if (len(ProtocolCNameIPF) > 0): - ProtocolsSection += "[Protocols.IPF]\n" - for Guid in ProtocolCNameIPF[:]: - ProtocolsSection += Guid + "\n" - ProtocolsSection += "\n" - - if (len(ProtocolCNameEBC) > 0): - ProtocolsSection += "[Protocols.EBC]\n" - for Guid in ProtocolCNameEBC[:]: - ProtocolsSection += Guid + "\n" - ProtocolsSection += "\n" - - Output.append(ProtocolsSection) - if (options.debug): - print ProtocolsSection - - # Print the PPI sections - if (len(PpiCName) + len(PpiCNameIa32) + len(PpiCNameIPF) + len(PpiCNameX64) + len(PpiCNameEBC)) > 0: -## PpiSection = "\n" + "#"*80 + "\n#\n" -## PpiSection += "# PPI C Name Section - list of PPI and PPI Notify C Names that this module\n" -## PpiSection += "# uses or produces.\n" -## PpiSection += "#\n" + "#"*80 + "\n\n" - - PpiSection = "\n" - if (len(PpiCName) > 0): - PpiSection += "[Ppis]\n" - for Guid in PpiCName[:]: - PpiSection += Guid + "\n" - PpiSection += "\n" - - if (len(PpiCNameIa32) > 0): - PpiSection += "[Ppis.IA32]\n" - for Guid in PpiCNameIa32[:]: - PpiSection += Guid + "\n" - PpiSection += "\n" - - if (len(PpiCNameX64) > 0): - PpiSection += "[Ppis.X64]\n" - for Guid in PpiCNameX64[:]: - PpiSection += Guid + "\n" - PpiSection += "\n" - - if (len(PpiCNameIPF) > 0): - PpiSection += "[Ppis.IPF]\n" - for Guid in PpiCNameIPF[:]: - PpiSection += Guid + "\n" - PpiSection += "\n" - - if (len(PpiCNameEBC) > 0): - PpiSection += "[Ppis.EBC]\n" - for Guid in PpiCNameEBC[:]: - PpiSection += Guid + "\n" - PpiSection += "\n" - - Output.append(PpiSection) - if (options.debug): - print PpiSection - - # Print the PCD sections - if ((len(PcdFF)+len(PcdFFIa32)+len(PcdFFX64)+len(PcdFFIpf)+len(PcdFFEbc)) > 0): -## FeatureFlagSection = "\n" + "#"*80 + "\n#\n" -## FeatureFlagSection += "# Pcd FEATURE_FLAG - list of PCDs that this module is coded for.\n" -## FeatureFlagSection += "#\n" + "#"*80 + "\n\n" - - FeatureFlagSection = "\n" - if (len(PcdFF) > 0): - FeatureFlagSection += "[FeaturePcd.common]\n" - for Entry in PcdFF[:]: - FeatureFlagSection += " " + Entry + "\n" - FeatureFlagSection += "\n" - if (len(PcdFFIa32) > 0): - FeatureFlagSection += "[FeaturePcd.IA32]\n" - for Entry in PcdFFIa32[:]: - FeatureFlagSection += " " + Entry + "\n" - FeatureFlagSection += "\n" - if (len(PcdFFX64) > 0): - FeatureFlagSection += "[FeaturePcd.X64]\n" - for Entry in PcdFFX64[:]: - FeatureFlagSection += " " + Entry + "\n" - FeatureFlagSection += "\n" - if (len(PcdFFIpf) > 0): - FeatureFlagSection += "[PcdsFeatureFlag.IPF]\n" - for Entry in PcdFFIpf[:]: - FeatureFlagSection += " " + Entry + "\n" - FeatureFlagSection += "\n" - if (len(PcdFFEbc) > 0): - FeatureFlagSection += "[FeaturePcd.EBC]\n" - for Entry in PcdFFEbc[:]: - FeatureFlagSection += " " + Entry + "\n" - FeatureFlagSection += "\n" - - Output.append(FeatureFlagSection) - if (options.debug): - print FeatureFlagSection - - if ((len(PcdFAB)+len(PcdFABIa32)+len(PcdFABX64)+len(PcdFABIpf)+len(PcdFABEbc)) > 0): -## FixedAtBuildSection = "\n" + "#"*80 + "\n#\n" -## FixedAtBuildSection += "# Pcd FIXED_AT_BUILD - list of PCDs that this module is coded for.\n" -## FixedAtBuildSection += "#\n" + "#"*80 + "\n\n" - - FixedAtBuildSection = "\n" - if (len(PcdFAB) > 0): - FixedAtBuildSection += "[FixedPcd.common]\n" - for Entry in PcdFAB[:]: - FixedAtBuildSection += " " + Entry + "\n" - FixedAtBuildSection += "\n" - if (len(PcdFABIa32) > 0): - FixedAtBuildSection += "[FixedPcd.IA32]\n" - for Entry in PcdFABIa32[:]: - FixedAtBuildSection += " " + Entry + "\n" - FixedAtBuildSection += "\n" - if (len(PcdFABX64) > 0): - FixedAtBuildSection += "[FixedPcd.X64]\n" - for Entry in PcdFABX64[:]: - FixedAtBuildSection += " " + Entry + "\n" - FixedAtBuildSection += "\n" - if (len(PcdFABIpf) > 0): - FixedAtBuildSection += "[FixedPcd.IPF]\n" - for Entry in PcdFABIpf[:]: - FixedAtBuildSection += " " + Entry + "\n" - FixedAtBuildSection += "\n" - if (len(PcdFABEbc) > 0): - FixedAtBuildSection += "[FixedPcd.EBC]\n" - for Entry in PcdFABEbc[:]: - FixedAtBuildSection += " " + Entry + "\n" - FixedAtBuildSection += "\n" - - Output.append(FixedAtBuildSection) - if (options.debug): - print FixedAtBuildSection - - if ((len(PcdPIM)+len(PcdPIMIa32)+len(PcdPIMX64)+len(PcdPIMIpf)+len(PcdPIMEbc)) > 0): -## PatchableInModuleSection = "\n" + "#"*80 + "\n#\n" -## PatchableInModuleSection += "# Pcd PATCHABLE_IN_MODULE - list of PCDs that this module is coded for.\n" -## PatchableInModuleSection += "#\n" + "#"*80 + "\n\n" - - PatchableInModuleSection = "\n" - if (len(PcdPIM) > 0): - PatchableInModuleSection += "[PatchPcd.common]\n" - for Entry in PcdPIM[:]: - PatchableInModuleSection += " " + Entry + "\n" - PatchableInModuleSection += "\n" - if (len(PcdPIMIa32) > 0): - PatchableInModuleSection += "[PatchPcd.IA32]\n" - for Entry in PcdPIMIa32[:]: - PatchableInModuleSection += " " + Entry + "\n" - PatchableInModuleSection += "\n" - if (len(PcdPIMX64) > 0): - PatchableInModuleSection += "[PatchPcd.X64]\n" - for Entry in PcdPIMX64[:]: - PatchableInModuleSection += " " + Entry + "\n" - PatchableInModuleSection += "\n" - if (len(PcdPIMIpf) > 0): - PatchableInModuleSection += "[PatchPcd.IPF]\n" - for Entry in PcdPIMIpf[:]: - PatchableInModuleSection += " " + Entry + "\n" - PatchableInModuleSection += "\n" - if (len(PcdPIMEbc) > 0): - PatchableInModuleSection += "[PatchPcd.EBC]\n" - for Entry in PcdPIMEbc[:]: - PatchableInModuleSection += " " + Entry + "\n" - PatchableInModuleSection += "\n" - - Output.append(PatchableInModuleSection) - if (options.debug): - print PatchableInModuleSection - - if ((len(PcdDYE)+len(PcdDYEIa32)+len(PcdDYEX64)+len(PcdDYEIpf)+len(PcdDYEEbc)) > 0): -## DynamicExSection = "\n" + "#"*80 + "\n#\n" -## DynamicExSection += "# Pcd DYNAMIC_EX - list of PCDs that this module is coded for.\n" -## DynamicExSection += "#\n" + "#"*80 + "\n\n" - - DynamicExSection = "\n" - if (len(PcdDYE) > 0): - DynamicExSection += "[PcdEx.common]\n" - for Entry in PcdDYE[:]: - DynamicExSection += " " + Entry + "\n" - DynamicExSection += "\n" - if (len(PcdDYEIa32) > 0): - DynamicExSection += "[PcdEx.IA32]\n" - for Entry in PcdDYEIa32[:]: - DynamicExSection += " " + Entry + "\n" - DynamicExSection += "\n" - if (len(PcdDYEX64) > 0): - DynamicExSection += "[PcdEx.X64]\n" - for Entry in PcdDYEX64[:]: - DynamicExSection += " " + Entry + "\n" - DynamicExSection += "\n" - if (len(PcdDYEIpf) > 0): - DynamicExSection += "[PcdEx.IPF]\n" - for Entry in PcdDYEIpf[:]: - DynamicExSection += " " + Entry + "\n" - DynamicExSection += "\n" - if (len(PcdDYEEbc) > 0): - DynamicExSection += "[PcdEx.EBC]\n" - for Entry in PcdDYEEbc[:]: - DynamicExSection += " " + Entry + "\n" - DynamicExSection += "\n" - - Output.append(DynamicExSection) - if (options.debug): - print DynamicExSection - - if ((len(PcdDY)+len(PcdDYIa32)+len(PcdDYX64)+len(PcdDYIpf)+len(PcdDYEbc)) > 0): -## DynamicSection = "\n" + "#"*80 + "\n#\n" -## DynamicSection += "# Pcd DYNAMIC - list of PCDs that this module is coded for.\n" -## DynamicSection += "#\n" + "#"*80 + "\n\n" - - DynamicSection = "\n" - if (len(PcdDY) > 0): - DynamicSection += "[Pcd.common]\n" - for Entry in PcdDY[:]: - DynamicSection += " " + Entry + "\n" - DynamicSection += "\n" - if (len(PcdDYIa32) > 0): - DynamicSection += "[Pcd.IA32]\n" - for Entry in PcdDYIa32[:]: - DynamicSection += " " + Entry + "\n" - DynamicSection += "\n" - if (len(PcdDYX64) > 0): - DynamicSection += "[Pcd.X64]\n" - for Entry in PcdDYX64[:]: - DynamicSection += " " + Entry + "\n" - DynamicSection += "\n" - if (len(PcdDYIpf) > 0): - DynamicSection += "[Pcd.IPF]\n" - for Entry in PcdDYIpf[:]: - DynamicSection += " " + Entry + "\n" - DynamicSection += "\n" - if (len(PcdDYEbc) > 0): - DynamicSection += "[Pcd.EBC]\n" - for Entry in PcdDYEbc[:]: - DynamicSection += " " + Entry + "\n" - DynamicSection += "\n" - - Output.append(DynamicSection) - if (options.debug): - print DynamicSection - - if ((len(Depex) + len(DepexIa32) + len(DepexX64) + len(DepexIpf) + len(DepexEbc)) > 0): - """ We do this if and only if we have Package Dependencies """ -## Dpx = "\n" + "#"*80 + "\n#\n" -## Dpx += "# Dependency Expression Section - list of Dependency expressions that are required for\n" -## Dpx += "# this module.\n" -## Dpx += "#\n" + "#"*80 + "\n\n" - Dpx = "\n" - if (len(Depex) > 0): - Dpx += "[Depex]\n" - for lc in Depex[:]: - Dpx += " " + lc + "\n" - Dpx += "\n" - - if (len(DepexIa32) > 0): - Dpx += "[Depex.IA32]\n" - for lc in DepexIa32[:]: - Dpx += " " + lc + "\n" - Dpx += "\n" - - if (len(DepexX64) > 0): - Dpx += "[Depex.X64]\n" - for lc in DepexX64[:]: - Dpx += " " + lc + "\n" - Dpx += "\n" - - if (len(DepexIpf) > 0): - Dpx += "[Depex.IPF]\n" - for lc in DepexIpf[:]: - Dpx += " " + lc + "\n" - Dpx += "\n" - - if (len(DepexEbc) > 0): - Dpx += "[Depex.EBC]\n" - for lc in DepexEbc[:]: - Dpx += " " + lc + "\n" - Dpx += "\n" - - Output.append(Dpx) - if (options.debug): - print Dpx - - if (len(MBOlines) > 0): - BuildSection = "" -## BuildSection = "\n" + "#"*80 + "\n#\n" -## BuildSection += "# Build Options - list of custom build options for this module.\n" -## BuildSection += "#\n" + "#"*80 + "\n\n" - BuildSection += "\n[BuildOptions]\n" - for mbo in MBOlines: - tool, targs = mbo.split("=",2) - BuildSection += " %-40s = %s\n" % (tool.strip(), targs.strip()) - - Output.append(BuildSection) - if (options.debug): - print BuildSection - - - if (len(UEList) > 0): - UserExtensionSection = "" - for UE in UEList[:]: - UserExtensionSection += "[UserExtensions." + UE[0] + '."' + UE[1] + '"]\n' - if (len(UE[2]) > 0): - UserExtensionSection += '"' + UE[2] + '"\n' - else: - UserExtensionSection += "\n" - - Output.append(UserExtensionSection) - if (options.debug): - print UserExtensionSection - - print "write file", outputFile - if (options.autowrite): - fo = open(outputFile, "w") - for Section in Output[:]: - fo.writelines(Section) - if (options.verbose > 1): - print Section - fo.close() - elif (options.outfile): - fo = open(outputFile, "w") - for Section in Output[:]: - fo.writelines(Section) - fo.close() - else: - for Section in Output[:]: - print Section - - -if __name__ == '__main__': - - global options - global args - options,args = myOptionParser() - - main() - sys.exit(0) - |