]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Sync BaseTool trunk (version r2423) into EDKII BaseTools. The change mainly includes:
authorlgao4 <lgao4@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 25 Nov 2011 06:21:03 +0000 (06:21 +0000)
committerlgao4 <lgao4@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 25 Nov 2011 06:21:03 +0000 (06:21 +0000)
  1. Fix !include issues
  2. Fix Trim to skip the postfix 'U' for hexadecimal and decimal numbers
  3. Fix building error C2733 when building C++ code.
  4. Add GCC46 tool chain definition
  5. Add new RVCT and RVCTLINUX tool chains

Signed-off-by: lgao4
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12782 6f19259b-4bc3-4df7-8a09-765794883524

63 files changed:
BaseTools/Bin/Win32/BPDG.exe
BaseTools/Bin/Win32/BootSectImage.exe
BaseTools/Bin/Win32/EfiLdrImage.exe
BaseTools/Bin/Win32/EfiRom.exe
BaseTools/Bin/Win32/Fpd2Dsc.exe
BaseTools/Bin/Win32/GenBootSector.exe
BaseTools/Bin/Win32/GenCrc32.exe
BaseTools/Bin/Win32/GenDepex.exe
BaseTools/Bin/Win32/GenFds.exe
BaseTools/Bin/Win32/GenFfs.exe
BaseTools/Bin/Win32/GenFv.exe
BaseTools/Bin/Win32/GenFw.exe
BaseTools/Bin/Win32/GenPage.exe
BaseTools/Bin/Win32/GenPatchPcdTable.exe
BaseTools/Bin/Win32/GenSec.exe
BaseTools/Bin/Win32/GenVtf.exe
BaseTools/Bin/Win32/LzmaCompress.exe
BaseTools/Bin/Win32/MigrationMsa2Inf.exe
BaseTools/Bin/Win32/PatchPcdValue.exe
BaseTools/Bin/Win32/Spd2Dec.exe
BaseTools/Bin/Win32/Split.exe
BaseTools/Bin/Win32/TargetTool.exe
BaseTools/Bin/Win32/TianoCompress.exe
BaseTools/Bin/Win32/Trim.exe
BaseTools/Bin/Win32/UPT.exe
BaseTools/Bin/Win32/VfrCompile.exe
BaseTools/Bin/Win32/VolInfo.exe
BaseTools/Bin/Win32/build.exe
BaseTools/Conf/build_rule.template
BaseTools/Conf/tools_def.template
BaseTools/Source/C/Common/FirmwareVolumeBuffer.c
BaseTools/Source/C/GenFv/GenFvInternalLib.c
BaseTools/Source/C/GenFv/GenFvInternalLib.h
BaseTools/Source/C/Include/Common/BuildVersion.h
BaseTools/Source/C/Include/Common/PiFirmwareVolume.h
BaseTools/Source/C/VfrCompile/VfrFormPkg.cpp
BaseTools/Source/C/VfrCompile/VfrSyntax.g
BaseTools/Source/C/VolInfo/VolInfo.c
BaseTools/Source/Python/AutoGen/GenC.py
BaseTools/Source/Python/AutoGen/GenMake.py
BaseTools/Source/Python/AutoGen/StrGather.py
BaseTools/Source/Python/AutoGen/UniClassObject.py
BaseTools/Source/Python/Common/BuildVersion.py
BaseTools/Source/Python/Common/DecClassObjectLight.py [deleted file]
BaseTools/Source/Python/Common/InfClassObjectLight.py [deleted file]
BaseTools/Source/Python/Common/XmlParser.py [deleted file]
BaseTools/Source/Python/Common/XmlRoutines.py [deleted file]
BaseTools/Source/Python/CommonDataClass/DistributionPackageClass.py [deleted file]
BaseTools/Source/Python/Ecc/Check.py
BaseTools/Source/Python/Ecc/EccToolError.py
BaseTools/Source/Python/Ecc/Exception.py
BaseTools/Source/Python/Ecc/Xml/XmlRoutines.py [new file with mode: 0644]
BaseTools/Source/Python/Ecc/Xml/__init__.py [new file with mode: 0644]
BaseTools/Source/Python/GenFds/FdfParser.py
BaseTools/Source/Python/Makefile
BaseTools/Source/Python/Trim/Trim.py
BaseTools/Source/Python/UPT/BuildVersion.py [new file with mode: 0644]
BaseTools/Source/Python/UPT/Library/Misc.py
BaseTools/Source/Python/UPT/Logger/StringTable.py
BaseTools/Source/Python/UPT/Makefile
BaseTools/Source/Python/UPT/Parser/InfParser.py
BaseTools/Source/Python/UPT/UPT.py
BaseTools/Source/Python/Workspace/MetaFileParser.py

index b198906dbc04f1c4ab710dcbea9de4ebcef7cde5..d75855948c5d1435a6ac2cf5936830308f53f2c2 100644 (file)
Binary files a/BaseTools/Bin/Win32/BPDG.exe and b/BaseTools/Bin/Win32/BPDG.exe differ
index 7c0278dce719b419905b016fa165a24f60425c0c..a278b171b48d3f0c357a9aec4a13cf297b91ce12 100755 (executable)
Binary files a/BaseTools/Bin/Win32/BootSectImage.exe and b/BaseTools/Bin/Win32/BootSectImage.exe differ
index a84e8c6be39f83410c37cefacb9c56ca5640eaf0..ccd168488d0ded04a0b91d2f820b5dad39241d84 100755 (executable)
Binary files a/BaseTools/Bin/Win32/EfiLdrImage.exe and b/BaseTools/Bin/Win32/EfiLdrImage.exe differ
index 8b5ff4b4bfdcc2882ec91e2d0129a31065e752cf..d7f3e71c27e685c2c59381b7b319ef7ef4d2f484 100755 (executable)
Binary files a/BaseTools/Bin/Win32/EfiRom.exe and b/BaseTools/Bin/Win32/EfiRom.exe differ
index fdd78439c706c5c6090b4812a4fa9e855ad0cdcf..938a3820a038d79a9207c8da1f7f584746a674fd 100755 (executable)
Binary files a/BaseTools/Bin/Win32/Fpd2Dsc.exe and b/BaseTools/Bin/Win32/Fpd2Dsc.exe differ
index 7b640e928368e17f67e210b2c86fed2a18fe2dca..d5149510f9f9235d38551cbbe02949d2a4ebd717 100755 (executable)
Binary files a/BaseTools/Bin/Win32/GenBootSector.exe and b/BaseTools/Bin/Win32/GenBootSector.exe differ
index ee7237ad1e796044532949e67b6b33fa55738d27..4003ba854118eaca40013e045bd893307d286780 100755 (executable)
Binary files a/BaseTools/Bin/Win32/GenCrc32.exe and b/BaseTools/Bin/Win32/GenCrc32.exe differ
index 1143ee73550570c3e72ed8435a70697c1aac50d9..8afed630101e90ac2531275cedec7d39acc076e4 100755 (executable)
Binary files a/BaseTools/Bin/Win32/GenDepex.exe and b/BaseTools/Bin/Win32/GenDepex.exe differ
index c6cdeb90498111d66337b7c4c93417b90cb4b71b..470ed8aa985e8e5a3f85fc6ff76fe9cd8f4435fa 100755 (executable)
Binary files a/BaseTools/Bin/Win32/GenFds.exe and b/BaseTools/Bin/Win32/GenFds.exe differ
index 21294a6d57e6e31f6faac44d25633981c2e14653..f0ab6d84f9422c3e1a67257a62ee956485aa9820 100755 (executable)
Binary files a/BaseTools/Bin/Win32/GenFfs.exe and b/BaseTools/Bin/Win32/GenFfs.exe differ
index a362959994b26101e71ad924b256dbfb791227f1..2b58bf51c03a887f0400977dab64a9799b7e3102 100755 (executable)
Binary files a/BaseTools/Bin/Win32/GenFv.exe and b/BaseTools/Bin/Win32/GenFv.exe differ
index 5295d76d9c2664ed999e6755c6c7e766d923b41c..6e509a87f49a35a85f8027fef288864a8683be5e 100755 (executable)
Binary files a/BaseTools/Bin/Win32/GenFw.exe and b/BaseTools/Bin/Win32/GenFw.exe differ
index 24ba6770ac0e0ea169d235c59ae48b15f0db58af..a2a70f345441a492d1cfc3d995dc35de11b6573a 100755 (executable)
Binary files a/BaseTools/Bin/Win32/GenPage.exe and b/BaseTools/Bin/Win32/GenPage.exe differ
index 82f6f56b243f4d2a40713be38466db80f4eaa222..7f3cb9c5970c95b4540aebfe4e2348184f3fb573 100755 (executable)
Binary files a/BaseTools/Bin/Win32/GenPatchPcdTable.exe and b/BaseTools/Bin/Win32/GenPatchPcdTable.exe differ
index 9bc9a68451cf43f83af53eb0d7e199d86e6637e3..37b12443bb96d5a1af6322b33d617efb200cf203 100755 (executable)
Binary files a/BaseTools/Bin/Win32/GenSec.exe and b/BaseTools/Bin/Win32/GenSec.exe differ
index 5cf1a0a5d78026e7f092c0e9fb6c040020841267..e93adbad7580be9894819c09cf43761cef59317f 100755 (executable)
Binary files a/BaseTools/Bin/Win32/GenVtf.exe and b/BaseTools/Bin/Win32/GenVtf.exe differ
index fc9db77b8edc3c9b15f2e8c4daa5b8e69c7bea19..62b472cb5a441baacf48b2bc05ac816d15db7ef0 100755 (executable)
Binary files a/BaseTools/Bin/Win32/LzmaCompress.exe and b/BaseTools/Bin/Win32/LzmaCompress.exe differ
index 78864940bb8602c8efbc7c0ff49a84d2f5721954..e133108645a302024cd70e4d4360a3cd202fc472 100755 (executable)
Binary files a/BaseTools/Bin/Win32/MigrationMsa2Inf.exe and b/BaseTools/Bin/Win32/MigrationMsa2Inf.exe differ
index 2cbd95fc63129abadcdf9ce2ab932346184acee5..339740a31f73892c711b4adec1e86e69b877ecdd 100755 (executable)
Binary files a/BaseTools/Bin/Win32/PatchPcdValue.exe and b/BaseTools/Bin/Win32/PatchPcdValue.exe differ
index 59b28174c6372cb78c5a1483667a8ce02860d1a6..ab96d5a90a417e4598694e2420075172c0199fd2 100755 (executable)
Binary files a/BaseTools/Bin/Win32/Spd2Dec.exe and b/BaseTools/Bin/Win32/Spd2Dec.exe differ
index 8bd2ebc48a5925ccd797268ef473585c685d9e75..9c1b0f676446e94924e56a0844f2facd1ed20e50 100755 (executable)
Binary files a/BaseTools/Bin/Win32/Split.exe and b/BaseTools/Bin/Win32/Split.exe differ
index 776feb588114e118a9a4b0f5a477d88df641605d..59f83aa3f1c8a44b35e5dabd5daee6b28bce1af8 100755 (executable)
Binary files a/BaseTools/Bin/Win32/TargetTool.exe and b/BaseTools/Bin/Win32/TargetTool.exe differ
index 66b559b58de37fed72069e9657b11b25ff01edd4..1a718ecf57d0c3d684481e2fdf5fe74e8bb7b1a7 100755 (executable)
Binary files a/BaseTools/Bin/Win32/TianoCompress.exe and b/BaseTools/Bin/Win32/TianoCompress.exe differ
index 36e1e7ac614ea72c0558505f10d9490d0841c709..71e8e352d07271ef9a3dc3292bf3b72ccc20af36 100755 (executable)
Binary files a/BaseTools/Bin/Win32/Trim.exe and b/BaseTools/Bin/Win32/Trim.exe differ
index da4da6f8e13a6cf67074a0f3086d8a62420fae83..ac13bfe6bb0f40bb2bbe1fa0896414f496f36c3a 100644 (file)
Binary files a/BaseTools/Bin/Win32/UPT.exe and b/BaseTools/Bin/Win32/UPT.exe differ
index a5c25b554ba937ef480eaab0fd61ad01d06f569e..0b1c7bdaca92b830e472ae930610c8d7728fd077 100755 (executable)
Binary files a/BaseTools/Bin/Win32/VfrCompile.exe and b/BaseTools/Bin/Win32/VfrCompile.exe differ
index 4dc1693ff35bb3d8586fcce065f3003c552dfce5..0436a0c81504824fd9135806e62d6febd04f1608 100755 (executable)
Binary files a/BaseTools/Bin/Win32/VolInfo.exe and b/BaseTools/Bin/Win32/VolInfo.exe differ
index 88069448c4d8a4e63065ffad523a2fabd8c9df87..ef96aea362228772d2897371744743ef1454b6a6 100755 (executable)
Binary files a/BaseTools/Bin/Win32/build.exe and b/BaseTools/Bin/Win32/build.exe differ
index 652c9f3ee71835772562035341ea5038a96855fb..257f732cd0cfecf40016344570e30093fed6e5fd 100644 (file)
         "$(CC)" $(CC_FLAGS) -o ${dst} $(INC) ${src}\r
         "$(SYMRENAME)" $(SYMRENAME_FLAGS) ${dst}\r
 \r
-    <Command.ARMGCC>\r
+    <Command.ARMGCC, Command.ARMLINUXGCC>\r
         "$(CC)" $(CC_FLAGS) -o ${dst} $(INC) ${src}\r
 \r
 \r
         $(DEBUG_DIR)(+)${s_dir}(+)${s_base}.c\r
 \r
     <Command>\r
-        -$(MD) $(OUTPUT_DIR)(+)${s_dir} > NUL 2>&1\r
-        "$(VFRPP)" $(VFRPP_FLAGS) $(INC) ${src} > $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.i\r
-        -$(MD) ${d_path} > NUL 2>&1\r
-        "$(VFR)" $(VFR_FLAGS) --string-db $(OUTPUT_DIR)(+)$(MODULE_NAME)StrDefs.hpk --output-directory ${d_path} $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.i\r
+        "$(VFRPP)" $(VFRPP_FLAGS) $(INC) ${src} > $(OUTPUT_DIR)(+)${s_base}.i\r
+        "$(VFR)" $(VFR_FLAGS) --string-db $(OUTPUT_DIR)(+)$(MODULE_NAME)StrDefs.hpk --output-directory ${d_path} $(OUTPUT_DIR)(+)${s_base}.i\r
 \r
 [Object-File]\r
     <InputFile>\r
     <Command.RVCT>\r
         "$(SLINK)" $(SLINK_FLAGS) ${dst} --via $(OBJECT_FILES_LIST)\r
     \r
-    <Command.RVCTCYGWIN, Command.ARMGCC>\r
+    <Command.RVCTCYGWIN, Command.ARMGCC, Command.ARMLINUXGCC>\r
         # $(OBJECT_FILES_LIST) has wrong paths for cygwin\r
         "$(SLINK)" $(SLINK_FLAGS) ${dst} $(OBJECT_FILES)\r
 \r
         "$(DLINK)" -o ${dst} $(DLINK_FLAGS) -\( $(DLINK_SPATH) @$(STATIC_LIBRARY_FILES_LIST) -\) $(DLINK2_FLAGS)\r
         "$(OBJCOPY)" $(OBJCOPY_FLAGS) ${dst}\r
 \r
-    <Command.ARMGCC>\r
+    <Command.ARMGCC, Command.ARMLINUXGCC>\r
         "$(DLINK)" -o ${dst} $(DLINK_FLAGS) -\( $(DLINK_SPATH) $(STATIC_LIBRARY_FILES) -\) $(DLINK2_FLAGS)\r
 \r
     <Command.RVCT>\r
     <Command.GCC>\r
         "$(DLINK)" $(DLINK_FLAGS) -\( $(DLINK_SPATH) @$(STATIC_LIBRARY_FILES_LIST) -\) $(DLINK2_FLAGS)\r
 \r
-    <Command.ARMGCC>\r
+    <Command.ARMGCC, Command.ARMLINUXGCC>\r
         "$(DLINK)" $(DLINK_FLAGS) -\( $(DLINK_SPATH) $(STATIC_LIBRARY_FILES) -\) $(DLINK2_FLAGS)\r
 \r
     <Command.RVCT>\r
     <OutputFile>\r
         $(DEBUG_DIR)(+)$(MODULE_NAME).efi\r
 \r
-    <Command.MSFT, Command.INTEL, Command.RVCT, Command.ARMGCC>  \r
+    <Command.MSFT, Command.INTEL, Command.RVCT, Command.ARMGCC, Command.ARMLINUXGCC>  \r
         "$(GENFW)" -e $(MODULE_TYPE) -o ${dst} ${src} $(GENFW_FLAGS)\r
         $(CP) ${dst} $(OUTPUT_DIR)\r
         $(CP) ${dst} $(BIN_DIR)\r
         $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.hpk\r
 \r
     <Command>\r
-        -$(MD) $(OUTPUT_DIR)(+)${s_dir} > NUL 2>&1\r
         "$(VFRPP)" $(VFRPP_FLAGS) $(INC) ${src} > $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.i\r
-        -$(MD) $(OUTPUT_DIR)(+)${s_dir} > NUL 2>&1\r
         "$(VFR)" $(VFR_FLAGS) --create-ifr-package --string-db $(OUTPUT_DIR)(+)$(MODULE_NAME)StrDefs.hpk --output-directory $(OUTPUT_DIR)(+)${s_dir} $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.i\r
 \r
 [Hii-Binary-Package.UEFI_HII]\r
         "$(GENFW)" -o $(OUTPUT_DIR)(+)$(MODULE_NAME)hii.rc -g $(MODULE_GUID) --hiibinpackage $(HII_BINARY_PACKAGES) $(GENFW_FLAGS)\r
         "$(RC)" $(RC_FLAGS) $(OUTPUT_DIR)(+)$(MODULE_NAME)hii.rc ${dst}\r
         \r
-    <Command.XCODE, Command.RVCT, Command.ARMGCC>  \r
+    <Command.XCODE, Command.RVCT, Command.ARMGCC, Command.ARMLINUXGCC>  \r
         GenFw -o $(OUTPUT_DIR)(+)$(MODULE_NAME)hii.rc -g $(MODULE_GUID) --hiibinpackage $(HII_BINARY_PACKAGES)\r
         \r
         \r
index 5b9cff464e13145304080c2f2919304f7e75253e..ee7e23eee86f3fcdd05d39e6a2fa675d1e27e842 100644 (file)
@@ -134,6 +134,9 @@ DEFINE GCC44_X64_PREFIX        = /usr/bin/
 DEFINE GCC45_IA32_PREFIX       = /usr/bin/\r
 DEFINE GCC45_X64_PREFIX        = /usr/bin/\r
 \r
+DEFINE GCC46_IA32_PREFIX       = /usr/bin/\r
+DEFINE GCC46_X64_PREFIX        = /usr/bin/\r
+\r
 DEFINE UNIX_IASL_BIN           = /usr/bin/iasl\r
 #DEFINE UNIX_IASL_BIN           = $(HOME)/programs/iasl\r
 DEFINE WIN_ASL_BIN_DIR         = C:\ASL\r
@@ -243,6 +246,18 @@ DEFINE CLANG_BIN = /usr/bin/
 #                             Required to build platforms or ACPI tables:\r
 #                               Intel(r) ACPI Compiler v20101013 from\r
 #                               http://www.acpica.org/downloads/previous_releases.php\r
+#   GCC45       -Linux-  Requires:\r
+#                             GCC 4.5 (Native)\r
+#                        Optional:\r
+#                             Required to build platforms or ACPI tables:\r
+#                               Intel(r) ACPI Compiler v20101013 from\r
+#                               http://www.acpica.org/downloads/previous_releases.php\r
+#   GCC46       -Linux-  Requires:\r
+#                             GCC 4.6 (Native)\r
+#                        Optional:\r
+#                             Required to build platforms or ACPI tables:\r
+#                               Intel(r) ACPI Compiler v20101013 from\r
+#                               http://www.acpica.org/downloads/previous_releases.php\r
 #   ELFGCC      -Linux-  Requires:\r
 #                             GCC(this tool chain uses whatever version of gcc and binutils that is installed in /usr/bin)\r
 #                        Optional:\r
@@ -467,6 +482,7 @@ DEFINE CLANG_BIN = /usr/bin/
 #   MSFT           - Microsoft\r
 #   GCC            - GNU GCC\r
 #   INTEL          - INTEL\r
+#   RVCT           - ARM RealView Toolchain\r
 ####################################################################################\r
 ####################################################################################\r
 #\r
@@ -2011,6 +2027,14 @@ DEFINE GCC45_IA32_X64_DLINK_FLAGS    = DEF(GCC44_IA32_X64_DLINK_FLAGS)
 DEFINE GCC45_X64_DLINK_FLAGS         = DEF(GCC44_X64_DLINK_FLAGS)\r
 DEFINE GCC45_ASM_FLAGS               = DEF(GCC44_ASM_FLAGS)\r
 \r
+DEFINE GCC46_IA32_CC_FLAGS           = DEF(GCC45_IA32_CC_FLAGS) -Wno-address -Wno-unused-but-set-variable\r
+DEFINE GCC46_X64_CC_FLAGS            = DEF(GCC45_X64_CC_FLAGS) -Wno-address -Wno-unused-but-set-variable\r
+DEFINE GCC46_IA32_X64_DLINK_COMMON   = DEF(GCC45_IA32_X64_DLINK_COMMON)\r
+DEFINE GCC46_IA32_X64_ASLDLINK_FLAGS = DEF(GCC45_IA32_X64_ASLDLINK_FLAGS)\r
+DEFINE GCC46_IA32_X64_DLINK_FLAGS    = DEF(GCC45_IA32_X64_DLINK_FLAGS)\r
+DEFINE GCC46_X64_DLINK_FLAGS         = DEF(GCC45_X64_DLINK_FLAGS)\r
+DEFINE GCC46_ASM_FLAGS               = DEF(GCC45_ASM_FLAGS)\r
+\r
 ####################################################################################\r
 #\r
 # Unix GCC And Intel Linux ACPI Compiler\r
@@ -2227,6 +2251,71 @@ DEFINE GCC45_ASM_FLAGS               = DEF(GCC44_ASM_FLAGS)
 *_GCC45_X64_RC_FLAGS             = DEF(GCC_X64_RC_FLAGS)\r
 *_GCC45_X64_OBJCOPY_FLAGS        = \r
 \r
+####################################################################################\r
+#\r
+# GCC 4.6 - This configuration is used to compile under Linux to produce\r
+#           PE/COFF binaries using GCC 4.6.\r
+#\r
+####################################################################################\r
+*_GCC46_*_*_FAMILY               = GCC\r
+\r
+*_GCC46_*_MAKE_PATH                    = make\r
+*_GCC46_*_ASL_PATH                     = DEF(UNIX_IASL_BIN)\r
+\r
+*_GCC46_*_PP_FLAGS                     = DEF(GCC_PP_FLAGS)\r
+*_GCC46_*_ASLPP_FLAGS                  = DEF(GCC_ASLPP_FLAGS)\r
+*_GCC46_*_ASLCC_FLAGS                  = DEF(GCC_ASLCC_FLAGS)\r
+*_GCC46_*_VFRPP_FLAGS                  = DEF(GCC_VFRPP_FLAGS)\r
+*_GCC46_*_APP_FLAGS                    =\r
+*_GCC46_*_ASL_FLAGS                    = DEF(IASL_FLAGS)\r
+*_GCC46_*_ASL_OUTFLAGS                 = DEF(IASL_OUTFLAGS)\r
+\r
+##################\r
+# GCC46 IA32 definitions\r
+##################\r
+*_GCC46_IA32_OBJCOPY_PATH         = DEF(GCC46_IA32_PREFIX)objcopy\r
+*_GCC46_IA32_CC_PATH              = DEF(GCC46_IA32_PREFIX)gcc\r
+*_GCC46_IA32_SLINK_PATH           = DEF(GCC46_IA32_PREFIX)ar\r
+*_GCC46_IA32_DLINK_PATH           = DEF(GCC46_IA32_PREFIX)ld\r
+*_GCC46_IA32_ASLDLINK_PATH        = DEF(GCC46_IA32_PREFIX)ld\r
+*_GCC46_IA32_ASM_PATH             = DEF(GCC46_IA32_PREFIX)gcc\r
+*_GCC46_IA32_PP_PATH              = DEF(GCC46_IA32_PREFIX)gcc\r
+*_GCC46_IA32_VFRPP_PATH           = DEF(GCC46_IA32_PREFIX)gcc\r
+*_GCC46_IA32_ASLCC_PATH           = DEF(GCC46_IA32_PREFIX)gcc\r
+*_GCC46_IA32_ASLPP_PATH           = DEF(GCC46_IA32_PREFIX)gcc\r
+*_GCC46_IA32_RC_PATH              = DEF(GCC46_IA32_PREFIX)objcopy\r
+\r
+*_GCC46_IA32_ASLCC_FLAGS          = DEF(GCC_ASLCC_FLAGS) -m32\r
+*_GCC46_IA32_ASLDLINK_FLAGS       = DEF(GCC46_IA32_X64_ASLDLINK_FLAGS) -m elf_i386\r
+*_GCC46_IA32_ASM_FLAGS            = DEF(GCC46_ASM_FLAGS) -m32 -march=i386\r
+*_GCC46_IA32_CC_FLAGS             = DEF(GCC46_IA32_CC_FLAGS) -Os\r
+*_GCC46_IA32_DLINK_FLAGS          = DEF(GCC46_IA32_X64_DLINK_FLAGS) -m elf_i386 --oformat=elf32-i386\r
+*_GCC46_IA32_RC_FLAGS             = DEF(GCC_IA32_RC_FLAGS)\r
+*_GCC46_IA32_OBJCOPY_FLAGS        = \r
+\r
+##################\r
+# GCC46 X64 definitions\r
+##################\r
+*_GCC46_X64_OBJCOPY_PATH         = DEF(GCC46_X64_PREFIX)objcopy\r
+*_GCC46_X64_CC_PATH              = DEF(GCC46_X64_PREFIX)gcc\r
+*_GCC46_X64_SLINK_PATH           = DEF(GCC46_X64_PREFIX)ar\r
+*_GCC46_X64_DLINK_PATH           = DEF(GCC46_X64_PREFIX)ld\r
+*_GCC46_X64_ASLDLINK_PATH        = DEF(GCC46_X64_PREFIX)ld\r
+*_GCC46_X64_ASM_PATH             = DEF(GCC46_X64_PREFIX)gcc\r
+*_GCC46_X64_PP_PATH              = DEF(GCC46_X64_PREFIX)gcc\r
+*_GCC46_X64_VFRPP_PATH           = DEF(GCC46_X64_PREFIX)gcc\r
+*_GCC46_X64_ASLCC_PATH           = DEF(GCC46_X64_PREFIX)gcc\r
+*_GCC46_X64_ASLPP_PATH           = DEF(GCC46_X64_PREFIX)gcc\r
+*_GCC46_X64_RC_PATH              = DEF(GCC46_X64_PREFIX)objcopy\r
+\r
+*_GCC46_X64_ASLCC_FLAGS          = DEF(GCC_ASLCC_FLAGS) -m64\r
+*_GCC46_X64_ASLDLINK_FLAGS       = DEF(GCC46_IA32_X64_ASLDLINK_FLAGS) -m elf_x86_64\r
+*_GCC46_X64_ASM_FLAGS            = DEF(GCC46_ASM_FLAGS) -m64 -melf_x86_64\r
+*_GCC46_X64_CC_FLAGS             = DEF(GCC46_X64_CC_FLAGS)\r
+*_GCC46_X64_DLINK_FLAGS          = DEF(GCC46_X64_DLINK_FLAGS)\r
+*_GCC46_X64_RC_FLAGS             = DEF(GCC_X64_RC_FLAGS)\r
+*_GCC46_X64_OBJCOPY_FLAGS        = \r
+\r
 ####################################################################################\r
 #\r
 # Cygwin GCC And Intel ACPI Compiler\r
@@ -4173,11 +4262,69 @@ RELEASE_ARMGCC_ARM_ASM_FLAGS   = $(ARCHASM_FLAGS) $(PLATFORM_FLAGS) -mlittle-end
 *_ARMGCC_ARM_VFRPP_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) -x c -E -P -DVFRCOMPILE --include $(DEST_DIR_DEBUG)/$(MODULE_NAME)StrDefs.h\r
 \r
 *_ARMGCC_ARM_SLINK_FLAGS =  -rc\r
-*_ARMGCC_ARM_DLINK_FLAGS =  $(ARCHDLINK_FLAGS)  --oformat=elf32-littlearm --emit-relocs -nostdlib -u $(IMAGE_ENTRY_POINT) -e $(IMAGE_ENTRY_POINT) -Map $(DEST_DIR_DEBUG)/$(BASE_NAME).map\r
+*_ARMGCC_ARM_DLINK_FLAGS =  $(ARCHDLINK_FLAGS) -Ttext=0x0 --oformat=elf32-littlearm --emit-relocs -nostdlib -u $(IMAGE_ENTRY_POINT) -e $(IMAGE_ENTRY_POINT) -Map $(DEST_DIR_DEBUG)/$(BASE_NAME).map\r
 \r
   DEBUG_ARMGCC_ARM_CC_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) DEF(GCC_ARMGCC_CC_FLAGS) -combine -O0\r
 RELEASE_ARMGCC_ARM_CC_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) DEF(GCC_ARMGCC_CC_FLAGS) -combine -Wno-unused\r
 \r
+####################################################################################\r
+#\r
+# ARM GNU/Linux GCC\r
+#\r
+####################################################################################\r
+#  ARMLINUXGCC         - ARM version of the GCC cross compiler\r
+\r
+*_ARMLINUXGCC_*_*_FAMILY          = GCC\r
+*_ARMLINUXGCC_*_*_BUILDRULEFAMILY = ARMLINUXGCC\r
+\r
+*_ARMLINUXGCC_*_MAKE_PATH         = make\r
+*_ARMLINUXGCC_*_MAKE_FLAGS        = --no-print-directory\r
+\r
+##################\r
+# ASL definitions\r
+##################\r
+*_ARMLINUXGCC_*_ASL_PATH           = DEF(UNIX_IASL_BIN)\r
+*_ARMLINUXGCC_*_ASL_FLAGS          = DEF(IASL_FLAGS)\r
+*_ARMLINUXGCC_*_ASL_OUTFLAGS       = DEF(IASL_OUTFLAGS)\r
+*_ARMLINUXGCC_*_ASLPP_FLAGS        = -x c -E -P\r
+*_ARMLINUXGCC_*_ASLCC_FLAGS        = -x c\r
+*_ARMLINUXGCC_*_ASLDLINK_FLAGS     = DEF(GCC_DLINK_FLAGS_COMMON) --entry _ReferenceAcpiTable\r
+\r
+##################\r
+# ARM definitions\r
+##################\r
+\r
+*_ARMLINUXGCC_ARM_ASLCC_PATH      = ENV(ARMLINUXGCC_TOOLS_PATH)arm-linux-gnueabi-gcc\r
+*_ARMLINUXGCC_ARM_ASLDLINK_PATH   = ENV(ARMLINUXGCC_TOOLS_PATH)arm-linux-gnueabi-ld\r
+*_ARMLINUXGCC_ARM_ASLPP_PATH      = ENV(ARMLINUXGCC_TOOLS_PATH)arm-linux-gnueabi-gcc\r
+\r
+*_ARMLINUXGCC_ARM_CC_PATH         = ENV(ARMLINUXGCC_TOOLS_PATH)arm-linux-gnueabi-gcc\r
+*_ARMLINUXGCC_ARM_SLINK_PATH      = ENV(ARMLINUXGCC_TOOLS_PATH)arm-linux-gnueabi-ar\r
+*_ARMLINUXGCC_ARM_DLINK_PATH      = ENV(ARMLINUXGCC_TOOLS_PATH)arm-linux-gnueabi-ld\r
+*_ARMLINUXGCC_ARM_ASM_PATH        = ENV(ARMLINUXGCC_TOOLS_PATH)arm-linux-gnueabi-as\r
+*_ARMLINUXGCC_ARM_PP_PATH         = ENV(ARMLINUXGCC_TOOLS_PATH)arm-linux-gnueabi-gcc\r
+*_ARMLINUXGCC_ARM_VFRPP_PATH      = ENV(ARMLINUXGCC_TOOLS_PATH)arm-linux-gnueabi-gcc\r
+\r
+#\r
+# Use default values, or override in DSC file\r
+#\r
+*_ARMLINUXGCC_ARM_ARCHCC_FLAGS    = -mthumb\r
+*_ARMLINUXGCC_ARM_ARCHASM_FLAGS   = \r
+*_ARMLINUXGCC_ARM_ARCHDLINK_FLAGS =\r
+*_ARMLINUXGCC_ARM_PLATFORM_FLAGS  = -march=armv7-a\r
+\r
+  DEBUG_ARMLINUXGCC_ARM_ASM_FLAGS   = $(ARCHASM_FLAGS) $(PLATFORM_FLAGS) -mlittle-endian -g\r
+RELEASE_ARMLINUXGCC_ARM_ASM_FLAGS   = $(ARCHASM_FLAGS) $(PLATFORM_FLAGS) -mlittle-endian\r
+\r
+*_ARMLINUXGCC_ARM_PP_FLAGS    = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) -E -x assembler-with-cpp -include $(DEST_DIR_DEBUG)/AutoGen.h\r
+*_ARMLINUXGCC_ARM_VFRPP_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) -x c -E -P -DVFRCOMPILE --include $(DEST_DIR_DEBUG)/$(MODULE_NAME)StrDefs.h\r
+\r
+*_ARMLINUXGCC_ARM_SLINK_FLAGS =  -rc\r
+*_ARMLINUXGCC_ARM_DLINK_FLAGS =  $(ARCHDLINK_FLAGS)  --oformat=elf32-littlearm --emit-relocs -nostdlib -u $(IMAGE_ENTRY_POINT) -e $(IMAGE_ENTRY_POINT) -Map $(DEST_DIR_DEBUG)/$(BASE_NAME).map\r
+\r
+  DEBUG_ARMLINUXGCC_ARM_CC_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) DEF(GCC_ARMGCC_CC_FLAGS) -Wno-address -O0\r
+RELEASE_ARMLINUXGCC_ARM_CC_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) DEF(GCC_ARMGCC_CC_FLAGS) -Wno-address -Wno-unused-but-set-variable\r
+\r
 #################\r
 # ASM 16 linker defintions\r
 #################\r
index c8586b407829c44c718b2cdda4a6ff7b5d4f0566..92060e2ca1008510fd64bc5b17ade5eac9282505 100644 (file)
@@ -553,7 +553,7 @@ Returns:
   EFI_FIRMWARE_VOLUME_HEADER *hdr = (EFI_FIRMWARE_VOLUME_HEADER*)Fv;\r
 \r
   EFI_FFS_FILE_HEADER *fhdr = NULL;\r
-  EFI_FVB_ATTRIBUTES FvbAttributes;\r
+  EFI_FVB_ATTRIBUTES_2 FvbAttributes;\r
   UINTN offset;\r
   UINTN fsize;\r
   UINTN newSize;\r
@@ -869,7 +869,7 @@ Returns:
   EFI_FIRMWARE_VOLUME_HEADER *hdr = (EFI_FIRMWARE_VOLUME_HEADER*)Fv;\r
 \r
   EFI_FFS_FILE_HEADER *fhdr = NULL;\r
-  EFI_FVB_ATTRIBUTES FvbAttributes;\r
+  EFI_FVB_ATTRIBUTES_2 FvbAttributes;\r
   UINTN fsize;\r
 \r
   EFI_STATUS Status;\r
index 45a2c8022d77db0b1c362990209a5425019bd647..684933f64da0365e4495e16ea6a15f43dd71f94a 100644 (file)
@@ -84,7 +84,7 @@ CHAR8      *mFvbAlignmentName[] = {
   EFI_FVB2_ALIGNMENT_64K_STRING, \r
   EFI_FVB2_ALIGNMENT_128K_STRING,\r
   EFI_FVB2_ALIGNMENT_256K_STRING,\r
-  EFI_FVB2_ALIGNMNET_512K_STRING,\r
+  EFI_FVB2_ALIGNMENT_512K_STRING,\r
   EFI_FVB2_ALIGNMENT_1M_STRING,  \r
   EFI_FVB2_ALIGNMENT_2M_STRING,  \r
   EFI_FVB2_ALIGNMENT_4M_STRING,  \r
@@ -1535,7 +1535,7 @@ Returns:
       //\r
       Status = FindApResetVectorPosition (FvImage, &BytePointer);\r
       if (EFI_ERROR (Status)) {\r
-        Error (NULL, 0, 3000, "Invalid", "Cannot find the appropriate location in FvImage to add Ap reset vector!");\r
+        Error (NULL, 0, 3000, "Invalid", "FV image does not have enough space to place AP reset vector. The FV image needs to reserve at least 4KB of unused space.");\r
         return EFI_ABORTED;\r
       }\r
     }\r
index 2629b9aee892933d534a7cd099c0baf147e4ca61..40c23600ab8ea58c79bf384df6b8e49e1fc0ccde 100644 (file)
@@ -1,6 +1,6 @@
 /** @file\r
 \r
-Copyright (c) 2004 - 2010, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2004 - 2011, Intel Corporation. All rights reserved.<BR>\r
 This program and the accompanying materials                          \r
 are licensed and made available under the terms and conditions of the BSD License         \r
 which accompanies this distribution.  The full text of the license may be found at        \r
@@ -130,7 +130,7 @@ Abstract:
 #define EFI_FVB2_ALIGNMENT_64K_STRING     "EFI_FVB2_ALIGNMENT_64K" \r
 #define EFI_FVB2_ALIGNMENT_128K_STRING    "EFI_FVB2_ALIGNMENT_128K"\r
 #define EFI_FVB2_ALIGNMENT_256K_STRING    "EFI_FVB2_ALIGNMENT_256K"\r
-#define EFI_FVB2_ALIGNMNET_512K_STRING    "EFI_FVB2_ALIGNMENT_512K"\r
+#define EFI_FVB2_ALIGNMENT_512K_STRING    "EFI_FVB2_ALIGNMENT_512K"\r
 #define EFI_FVB2_ALIGNMENT_1M_STRING      "EFI_FVB2_ALIGNMENT_1M"  \r
 #define EFI_FVB2_ALIGNMENT_2M_STRING      "EFI_FVB2_ALIGNMENT_2M"  \r
 #define EFI_FVB2_ALIGNMENT_4M_STRING      "EFI_FVB2_ALIGNMENT_4M"  \r
@@ -226,7 +226,7 @@ typedef struct {
   BOOLEAN                 FvNameGuidSet;\r
   CHAR8                   FvExtHeaderFile[_MAX_PATH];\r
   UINTN                   Size;\r
-  EFI_FVB_ATTRIBUTES      FvAttributes;\r
+  EFI_FVB_ATTRIBUTES_2    FvAttributes;\r
   CHAR8                   FvName[_MAX_PATH];\r
   EFI_FV_BLOCK_MAP_ENTRY  FvBlocks[MAX_NUMBER_OF_FV_BLOCKS];\r
   CHAR8                   FvFiles[MAX_NUMBER_OF_FILES_IN_FV][_MAX_PATH];\r
index f19e9007d9d9a2c86b120f30c433aa097a80d22c..bbcd09a918206a7e000cc9400593a0be5ddec7da 100644 (file)
@@ -1,3 +1,3 @@
 //This file is for build version number auto generation\r
 //\r
-#define __BUILD_VERSION "Build 2396"\r
+#define __BUILD_VERSION "Build 2423"\r
index fde381537fc871e7184f637368d3ff00f0d33da3..0c8e29e1cec25698f97448089e47a45ca3f0bcf7 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   The firmware volume related definitions in PI.\r
 \r
-  Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>\r
 \r
   This program and the accompanying materials are licensed and made available\r
   under the terms and conditions of the BSD License which accompanies this\r
@@ -14,7 +14,7 @@
   File Name: PiFirmwareVolume.h\r
 \r
   @par Revision Reference:\r
-  Version 1.0.\r
+  Version 1.2C\r
 \r
 **/\r
 \r
@@ -33,7 +33,7 @@ typedef UINT32  EFI_FV_FILE_ATTRIBUTES;
 #define EFI_FV_FILE_ATTRIB_FIXED          0x00000100\r
 #define EFI_FV_FILE_ATTRIB_MEMORY_MAPPED  0x00000200\r
 \r
-typedef UINT32  EFI_FVB_ATTRIBUTES;\r
+typedef UINT32  EFI_FVB_ATTRIBUTES_2;\r
 \r
 // \r
 // Attributes bit definitions\r
@@ -73,7 +73,7 @@ typedef UINT32  EFI_FVB_ATTRIBUTES;
 #define EFI_FVB2_ALIGNMENT_64K      0x00100000\r
 #define EFI_FVB2_ALIGNMENT_128K     0x00110000\r
 #define EFI_FVB2_ALIGNMENT_256K     0x00120000\r
-#define EFI_FVB2_ALIGNMNET_512K     0x00130000\r
+#define EFI_FVB2_ALIGNMENT_512K     0x00130000\r
 #define EFI_FVB2_ALIGNMENT_1M       0x00140000\r
 #define EFI_FVB2_ALIGNMENT_2M       0x00150000\r
 #define EFI_FVB2_ALIGNMENT_4M       0x00160000\r
@@ -101,7 +101,7 @@ typedef struct {
   EFI_GUID                  FileSystemGuid;\r
   UINT64                    FvLength;\r
   UINT32                    Signature;\r
-  EFI_FVB_ATTRIBUTES        Attributes;\r
+  EFI_FVB_ATTRIBUTES_2      Attributes;\r
   UINT16                    HeaderLength;\r
   UINT16                    Checksum;\r
   UINT16                    ExtHeaderOffset;\r
@@ -139,8 +139,20 @@ typedef struct {
   // Array of GUIDs. \r
   // Each GUID represents an OEM file type.\r
   // \r
-  EFI_GUID  Types[1];\r
+  // EFI_GUID  Types[1];\r
+  //\r
 } EFI_FIRMWARE_VOLUME_EXT_ENTRY_OEM_TYPE;\r
 \r
+#define EFI_FV_EXT_TYPE_GUID_TYPE 0x0002\r
+typedef struct {\r
+  EFI_FIRMWARE_VOLUME_EXT_ENTRY     Hdr;\r
+  EFI_GUID                          FormatType;\r
+\r
+  //\r
+  // An arry of bytes of length Length.\r
+  //\r
+  // UINT8                             Data[1];\r
+  //\r
+} EFI_FIRMWARE_VOLUME_EXT_ENTRY_GUID_TYPE;\r
 \r
 #endif\r
index 94ad55b1bb4ab0f6a55b95a8c703376aaf19de4c..b4f9d8fd7f3361aba458bdfb3ade3d963ce0b0b8 100644 (file)
@@ -670,6 +670,25 @@ CFormPkg::DeclarePendingQuestion (
         Info.mVarType = EFI_IFR_TYPE_NUM_SIZE_8;\r
       }\r
       CNObj.SetFlags (0, Info.mVarType);\r
+      //\r
+      // Use maximum value not to limit the vaild value for the undefined question.\r
+      //\r
+      switch (Info.mVarType) {\r
+      case EFI_IFR_TYPE_NUM_SIZE_64:\r
+        CNObj.SetMinMaxStepData ((UINT64) 0, (UINT64) -1 , (UINT64) 0);\r
+        break;\r
+      case EFI_IFR_TYPE_NUM_SIZE_32:\r
+        CNObj.SetMinMaxStepData ((UINT32) 0, (UINT32) -1 , (UINT32) 0);\r
+        break;\r
+      case EFI_IFR_TYPE_NUM_SIZE_16:\r
+        CNObj.SetMinMaxStepData ((UINT16) 0, (UINT16) -1 , (UINT16) 0);\r
+        break;\r
+      case EFI_IFR_TYPE_NUM_SIZE_8:\r
+        CNObj.SetMinMaxStepData ((UINT8) 0, (UINT8) -1 , (UINT8) 0);\r
+        break;\r
+      default:\r
+        break;\r
+      }\r
 \r
       //\r
       // For undefined Efi VarStore type question\r
index f27f05b68910a9430379082bcd65992b2e436298..d55a80672be10fac8b3804492d06b81fe848538c 100644 (file)
@@ -1989,6 +1989,7 @@ vfrStatementDate :
       Prompt "=" "STRING_TOKEN" "\(" DP:Number "\)" ","\r
       Help   "=" "STRING_TOKEN" "\(" DH:Number "\)" ","\r
       minMaxDateStepDefault[Val.date, 2]\r
+      { G:FLAGS "=" vfrDateFlags[DObj, G->getLine()] "," }\r
                                                        <<\r
                                                           mCVfrQuestionDB.RegisterOldDateQuestion (VarIdStr[0], VarIdStr[1], VarIdStr[2], QId);\r
                                                           DObj.SetQuestionId (QId);\r
@@ -2449,6 +2450,7 @@ vfrStatementTime :
       Prompt "=" "STRING_TOKEN" "\(" SP:Number "\)" ","\r
       Help   "=" "STRING_TOKEN" "\(" SH:Number "\)" ","\r
       minMaxTimeStepDefault[Val.time, 2]\r
+      { G:FLAGS "=" vfrTimeFlags[TObj, G->getLine()] "," }\r
                                                        <<\r
                                                           mCVfrQuestionDB.RegisterOldTimeQuestion (VarIdStr[0], VarIdStr[1], VarIdStr[2], QId);\r
                                                           TObj.SetQuestionId (QId);\r
@@ -3216,7 +3218,7 @@ vfrExpressionBuildInFunction [UINT32 & RootLevel, UINT32 & ExpOpCount] :
   | ideqvalExp[$RootLevel, $ExpOpCount]\r
   | ideqidExp[$RootLevel, $ExpOpCount]\r
   | ideqvallistExp[$RootLevel, $ExpOpCount]\r
-  | questionref13Exp[$RootLevel, $ExpOpCount]\r
+  | questionref1Exp[$RootLevel, $ExpOpCount]\r
   | rulerefExp[$RootLevel, $ExpOpCount]\r
   | stringref1Exp[$RootLevel, $ExpOpCount]\r
   | pushthisExp[$RootLevel, $ExpOpCount]\r
@@ -3451,50 +3453,26 @@ ideqvallistExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :
                                                         >>\r
   ;\r
 \r
-questionref13Exp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
+questionref1Exp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
   <<\r
-     UINT8           Type = 0x1;\r
-     EFI_STRING_ID   DevPath = EFI_STRING_ID_INVALID;\r
-     EFI_GUID        Guid = {0,};\r
      EFI_QUESTION_ID QId = EFI_QUESTION_ID_INVALID;\r
      UINT32          BitMask;\r
      CHAR8           *QName = NULL;\r
      UINT32          LineNo = 0;\r
   >>\r
   L:QuestionRef\r
-  (\r
-    (\r
-                                                       << Type = 0x3; >>\r
-      {\r
-        Path "=" "STRING_TOKEN" "\(" S:Number "\)"     << Type = 0x4; DevPath = _STOSID(S->getText()); >>\r
-      }\r
-      {\r
-        Uuid "=" guidDefinition[Guid]                  << Type = 0x5; >>\r
-      }\r
-    )\r
-    |\r
-    (\r
-      "\("\r
-    (\r
+  "\("\r
+      (\r
           QN:StringIdentifier                          <<\r
                                                           QName  = QN->getText();\r
-                              LineNo = QN->getLine();\r
+                                                          LineNo = QN->getLine();\r
                                                           mCVfrQuestionDB.GetQuestionId (QN->getText(), NULL, QId, BitMask);\r
                                                        >>\r
         | ID:Number                                    << QId = _STOQID(ID->getText()); >>\r
       )\r
-      "\)"\r
-    )\r
-  )\r
+  "\)"\r
                                                        <<\r
-                                                          switch (Type) {\r
-                                                          case 0x1: {CIfrQuestionRef1 QR1Obj(L->getLine()); _SAVE_OPHDR_COND (QR1Obj, ($ExpOpCount == 0), L->getLine()); QR1Obj.SetQuestionId (QId, QName, LineNo); break;}\r
-                                                          case 0x3: {CIfrQuestionRef3 QR3Obj(L->getLine()); _SAVE_OPHDR_COND (QR3Obj, ($ExpOpCount == 0), L->getLine()); break;}\r
-                                                          case 0x4: {CIfrQuestionRef3_2 QR3_2Obj(L->getLine()); _SAVE_OPHDR_COND (QR3_2Obj, ($ExpOpCount == 0), L->getLine()); QR3_2Obj.SetDevicePath (DevPath); break;}\r
-                                                          case 0x5: {CIfrQuestionRef3_3 QR3_3Obj(L->getLine()); _SAVE_OPHDR_COND (QR3_3Obj, ($ExpOpCount == 0), L->getLine()); QR3_3Obj.SetDevicePath (DevPath); QR3_3Obj.SetGuid (&Guid); break;}\r
-                                                          }\r
-                                                          $ExpOpCount++;\r
-                                                       >>\r
+                                                          { CIfrQuestionRef1 QR1Obj(L->getLine()); _SAVE_OPHDR_COND (QR1Obj, ($ExpOpCount == 0), L->getLine()); QR1Obj.SetQuestionId (QId, QName, LineNo); } $ExpOpCount++; >>\r
   ;\r
 \r
 rulerefExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
@@ -3626,7 +3604,7 @@ vfrExpressionConstant[UINT32 & RootLevel, UINT32 & ExpOpCount] :
 vfrExpressionUnaryOp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
     lengthExp[$RootLevel, $ExpOpCount]\r
   | bitwisenotExp[$RootLevel, $ExpOpCount]\r
-  | question2refExp[$RootLevel, $ExpOpCount]\r
+  | question23refExp[$RootLevel, $ExpOpCount]\r
   | stringref2Exp[$RootLevel, $ExpOpCount]\r
   | toboolExp[$RootLevel, $ExpOpCount]\r
   | tostringExp[$RootLevel, $ExpOpCount]\r
@@ -3648,10 +3626,30 @@ bitwisenotExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :
                                                        << { CIfrBitWiseNot BWNObj(L->getLine()); $ExpOpCount++; } >>\r
   ;\r
 \r
-question2refExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
+question23refExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
+  <<\r
+     UINT8           Type = 0x1;\r
+     EFI_STRING_ID   DevPath = EFI_STRING_ID_INVALID;\r
+     EFI_GUID        Guid = {0,};\r
+  >>\r
   L:QuestionRefVal\r
-  "\(" vfrStatementExpressionSub[$RootLevel + 1, $ExpOpCount] "\)"\r
-                                                       << { CIfrQuestionRef2 QR2Obj(L->getLine()); $ExpOpCount++; } >>\r
+  "\("\r
+      {\r
+        DevicePath "=" "STRING_TOKEN" "\(" S:Number "\)" ","    << Type = 0x2; DevPath = _STOSID(S->getText()); >>\r
+      }\r
+      {\r
+        Uuid "=" guidDefinition[Guid] ","                       << Type = 0x3; >>\r
+      }\r
+      vfrStatementExpressionSub[$RootLevel + 1, $ExpOpCount] \r
+  "\)"\r
+                                                       <<\r
+                                                          switch (Type) {\r
+                                                          case 0x1: {CIfrQuestionRef2 QR2Obj(L->getLine()); _SAVE_OPHDR_COND (QR2Obj, ($ExpOpCount == 0), L->getLine()); break;}\r
+                                                          case 0x2: {CIfrQuestionRef3_2 QR3_2Obj(L->getLine()); _SAVE_OPHDR_COND (QR3_2Obj, ($ExpOpCount == 0), L->getLine()); QR3_2Obj.SetDevicePath (DevPath); break;}\r
+                                                          case 0x3: {CIfrQuestionRef3_3 QR3_3Obj(L->getLine()); _SAVE_OPHDR_COND (QR3_3Obj, ($ExpOpCount == 0), L->getLine()); QR3_3Obj.SetDevicePath (DevPath); QR3_3Obj.SetGuid (&Guid); break;}\r
+                                                          }\r
+                                                          $ExpOpCount++;\r
+                                                       >>\r
   ;\r
 \r
 stringref2Exp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
index f514ba8c38b7da2143be74b4d4571559d5c8948d..7d127e16915b453f1954a4106ea13bec41315a21 100644 (file)
@@ -1,6 +1,6 @@
 /** @file
 
-Copyright (c) 1999 - 2010, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 1999 - 2011, 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
@@ -845,8 +845,8 @@ Returns:
     printf ("        EFI_FVB2_ALIGNMENT_256K\n");
   }
 
-  if (VolumeHeader.Attributes & EFI_FVB2_ALIGNMNET_512K) {
-    printf ("        EFI_FVB2_ALIGNMNET_512K\n");
+  if (VolumeHeader.Attributes & EFI_FVB2_ALIGNMENT_512K) {
+    printf ("        EFI_FVB2_ALIGNMENT_512K\n");
   }
 
   if (VolumeHeader.Attributes & EFI_FVB2_ALIGNMENT_1M) {
index 561114d14173e5a1162b402097b6e1f548e26bdf..5638bfd043c41067b8827d565be46ae778868cb0 100644 (file)
@@ -310,11 +310,14 @@ gAutoGenHPrologueString = TemplateString("""
 #ifndef _${File}_${Guid}
 #define _${File}_${Guid}
 
+""")
+
+gAutoGenHCppPrologueString = """
 #ifdef __cplusplus
 extern "C" {
 #endif
 
-""")
+"""
 
 gAutoGenHEpilogueString = """
 
@@ -1970,6 +1973,7 @@ def CreateHeaderCode(Info, AutoGenC, AutoGenH):
     AutoGenH.Append(gAutoGenHeaderString.Replace({'FileName':'AutoGen.h'}))
     # header file Prologue
     AutoGenH.Append(gAutoGenHPrologueString.Replace({'File':'AUTOGENH','Guid':Info.Guid.replace('-','_')}))
+    AutoGenH.Append(gAutoGenHCppPrologueString)
     if Info.AutoGenVersion >= 0x00010005:
         # header files includes
         AutoGenH.Append("#include <%s>\n" % gBasicHeaderFile)
index b34977d7a93494254703ad567dad12607d775313..b2ebff324dfc0d42e62cd91eb7797a3acbd0d8cf 100644 (file)
@@ -31,6 +31,8 @@ gIncludePattern = re.compile(r"^[ \t]*#?[ \t]*include(?:[ \t]*(?:\\(?:\r\n|\r|\n
 ## Regular expression for matching macro used in header file inclusion
 gMacroPattern = re.compile("([_A-Z][_A-Z0-9]*)[ \t]*\((.+)\)", re.UNICODE)
 
+gIsFileMap = {}
+
 ## pattern for include style in Edk.x code
 gProtocolDefinition = "Protocol/%(HeaderKey)s/%(HeaderKey)s.h"
 gGuidDefinition = "Guid/%(HeaderKey)s/%(HeaderKey)s.h"
@@ -421,6 +423,7 @@ cleanlib:
         self.FileListMacros = {}
         self.ListFileMacros = {}
 
+        self.FileCache = {}
         self.FileDependency = []
         self.LibraryBuildCommandList = []
         self.LibraryFileList = []
@@ -722,24 +725,26 @@ cleanlib:
         EdkLogger.debug(EdkLogger.DEBUG_1, "Try to get dependency files for %s" % File)
         FileStack = [File] + ForceList
         DependencySet = set()
-        MacroUsedByIncludedFile = False
 
         if self._AutoGenObject.Arch not in gDependencyDatabase:
             gDependencyDatabase[self._AutoGenObject.Arch] = {}
         DepDb = gDependencyDatabase[self._AutoGenObject.Arch]
 
-        # add path of given source file into search path list.
-        if File.Dir not in SearchPathList:
-            SearchPathList.append(File.Dir)
         while len(FileStack) > 0:
             F = FileStack.pop()
 
+            FullPathDependList = []
+            if F in self.FileCache:
+                for CacheFile in self.FileCache[F]:
+                    FullPathDependList.append(CacheFile)
+                    if CacheFile not in DependencySet:
+                        FileStack.append(CacheFile)
+                DependencySet.update(FullPathDependList)
+                continue
+
             CurrentFileDependencyList = []
             if F in DepDb:
                 CurrentFileDependencyList = DepDb[F]
-                for Dep in CurrentFileDependencyList:
-                    if Dep not in FileStack and Dep not in DependencySet:
-                        FileStack.append(Dep)
             else:
                 try:
                     Fd = open(F.Path, 'r')
@@ -755,7 +760,6 @@ cleanlib:
                     FileContent = unicode(FileContent, "utf-16")
                 IncludedFileList = gIncludePattern.findall(FileContent)
 
-                CurrentFilePath = F.Dir
                 for Inc in IncludedFileList:
                     Inc = Inc.strip()
                     # if there's macro used to reference header file, expand it
@@ -766,41 +770,44 @@ cleanlib:
                         if HeaderType in gIncludeMacroConversion:
                             Inc = gIncludeMacroConversion[HeaderType] % {"HeaderKey" : HeaderKey}
                         else:
-                            # not known macro used in #include
-                            MacroUsedByIncludedFile = True
-                            continue
+                            # not known macro used in #include, always build the file by
+                            # returning a empty dependency
+                            self.FileCache[File] = []
+                            return []
                     Inc = os.path.normpath(Inc)
-                    for SearchPath in [CurrentFilePath] + SearchPathList:
-                        FilePath = os.path.join(SearchPath, Inc)
-                        if not os.path.isfile(FilePath) or FilePath in CurrentFileDependencyList:
+                    CurrentFileDependencyList.append(Inc)
+                DepDb[F] = CurrentFileDependencyList
+
+            CurrentFilePath = F.Dir
+            PathList = [CurrentFilePath] + SearchPathList
+            for Inc in CurrentFileDependencyList:
+                for SearchPath in PathList:
+                    FilePath = os.path.join(SearchPath, Inc)
+                    if FilePath in gIsFileMap:
+                        if not gIsFileMap[FilePath]:
                             continue
-                        FilePath = PathClass(FilePath)
-                        CurrentFileDependencyList.append(FilePath)
-                        if FilePath not in FileStack and FilePath not in DependencySet:
-                            FileStack.append(FilePath)
-                        break
+                    # If isfile is called too many times, the performance is slow down.
+                    elif not os.path.isfile(FilePath):
+                        gIsFileMap[FilePath] = False
+                        continue
                     else:
-                        EdkLogger.debug(EdkLogger.DEBUG_9, "%s included by %s was not found "\
-                                        "in any given path:\n\t%s" % (Inc, F, "\n\t".join(SearchPathList)))
-
-                if not MacroUsedByIncludedFile:
-                    if F == File:
-                        CurrentFileDependencyList += ForceList
-                    #
-                    # Don't keep the file in cache if it uses macro in included file.
-                    # So it will be scanned again if another file includes this file.
-                    #
-                    DepDb[F] = CurrentFileDependencyList
-            DependencySet.update(CurrentFileDependencyList)
+                        gIsFileMap[FilePath] = True
+                    FilePath = PathClass(FilePath)
+                    FullPathDependList.append(FilePath)
+                    if FilePath not in DependencySet:
+                        FileStack.append(FilePath)
+                    break
+                else:
+                    EdkLogger.debug(EdkLogger.DEBUG_9, "%s included by %s was not found "\
+                                    "in any given path:\n\t%s" % (Inc, F, "\n\t".join(SearchPathList)))
 
-        #
-        # If there's macro used in included file, always build the file by
-        # returning a empty dependency
-        #
-        if MacroUsedByIncludedFile:
-            DependencyList = []
-        else:
-            DependencyList = list(DependencySet)  # remove duplicate ones
+            self.FileCache[F] = FullPathDependList
+            DependencySet.update(FullPathDependList)
+
+        DependencySet.update(ForceList)
+        if File in DependencySet:
+            DependencySet.remove(File)
+        DependencyList = list(DependencySet)  # remove duplicate ones
 
         return DependencyList
 
@@ -1314,16 +1321,16 @@ ${END}\t@cd $(BUILD_DIR)\n
             # macros passed to GenFds
             MacroList.append('"%s=%s"' % ("EFI_SOURCE", GlobalData.gEfiSource.replace('\\', '\\\\')))
             MacroList.append('"%s=%s"' % ("EDK_SOURCE", GlobalData.gEdkSource.replace('\\', '\\\\')))
-            for MacroName in GlobalData.gGlobalDefines:
-                if GlobalData.gGlobalDefines[MacroName] != "":
-                    MacroList.append('"%s=%s"' % (MacroName, GlobalData.gGlobalDefines[MacroName].replace('\\', '\\\\')))
+            MacroDict = {}
+            MacroDict.update(GlobalData.gGlobalDefines)
+            MacroDict.update(GlobalData.gCommandLineDefines)
+            MacroDict.pop("EFI_SOURCE", "dummy")
+            MacroDict.pop("EDK_SOURCE", "dummy")
+            for MacroName in MacroDict:
+                if MacroDict[MacroName] != "":
+                    MacroList.append('"%s=%s"' % (MacroName, MacroDict[MacroName].replace('\\', '\\\\')))
                 else:
                     MacroList.append('"%s"' % MacroName)
-            for MacroName in GlobalData.gCommandLineDefines:
-                if GlobalData.gCommandLineDefines[MacroName] != "":
-                    MacroList.append('"%s=%s"' % (MacroName, GlobalData.gCommandLineDefines[MacroName].replace('\\', '\\\\')))
-                else:
-                    MacroList.append('"%s"' % MacroName)                
         else:
             FdfFileList = []
 
index 7187f0a440dae540a6dbd3363bb30bf846c3db2e..b84d9f90aaec59e003d65fa3adb3252622c85714 100644 (file)
@@ -62,7 +62,7 @@ OFFSET = 'offset'
 STRING = 'string'\r
 TO = 'to'\r
 STRING_TOKEN = re.compile('STRING_TOKEN *\(([A-Z0-9_]+) *\)', re.MULTILINE | re.UNICODE)\r
-COMPATIBLE_STRING_TOKEN = re.compile('STRING_TOKEN *\(([A-Za-z0-9_]+) *\)', re.MULTILINE | re.UNICODE)\r
+COMPATIBLE_STRING_TOKEN = re.compile('STRING_TOKEN *\(([A-Z0-9_]+) *\)', re.MULTILINE | re.UNICODE)\r
 \r
 EFI_HII_ARRAY_SIZE_LENGTH = 4\r
 EFI_HII_PACKAGE_HEADER_LENGTH = 4\r
index 54751bab4e1111511c3f9700d797148e95934d7a..ea27607fce6dbb668a37881748b972b13fec4351 100644 (file)
@@ -260,7 +260,7 @@ class UniFileClassObject(object):
 \r
         Name = Item.split()[1]\r
         # Check the string name is the upper character\r
-        if not self.IsCompatibleMode and Name != '':\r
+        if Name != '':\r
             MatchString = re.match('[A-Z0-9_]+', Name, re.UNICODE)\r
             if MatchString == None or MatchString.end(0) != len(Name):\r
                 EdkLogger.error('Unicode File Parser', FORMAT_INVALID, 'The string token name %s defined in UNI file %s contains the invalid lower case character.' %(Name, self.File))\r
index 97c1094205deed05f3d592f04a81545dafc9c352..4bb9a8b52116e76b261c1179336f88f5cf52982c 100644 (file)
@@ -1,3 +1,3 @@
 #This file is for build version number auto generation\r
 #\r
-gBUILD_VERSION = "Build 2396"\r
+gBUILD_VERSION = "Build 2423"\r
diff --git a/BaseTools/Source/Python/Common/DecClassObjectLight.py b/BaseTools/Source/Python/Common/DecClassObjectLight.py
deleted file mode 100644 (file)
index 7fb41a2..0000000
+++ /dev/null
@@ -1,580 +0,0 @@
-## @file\r
-# This file is used to define each component of DEC file in light mode\r
-#\r
-# Copyright (c) 2008, Intel Corporation. All rights reserved.<BR>\r
-# This program and the accompanying materials\r
-# are licensed and made available under the terms and conditions of the BSD License\r
-# which accompanies this distribution.  The full text of the license may be found at\r
-# http://opensource.org/licenses/bsd-license.php\r
-#\r
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-#\r
-\r
-##\r
-# Import Modules\r
-#\r
-import os\r
-from Misc import GetFiles\r
-from String import *\r
-from DataType import *\r
-from CommonDataClass.PackageClass import *\r
-from CommonDataClass import CommonClass\r
-from BuildToolError import *\r
-from Parsing import *\r
-\r
-# Global variable\r
-Section = {TAB_UNKNOWN.upper() : MODEL_UNKNOWN,\r
-           TAB_DEC_DEFINES.upper() : MODEL_META_DATA_HEADER,\r
-           TAB_INCLUDES.upper() : MODEL_EFI_INCLUDE,\r
-           TAB_LIBRARY_CLASSES.upper() : MODEL_EFI_LIBRARY_CLASS,\r
-           TAB_COMPONENTS.upper() : MODEL_META_DATA_COMPONENT,\r
-           TAB_GUIDS.upper() : MODEL_EFI_GUID,\r
-           TAB_PROTOCOLS.upper() : MODEL_EFI_PROTOCOL,\r
-           TAB_PPIS.upper() : MODEL_EFI_PPI,\r
-           TAB_PCDS_FIXED_AT_BUILD_NULL.upper() : MODEL_PCD_FIXED_AT_BUILD,\r
-           TAB_PCDS_PATCHABLE_IN_MODULE_NULL.upper() : MODEL_PCD_PATCHABLE_IN_MODULE,\r
-           TAB_PCDS_FEATURE_FLAG_NULL.upper() : MODEL_PCD_FEATURE_FLAG,\r
-           TAB_PCDS_DYNAMIC_EX_NULL.upper() : MODEL_PCD_DYNAMIC_EX,\r
-           TAB_PCDS_DYNAMIC_NULL.upper() : MODEL_PCD_DYNAMIC,\r
-           TAB_USER_EXTENSIONS.upper() : MODEL_META_DATA_USER_EXTENSION\r
-           }\r
-\r
-## DecObject\r
-#\r
-# This class defined basic Dec object which is used by inheriting\r
-# \r
-# @param object:       Inherited from object class\r
-#\r
-class DecObject(object):\r
-    def __init__(self):\r
-        object.__init__()\r
-\r
-## Dec\r
-#\r
-# This class defined the structure used in Dec object\r
-# \r
-# @param DecObject:         Inherited from DecObject class\r
-# @param Filename:          Input value for Filename of Dec file, default is None\r
-# @param IsMergeAllArches:  Input value for IsMergeAllArches\r
-#                           True is to merge all arches\r
-#                           Fales is not to merge all arches\r
-#                           default is False\r
-# @param IsToPackage:       Input value for IsToPackage\r
-#                           True is to transfer to PackageObject automatically\r
-#                           False is not to transfer to PackageObject automatically\r
-#                           default is False\r
-# @param WorkspaceDir:      Input value for current workspace directory, default is None\r
-#\r
-# @var Identification:      To store value for Identification, it is a structure as Identification\r
-# @var Defines:             To store value for Defines, it is a structure as DecDefines\r
-# @var UserExtensions:      To store value for UserExtensions\r
-# @var Package:             To store value for Package, it is a structure as PackageClass\r
-# @var WorkspaceDir:        To store value for WorkspaceDir\r
-# @var Contents:            To store value for Contents, it is a structure as DecContents\r
-# @var KeyList:             To store value for KeyList, a list for all Keys used in Dec\r
-#\r
-class Dec(DecObject):\r
-    def __init__(self, Filename=None, IsToPackage=False, WorkspaceDir=None, AllGuidVersionDict=None, SupArchList=DataType.ARCH_LIST):\r
-        self.Identification = IdentificationClass()\r
-        self.Package = PackageClass()\r
-        self.UserExtensions = ''\r
-        self.WorkspaceDir = WorkspaceDir\r
-        self.SupArchList = SupArchList\r
-        self.AllGuidVersionDict = {}\r
-        if AllGuidVersionDict:\r
-            self.AllGuidVersionDict = AllGuidVersionDict\r
-\r
-        self.KeyList = [\r
-            TAB_INCLUDES, TAB_GUIDS, TAB_PROTOCOLS, TAB_PPIS, TAB_LIBRARY_CLASSES, \\r
-            TAB_PCDS_FIXED_AT_BUILD_NULL, TAB_PCDS_PATCHABLE_IN_MODULE_NULL, TAB_PCDS_FEATURE_FLAG_NULL, \\r
-            TAB_PCDS_DYNAMIC_NULL, TAB_PCDS_DYNAMIC_EX_NULL, TAB_DEC_DEFINES\r
-        ]\r
-        # Upper all KEYs to ignore case sensitive when parsing\r
-        self.KeyList = map(lambda c: c.upper(), self.KeyList)\r
-\r
-        # Init RecordSet\r
-        self.RecordSet = {}\r
-        for Key in self.KeyList:\r
-            self.RecordSet[Section[Key]] = []\r
-\r
-        # Init Comment\r
-        self.SectionHeaderCommentDict = {}\r
-\r
-        # Load Dec file if filename is not None\r
-        if Filename != None:\r
-            self.LoadDecFile(Filename)\r
-\r
-        # Transfer to Package Object if IsToPackage is True\r
-        if IsToPackage:\r
-            self.DecToPackage()\r
-\r
-    ## Load Dec file\r
-    #\r
-    # Load the file if it exists\r
-    #\r
-    # @param Filename:  Input value for filename of Dec file\r
-    #\r
-    def LoadDecFile(self, Filename):\r
-        # Insert a record for file\r
-        Filename = NormPath(Filename)\r
-        self.Identification.FullPath = Filename\r
-        (self.Identification.RelaPath, self.Identification.FileName) = os.path.split(Filename)\r
-        if self.Identification.FullPath.find(self.WorkspaceDir) > -1:\r
-            self.Identification.PackagePath = os.path.dirname(self.Identification.FullPath[len(self.WorkspaceDir) + 1:])\r
-\r
-        # Init common datas\r
-        IfDefList, SectionItemList, CurrentSection, ArchList, ThirdList, IncludeFiles = \\r
-        [], [], TAB_UNKNOWN, [], [], []\r
-        LineNo = 0\r
-\r
-        # Parse file content\r
-        IsFindBlockComment = False\r
-        ReservedLine = ''\r
-        Comment = ''\r
-        for Line in open(Filename, 'r'):\r
-            LineNo = LineNo + 1\r
-            # Remove comment block\r
-            if Line.find(TAB_COMMENT_EDK_START) > -1:\r
-                ReservedLine = GetSplitList(Line, TAB_COMMENT_EDK_START, 1)[0]\r
-                if ReservedLine.strip().startswith(TAB_COMMENT_SPLIT):\r
-                    Comment = Comment + Line.strip() + '\n'\r
-                    ReservedLine = ''\r
-                else:\r
-                    Comment = Comment + Line[len(ReservedLine):] + '\n'\r
-                IsFindBlockComment = True\r
-                if not ReservedLine:\r
-                    continue\r
-            if Line.find(TAB_COMMENT_EDK_END) > -1:\r
-                Comment = Comment + Line[:Line.find(TAB_COMMENT_EDK_END) + len(TAB_COMMENT_EDK_END)] + '\n'\r
-                Line = ReservedLine + GetSplitList(Line, TAB_COMMENT_EDK_END, 1)[1]\r
-                ReservedLine = ''\r
-                IsFindBlockComment = False\r
-            if IsFindBlockComment:\r
-                Comment = Comment + Line.strip() + '\n'\r
-                continue\r
-\r
-            # Remove comments at tail and remove spaces again\r
-            if Line.strip().startswith(TAB_COMMENT_SPLIT) or Line.strip().startswith('--/'):\r
-                Comment = Comment + Line.strip() + '\n'\r
-            Line = CleanString(Line)\r
-            if Line == '':\r
-                continue\r
-\r
-            ## Find a new section tab\r
-            # First insert previous section items\r
-            # And then parse the content of the new section\r
-            #\r
-            if Line.startswith(TAB_SECTION_START) and Line.endswith(TAB_SECTION_END):\r
-                # Insert items data of previous section\r
-                Model = Section[CurrentSection.upper()]\r
-                InsertSectionItems(Model, CurrentSection, SectionItemList, ArchList, ThirdList, self.RecordSet)\r
-                # Parse the new section\r
-                SectionItemList = []\r
-                ArchList = []\r
-                ThirdList = []\r
-\r
-                CurrentSection = ''\r
-                LineList = GetSplitValueList(Line[len(TAB_SECTION_START):len(Line) - len(TAB_SECTION_END)], TAB_COMMA_SPLIT)\r
-                for Item in LineList:\r
-                    ItemList = GetSplitValueList(Item, TAB_SPLIT)\r
-                    if CurrentSection == '':\r
-                        CurrentSection = ItemList[0]\r
-                    else:\r
-                        if CurrentSection != ItemList[0]:\r
-                            EdkLogger.error("Parser", PARSER_ERROR, "Different section names '%s' and '%s' are found in one section definition, this is not allowed." % (CurrentSection, ItemList[0]), File=Filename, Line=LineNo, RaiseError=EdkLogger.IsRaiseError)\r
-                    if CurrentSection.upper() not in self.KeyList:\r
-                        RaiseParserError(Line, CurrentSection, Filename, '', LineNo)\r
-                    ItemList.append('')\r
-                    ItemList.append('')\r
-                    if len(ItemList) > 5:\r
-                        RaiseParserError(Line, CurrentSection, Filename, '', LineNo)\r
-                    else:\r
-                        if ItemList[1] != '' and ItemList[1].upper() not in ARCH_LIST_FULL:\r
-                            EdkLogger.error("Parser", PARSER_ERROR, "Invalid Arch definition '%s' found" % ItemList[1], File=Filename, Line=LineNo, RaiseError=EdkLogger.IsRaiseError)\r
-                        ArchList.append(ItemList[1].upper())\r
-                        ThirdList.append(ItemList[2])\r
-\r
-                if Comment:\r
-                    if Comment.endswith('\n'):\r
-                        Comment = Comment[:len(Comment) - len('\n')]\r
-                    self.SectionHeaderCommentDict[Section[CurrentSection.upper()]] = Comment\r
-                    Comment = ''\r
-                continue\r
-\r
-            # Not in any defined section\r
-            if CurrentSection == TAB_UNKNOWN:\r
-                ErrorMsg = "%s is not in any defined section" % Line\r
-                EdkLogger.error("Parser", PARSER_ERROR, ErrorMsg, File=Filename, Line=LineNo, RaiseError=EdkLogger.IsRaiseError)\r
-\r
-            # Add a section item\r
-            SectionItemList.append([Line, LineNo, Comment])\r
-            Comment = ''\r
-            # End of parse\r
-        #End of For\r
-\r
-        #\r
-        # Insert items data of last section\r
-        #\r
-        Model = Section[CurrentSection.upper()]\r
-        InsertSectionItems(Model, CurrentSection, SectionItemList, ArchList, ThirdList, self.RecordSet)\r
-        if Comment != '':\r
-            self.SectionHeaderCommentDict[Model] = Comment\r
-            Comment = ''\r
-\r
-    ## Package Object to DEC file\r
-    def PackageToDec(self, Package):\r
-        Dec = ''\r
-        DecList = sdict()\r
-        SectionHeaderCommentDict = {}\r
-        if Package == None:\r
-            return Dec\r
-\r
-        PackageHeader = Package.PackageHeader\r
-        TmpList = []\r
-        if PackageHeader.Name:\r
-            TmpList.append(TAB_DEC_DEFINES_PACKAGE_NAME + ' = ' + PackageHeader.Name)\r
-        if PackageHeader.Guid:\r
-            TmpList.append(TAB_DEC_DEFINES_PACKAGE_GUID + ' = ' + PackageHeader.Guid)\r
-        if PackageHeader.Version:\r
-            TmpList.append(TAB_DEC_DEFINES_PACKAGE_VERSION + ' = ' + PackageHeader.Version)\r
-        if PackageHeader.DecSpecification:\r
-            TmpList.append(TAB_DEC_DEFINES_DEC_SPECIFICATION + ' = ' + PackageHeader.DecSpecification)\r
-        if Package.UserExtensions != None:\r
-            for Item in Package.UserExtensions.Defines:\r
-                TmpList.append(Item)\r
-        DecList['Defines'] = TmpList\r
-        if PackageHeader.Description != '':\r
-            SectionHeaderCommentDict['Defines'] = PackageHeader.Description\r
-\r
-        for Item in Package.Includes:\r
-            Key = 'Includes.' + Item.SupArchList\r
-            Value = Item.FilePath\r
-            GenMetaDatSectionItem(Key, Value, DecList)\r
-\r
-        for Item in Package.GuidDeclarations:\r
-            Key = 'Guids.' + Item.SupArchList\r
-            Value = Item.CName + '=' + Item.Guid\r
-            GenMetaDatSectionItem(Key, Value, DecList)\r
-\r
-        for Item in Package.ProtocolDeclarations:\r
-            Key = 'Protocols.' + Item.SupArchList\r
-            Value = Item.CName + '=' + Item.Guid\r
-            GenMetaDatSectionItem(Key, Value, DecList)\r
-\r
-        for Item in Package.PpiDeclarations:\r
-            Key = 'Ppis.' + Item.SupArchList\r
-            Value = Item.CName + '=' + Item.Guid\r
-            GenMetaDatSectionItem(Key, Value, DecList)\r
-\r
-        for Item in Package.LibraryClassDeclarations:\r
-            Key = 'LibraryClasses.' + Item.SupArchList\r
-            Value = Item.LibraryClass + '|' + Item.RecommendedInstance\r
-            GenMetaDatSectionItem(Key, Value, DecList)\r
-\r
-        for Item in Package.PcdDeclarations:\r
-            Key = 'Pcds' + Item.ItemType + '.' + Item.SupArchList\r
-            Value = Item.TokenSpaceGuidCName + '.' + Item.CName\r
-            if Item.DefaultValue != '':\r
-                Value = Value + '|' + Item.DefaultValue\r
-            if Item.DatumType != '':\r
-                Value = Value + '|' + Item.DatumType\r
-            if Item.Token != '':\r
-                Value = Value + '|' + Item.Token\r
-            GenMetaDatSectionItem(Key, Value, DecList)\r
-\r
-        # Transfer Package to Inf\r
-        for Key in DecList:\r
-            if Key in SectionHeaderCommentDict:\r
-                List = SectionHeaderCommentDict[Key].split('\r')\r
-                for Item in List:\r
-                    Dec = Dec + Item + '\n'\r
-            Dec = Dec + '[' + Key + ']' + '\n'\r
-            for Value in DecList[Key]:\r
-                if type(Value) == type([]):\r
-                    for SubValue in Value:\r
-                        Dec = Dec + '  ' + SubValue + '\n'\r
-                else:\r
-                    Dec = Dec + '  ' + Value + '\n'\r
-            Dec = Dec + '\n'\r
-\r
-        return Dec\r
-\r
-    ## Transfer to Package Object\r
-    # \r
-    # Transfer all contents of a Dec file to a standard Package Object\r
-    #\r
-    def DecToPackage(self):\r
-        # Init global information for the file\r
-        ContainerFile = self.Identification.FullPath\r
-\r
-        # Generate Package Header\r
-        self.GenPackageHeader(ContainerFile)\r
-\r
-        # Generate Includes\r
-        # Only for Edk\r
-        self.GenIncludes(ContainerFile)\r
-\r
-        # Generate Guids\r
-        self.GenGuidProtocolPpis(DataType.TAB_GUIDS, ContainerFile)\r
-\r
-        # Generate Protocols\r
-        self.GenGuidProtocolPpis(DataType.TAB_PROTOCOLS, ContainerFile)\r
-\r
-        # Generate Ppis\r
-        self.GenGuidProtocolPpis(DataType.TAB_PPIS, ContainerFile)\r
-\r
-        # Generate LibraryClasses\r
-        self.GenLibraryClasses(ContainerFile)\r
-\r
-        # Generate Pcds\r
-        self.GenPcds(ContainerFile)\r
-\r
-        # Init MiscFiles\r
-        self.GenMiscFiles(ContainerFile)\r
-\r
-    ## GenMiscFiles\r
-    #\r
-    def GenMiscFiles(self, ContainerFile):\r
-        MiscFiles = MiscFileClass()\r
-        MiscFiles.Name = 'ModuleFiles'\r
-        for Item in GetFiles(os.path.dirname(ContainerFile), ['CVS', '.svn'], False):\r
-            File = CommonClass.FileClass()\r
-            File.Filename = Item\r
-            MiscFiles.Files.append(File)\r
-        self.Package.MiscFiles = MiscFiles\r
-\r
-    ## Get Package Header\r
-    #\r
-    # Gen Package Header of Dec as <Key> = <Value>\r
-    #\r
-    # @param ContainerFile: The Dec file full path \r
-    #\r
-    def GenPackageHeader(self, ContainerFile):\r
-        EdkLogger.debug(2, "Generate PackageHeader ...")\r
-        #\r
-        # Update all defines item in database\r
-        #\r
-        RecordSet = self.RecordSet[MODEL_META_DATA_HEADER]\r
-        PackageHeader = PackageHeaderClass()\r
-        OtherDefines = []\r
-        for Record in RecordSet:\r
-            ValueList = GetSplitValueList(Record[0], TAB_EQUAL_SPLIT)\r
-            if len(ValueList) != 2:\r
-                OtherDefines.append(Record[0])\r
-            else:\r
-                Name = ValueList[0]\r
-                Value = ValueList[1]\r
-                if Name == TAB_DEC_DEFINES_PACKAGE_NAME:\r
-                    PackageHeader.Name = Value\r
-                elif Name == TAB_DEC_DEFINES_PACKAGE_GUID:\r
-                    PackageHeader.Guid = Value\r
-                elif Name == TAB_DEC_DEFINES_PACKAGE_VERSION:\r
-                    PackageHeader.Version = Value\r
-                elif Name == TAB_DEC_DEFINES_DEC_SPECIFICATION:\r
-                    PackageHeader.DecSpecification = Value\r
-                else:\r
-                    OtherDefines.append(Record[0])\r
-\r
-        PackageHeader.FileName = self.Identification.FileName\r
-        PackageHeader.FullPath = self.Identification.FullPath\r
-        PackageHeader.RelaPath = self.Identification.RelaPath\r
-        PackageHeader.PackagePath = self.Identification.PackagePath\r
-        PackageHeader.ModulePath = self.Identification.ModulePath\r
-        PackageHeader.CombinePath = os.path.normpath(os.path.join(PackageHeader.PackagePath, PackageHeader.ModulePath, PackageHeader.FileName))\r
-\r
-        if MODEL_META_DATA_HEADER in self.SectionHeaderCommentDict:\r
-            PackageHeader.Description = self.SectionHeaderCommentDict[MODEL_META_DATA_HEADER]\r
-\r
-        self.Package.PackageHeader = PackageHeader\r
-        UE = UserExtensionsClass()\r
-        UE.Defines = OtherDefines\r
-        self.Package.UserExtensions = UE\r
-\r
-\r
-    ## GenIncludes\r
-    #\r
-    # Gen Includes of Dec\r
-    # \r
-    # @param ContainerFile: The Dec file full path \r
-    #\r
-    def GenIncludes(self, ContainerFile):\r
-        EdkLogger.debug(2, "Generate %s ..." % TAB_INCLUDES)\r
-        Includes = {}\r
-        # Get all Includes\r
-        RecordSet = self.RecordSet[MODEL_EFI_INCLUDE]\r
-\r
-        # Go through each arch\r
-        for Record in RecordSet:\r
-            Arch = Record[1]\r
-            Key = Record[0]\r
-            Include = IncludeClass()\r
-            Include.FilePath = NormPath(Key)\r
-            Include.SupArchList = Arch\r
-            self.Package.Includes.append(Include)\r
-\r
-    ## GenPpis\r
-    #\r
-    # Gen Ppis of Dec\r
-    # <CName>=<GuidValue>\r
-    #\r
-    # @param ContainerFile: The Dec file full path \r
-    #\r
-    def GenGuidProtocolPpis(self, Type, ContainerFile):\r
-        EdkLogger.debug(2, "Generate %s ..." % Type)\r
-        Lists = {}\r
-        # Get all Items\r
-        RecordSet = self.RecordSet[Section[Type.upper()]]\r
-\r
-        # Go through each arch\r
-        for Record in RecordSet:\r
-            Arch = Record[1]\r
-            (Name, Value) = GetGuidsProtocolsPpisOfDec(Record[0], Type, ContainerFile, Record[2])\r
-\r
-            ListMember = None\r
-            if Type == TAB_GUIDS:\r
-                ListMember = self.Package.GuidDeclarations\r
-            elif Type == TAB_PROTOCOLS:\r
-                ListMember = self.Package.ProtocolDeclarations\r
-            elif Type == TAB_PPIS:\r
-                ListMember = self.Package.PpiDeclarations\r
-\r
-            ListClass = GuidProtocolPpiCommonClass()\r
-            ListClass.CName = Name\r
-            ListClass.Guid = Value\r
-            ListClass.SupArchList = Arch\r
-            ListMember.append(ListClass)\r
-\r
-    ## GenLibraryClasses\r
-    #\r
-    # Gen LibraryClasses of Dec\r
-    # <CName>=<GuidValue>\r
-    #\r
-    # @param ContainerFile: The Dec file full path \r
-    #\r
-    def GenLibraryClasses(self, ContainerFile):\r
-        EdkLogger.debug(2, "Generate %s ..." % TAB_LIBRARY_CLASSES)\r
-        LibraryClasses = {}\r
-        # Get all Guids\r
-        RecordSet = self.RecordSet[MODEL_EFI_LIBRARY_CLASS]\r
-\r
-        # Go through each arch\r
-        for Record in RecordSet:\r
-            Arch = Record[1]\r
-            List = GetSplitValueList(Record[0], DataType.TAB_VALUE_SPLIT)\r
-            if len(List) != 2:\r
-                continue\r
-            LibraryClass = LibraryClassClass()\r
-            LibraryClass.LibraryClass = List[0]\r
-            LibraryClass.RecommendedInstance = NormPath(List[1])\r
-            LibraryClass.SupArchList = Arch\r
-            self.Package.LibraryClassDeclarations.append(LibraryClass)\r
-\r
-    def AddPcd(self, CName, Token, TokenSpaceGuidCName, DatumType, DefaultValue, ItemType, Arch):\r
-        Pcd = CommonClass.PcdClass()\r
-        Pcd.CName = CName\r
-        Pcd.Token = Token\r
-        Pcd.TokenSpaceGuidCName = TokenSpaceGuidCName\r
-        Pcd.DatumType = DatumType\r
-        Pcd.DefaultValue = DefaultValue\r
-        Pcd.ItemType = ItemType\r
-        Pcd.SupArchList = Arch\r
-        self.Package.PcdDeclarations.append(Pcd)\r
-\r
-    ## GenPcds\r
-    #\r
-    # Gen Pcds of Dec\r
-    # <TokenSpcCName>.<TokenCName>|<Value>|<DatumType>|<Token>\r
-    #\r
-    # @param ContainerFile: The Dec file full path \r
-    #\r
-    def GenPcds(self, ContainerFile):\r
-        EdkLogger.debug(2, "Generate %s ..." % TAB_PCDS)\r
-        Pcds = {}\r
-        PcdToken = {}\r
-        # Get all Pcds\r
-        RecordSet1 = self.RecordSet[MODEL_PCD_FIXED_AT_BUILD]\r
-        RecordSet2 = self.RecordSet[MODEL_PCD_PATCHABLE_IN_MODULE]\r
-        RecordSet3 = self.RecordSet[MODEL_PCD_FEATURE_FLAG]\r
-        RecordSet4 = self.RecordSet[MODEL_PCD_DYNAMIC_EX]\r
-        RecordSet5 = self.RecordSet[MODEL_PCD_DYNAMIC]\r
-\r
-        # Go through each pcd\r
-        for Record in RecordSet1:\r
-            Arch = Record[1]\r
-            (TokenGuidCName, TokenName, DefaultValue, DatumType, Token, ItemType) = GetPcdOfDec(Record[0], TAB_PCDS_FIXED_AT_BUILD, ContainerFile, Record[2])\r
-            self.AddPcd(TokenName, Token, TokenGuidCName, DatumType, DefaultValue, ItemType, Arch)\r
-        for Record in RecordSet2:\r
-            Arch = Record[1]\r
-            (TokenGuidCName, TokenName, DefaultValue, DatumType, Token, ItemType) = GetPcdOfDec(Record[0], TAB_PCDS_PATCHABLE_IN_MODULE, ContainerFile, Record[2])\r
-            self.AddPcd(TokenName, Token, TokenGuidCName, DatumType, DefaultValue, ItemType, Arch)\r
-        for Record in RecordSet3:\r
-            Arch = Record[1]\r
-            (TokenGuidCName, TokenName, DefaultValue, DatumType, Token, ItemType) = GetPcdOfDec(Record[0], TAB_PCDS_FEATURE_FLAG, ContainerFile, Record[2])\r
-            self.AddPcd(TokenName, Token, TokenGuidCName, DatumType, DefaultValue, ItemType, Arch)\r
-        for Record in RecordSet4:\r
-            Arch = Record[1]\r
-            (TokenGuidCName, TokenName, DefaultValue, DatumType, Token, ItemType) = GetPcdOfDec(Record[0], TAB_PCDS_DYNAMIC_EX, ContainerFile, Record[2])\r
-            self.AddPcd(TokenName, Token, TokenGuidCName, DatumType, DefaultValue, ItemType, Arch)\r
-        for Record in RecordSet5:\r
-            Arch = Record[1]\r
-            (TokenGuidCName, TokenName, DefaultValue, DatumType, Token, ItemType) = GetPcdOfDec(Record[0], TAB_PCDS_DYNAMIC, ContainerFile, Record[2])\r
-            self.AddPcd(TokenName, Token, TokenGuidCName, DatumType, DefaultValue, ItemType, Arch)\r
-\r
-    ## Show detailed information of Package\r
-    #\r
-    # Print all members and their values of Package class\r
-    #\r
-    def ShowPackage(self):\r
-        M = self.Package\r
-        print 'Filename =', M.PackageHeader.FileName\r
-        print 'FullPath =', M.PackageHeader.FullPath\r
-        print 'RelaPath =', M.PackageHeader.RelaPath\r
-        print 'PackagePath =', M.PackageHeader.PackagePath\r
-        print 'ModulePath =', M.PackageHeader.ModulePath\r
-        print 'CombinePath =', M.PackageHeader.CombinePath\r
-\r
-        print 'BaseName =', M.PackageHeader.Name\r
-        print 'Guid =', M.PackageHeader.Guid\r
-        print 'Version =', M.PackageHeader.Version\r
-        print 'DecSpecification =', M.PackageHeader.DecSpecification\r
-\r
-        print '\nIncludes ='#, M.Includes\r
-        for Item in M.Includes:\r
-            print Item.FilePath, Item.SupArchList\r
-        print '\nGuids ='#, M.GuidDeclarations\r
-        for Item in M.GuidDeclarations:\r
-            print Item.CName, Item.Guid, Item.SupArchList\r
-        print '\nProtocols ='#, M.ProtocolDeclarations\r
-        for Item in M.ProtocolDeclarations:\r
-            print Item.CName, Item.Guid, Item.SupArchList\r
-        print '\nPpis ='#, M.PpiDeclarations\r
-        for Item in M.PpiDeclarations:\r
-            print Item.CName, Item.Guid, Item.SupArchList\r
-        print '\nLibraryClasses ='#, M.LibraryClassDeclarations\r
-        for Item in M.LibraryClassDeclarations:\r
-            print Item.LibraryClass, Item.RecommendedInstance, Item.SupModuleList, Item.SupArchList\r
-        print '\nPcds ='#, M.PcdDeclarations\r
-        for Item in M.PcdDeclarations:\r
-            print 'CName=', Item.CName, 'TokenSpaceGuidCName=', Item.TokenSpaceGuidCName, 'DefaultValue=', Item.DefaultValue, 'ItemType=', Item.ItemType, 'Token=', Item.Token, 'DatumType=', Item.DatumType, Item.SupArchList\r
-        print '\nUserExtensions =', M.UserExtensions.Defines\r
-        print '\n*** FileList ***'\r
-        for Item in M.MiscFiles.Files:\r
-            print Item.Filename\r
-        print '****************\n'\r
-\r
-##\r
-#\r
-# This acts like the main() function for the script, unless it is 'import'ed into another\r
-# script.\r
-#\r
-if __name__ == '__main__':\r
-    EdkLogger.Initialize()\r
-    EdkLogger.SetLevel(EdkLogger.QUIET)\r
-\r
-    W = os.getenv('WORKSPACE')\r
-    F = os.path.join(W, 'MdeModulePkg/MdeModulePkg.dec')\r
-\r
-    P = Dec(os.path.normpath(F), True, W)\r
-    P.ShowPackage()\r
-    print P.PackageToDec(P.Package)\r
diff --git a/BaseTools/Source/Python/Common/InfClassObjectLight.py b/BaseTools/Source/Python/Common/InfClassObjectLight.py
deleted file mode 100644 (file)
index 44f9223..0000000
+++ /dev/null
@@ -1,877 +0,0 @@
-## @file\r
-# This file is used to define each component of INF file\r
-#\r
-# Copyright (c) 2007 - 2010, Intel Corporation. All rights reserved.<BR>\r
-# This program and the accompanying materials\r
-# are licensed and made available under the terms and conditions of the BSD License\r
-# which accompanies this distribution.  The full text of the license may be found at\r
-# http://opensource.org/licenses/bsd-license.php\r
-#\r
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-#\r
-\r
-##\r
-# Import Modules\r
-#\r
-import os\r
-import re\r
-import EdkLogger\r
-\r
-from CommonDataClass.ModuleClass import *\r
-from CommonDataClass import CommonClass\r
-from String import *\r
-from DataType import *\r
-from BuildToolError import *\r
-from Misc import sdict\r
-from Misc import GetFiles\r
-from Parsing import *\r
-\r
-# Global variable\r
-Section = {TAB_UNKNOWN.upper() : MODEL_UNKNOWN,\r
-           TAB_INF_DEFINES.upper() : MODEL_META_DATA_HEADER,\r
-           TAB_BUILD_OPTIONS.upper() : MODEL_META_DATA_BUILD_OPTION,\r
-           TAB_INCLUDES.upper() : MODEL_EFI_INCLUDE,\r
-           TAB_LIBRARIES.upper() : MODEL_EFI_LIBRARY_INSTANCE,\r
-           TAB_LIBRARY_CLASSES.upper() : MODEL_EFI_LIBRARY_CLASS,\r
-           TAB_PACKAGES.upper() : MODEL_META_DATA_PACKAGE,\r
-           TAB_NMAKE.upper() : MODEL_META_DATA_NMAKE,\r
-           TAB_INF_FIXED_PCD.upper() : MODEL_PCD_FIXED_AT_BUILD,\r
-           TAB_INF_PATCH_PCD.upper() : MODEL_PCD_PATCHABLE_IN_MODULE,\r
-           TAB_INF_FEATURE_PCD.upper() : MODEL_PCD_FEATURE_FLAG,\r
-           TAB_INF_PCD_EX.upper() : MODEL_PCD_DYNAMIC_EX,\r
-           TAB_INF_PCD.upper() : MODEL_PCD_DYNAMIC,\r
-           TAB_SOURCES.upper() : MODEL_EFI_SOURCE_FILE,\r
-           TAB_GUIDS.upper() : MODEL_EFI_GUID,\r
-           TAB_PROTOCOLS.upper() : MODEL_EFI_PROTOCOL,\r
-           TAB_PPIS.upper() : MODEL_EFI_PPI,\r
-           TAB_DEPEX.upper() : MODEL_EFI_DEPEX,\r
-           TAB_BINARIES.upper() : MODEL_EFI_BINARY_FILE,\r
-           TAB_USER_EXTENSIONS.upper() : MODEL_META_DATA_USER_EXTENSION\r
-           }\r
-\r
-gComponentType2ModuleType = {\r
-    "LIBRARY"               :   "BASE",\r
-    "SECURITY_CORE"         :   "SEC",\r
-    "PEI_CORE"              :   "PEI_CORE",\r
-    "COMBINED_PEIM_DRIVER"  :   "PEIM",\r
-    "PIC_PEIM"              :   "PEIM",\r
-    "RELOCATABLE_PEIM"      :   "PEIM",\r
-    "PE32_PEIM"             :   "PEIM",\r
-    "BS_DRIVER"             :   "DXE_DRIVER",\r
-    "RT_DRIVER"             :   "DXE_RUNTIME_DRIVER",\r
-    "SAL_RT_DRIVER"         :   "DXE_SAL_DRIVER",\r
-    "APPLICATION"           :   "UEFI_APPLICATION",\r
-    "LOGO"                  :   "BASE",\r
-}\r
-\r
-class InfHeader(ModuleHeaderClass):\r
-    _Mapping_ = {\r
-        # Required Fields\r
-        TAB_INF_DEFINES_BASE_NAME                   : "Name",\r
-        TAB_INF_DEFINES_FILE_GUID                   : "Guid",\r
-        TAB_INF_DEFINES_MODULE_TYPE                 : "ModuleType",\r
-        TAB_INF_DEFINES_EFI_SPECIFICATION_VERSION   : "UefiSpecificationVersion",\r
-        TAB_INF_DEFINES_UEFI_SPECIFICATION_VERSION  : "UefiSpecificationVersion",\r
-        TAB_INF_DEFINES_EDK_RELEASE_VERSION         : "EdkReleaseVersion",\r
-\r
-        # Optional Fields\r
-        TAB_INF_DEFINES_INF_VERSION                 : "InfVersion",\r
-        TAB_INF_DEFINES_BINARY_MODULE               : "BinaryModule",\r
-        TAB_INF_DEFINES_COMPONENT_TYPE              : "ComponentType",\r
-        TAB_INF_DEFINES_MAKEFILE_NAME               : "MakefileName",\r
-        TAB_INF_DEFINES_BUILD_NUMBER                : "BuildNumber",\r
-        TAB_INF_DEFINES_BUILD_TYPE                  : "BuildType",\r
-        TAB_INF_DEFINES_FFS_EXT                     : "FfsExt",\r
-        TAB_INF_DEFINES_FV_EXT                      : "FvExt",\r
-        TAB_INF_DEFINES_SOURCE_FV                   : "SourceFv",\r
-        TAB_INF_DEFINES_VERSION_NUMBER              : "VersionNumber",\r
-        TAB_INF_DEFINES_VERSION_STRING              : "VersionString",\r
-        TAB_INF_DEFINES_VERSION                     : "Version",\r
-        TAB_INF_DEFINES_PCD_IS_DRIVER               : "PcdIsDriver",\r
-        TAB_INF_DEFINES_TIANO_EDK_FLASHMAP_H         : "TianoEdkFlashMap_h",\r
-        TAB_INF_DEFINES_SHADOW                      : "Shadow",\r
-    }\r
-\r
-    def __init__(self):\r
-        ModuleHeaderClass.__init__(self)\r
-        self.VersionNumber = ''\r
-        self.VersionString = ''\r
-        #print self.__dict__\r
-    def __setitem__(self, key, value):\r
-        self.__dict__[self._Mapping_[key]] = value\r
-    def __getitem__(self, key):\r
-        return self.__dict__[self._Mapping_[key]]\r
-    ## "in" test support\r
-    def __contains__(self, key):\r
-        return key in self._Mapping_\r
-\r
-## InfObject\r
-#\r
-# This class defined basic Inf object which is used by inheriting\r
-# \r
-# @param object:       Inherited from object class\r
-#\r
-class InfObject(object):\r
-    def __init__(self):\r
-        object.__init__()\r
-\r
-## Inf\r
-#\r
-# This class defined the structure used in Inf object\r
-# \r
-# @param InfObject:         Inherited from InfObject class\r
-# @param Ffilename:         Input value for Ffilename of Inf file, default is None\r
-# @param IsMergeAllArches:  Input value for IsMergeAllArches\r
-#                           True is to merge all arches\r
-#                           Fales is not to merge all arches\r
-#                           default is False\r
-# @param IsToModule:        Input value for IsToModule\r
-#                           True is to transfer to ModuleObject automatically\r
-#                           False is not to transfer to ModuleObject automatically\r
-#                           default is False\r
-# @param WorkspaceDir:      Input value for current workspace directory, default is None\r
-#\r
-# @var Identification:      To store value for Identification, it is a structure as Identification\r
-# @var UserExtensions:      To store value for UserExtensions\r
-# @var Module:              To store value for Module, it is a structure as ModuleClass\r
-# @var WorkspaceDir:        To store value for WorkspaceDir\r
-# @var KeyList:             To store value for KeyList, a list for all Keys used in Inf\r
-#\r
-class Inf(InfObject):\r
-    def __init__(self, Filename=None, IsToModule=False, WorkspaceDir=None, PackageDir=None, SupArchList=DataType.ARCH_LIST):\r
-        self.Identification = IdentificationClass()\r
-        self.Module = ModuleClass()\r
-        self.WorkspaceDir = WorkspaceDir\r
-        self.PackageDir = PackageDir\r
-        self.SupArchList = SupArchList\r
-\r
-        self.KeyList = [\r
-            TAB_SOURCES, TAB_BUILD_OPTIONS, TAB_BINARIES, TAB_INCLUDES, TAB_GUIDS,\r
-            TAB_PROTOCOLS, TAB_PPIS, TAB_LIBRARY_CLASSES, TAB_PACKAGES, TAB_INF_FIXED_PCD,\r
-            TAB_INF_PATCH_PCD, TAB_INF_FEATURE_PCD, TAB_INF_PCD, TAB_INF_PCD_EX,\r
-            TAB_DEPEX, TAB_INF_DEFINES\r
-        ]\r
-        # Upper all KEYs to ignore case sensitive when parsing\r
-        self.KeyList = map(lambda c: c.upper(), self.KeyList)\r
-\r
-        # Init RecordSet\r
-        self.RecordSet = {}\r
-        for Key in self.KeyList:\r
-            self.RecordSet[Section[Key]] = []\r
-\r
-        # Init Comment\r
-        self.SectionHeaderCommentDict = {}\r
-\r
-        # Load Inf file if filename is not None\r
-        if Filename != None:\r
-            self.LoadInfFile(Filename)\r
-\r
-        # Transfer to Module Object if IsToModule is True\r
-        if IsToModule:\r
-            self.InfToModule()\r
-\r
-    ## Module Object to INF file\r
-    def ModuleToInf(self, Module):\r
-        Inf = ''\r
-        InfList = sdict()\r
-        SectionHeaderCommentDict = {}\r
-        if Module == None:\r
-            return Inf\r
-\r
-        ModuleHeader = Module.ModuleHeader\r
-        TmpList = []\r
-        # Common define items\r
-        if ModuleHeader.Name:\r
-            TmpList.append(TAB_INF_DEFINES_BASE_NAME + ' = ' + ModuleHeader.Name)\r
-        if ModuleHeader.Guid:\r
-            TmpList.append(TAB_INF_DEFINES_FILE_GUID + ' = ' + ModuleHeader.Guid)\r
-        if ModuleHeader.Version:\r
-            TmpList.append(TAB_INF_DEFINES_VERSION_STRING + ' = ' + ModuleHeader.Version)\r
-        if ModuleHeader.ModuleType:\r
-            TmpList.append(TAB_INF_DEFINES_MODULE_TYPE + ' = ' + ModuleHeader.ModuleType)\r
-        if ModuleHeader.PcdIsDriver:\r
-            TmpList.append(TAB_INF_DEFINES_PCD_IS_DRIVER + ' = ' + ModuleHeader.PcdIsDriver)\r
-        # Externs\r
-        for Item in Module.Externs:\r
-            if Item.EntryPoint:\r
-                TmpList.append(TAB_INF_DEFINES_ENTRY_POINT + ' = ' + Item.EntryPoint)\r
-            if Item.UnloadImage:\r
-                TmpList.append(TAB_INF_DEFINES_UNLOAD_IMAGE + ' = ' + Item.UnloadImage)\r
-            if Item.Constructor:\r
-                TmpList.append(TAB_INF_DEFINES_CONSTRUCTOR + ' = ' + Item.Constructor)\r
-            if Item.Destructor:\r
-                TmpList.append(TAB_INF_DEFINES_DESTRUCTOR + ' = ' + Item.Destructor)\r
-        # Other define items\r
-        if Module.UserExtensions != None:\r
-            for Item in Module.UserExtensions.Defines:\r
-                TmpList.append(Item)\r
-        InfList['Defines'] = TmpList\r
-        if ModuleHeader.Description != '':\r
-            SectionHeaderCommentDict['Defines'] = ModuleHeader.Description\r
-\r
-        if Module.UserExtensions != None:\r
-            InfList['BuildOptions'] = Module.UserExtensions.BuildOptions\r
-\r
-        for Item in Module.Includes:\r
-            Key = 'Includes.' + GetStringOfList(Item.SupArchList)\r
-            Value = GetHelpTextList(Item.HelpTextList)\r
-            Value.append(Item.FilePath)\r
-            GenMetaDatSectionItem(Key, Value, InfList)\r
-\r
-        for Item in Module.LibraryClasses:\r
-            Key = 'LibraryClasses.' + GetStringOfList(Item.SupArchList)\r
-            Value = GetHelpTextList(Item.HelpTextList)\r
-            NewValue = Item.LibraryClass\r
-            if Item.RecommendedInstance:\r
-                NewValue = NewValue + '|' + Item.RecommendedInstance\r
-            if Item.FeatureFlag:\r
-                NewValue = NewValue + '|' + Item.FeatureFlag\r
-            Value.append(NewValue)\r
-            GenMetaDatSectionItem(Key, Value, InfList)\r
-\r
-        for Item in Module.PackageDependencies:\r
-            Key = 'Packages.' + GetStringOfList(Item.SupArchList)\r
-            Value = GetHelpTextList(Item.HelpTextList)\r
-            Value.append(Item.FilePath)\r
-            GenMetaDatSectionItem(Key, Value, InfList)\r
-\r
-        for Item in Module.PcdCodes:\r
-            Key = 'Pcds' + Item.ItemType + '.' + GetStringOfList(Item.SupArchList)\r
-            Value = GetHelpTextList(Item.HelpTextList)\r
-            NewValue = Item.TokenSpaceGuidCName + '.' + Item.CName\r
-            if Item.DefaultValue != '':\r
-                NewValue = NewValue + '|' + Item.DefaultValue\r
-            Value.append(NewValue)\r
-            GenMetaDatSectionItem(Key, Value, InfList)\r
-\r
-        for Item in Module.Sources:\r
-            Key = 'Sources.' + GetStringOfList(Item.SupArchList)\r
-            Value = GetHelpTextList(Item.HelpTextList)\r
-            NewValue = Item.SourceFile\r
-            if Item.ToolChainFamily != '':\r
-                NewValue = NewValue + '|' + Item.ToolChainFamily\r
-            if Item.TagName != '':\r
-                NewValue = NewValue + '|' + Item.TagName\r
-            if Item.ToolCode != '':\r
-                NewValue = NewValue + '|' + Item.ToolCode\r
-            if Item.FeatureFlag != '':\r
-                NewValue = NewValue + '|' + Item.FeatureFlag\r
-            Value.append(NewValue)\r
-            if Item.HelpText != '':\r
-                SectionHeaderCommentDict[Key] = Item.HelpText\r
-            GenMetaDatSectionItem(Key, Value, InfList)\r
-\r
-        for Item in Module.Guids:\r
-            Key = 'Guids.' + GetStringOfList(Item.SupArchList)\r
-            Value = GetHelpTextList(Item.HelpTextList)\r
-            Value.append(Item.CName)\r
-            GenMetaDatSectionItem(Key, Value, InfList)\r
-\r
-        for Item in Module.Protocols:\r
-            Key = 'Protocols.' + GetStringOfList(Item.SupArchList)\r
-            Value = GetHelpTextList(Item.HelpTextList)\r
-            Value.append(Item.CName)\r
-            GenMetaDatSectionItem(Key, Value, InfList)\r
-\r
-        for Item in Module.Ppis:\r
-            Key = 'Ppis.' + GetStringOfList(Item.SupArchList)\r
-            Value = GetHelpTextList(Item.HelpTextList)\r
-            Value.append(Item.CName)\r
-            GenMetaDatSectionItem(Key, Value, InfList)\r
-\r
-        if Module.PeiDepex:\r
-            Key = 'Depex'\r
-            Value = Module.PeiDepex.Depex\r
-            GenMetaDatSectionItem(Key, Value, InfList)\r
-\r
-        if Module.DxeDepex:\r
-            Key = 'Depex'\r
-            Value = Module.DxeDepex.Depex\r
-            GenMetaDatSectionItem(Key, Value, InfList)\r
-\r
-        if Module.SmmDepex:\r
-            Key = 'Depex'\r
-            Value = Module.SmmDepex.Depex\r
-            GenMetaDatSectionItem(Key, Value, InfList)\r
-\r
-        for Item in Module.Binaries:\r
-            Key = 'Binaries.' + GetStringOfList(Item.SupArchList)\r
-            Value = GetHelpTextList(Item.HelpTextList)\r
-            NewValue = Item.FileType + '|' + Item.BinaryFile + '|' + Item.Target\r
-            if Item.FeatureFlag != '':\r
-                NewValue = NewValue + '|' + Item.FeatureFlag\r
-            Value.append(NewValue)\r
-            GenMetaDatSectionItem(Key, Value, InfList)\r
-\r
-        # Transfer Module to Inf\r
-        for Key in InfList:\r
-            if Key in SectionHeaderCommentDict:\r
-                List = SectionHeaderCommentDict[Key].split('\r')\r
-                for Item in List:\r
-                    Inf = Inf + Item + '\n'\r
-            Inf = Inf + '[' + Key + ']' + '\n'\r
-            for Value in InfList[Key]:\r
-                if type(Value) == type([]):\r
-                    for SubValue in Value:\r
-                        Inf = Inf + '  ' + SubValue + '\n'\r
-                else:\r
-                    Inf = Inf + '  ' + Value + '\n'\r
-            Inf = Inf + '\n'\r
-\r
-        return Inf\r
-\r
-\r
-    ## Transfer to Module Object\r
-    # \r
-    # Transfer all contents of an Inf file to a standard Module Object\r
-    #\r
-    def InfToModule(self):\r
-        # Init global information for the file\r
-        ContainerFile = self.Identification.FullPath\r
-\r
-        # Generate Module Header\r
-        self.GenModuleHeader(ContainerFile)\r
-\r
-        # Generate BuildOptions\r
-        self.GenBuildOptions(ContainerFile)\r
-\r
-        # Generate Includes\r
-        self.GenIncludes(ContainerFile)\r
-\r
-        # Generate LibraryClasses\r
-        self.GenLibraryClasses(ContainerFile)\r
-\r
-        # Generate Packages\r
-        self.GenPackages(ContainerFile)\r
-\r
-        # Generate Pcds\r
-        self.GenPcds(ContainerFile)\r
-\r
-        # Generate Sources\r
-        self.GenSources(ContainerFile)\r
-\r
-        # Generate Guids\r
-        self.GenGuidProtocolPpis(DataType.TAB_GUIDS, ContainerFile)\r
-\r
-        # Generate Protocols\r
-        self.GenGuidProtocolPpis(DataType.TAB_PROTOCOLS, ContainerFile)\r
-\r
-        # Generate Ppis\r
-        self.GenGuidProtocolPpis(DataType.TAB_PPIS, ContainerFile)\r
-\r
-        # Generate Depexes\r
-        self.GenDepexes(ContainerFile)\r
-\r
-        # Generate Binaries\r
-        self.GenBinaries(ContainerFile)\r
-\r
-        # Init MiscFiles\r
-        self.GenMiscFiles(ContainerFile)\r
-\r
-    ## GenMiscFiles\r
-    #\r
-    def GenMiscFiles(self, ContainerFile):\r
-        MiscFiles = MiscFileClass()\r
-        MiscFiles.Name = 'ModuleFiles'\r
-        for Item in GetFiles(os.path.dirname(ContainerFile), ['CVS', '.svn'], False):\r
-            File = CommonClass.FileClass()\r
-            File.Filename = Item\r
-            MiscFiles.Files.append(File)\r
-        self.Module.MiscFiles = MiscFiles\r
-\r
-    ## Load Inf file\r
-    #\r
-    # Load the file if it exists\r
-    #\r
-    # @param Filename:  Input value for filename of Inf file\r
-    #\r
-    def LoadInfFile(self, Filename):\r
-        # Insert a record for file\r
-        Filename = NormPath(Filename)\r
-\r
-        self.Identification.FullPath = Filename\r
-        (self.Identification.RelaPath, self.Identification.FileName) = os.path.split(Filename)\r
-        if self.Identification.FullPath.find(self.WorkspaceDir) > -1:\r
-            self.Identification.ModulePath = os.path.dirname(self.Identification.FullPath[len(self.WorkspaceDir) + 1:])\r
-        if self.PackageDir:\r
-            self.Identification.PackagePath = self.PackageDir\r
-            if self.Identification.ModulePath.find(self.PackageDir) == 0:\r
-                self.Identification.ModulePath = self.Identification.ModulePath[len(self.PackageDir) + 1:]\r
-\r
-        # Init common datas\r
-        IfDefList, SectionItemList, CurrentSection, ArchList, ThirdList, IncludeFiles = \\r
-        [], [], TAB_UNKNOWN, [], [], []\r
-        LineNo = 0\r
-\r
-        # Parse file content\r
-        IsFindBlockComment = False\r
-        ReservedLine = ''\r
-        Comment = ''\r
-        for Line in open(Filename, 'r'):\r
-            LineNo = LineNo + 1\r
-            # Remove comment block\r
-            if Line.find(TAB_COMMENT_EDK_START) > -1:\r
-                ReservedLine = GetSplitList(Line, TAB_COMMENT_EDK_START, 1)[0]\r
-                if ReservedLine.strip().startswith(TAB_COMMENT_SPLIT):\r
-                    Comment = Comment + Line.strip() + '\n'\r
-                    ReservedLine = ''\r
-                else:\r
-                    Comment = Comment + Line[len(ReservedLine):] + '\n'\r
-                IsFindBlockComment = True\r
-                if not ReservedLine:\r
-                    continue\r
-            if Line.find(TAB_COMMENT_EDK_END) > -1:\r
-                Comment = Comment + Line[:Line.find(TAB_COMMENT_EDK_END) + len(TAB_COMMENT_EDK_END)] + '\n'\r
-                Line = ReservedLine + GetSplitList(Line, TAB_COMMENT_EDK_END, 1)[1]\r
-                ReservedLine = ''\r
-                IsFindBlockComment = False\r
-            if IsFindBlockComment:\r
-                Comment = Comment + Line.strip() + '\n'\r
-                continue\r
-\r
-            # Remove comments at tail and remove spaces again\r
-            if Line.strip().startswith(TAB_COMMENT_SPLIT) or Line.strip().startswith('--/'):\r
-                Comment = Comment + Line.strip() + '\n'\r
-            Line = CleanString(Line)\r
-            if Line == '':\r
-                continue\r
-\r
-            ## Find a new section tab\r
-            # First insert previous section items\r
-            # And then parse the content of the new section\r
-            if Line.startswith(TAB_SECTION_START) and Line.endswith(TAB_SECTION_END):\r
-                if Line[1:3] == "--":\r
-                    continue\r
-                Model = Section[CurrentSection.upper()]\r
-                # Insert items data of previous section\r
-                InsertSectionItems(Model, CurrentSection, SectionItemList, ArchList, ThirdList, self.RecordSet)\r
-\r
-                # Parse the new section\r
-                SectionItemList = []\r
-                ArchList = []\r
-                ThirdList = []\r
-\r
-                CurrentSection = ''\r
-                LineList = GetSplitValueList(Line[len(TAB_SECTION_START):len(Line) - len(TAB_SECTION_END)], TAB_COMMA_SPLIT)\r
-                for Item in LineList:\r
-                    ItemList = GetSplitValueList(Item, TAB_SPLIT)\r
-                    if CurrentSection == '':\r
-                        CurrentSection = ItemList[0]\r
-                    else:\r
-                        if CurrentSection != ItemList[0]:\r
-                            EdkLogger.error("Parser", PARSER_ERROR, "Different section names '%s' and '%s' are found in one section definition, this is not allowed." % (CurrentSection, ItemList[0]), File=Filename, Line=LineNo, RaiseError=EdkLogger.IsRaiseError)\r
-                    if CurrentSection.upper() not in self.KeyList:\r
-                        RaiseParserError(Line, CurrentSection, Filename, '', LineNo)\r
-                    ItemList.append('')\r
-                    ItemList.append('')\r
-                    if len(ItemList) > 5:\r
-                        RaiseParserError(Line, CurrentSection, Filename, '', LineNo)\r
-                    else:\r
-                        if ItemList[1] != '' and ItemList[1].upper() not in ARCH_LIST_FULL:\r
-                            EdkLogger.error("Parser", PARSER_ERROR, "Invalid Arch definition '%s' found" % ItemList[1], File=Filename, Line=LineNo, RaiseError=EdkLogger.IsRaiseError)\r
-                        ArchList.append(ItemList[1].upper())\r
-                        ThirdList.append(ItemList[2])\r
-\r
-                if Comment:\r
-                    if Comment.endswith('\n'):\r
-                        Comment = Comment[:len(Comment) - len('\n')]\r
-                    self.SectionHeaderCommentDict[Section[CurrentSection.upper()]] = Comment\r
-                    Comment = ''\r
-                continue\r
-\r
-            # Not in any defined section\r
-            if CurrentSection == TAB_UNKNOWN:\r
-                ErrorMsg = "%s is not in any defined section" % Line\r
-                EdkLogger.error("Parser", PARSER_ERROR, ErrorMsg, File=Filename, Line=LineNo, RaiseError=EdkLogger.IsRaiseError)\r
-\r
-            # Add a section item\r
-            SectionItemList.append([Line, LineNo, Comment])\r
-            Comment = ''\r
-            # End of parse\r
-        #End of For\r
-\r
-        # Insert items data of last section\r
-        Model = Section[CurrentSection.upper()]\r
-        InsertSectionItems(Model, CurrentSection, SectionItemList, ArchList, ThirdList, self.RecordSet)\r
-        if Comment != '':\r
-            self.SectionHeaderCommentDict[Model] = Comment\r
-            Comment = ''\r
-\r
-    ## Show detailed information of Module\r
-    #\r
-    # Print all members and their values of Module class\r
-    #\r
-    def ShowModule(self):\r
-        M = self.Module\r
-        print 'Filename =', M.ModuleHeader.FileName\r
-        print 'FullPath =', M.ModuleHeader.FullPath\r
-        print 'RelaPath =', M.ModuleHeader.RelaPath\r
-        print 'PackagePath =', M.ModuleHeader.PackagePath\r
-        print 'ModulePath =', M.ModuleHeader.ModulePath\r
-        print 'CombinePath =', M.ModuleHeader.CombinePath\r
-\r
-        print 'BaseName =', M.ModuleHeader.Name\r
-        print 'Guid =', M.ModuleHeader.Guid\r
-        print 'Version =', M.ModuleHeader.Version\r
-\r
-        print '\nIncludes ='\r
-        for Item in M.Includes:\r
-            print Item.FilePath, Item.SupArchList\r
-        print '\nLibraryClasses ='\r
-        for Item in M.LibraryClasses:\r
-            print Item.LibraryClass, Item.RecommendedInstance, Item.RecommendedInstanceGuid, Item.RecommendedInstanceVersion, Item.FeatureFlag, Item.SupModuleList, Item.SupArchList, Item.Define\r
-        print '\nPackageDependencies ='\r
-        for Item in M.PackageDependencies:\r
-            print Item.FilePath, Item.SupArchList, Item.FeatureFlag\r
-        print '\nPcds ='\r
-        for Item in M.PcdCodes:\r
-            print '\tCName=', Item.CName, 'TokenSpaceGuidCName=', Item.TokenSpaceGuidCName, 'DefaultValue=', Item.DefaultValue, 'ItemType=', Item.ItemType, Item.SupArchList\r
-        print '\nSources ='\r
-        for Source in M.Sources:\r
-            print Source.SourceFile, 'Fam=', Source.ToolChainFamily, 'Pcd=', Source.FeatureFlag, 'Tag=', Source.TagName, 'ToolCode=', Source.ToolCode, Source.SupArchList\r
-        print '\nGuids ='\r
-        for Item in M.Guids:\r
-            print Item.CName, Item.SupArchList, Item.FeatureFlag\r
-        print '\nProtocols ='\r
-        for Item in M.Protocols:\r
-            print Item.CName, Item.SupArchList, Item.FeatureFlag\r
-        print '\nPpis ='\r
-        for Item in M.Ppis:\r
-            print Item.CName, Item.SupArchList, Item.FeatureFlag\r
-        print '\nDepex ='\r
-        for Item in M.Depex:\r
-            print Item.Depex, Item.SupArchList, Item.Define\r
-        print '\nBinaries ='\r
-        for Binary in M.Binaries:\r
-            print 'Type=', Binary.FileType, 'Target=', Binary.Target, 'Name=', Binary.BinaryFile, 'FeatureFlag=', Binary.FeatureFlag, 'SupArchList=', Binary.SupArchList\r
-        print '\n*** FileList ***'\r
-        for Item in M.MiscFiles.Files:\r
-            print Item.Filename\r
-        print '****************\n'\r
-\r
-    ## Convert [Defines] section content to ModuleHeaderClass\r
-    #\r
-    # Convert [Defines] section content to ModuleHeaderClass\r
-    #\r
-    # @param Defines        The content under [Defines] section\r
-    # @param ModuleHeader   An object of ModuleHeaderClass\r
-    # @param Arch           The supported ARCH\r
-    #\r
-    def GenModuleHeader(self, ContainerFile):\r
-        EdkLogger.debug(2, "Generate ModuleHeader ...")\r
-        # Update all defines item in database\r
-        RecordSet = self.RecordSet[MODEL_META_DATA_HEADER]\r
-\r
-        ModuleHeader = ModuleHeaderClass()\r
-        ModuleExtern = ModuleExternClass()\r
-        OtherDefines = []\r
-        for Record in RecordSet:\r
-            ValueList = GetSplitValueList(Record[0], TAB_EQUAL_SPLIT)\r
-            if len(ValueList) != 2:\r
-                OtherDefines.append(Record[0])\r
-            else:\r
-                Name = ValueList[0]\r
-                Value = ValueList[1]\r
-                if Name == TAB_INF_DEFINES_BASE_NAME:\r
-                    ModuleHeader.Name = Value\r
-                    ModuleHeader.BaseName = Value\r
-                elif Name == TAB_INF_DEFINES_FILE_GUID:\r
-                    ModuleHeader.Guid = Value\r
-                elif Name == TAB_INF_DEFINES_VERSION_STRING:\r
-                    ModuleHeader.Version = Value\r
-                elif Name == TAB_INF_DEFINES_PCD_IS_DRIVER:\r
-                    ModuleHeader.PcdIsDriver = Value\r
-                elif Name == TAB_INF_DEFINES_MODULE_TYPE:\r
-                    ModuleHeader.ModuleType = Value\r
-                elif Name in (TAB_INF_DEFINES_UEFI_SPECIFICATION_VERSION, TAB_INF_DEFINES_UEFI_SPECIFICATION_VERSION):\r
-                    ModuleHeader.UefiSpecificationVersion = Value\r
-                elif Name == TAB_INF_DEFINES_PI_SPECIFICATION_VERSION:\r
-                    ModuleHeader.PiSpecificationVersion = Value\r
-                elif Name == TAB_INF_DEFINES_ENTRY_POINT:\r
-                    ModuleExtern.EntryPoint = Value\r
-                elif Name == TAB_INF_DEFINES_UNLOAD_IMAGE:\r
-                    ModuleExtern.UnloadImage = Value\r
-                elif Name == TAB_INF_DEFINES_CONSTRUCTOR:\r
-                    ModuleExtern.Constructor = Value\r
-                elif Name == TAB_INF_DEFINES_DESTRUCTOR:\r
-                    ModuleExtern.Destructor = Value\r
-                else:\r
-                    OtherDefines.append(Record[0])\r
-        ModuleHeader.FileName = self.Identification.FileName\r
-        ModuleHeader.FullPath = self.Identification.FullPath\r
-        ModuleHeader.RelaPath = self.Identification.RelaPath\r
-        ModuleHeader.PackagePath = self.Identification.PackagePath\r
-        ModuleHeader.ModulePath = self.Identification.ModulePath\r
-        ModuleHeader.CombinePath = os.path.normpath(os.path.join(ModuleHeader.PackagePath, ModuleHeader.ModulePath, ModuleHeader.FileName))\r
-\r
-        if MODEL_META_DATA_HEADER in self.SectionHeaderCommentDict:\r
-            ModuleHeader.Description = self.SectionHeaderCommentDict[MODEL_META_DATA_HEADER]\r
-        self.Module.ModuleHeader = ModuleHeader\r
-        self.Module.Externs.append(ModuleExtern)\r
-        UE = self.Module.UserExtensions\r
-        if UE == None:\r
-            UE = UserExtensionsClass()\r
-        UE.Defines = OtherDefines\r
-        self.Module.UserExtensions = UE\r
-\r
-    ## GenBuildOptions\r
-    #\r
-    # Gen BuildOptions of Inf\r
-    # [<Family>:]<ToolFlag>=Flag\r
-    #\r
-    # @param ContainerFile: The Inf file full path \r
-    #\r
-    def GenBuildOptions(self, ContainerFile):\r
-        EdkLogger.debug(2, "Generate %s ..." % TAB_BUILD_OPTIONS)\r
-        BuildOptions = {}\r
-        # Get all BuildOptions\r
-        RecordSet = self.RecordSet[MODEL_META_DATA_BUILD_OPTION]\r
-        UE = self.Module.UserExtensions\r
-        if UE == None:\r
-            UE = UserExtensionsClass()\r
-        for Record in RecordSet:\r
-            UE.BuildOptions.append(Record[0])\r
-        self.Module.UserExtensions = UE\r
-\r
-    ## GenIncludes\r
-    #\r
-    # Gen Includes of Inf\r
-    # \r
-    # @param ContainerFile: The Inf file full path \r
-    #\r
-    def GenIncludes(self, ContainerFile):\r
-        EdkLogger.debug(2, "Generate %s ..." % TAB_INCLUDES)\r
-        Includes = sdict()\r
-        # Get all Includes\r
-        RecordSet = self.RecordSet[MODEL_EFI_INCLUDE]\r
-        for Record in RecordSet:\r
-            Include = IncludeClass()\r
-            Include.FilePath = Record[0]\r
-            Include.SupArchList = Record[1]\r
-            if GenerateHelpText(Record[5], ''):\r
-                Include.HelpTextList.append(GenerateHelpText(Record[5], ''))\r
-            self.Module.Includes.append(Include)\r
-            #self.Module.FileList.extend(GetFiles(os.path.normpath(os.path.join(self.Identification.FileRelativePath, Include.FilePath)), ['CVS', '.svn']))\r
-\r
-    ## GenLibraryClasses\r
-    #\r
-    # Get LibraryClass of Inf\r
-    # <LibraryClassKeyWord>|<LibraryInstance>\r
-    #\r
-    # @param ContainerFile: The Inf file full path \r
-    #\r
-    def GenLibraryClasses(self, ContainerFile):\r
-        EdkLogger.debug(2, "Generate %s ..." % TAB_LIBRARY_CLASSES)\r
-        LibraryClasses = {}\r
-        # Get all LibraryClasses\r
-        RecordSet = self.RecordSet[MODEL_EFI_LIBRARY_CLASS]\r
-        for Record in RecordSet:\r
-            (LibClassName, LibClassIns, Pcd, SupModelList) = GetLibraryClassOfInf([Record[0], Record[4]], ContainerFile, self.WorkspaceDir, Record[2])\r
-            LibraryClass = CommonClass.LibraryClassClass()\r
-            LibraryClass.LibraryClass = LibClassName\r
-            LibraryClass.RecommendedInstance = LibClassIns\r
-            LibraryClass.FeatureFlag = Pcd\r
-            LibraryClass.SupArchList = Record[1]\r
-            LibraryClass.SupModuleList = Record[4]\r
-            if GenerateHelpText(Record[5], ''):\r
-                LibraryClass.HelpTextList.append(GenerateHelpText(Record[5], ''))\r
-            self.Module.LibraryClasses.append(LibraryClass)\r
-\r
-    ## GenPackages\r
-    #\r
-    # Gen Packages of Inf\r
-    # \r
-    # @param ContainerFile: The Inf file full path \r
-    #\r
-    def GenPackages(self, ContainerFile):\r
-        EdkLogger.debug(2, "Generate %s ..." % TAB_PACKAGES)\r
-        Packages = {}\r
-        # Get all Packages\r
-        RecordSet = self.RecordSet[MODEL_META_DATA_PACKAGE]\r
-        for Record in RecordSet:\r
-            (PackagePath, Pcd) = GetPackage(Record[0], ContainerFile, self.WorkspaceDir, Record[2])\r
-            Package = ModulePackageDependencyClass()\r
-            Package.FilePath = NormPath(PackagePath)\r
-            Package.SupArchList = Record[1]\r
-            Package.FeatureFlag = Pcd\r
-            if GenerateHelpText(Record[5], ''):\r
-                Package.HelpTextList.append(GenerateHelpText(Record[5], ''))\r
-            self.Module.PackageDependencies.append(Package)\r
-\r
-    def AddPcd(self, CName, TokenSpaceGuidCName, DefaultValue, ItemType, Arch, HelpTextList):\r
-        Pcd = PcdClass()\r
-        Pcd.CName = CName\r
-        Pcd.TokenSpaceGuidCName = TokenSpaceGuidCName\r
-        Pcd.DefaultValue = DefaultValue\r
-        Pcd.ItemType = ItemType\r
-        Pcd.SupArchList = Arch\r
-        if GenerateHelpText(HelpTextList, ''):\r
-            Pcd.HelpTextList.append(GenerateHelpText(HelpTextList, ''))\r
-        self.Module.PcdCodes.append(Pcd)\r
-\r
-    ## GenPcds\r
-    #\r
-    # Gen Pcds of Inf\r
-    # <TokenSpaceGuidCName>.<PcdCName>[|<Value>]\r
-    #\r
-    # @param ContainerFile: The Dec file full path \r
-    #\r
-    def GenPcds(self, ContainerFile):\r
-        EdkLogger.debug(2, "Generate %s ..." % TAB_PCDS)\r
-        Pcds = {}\r
-        PcdToken = {}\r
-\r
-        # Get all Pcds\r
-        RecordSet1 = self.RecordSet[MODEL_PCD_FIXED_AT_BUILD]\r
-        RecordSet2 = self.RecordSet[MODEL_PCD_PATCHABLE_IN_MODULE]\r
-        RecordSet3 = self.RecordSet[MODEL_PCD_FEATURE_FLAG]\r
-        RecordSet4 = self.RecordSet[MODEL_PCD_DYNAMIC_EX]\r
-        RecordSet5 = self.RecordSet[MODEL_PCD_DYNAMIC]\r
-\r
-        # Go through each arch\r
-        for Record in RecordSet1:\r
-            (TokenSpaceGuidCName, TokenName, Value, Type) = GetPcdOfInf(Record[0], TAB_PCDS_FIXED_AT_BUILD, ContainerFile, Record[2])\r
-            self.AddPcd(TokenName, TokenSpaceGuidCName, Value, Type, Record[1], Record[5])\r
-        for Record in RecordSet2:\r
-            (TokenSpaceGuidCName, TokenName, Value, Type) = GetPcdOfInf(Record[0], TAB_PCDS_PATCHABLE_IN_MODULE, ContainerFile, Record[2])\r
-            self.AddPcd(TokenName, TokenSpaceGuidCName, Value, Type, Record[1], Record[5])\r
-        for Record in RecordSet3:\r
-            (TokenSpaceGuidCName, TokenName, Value, Type) = GetPcdOfInf(Record[0], TAB_PCDS_FEATURE_FLAG, ContainerFile, Record[2])\r
-            self.AddPcd(TokenName, TokenSpaceGuidCName, Value, Type, Record[1], Record[5])\r
-        for Record in RecordSet4:\r
-            (TokenSpaceGuidCName, TokenName, Value, Type) = GetPcdOfInf(Record[0], TAB_PCDS_DYNAMIC_EX, ContainerFile, Record[2])\r
-            self.AddPcd(TokenName, TokenSpaceGuidCName, Value, Type, Record[1], Record[5])\r
-        for Record in RecordSet5:\r
-            (TokenSpaceGuidCName, TokenName, Value, Type) = GetPcdOfInf(Record[0], '', ContainerFile, Record[2])\r
-            self.AddPcd(TokenName, TokenSpaceGuidCName, Value, Type, Record[1], Record[5])\r
-\r
-    ## GenSources\r
-    #\r
-    # Gen Sources of Inf\r
-    # <Filename>[|<Family>[|<TagName>[|<ToolCode>[|<PcdFeatureFlag>]]]]\r
-    #\r
-    # @param ContainerFile: The Dec file full path \r
-    #\r
-    def GenSources(self, ContainerFile):\r
-        EdkLogger.debug(2, "Generate %s ..." % TAB_SOURCES)\r
-        Sources = {}\r
-\r
-        # Get all Sources\r
-        RecordSet = self.RecordSet[MODEL_EFI_SOURCE_FILE]\r
-        for Record in RecordSet:\r
-            (Filename, Family, TagName, ToolCode, Pcd) = GetSource(Record[0], ContainerFile, self.Identification.RelaPath, Record[2])\r
-            Source = ModuleSourceFileClass(Filename, TagName, ToolCode, Family, Pcd, Record[1])\r
-            if GenerateHelpText(Record[5], ''):\r
-                Source.HelpTextList.append(GenerateHelpText(Record[5], ''))\r
-            if MODEL_EFI_SOURCE_FILE in self.SectionHeaderCommentDict:\r
-                Source.HelpText = self.SectionHeaderCommentDict[MODEL_EFI_SOURCE_FILE]\r
-            self.Module.Sources.append(Source)\r
-            #self.Module.FileList.append(os.path.normpath(os.path.join(self.Identification.RelaPath, Filename)))\r
-\r
-    ## GenDepexes\r
-    #\r
-    # Gen Depex of Inf\r
-    #\r
-    # @param ContainerFile: The Inf file full path \r
-    #\r
-    def GenDepexes(self, ContainerFile):\r
-        EdkLogger.debug(2, "Generate %s ..." % TAB_DEPEX)\r
-        Depex = {}\r
-        # Get all Depexes\r
-        RecordSet = self.RecordSet[MODEL_EFI_DEPEX]\r
-        DepexString = ''\r
-        for Record in RecordSet:\r
-            DepexString = DepexString + Record[0] + '\n'\r
-        Dep = ModuleDepexClass()\r
-        if DepexString.endswith('\n'):\r
-            DepexString = DepexString[:len(DepexString) - len('\n')]\r
-        Dep.Depex = DepexString\r
-        if self.Module.ModuleHeader.ModuleType in ['DXE_SMM_DRIVER']:\r
-            self.Module.SmmDepex = Dep\r
-        elif self.Module.ModuleHeader.ModuleType in ['PEI_CORE', 'PEIM']:\r
-            self.Module.PeiDepex = Dep\r
-        else:\r
-            self.Module.DxeDepex = Dep\r
-#        for Record in RecordSet:\r
-#            \r
-#            Dep = ModuleDepexClass()\r
-#            Dep.Depex = Record[0]\r
-#            Dep.SupArchList = Record[1]\r
-#            if GenerateHelpText(Record[5], ''):\r
-#                Dep.HelpTextList.append(GenerateHelpText(Record[5], ''))\r
-#            DepexString = DepexString + Dep\r
-#            List.append(Dep)\r
-#        self.Module.Depex = List\r
-#        if self.Module.ModuleHeader.ModuleType in ['DXE_SMM_DRIVER']:\r
-#            self.Module.SmmDepex = List\r
-#        elif self.Module.ModuleHeader.ModuleType in ['PEI_CORE', 'PEIM']:\r
-#            self.Module.PeiDepex = List\r
-#        else:\r
-#            self.Module.DxeDepex = List\r
-\r
-    ## GenBinaries\r
-    #\r
-    # Gen Binary of Inf\r
-    # <FileType>|<Filename>|<Target>[|<TokenSpaceGuidCName>.<PcdCName>]\r
-    #\r
-    # @param ContainerFile: The Dec file full path \r
-    #\r
-    def GenBinaries(self, ContainerFile):\r
-        EdkLogger.debug(2, "Generate %s ..." % TAB_BINARIES)\r
-        Binaries = {}\r
-\r
-        # Get all Guids\r
-        RecordSet = self.RecordSet[MODEL_EFI_BINARY_FILE]\r
-        for Record in RecordSet:\r
-            (FileType, Filename, Target, Pcd) = GetBinary(Record[0], ContainerFile, self.Identification.RelaPath, Record[2])\r
-            Binary = ModuleBinaryFileClass(Filename, FileType, Target, Pcd, Record[1])\r
-            if GenerateHelpText(Record[5], ''):\r
-                Binary.HelpTextList.append(GenerateHelpText(Record[5], ''))\r
-            self.Module.Binaries.append(Binary)\r
-            #self.Module.FileList.append(os.path.normpath(os.path.join(self.Identification.RelaPath, Filename)))\r
-\r
-    ## GenGuids\r
-    #\r
-    # Gen Guids of Inf\r
-    # <CName>=<GuidValue>\r
-    #\r
-    # @param ContainerFile: The Inf file full path \r
-    #\r
-    def GenGuidProtocolPpis(self, Type, ContainerFile):\r
-        EdkLogger.debug(2, "Generate %s ..." % Type)\r
-        Lists = {}\r
-        # Get all Items\r
-        if Type == TAB_GUIDS:\r
-            ListMember = self.Module.Guids\r
-        elif Type == TAB_PROTOCOLS:\r
-            ListMember = self.Module.Protocols\r
-        elif Type == TAB_PPIS:\r
-            ListMember = self.Module.Ppis\r
-\r
-        RecordSet = self.RecordSet[Section[Type.upper()]]\r
-        for Record in RecordSet:\r
-            (Name, Value) = GetGuidsProtocolsPpisOfInf(Record[0], Type, ContainerFile, Record[2])\r
-            ListClass = GuidProtocolPpiCommonClass()\r
-            ListClass.CName = Name\r
-            ListClass.SupArchList = Record[1]\r
-            ListClass.FeatureFlag = Value\r
-            if GenerateHelpText(Record[5], ''):\r
-                ListClass.HelpTextList.append(GenerateHelpText(Record[5], ''))\r
-            ListMember.append(ListClass)\r
-\r
-##\r
-#\r
-# This acts like the main() function for the script, unless it is 'import'ed into another\r
-# script.\r
-#\r
-if __name__ == '__main__':\r
-    EdkLogger.Initialize()\r
-    EdkLogger.SetLevel(EdkLogger.QUIET)\r
-\r
-    W = os.getenv('WORKSPACE')\r
-    F = os.path.join(W, 'MdeModulePkg/Application/HelloWorld/HelloWorld.inf')\r
-\r
-    P = Inf(os.path.normpath(F), True, W, 'MdeModulePkg')\r
-    P.ShowModule()\r
-    print P.ModuleToInf(P.Module)\r
diff --git a/BaseTools/Source/Python/Common/XmlParser.py b/BaseTools/Source/Python/Common/XmlParser.py
deleted file mode 100644 (file)
index dcafb5f..0000000
+++ /dev/null
@@ -1,1754 +0,0 @@
-## @file\r
-# This file is used to parse a xml file of .PKG file\r
-#\r
-# Copyright (c) 2008, Intel Corporation. All rights reserved.<BR>\r
-# This program and the accompanying materials\r
-# are licensed and made available under the terms and conditions of the BSD License\r
-# which accompanies this distribution.  The full text of the license may be found at\r
-# http://opensource.org/licenses/bsd-license.php\r
-#\r
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-#\r
-\r
-##\r
-# Import Modules\r
-#\r
-from xml.dom import minidom\r
-from XmlRoutines import *\r
-from CommonDataClass.DistributionPackageClass import *\r
-from CommonDataClass.PackageClass import *\r
-from CommonDataClass.ModuleClass import *\r
-from Common.String import GetStringOfList\r
-\r
-#\r
-# Get Help Text\r
-#\r
-def GetHelpTextList(HelpText):\r
-    HelpTextList = []\r
-    for HT in HelpText:\r
-        HelpTextObj = HelpTextClass()\r
-        HelpTextObj.Lang = HT.Lang\r
-        HelpTextObj.String = HT.HelpText\r
-        HelpTextList.append(HelpTextObj)\r
-    return HelpTextList\r
-\r
-# HeaderXml\r
-class HeaderXml(object):\r
-    def __init__(self):\r
-        self.Name = ''\r
-        self.BaseName = ''\r
-        self.GUID = ''\r
-        self.Version = ''\r
-        self.Copyright = ''\r
-        self.License = ''\r
-        self.Abstract = ''\r
-        self.Description = ''\r
-\r
-    def FromXml(self, Item, Key):\r
-        self.Name = XmlElement(Item, '%s/Name' % Key)\r
-        self.BaseName = XmlAttribute(XmlNode(Item, '%s/Name' % Key), 'BaseName')\r
-        self.GUID = XmlElement(Item, '%s/GUID' % Key)\r
-        self.Version = XmlAttribute(XmlNode(Item, '%s/GUID' % Key), 'Version')\r
-        self.Copyright = XmlElement(Item, '%s/Copyright' % Key)\r
-        self.License = XmlElement(Item, '%s/License' % Key)\r
-        self.Abstract = XmlElement(Item, '%s/Abstract' % Key)\r
-        self.Description = XmlElement(Item, '%s/Description' % Key)\r
-        \r
-        ModuleHeader = ModuleHeaderClass()\r
-        ModuleHeader.Name = self.Name\r
-        ModuleHeader.BaseName = self.BaseName\r
-        ModuleHeader.Guid = self.GUID\r
-        ModuleHeader.Version = self.Version\r
-        ModuleHeader.Copyright = self.Copyright\r
-        ModuleHeader.License = self.License\r
-        ModuleHeader.Abstract = self.Abstract\r
-        ModuleHeader.Description = self.Description\r
-        \r
-        return ModuleHeader\r
-        \r
-    def ToXml(self, Header, Key):\r
-        Element1 = CreateXmlElement('Name', Header.Name, [], [['BaseName', Header.BaseName]])\r
-        Element2 = CreateXmlElement('GUID', Header.Guid, [], [['Version', Header.Version]])\r
-        AttributeList = []\r
-        NodeList = [Element1,\r
-                    Element2,\r
-                    ['Abstract', Header.Abstract],\r
-                    ['Copyright', Header.Copyright],\r
-                    ['License', Header.License],\r
-                    ['Description', Header.Description],\r
-                    ]\r
-        Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
-\r
-        return Root\r
-\r
-    def __str__(self):\r
-        return "Name = %s BaseName = %s GUID = %s Version = %s Copyright = %s License = %s Abstract = %s Description = %s" \\r
-               % (self.Name, self.BaseName, self.GUID, self.Version, self.Copyright, self.License, self.Abstract, self.Description)\r
-\r
-# DistributionPackageHeaderXml\r
-class DistributionPackageHeaderXml(object):\r
-    def __init__(self):\r
-        self.Header = HeaderXml()\r
-        self.ReadOnly = False\r
-        self.RePackage = True\r
-        self.Vendor = ''\r
-        self.Date = ''\r
-        self.Signature = ''\r
-        self.XmlSpecification = ''\r
-    \r
-    def FromXml(self, Item, Key):\r
-        self.ReadOnly = XmlAttribute(XmlNode(Item, '%s' % Key), 'ReadOnly')\r
-        self.RePackage = XmlAttribute(XmlNode(Item, '%s' % Key), 'RePackage')\r
-        self.Vendor = XmlElement(Item, '%s/Vendor' % Key)\r
-        self.Date = XmlElement(Item, '%s/Date' % Key)\r
-        self.Signature = XmlElement(Item, '%s/Signature' % Key)\r
-        self.XmlSpecification = XmlElement(Item, '%s/XmlSpecification' % Key)\r
-        self.Header.FromXml(Item, Key)\r
-        \r
-        DistributionPackageHeader = DistributionPackageHeaderClass()\r
-        DistributionPackageHeader.ReadOnly = self.ReadOnly\r
-        DistributionPackageHeader.RePackage = self.RePackage\r
-        DistributionPackageHeader.Name = self.Header.Name\r
-        DistributionPackageHeader.BaseName = self.Header.BaseName\r
-        DistributionPackageHeader.Guid = self.Header.GUID\r
-        DistributionPackageHeader.Version = self.Header.Version\r
-        DistributionPackageHeader.Vendor = self.Vendor\r
-        DistributionPackageHeader.Date = self.Date\r
-        DistributionPackageHeader.Copyright = self.Header.Copyright\r
-        DistributionPackageHeader.License = self.Header.License\r
-        DistributionPackageHeader.Abstract = self.Header.Abstract\r
-        DistributionPackageHeader.Description = self.Header.Description\r
-        DistributionPackageHeader.Signature = self.Signature\r
-        DistributionPackageHeader.XmlSpecification = self.XmlSpecification\r
-        \r
-        return DistributionPackageHeader\r
-    \r
-    def ToXml(self, DistributionPackageHeader, Key):\r
-        Element1 = CreateXmlElement('Name', DistributionPackageHeader.Name, [], [['BaseName', DistributionPackageHeader.BaseName]])\r
-        Element2 = CreateXmlElement('GUID', DistributionPackageHeader.Guid, [], [['Version', DistributionPackageHeader.Version]])\r
-        AttributeList = [['ReadOnly', str(DistributionPackageHeader.ReadOnly)], ['RePackage', str(DistributionPackageHeader.RePackage)]]\r
-        NodeList = [Element1,\r
-                    Element2,\r
-                    ['Vendor', DistributionPackageHeader.Vendor],\r
-                    ['Date', DistributionPackageHeader.Date],\r
-                    ['Copyright', DistributionPackageHeader.Copyright],\r
-                    ['License', DistributionPackageHeader.License],\r
-                    ['Abstract', DistributionPackageHeader.Abstract],\r
-                    ['Description', DistributionPackageHeader.Description],\r
-                    ['Signature', DistributionPackageHeader.Signature],\r
-                    ['XmlSpecification', DistributionPackageHeader.XmlSpecification],\r
-                    ]\r
-        Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
-\r
-        return Root\r
-    \r
-    def __str__(self):\r
-        return "ReadOnly = %s RePackage = %s Vendor = %s Date = %s Signature = %s XmlSpecification = %s %s" \\r
-               % (self.ReadOnly, self.RePackage, self.Vendor, self.Date, self.Signature, self.XmlSpecification, self.Header)\r
-\r
-# PackageHeaderXml\r
-class PackageHeaderXml(object):\r
-    def __init__(self):\r
-        self.Header = HeaderXml()\r
-        self.PackagePath = ''\r
-    \r
-    def FromXml(self, Item, Key):\r
-        self.PackagePath = XmlElement(Item, '%s/PackagePath' % Key)\r
-        self.Header.FromXml(Item, Key)\r
-        \r
-        PackageHeader = PackageHeaderClass()\r
-        PackageHeader.Name = self.Header.Name\r
-        PackageHeader.BaseName = self.Header.BaseName\r
-        PackageHeader.Guid = self.Header.GUID\r
-        PackageHeader.Version = self.Header.Version\r
-        PackageHeader.Copyright = self.Header.Copyright\r
-        PackageHeader.License = self.Header.License\r
-        PackageHeader.Abstract = self.Header.Abstract\r
-        PackageHeader.Description = self.Header.Description\r
-        PackageHeader.CombinePath = self.PackagePath\r
-\r
-        return PackageHeader\r
-    \r
-    def ToXml(self, PackageHeader, Key):\r
-        Element1 = CreateXmlElement('Name', PackageHeader.Name, [], [['BaseName', PackageHeader.BaseName]])\r
-        Element2 = CreateXmlElement('GUID', PackageHeader.Guid, [], [['Version', PackageHeader.Version]])\r
-        AttributeList = []\r
-        NodeList = [Element1,\r
-                    Element2,\r
-                    ['Copyright', PackageHeader.Copyright],\r
-                    ['License', PackageHeader.License],\r
-                    ['Abstract', PackageHeader.Abstract],\r
-                    ['Description', PackageHeader.Description],\r
-                    ['PackagePath', PackageHeader.CombinePath],\r
-                    ]\r
-        Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
-        \r
-        return Root\r
-    \r
-    def __str__(self):\r
-        return "PackagePath = %s %s" \\r
-               % (self.PackagePath, self.Header)\r
-\r
-# ClonedFromXml\r
-class ClonedFromXml(object):\r
-    def __init__(self):\r
-        self.GUID = ''\r
-        self.Version = ''\r
-    \r
-    def FromXml(self, Item, Key):\r
-        self.GUID = XmlElement(Item, '%s/GUID' % Key)\r
-        self.Version = XmlAttribute(XmlNode(Item, '%s/GUID' % Key), 'Version')\r
-        \r
-        if self.GUID == '' and self.Version == '':\r
-            return None\r
-        \r
-        ClonedFrom = ClonedRecordClass()\r
-        ClonedFrom.PackageGuid = self.GUID\r
-        ClonedFrom.PackageVersion = self.Version\r
-        \r
-        return ClonedFrom\r
-    \r
-    def ToXml(self, ClonedFrom, Key):\r
-        Root = minidom.Document()\r
-        Element1 = CreateXmlElement('GUID', ClonedFrom.PackageGuid, [], [['Version', ClonedFrom.PackageVersion]])\r
-        AttributeList = []\r
-        NodeList = [Element1]\r
-        Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
-        \r
-        return Root\r
-    \r
-    def __str__(self):\r
-        return "GUID = %s Version = %s" % (self.GUID, self.Version)\r
-\r
-# CommonDefinesXml\r
-class CommonDefinesXml(object):\r
-    def __init__(self):\r
-        self.Usage = ''\r
-        self.SupArchList = ''\r
-        self.SupModList = ''\r
-        self.FeatureFlag = ''\r
-    \r
-    def FromXml(self, Item, Key):\r
-        self.Usage = XmlAttribute(Item, 'Usage')\r
-        self.SupArchList = XmlAttribute(Item, 'SupArchList')\r
-        self.SupModList = XmlAttribute(Item, 'SupModList')\r
-        self.FeatureFlag = XmlAttribute(Item, 'FeatureFlag')\r
-    \r
-    def ToXml(self):\r
-        pass\r
-    \r
-    def __str__(self):\r
-        return "Usage = %s SupArchList = %s SupModList = %s FeatureFlag = %s" % (self.Usage, self.SupArchList, self.SupModList, self.FeatureFlag)\r
-\r
-# HelpTextXml\r
-class HelpTextXml(object):\r
-    def __init__(self):\r
-        self.HelpText = ''\r
-        self.Lang = ''\r
-        \r
-    def FromXml(self, Item, Key):\r
-        self.HelpText = XmlElement(Item, 'HelpText')\r
-        self.Lang = XmlAttribute(Item, 'Lang')\r
-    \r
-    def ToXml(self, HelpText, Key = 'HelpText'):\r
-        return CreateXmlElement('%s' % Key, HelpText.String, [], [['Lang', HelpText.Lang]])\r
-\r
-    def __str__(self):\r
-        return "HelpText = %s Lang = %s" % (self.HelpText, self.Lang)\r
-\r
-# LibraryClassXml\r
-class LibraryClassXml(object):\r
-    def __init__(self):\r
-        self.Keyword = ''\r
-        self.HeaderFile = ''\r
-        self.RecommendedInstanceGuid = ''\r
-        self.RecommendedInstanceVersion = ''\r
-        self.CommonDefines = CommonDefinesXml()\r
-        self.HelpText = []\r
-        \r
-    def FromXml(self, Item, Key):\r
-        self.Keyword = XmlAttribute(XmlNode(Item, '%s' % Key), 'Keyword')\r
-        if self.Keyword == '':\r
-            self.Keyword = XmlElement(Item, '%s/Keyword' % Key)\r
-        self.HeaderFile = XmlElement(Item, '%s/HeaderFile' % Key)\r
-        self.RecommendedInstanceGuid = XmlElement(Item, '%s/RecommendedInstance/GUID' % Key)\r
-        self.RecommendedInstanceVersion = XmlAttribute(XmlNode(Item, '%s/RecommendedInstance/GUID' % Key), 'Version')\r
-        self.CommonDefines.FromXml(XmlNode(Item, '%s' % Key), Key)\r
-        for HelpTextItem in XmlList(Item, '%s/HelpText' % Key):\r
-            HelpTextObj = HelpTextXml()\r
-            HelpTextObj.FromXml(HelpTextItem, '%s/HelpText' % Key)\r
-            self.HelpText.append(HelpTextObj)\r
-        \r
-        LibraryClass = LibraryClassClass()\r
-        LibraryClass.LibraryClass = self.Keyword\r
-        LibraryClass.IncludeHeader = self.HeaderFile\r
-        LibraryClass.SupArchList = self.CommonDefines.SupArchList\r
-        LibraryClass.SupModuleList = self.CommonDefines.SupModList\r
-        LibraryClass.RecommendedInstanceGuid = self.RecommendedInstanceGuid\r
-        LibraryClass.RecommendedInstanceVersion = self.RecommendedInstanceVersion\r
-        LibraryClass.HelpTextList = GetHelpTextList(self.HelpText)\r
-        \r
-        return LibraryClass\r
-        \r
-    def ToXml(self, LibraryClass, Key):\r
-        Element1 = CreateXmlElement('GUID', LibraryClass.RecommendedInstanceGuid, [], [['Version', LibraryClass.RecommendedInstanceVersion]])\r
-        Element2 = CreateXmlElement('RecommendedInstance', '', [Element1], [])\r
-        AttributeList = [['Keyword', LibraryClass.LibraryClass], \r
-                         ['SupArchList', GetStringOfList(LibraryClass.SupArchList)],\r
-                         ['SupModList', GetStringOfList(LibraryClass.SupModuleList)]\r
-                        ]\r
-        NodeList = [['HeaderFile', LibraryClass.IncludeHeader],\r
-                    Element2\r
-                    ]\r
-        for Item in LibraryClass.HelpTextList:\r
-            Tmp = HelpTextXml()\r
-            NodeList.append(Tmp.ToXml(Item))\r
-        Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
-\r
-        return Root\r
-\r
-    def __str__(self):\r
-        Str = "Keyword = %s HeaderFile = %s RecommendedInstanceGuid = %s RecommendedInstanceVersion = %s %s" \\r
-             % (self.Keyword, self.HeaderFile, self.RecommendedInstanceGuid, self.RecommendedInstanceVersion, \\r
-                self.CommonDefines)\r
-        for Item in self.HelpText:\r
-            Str = Str + "\n\t" + str(Item)\r
-        return Str\r
-\r
-# IndustryStandardHeaderXml\r
-class IndustryStandardHeaderXml(object):\r
-    def __init__(self):\r
-        self.HeaderFile = ''\r
-        self.HelpText = []\r
-        \r
-    def FromXml(self, Item, Key):\r
-        self.HeaderFile = XmlElement(Item, '%s/HeaderFile' % Key)\r
-        for HelpTextItem in XmlList(Item, '%s/HelpText' % Key):\r
-            HelpTextObj = HelpTextXml()\r
-            HelpTextObj.FromXml(HelpTextItem, '%s/HelpText' % Key)\r
-            self.HelpText.append(HelpTextObj)\r
-        \r
-        Include = IncludeClass()\r
-        Include.FilePath = self.HeaderFile\r
-        Include.HelpTextList = GetHelpTextList(self.HelpText)\r
-        \r
-        return Include\r
-\r
-    def ToXml(self, IndustryStandardHeader, Key):\r
-        AttributeList = []\r
-        NodeList = [['HeaderFile', IndustryStandardHeader.FilePath]]\r
-        for Item in IndustryStandardHeader.HelpTextList:\r
-            Tmp = HelpTextXml()\r
-            NodeList.append(Tmp.ToXml(Item))\r
-        Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
-\r
-        return Root\r
-\r
-    def __str__(self):\r
-        Str = "HeaderFile = %s" % (self.HeaderFile)\r
-        for Item in self.HelpText:\r
-            Str = Str + "\n\t" + str(Item)\r
-        return Str\r
-\r
-# PackageIncludeHeaderXml\r
-class PackageIncludeHeaderXml(object):\r
-    def __init__(self):\r
-        self.HeaderFile = ''\r
-        self.CommonDefines = CommonDefinesXml()\r
-        self.HelpText = []\r
-        \r
-    def FromXml(self, Item, Key):\r
-        self.HeaderFile = XmlElement(Item, '%s/HeaderFile' % Key)\r
-        self.CommonDefines.FromXml(XmlNode(Item, '%s/HeaderFile' % Key), Key)\r
-        for HelpTextItem in XmlList(Item, '%s/HelpText' % Key):\r
-            HelpTextObj = HelpTextXml()\r
-            HelpTextObj.FromXml(HelpTextItem, '%s/HelpText' % Key)\r
-            self.HelpText.append(HelpTextObj)\r
-\r
-        Include = IncludeClass()\r
-        Include.FilePath = self.HeaderFile\r
-        Include.SupArchList = self.CommonDefines.SupArchList\r
-        Include.SupModuleList = self.CommonDefines.SupModList\r
-        Include.HelpTextList = GetHelpTextList(self.HelpText)\r
-            \r
-        return Include\r
-\r
-    def ToXml(self, PackageIncludeHeader, Key):\r
-        AttributeList = [['SupArchList', PackageIncludeHeader.SupArchList],\r
-                         ['SupModList', PackageIncludeHeader.SupModuleList]\r
-                        ]\r
-        NodeList = [['HeaderFile', PackageIncludeHeader.FilePath]]\r
-        for Item in PackageIncludeHeader.HelpTextList:\r
-            Tmp = HelpTextXml()\r
-            NodeList.append(Tmp.ToXml(Item))\r
-        Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
-        \r
-        return Root\r
-\r
-    def __str__(self):\r
-        Str = "HeaderFile = %s\n\t%s" % (self.HeaderFile, self.CommonDefines)\r
-        for Item in self.HelpText:\r
-            Str = Str + "\n\t" + str(Item)\r
-        return Str\r
-\r
-#GUID/Protocol/Ppi\r
-class GuidProtocolPpiXml(object):\r
-    def __init__(self):\r
-        self.UiName = ''\r
-        self.GuidTypes = ''\r
-        self.Notify = ''\r
-        self.CName = ''\r
-        self.GuidValue = ''\r
-        self.CommonDefines = CommonDefinesXml()\r
-        self.HelpText = []\r
-        \r
-    def FromXml(self, Item, Key):\r
-        self.UiName = XmlAttribute(XmlNode(Item, '%s' % Key), 'UiName')\r
-        self.GuidTypes = XmlAttribute(XmlNode(Item, '%s' % Key), 'GuidTypes')\r
-        self.GuidType = XmlAttribute(XmlNode(Item, '%s' % Key), 'GuidType')\r
-        self.Notify = XmlAttribute(XmlNode(Item, '%s' % Key), 'Notify')\r
-        self.CName = XmlElement(Item, '%s/CName' % Key)\r
-        self.GuidValue = XmlElement(Item, '%s/GuidValue' % Key)\r
-        self.VariableName = XmlElement(Item, '%s/VariableName' % Key)\r
-        self.CommonDefines.FromXml(XmlNode(Item, '%s' % Key), Key)\r
-        for HelpTextItem in XmlList(Item, '%s/HelpText' % Key):\r
-            HelpTextObj = HelpTextXml()\r
-            HelpTextObj.FromXml(HelpTextItem, '%s/HelpText' % Key)\r
-            self.HelpText.append(HelpTextObj)\r
-            \r
-        GuidProtocolPpi = GuidProtocolPpiCommonClass()\r
-        GuidProtocolPpi.Name = self.UiName\r
-        GuidProtocolPpi.CName = self.CName\r
-        GuidProtocolPpi.Guid = self.GuidValue\r
-        GuidProtocolPpi.VariableName = self.VariableName\r
-        GuidProtocolPpi.Notify = self.Notify\r
-        GuidProtocolPpi.Usage = self.CommonDefines.Usage\r
-        GuidProtocolPpi.FeatureFlag = self.CommonDefines.FeatureFlag\r
-        GuidProtocolPpi.SupArchList = self.CommonDefines.SupArchList\r
-        GuidProtocolPpi.SupModuleList = self.CommonDefines.SupModList\r
-        GuidProtocolPpi.GuidTypeLists = self.GuidTypes\r
-        GuidProtocolPpi.GuidTypeList = self.GuidType\r
-        GuidProtocolPpi.HelpTextList = GetHelpTextList(self.HelpText)\r
-        \r
-        return GuidProtocolPpi\r
-\r
-    def ToXml(self, GuidProtocolPpi, Key):\r
-        AttributeList = [['Usage', GetStringOfList(GuidProtocolPpi.Usage)],\r
-                         ['UiName', GuidProtocolPpi.Name],\r
-                         ['GuidTypes', GetStringOfList(GuidProtocolPpi.GuidTypeLists)],\r
-                         ['GuidType', GetStringOfList(GuidProtocolPpi.GuidTypeList)],\r
-                         ['Notify', str(GuidProtocolPpi.Notify)],\r
-                         ['SupArchList', GetStringOfList(GuidProtocolPpi.SupArchList)],\r
-                         ['SupModList', GetStringOfList(GuidProtocolPpi.SupModuleList)],\r
-                         ['FeatureFlag', GuidProtocolPpi.FeatureFlag]\r
-                        ]\r
-        NodeList = [['CName', GuidProtocolPpi.CName], \r
-                    ['GuidValue', GuidProtocolPpi.Guid],\r
-                    ['VariableName', GuidProtocolPpi.VariableName]\r
-                   ]\r
-        for Item in GuidProtocolPpi.HelpTextList:\r
-            Tmp = HelpTextXml()\r
-            NodeList.append(Tmp.ToXml(Item))\r
-        Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
-        \r
-        return Root\r
-\r
-    def __str__(self):\r
-        Str = "UiName = %s Notify = %s GuidTypes = %s CName = %s GuidValue = %s %s" \\r
-             % (self.UiName, self.Notify, self.GuidTypes, self.CName, self.GuidValue, self.CommonDefines)\r
-        for Item in self.HelpText:\r
-            Str = Str + "\n\t" + str(Item)\r
-        return Str\r
-\r
-# PcdErrorXml\r
-class PcdErrorXml(object):\r
-    def __init__(self):\r
-        self.ValidValueList = ''\r
-        self.ValidValueListLang = ''\r
-        self.ValidValueRange = ''\r
-        self.Expression = ''\r
-        self.ErrorNumber = ''\r
-        self.ErrorMessage = []\r
-        \r
-    def FromXml(self, Item, Key):\r
-        self.ValidValueList = XmlElement(Item, '%s/ValidValueList' % Key)\r
-        self.ValidValueListLang = XmlAttribute(XmlNode(Item, '%s/ValidValueList' % Key), 'Lang')\r
-        self.ValidValueRange = XmlElement(Item, '%s/ValidValueRange' % Key)\r
-        self.Expression = XmlElement(Item, '%s/Expression' % Key)\r
-        self.ErrorNumber = XmlElement(Item, '%s/ErrorNumber' % Key)\r
-        for ErrMsg in XmlList(Item, '%s/ErrorMessage' % Key):\r
-            ErrorMessageString = XmlElement(ErrMsg, 'ErrorMessage')\r
-            ErrorMessageLang = XmlAttribute(XmlNode(ErrMsg, 'ErrorMessage'), 'Lang')\r
-            self.ErrorMessage.append((ErrorMessageLang, ErrorMessageString))\r
-        \r
-        Error = PcdErrorClass()\r
-        Error.ValidValueList = self.ValidValueList\r
-        Error.ValidValueListLang = self.ValidValueListLang\r
-        Error.ValidValueRange = self.ValidValueRange\r
-        Error.Expression = self.Expression\r
-        Error.ErrorNumber = self.ErrorNumber\r
-        Error.ErrorMessage = self.ErrorMessage\r
-        \r
-        return Error\r
-\r
-    def ToXml(self, PcdError, Key):\r
-        AttributeList = []\r
-        Element1 = CreateXmlElement('ValidValueList', PcdError.ValidValueList, [], [['Lang', PcdError.ValidValueListLang]])\r
-        NodeList = [Element1,\r
-                    ['ValidValueRange', PcdError.ValidValueRange], \r
-                    ['Expression', PcdError.Expression],\r
-                    ['ErrorNumber', PcdError.ErrorNumber],\r
-                   ]\r
-        for Item in PcdError.ErrorMessage:\r
-            Element = CreateXmlElement('ErrorMessage', Item[1], [], [['Lang', Item[0]]])\r
-            NodeList.append(Element)\r
-        Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
-        \r
-        return Root\r
-\r
-    def __str__(self):\r
-        return "ValidValueList = %s ValidValueListLang = %s ValidValueRange = %s Expression = %s ErrorNumber = %s %s" \\r
-               % (self.ValidValueList, self.ValidValueListLang, self.ValidValueRange, self.Expression, self.ErrorNumber, self.ErrorMessage)\r
-\r
-# PcdEntryXml\r
-class PcdEntryXml(object):\r
-    def __init__(self):\r
-        self.PcdItemType = ''\r
-        self.PcdUsage = ''\r
-        self.TokenSpaceGuidCName = ''\r
-        self.TokenSpaceGuidValue = ''\r
-        self.Token = ''\r
-        self.CName = ''\r
-        self.PcdCName = ''\r
-        self.DatumType = ''\r
-        self.ValidUsage = ''\r
-        self.DefaultValue = ''\r
-        self.MaxDatumSize = ''\r
-        self.Value = ''\r
-        self.Offset = ''\r
-        self.CommonDefines = CommonDefinesXml()\r
-        self.HelpText = []\r
-        self.PcdError = []\r
-        \r
-    def FromXml(self, Item, Key):\r
-        self.PcdItemType = XmlAttribute(XmlNode(Item, '%s' % Key), 'PcdItemType')\r
-        self.PcdUsage = XmlAttribute(XmlNode(Item, '%s' % Key), 'PcdUsage')\r
-        self.TokenSpaceGuidCName = XmlElement(Item, '%s/TokenSpaceGuidCName' % Key)\r
-        self.TokenSpaceGuidValue = XmlElement(Item, '%s/TokenSpaceGuidValue' % Key)\r
-        self.Token = XmlElement(Item, '%s/Token' % Key)\r
-        self.CName = XmlElement(Item, '%s/CName' % Key)\r
-        self.PcdCName = XmlElement(Item, '%s/PcdCName' % Key)\r
-        self.DatumType = XmlElement(Item, '%s/DatumType' % Key)\r
-        self.ValidUsage = XmlElement(Item, '%s/ValidUsage' % Key)\r
-        self.DefaultValue = XmlElement(Item, '%s/DefaultValue' % Key)\r
-        self.MaxDatumSize = XmlElement(Item, '%s/MaxDatumSize' % Key)\r
-        self.Value = XmlElement(Item, '%s/Value' % Key)\r
-        self.Offset = XmlElement(Item, '%s/Offset' % Key)\r
-        self.CommonDefines.FromXml(XmlNode(Item, '%s' % Key), Key)\r
-        for HelpTextItem in XmlList(Item, '%s/HelpText' % Key):\r
-            HelpTextObj = HelpTextXml()\r
-            HelpTextObj.FromXml(HelpTextItem, '%s/HelpText' % Key)\r
-            self.HelpText.append(HelpTextObj)\r
-        for PcdErrorItem in XmlList(Item, '%s/PcdError' % Key):\r
-            PcdErrorObj = PcdErrorXml()\r
-            PcdErrorObj.FromXml(PcdErrorItem, 'PcdError')\r
-            self.PcdError.append(PcdErrorObj)\r
-        \r
-        PcdEntry = PcdClass()\r
-        PcdEntry.SupArchList = self.CommonDefines.SupArchList\r
-        PcdEntry.SupModuleList = self.CommonDefines.SupModList\r
-        PcdEntry.TokenSpaceGuidCName = self.TokenSpaceGuidCName\r
-        PcdEntry.TokenSpaceGuidValue = self.TokenSpaceGuidValue\r
-        PcdEntry.Token = self.Token\r
-        PcdEntry.CName = self.CName\r
-        PcdEntry.PcdCName = self.PcdCName\r
-        PcdEntry.DatumType = self.DatumType\r
-        PcdEntry.ValidUsage = self.ValidUsage\r
-        PcdEntry.PcdUsage = self.PcdUsage\r
-        PcdEntry.Usage = self.CommonDefines.Usage\r
-        PcdEntry.DefaultValue = self.DefaultValue\r
-        PcdEntry.Value = self.Value\r
-        PcdEntry.Offset = self.Offset\r
-        PcdEntry.MaxDatumSize = self.MaxDatumSize\r
-        PcdEntry.FeatureFlag = self.CommonDefines.FeatureFlag\r
-        PcdEntry.PcdItemType = self.PcdItemType\r
-        PcdEntry.HelpTextList = GetHelpTextList(self.HelpText)\r
-        PcdEntry.PcdErrors = self.PcdError\r
-        \r
-        return PcdEntry\r
-\r
-    def ToXml(self, PcdEntry, Key):\r
-        AttributeList = [['SupArchList', GetStringOfList(PcdEntry.SupArchList)],\r
-                         ['PcdUsage', PcdEntry.PcdUsage],\r
-                         ['PcdItemType', PcdEntry.PcdItemType],\r
-                         ['FeatureFlag', PcdEntry.FeatureFlag],\r
-                         ['SupModList', GetStringOfList(PcdEntry.SupModuleList)]\r
-                        ]\r
-        NodeList = [['TokenSpaceGuidCName', PcdEntry.TokenSpaceGuidCName],\r
-                    ['TokenSpaceGuidValue', PcdEntry.TokenSpaceGuidValue],\r
-                    ['Token', PcdEntry.Token], \r
-                    ['CName', PcdEntry.CName],\r
-                    ['PcdCName', PcdEntry.PcdCName],\r
-                    ['DatumType', PcdEntry.DatumType],\r
-                    ['ValidUsage', GetStringOfList(PcdEntry.ValidUsage)],\r
-                    ['DefaultValue', PcdEntry.DefaultValue],\r
-                    ['Value', PcdEntry.Value],\r
-                    ['Offset', PcdEntry.Offset],\r
-                    ['MaxDatumSize', PcdEntry.MaxDatumSize],\r
-                   ]\r
-        for Item in PcdEntry.HelpTextList:\r
-            Tmp = HelpTextXml()\r
-            NodeList.append(Tmp.ToXml(Item, 'HelpText'))\r
-        for Item in PcdEntry.PcdErrors:\r
-            Tmp = PcdErrorXml()\r
-            NodeList.append(Tmp.ToXml(Item, 'PcdError'))\r
-        \r
-        Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
-        \r
-        return Root\r
-\r
-    def __str__(self):\r
-        Str = "PcdItemType = %s PcdUsage = %s TokenSpaceGuidCName = %s TokenSpaceGuidValue = %s Token = %s CName = %s PcdCName = %s DatumType = %s ValidUsage = %s DefaultValue = %s MaxDatumSize = %s Value = %s Offset = %s %s" \\r
-             % (self.PcdItemType, self.PcdUsage, self.TokenSpaceGuidCName, self.TokenSpaceGuidValue, self.Token, self.CName, self.PcdCName, self.DatumType, self.ValidUsage, self.DefaultValue, self.MaxDatumSize, self.Value, self.Offset, self.CommonDefines)\r
-        for Item in self.HelpText:\r
-            Str = Str + "\n\t" + str(Item)\r
-        for Item in self.PcdError:\r
-            Str = Str + "\n\tPcdError:" + str(Item)\r
-        return Str\r
-\r
-# PcdCheckXml\r
-class PcdCheckXml(object):\r
-    def __init__(self):\r
-        self.PcdCheck = ''\r
-        \r
-    def FromXml(self, Item, Key):\r
-        self.PcdCheck = XmlElement(Item, 'PcdCheck')\r
-        \r
-        return self.PcdCheck\r
-\r
-    def ToXml(self, PcdCheck, Key):\r
-        Root = CreateXmlElement('%s' % Key, PcdCheck, [], [])\r
-        return Root\r
-\r
-    def __str__(self):\r
-        return "PcdCheck = %s" % (self.PcdCheck)\r
-\r
-# MiscellaneousFileXml\r
-class MiscellaneousFileXml(object):\r
-    def __init__(self):\r
-        self.Header = HeaderXml()\r
-        self.Files = []\r
-    \r
-    def FromXml(self, Item, Key):\r
-        self.Header.FromXml(Item, Key)\r
-        NewItem = XmlNode(Item, '%s/Header' % Key)\r
-        self.Header.FromXml(NewItem, 'Header')\r
-        \r
-        for SubItem in XmlList(Item, '%s/Filename' % Key):\r
-            Filename =  XmlElement(SubItem, '%s/Filename' % Key)\r
-            Executable = XmlAttribute(XmlNode(SubItem, '%s/Filename' % Key), 'Executable')\r
-            self.Files.append([Filename, Executable])\r
-        \r
-        MiscFile = MiscFileClass()\r
-        MiscFile.Copyright = self.Header.Copyright\r
-        MiscFile.License = self.Header.License\r
-        MiscFile.Abstract = self.Header.Abstract\r
-        MiscFile.Description = self.Header.Description\r
-        for File in self.Files:\r
-            FileObj = FileClass()\r
-            FileObj.Filename = File[0]\r
-            FileObj.Executable = File[1]\r
-            MiscFile.Files.append(FileObj)\r
-        \r
-        return MiscFile\r
-\r
-    def FromXml2(self, Item, Key):\r
-        NewItem = XmlNode(Item, '%s/Header' % Key)\r
-        self.Header.FromXml(NewItem, 'Header')\r
-        \r
-        for SubItem in XmlList(Item, '%s/Filename' % Key):\r
-            Filename =  XmlElement(SubItem, '%s/Filename' % Key)\r
-            Executable = XmlAttribute(XmlNode(SubItem, '%s/Filename' % Key), 'Executable')\r
-            self.Files.append([Filename, Executable])\r
-        \r
-        MiscFile = MiscFileClass()\r
-        MiscFile.Name = self.Header.Name\r
-        MiscFile.Copyright = self.Header.Copyright\r
-        MiscFile.License = self.Header.License\r
-        MiscFile.Abstract = self.Header.Abstract\r
-        MiscFile.Description = self.Header.Description\r
-        for File in self.Files:\r
-            FileObj = FileClass()\r
-            FileObj.Filename = File[0]\r
-            FileObj.Executable = File[1]\r
-            MiscFile.Files.append(FileObj)\r
-        \r
-        return MiscFile\r
-\r
-\r
-    def ToXml(self, MiscFile, Key):\r
-        if MiscFile:\r
-            NodeList = [['Copyright', MiscFile.Copyright],\r
-                        ['License', MiscFile.License],\r
-                        ['Abstract', MiscFile.Abstract],\r
-                        ['Description', MiscFile.Description],\r
-                       ]\r
-            if MiscFile != None:\r
-                for File in MiscFile.Files:\r
-                    NodeList.append(CreateXmlElement('Filename', File.Filename, [], [['Executable', File.Executable]]))\r
-                Root = CreateXmlElement('%s' % Key, '', NodeList, [])\r
-            \r
-                return Root\r
-    \r
-    def ToXml2(self, MiscFile, Key):\r
-        if MiscFile:\r
-            NodeList = [['Name', MiscFile.Name],\r
-                        ['Copyright', MiscFile.Copyright],\r
-                        ['License', MiscFile.License],\r
-                        ['Abstract', MiscFile.Abstract],\r
-                        ['Description', MiscFile.Description],\r
-                       ]\r
-            HeaderNode = CreateXmlElement('Header', '', NodeList, [])\r
-            NodeList = [HeaderNode]\r
-        \r
-            for File in MiscFile.Files:\r
-                NodeList.append(CreateXmlElement('Filename', File.Filename, [], [['Executable', File.Executable]]))\r
-            Root = CreateXmlElement('%s' % Key, '', NodeList, [])\r
-        \r
-            return Root\r
-    \r
-    def __str__(self):\r
-        Str = str(self.Header)\r
-        for Item in self.Files:\r
-            Str = Str + '\n\tFilename:' + str(Item)\r
-        return Str    \r
-\r
-# UserExtensionsXml\r
-class UserExtensionsXml(object):\r
-    def __init__(self):\r
-        self.UserId = ''\r
-        self.Identifier = ''\r
-        self.Defines = []\r
-        self.BuildOptions = []\r
-    \r
-    def FromXml(self, Item, Key):\r
-        self.UserId = XmlAttribute(XmlNode(Item, '%s' % Key), 'UserId')\r
-        self.Identifier = XmlAttribute(XmlNode(Item, '%s' % Key), 'Identifier')\r
-        for SubItem in XmlList(Item, '%s/Define' % Key):\r
-            self.Defines.append(XmlElement(SubItem, '%s/Define' % Key))\r
-        for SubItem in XmlList(Item, '%s/BuildOption' % Key):\r
-            self.BuildOptions.append(XmlElement(SubItem, '%s/BuildOption' % Key))\r
-        \r
-        UserExtension = UserExtensionsClass()\r
-        UserExtension.UserID = self.UserId\r
-        UserExtension.Identifier = self.Identifier\r
-        UserExtension.Defines = self.Defines\r
-        UserExtension.BuildOptions = self.BuildOptions\r
-        \r
-        return UserExtension\r
-\r
-    def ToXml(self, UserExtension, Key):\r
-        AttributeList = [['UserId', str(UserExtension.UserID)],\r
-                         ['Identifier', str(UserExtension.Identifier)]\r
-                        ]\r
-        NodeList = []\r
-        for Item in UserExtension.Defines:\r
-            NodeList.append(['Define', Item])\r
-        for Item in UserExtension.BuildOptions:\r
-            NodeList.append(['BuildOption', Item])\r
-        Root = CreateXmlElement('%s' % Key, UserExtension.Content, NodeList, AttributeList)\r
-        \r
-        return Root\r
-    \r
-    def __str__(self):\r
-        Str = "UserId = %s Identifier = %s" % (self.UserId, self.Identifier)\r
-        Str = Str + '\n\tDefines:' + str(self.Defines)\r
-        Str = Str + '\n\tBuildOptions:' + str(self.BuildOptions)\r
-        return Str\r
-\r
-# BootModeXml\r
-class BootModeXml(object):\r
-    def __init__(self):\r
-        self.SupportedBootModes = ''\r
-        self.CommonDefines = CommonDefinesXml()\r
-        self.HelpText = []\r
-    \r
-    def FromXml(self, Item, Key):\r
-        self.SupportedBootModes = XmlElement(Item, '%s/SupportedBootModes' % Key)\r
-        self.CommonDefines.FromXml(Item, Key)\r
-        for HelpTextItem in XmlList(Item, '%s/HelpText' % Key):\r
-            HelpTextObj = HelpTextXml()\r
-            HelpTextObj.FromXml(HelpTextItem, '%s/HelpText' % Key)\r
-            self.HelpText.append(HelpTextObj)\r
-        \r
-        BootMode = ModuleBootModeClass()\r
-        BootMode.Name = self.SupportedBootModes\r
-        BootMode.SupArchList = self.CommonDefines.SupArchList\r
-        BootMode.Usage = self.CommonDefines.Usage\r
-        BootMode.FeatureFlag = self.CommonDefines.FeatureFlag\r
-        BootMode.HelpTextList = GetHelpTextList(self.HelpText)\r
-        \r
-        return BootMode\r
-\r
-    def ToXml(self, BootMode, Key):\r
-        AttributeList = [['Usage', BootMode.Usage],\r
-                         ['SupArchList', GetStringOfList(BootMode.SupArchList)],\r
-                         ['FeatureFlag', BootMode.FeatureFlag],\r
-                        ]\r
-        NodeList = [['SupportedBootModes', BootMode.Name]]\r
-        for Item in BootMode.HelpTextList:\r
-            Tmp = HelpTextXml()\r
-            NodeList.append(Tmp.ToXml(Item, 'HelpText'))\r
-        Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
-        \r
-        return Root\r
-    \r
-    def __str__(self):\r
-        Str = "SupportedBootModes = %s %s" % (self.SupportedBootModes, self.CommonDefines)\r
-        for Item in self.HelpText:\r
-            Str = Str + '\n\t' + str(Item)\r
-        return Str\r
-\r
-# EventXml\r
-class EventXml(object):\r
-    def __init__(self):\r
-        self.EventType = ''\r
-        self.Name = ''\r
-        self.CommonDefines = CommonDefinesXml()\r
-        self.HelpText = []\r
-    \r
-    def FromXml(self, Item, Key):\r
-        self.EventType = XmlAttribute(XmlNode(Item, '%s' % Key), 'EventType')\r
-        self.Name = XmlElement(Item, '%s' % Key)\r
-        self.CommonDefines.FromXml(Item, Key)\r
-        for HelpTextItem in XmlList(Item, '%s/HelpText' % Key):\r
-            HelpTextObj = HelpTextXml()\r
-            HelpTextObj.FromXml(HelpTextItem, '%s/HelpText' % Key)\r
-            self.HelpText.append(HelpTextObj)\r
-        \r
-        Event = ModuleEventClass()\r
-        Event.Type = self.EventType\r
-        Event.GuidCName = self.Name\r
-        Event.SupArchList = self.CommonDefines.SupArchList\r
-        Event.Usage = self.CommonDefines.Usage\r
-        Event.FeatureFlag = self.CommonDefines.FeatureFlag\r
-        Event.HelpTextList = GetHelpTextList(self.HelpText)\r
-        \r
-        return Event\r
-\r
-    def ToXml(self, Event, Key):\r
-        AttributeList = [['EventType', Event.Type],\r
-                         ['Usage', Event.Usage],\r
-                         ['SupArchList', GetStringOfList(Event.SupArchList)],\r
-                         ['FeatureFlag', Event.FeatureFlag],\r
-                        ]\r
-        NodeList = []\r
-        for Item in Event.HelpTextList:\r
-            Tmp = HelpTextXml()\r
-            NodeList.append(Tmp.ToXml(Item, 'HelpText'))\r
-        Root = CreateXmlElement('%s' % Key, Event.GuidCName, NodeList, AttributeList)\r
-        \r
-        return Root\r
-    \r
-    def __str__(self):\r
-        Str = "EventType = %s %s" % (self.EventType, self.CommonDefines)\r
-        for Item in self.HelpText:\r
-            Str = Str + '\n\t' + str(Item)\r
-        return Str\r
-\r
-# HobXml\r
-class HobXml(object):\r
-    def __init__(self):\r
-        self.HobType = ''\r
-        self.Name = ''\r
-        self.CommonDefines = CommonDefinesXml()\r
-        self.HelpText = []\r
-    \r
-    def FromXml(self, Item, Key):\r
-        self.HobType = XmlAttribute(XmlNode(Item, '%s' % Key), 'HobType')\r
-        self.Name = XmlElement(Item, '%s' % Key)\r
-        self.CommonDefines.FromXml(Item, Key)\r
-        for HelpTextItem in XmlList(Item, '%s/HelpText' % Key):\r
-            HelpTextObj = HelpTextXml()\r
-            HelpTextObj.FromXml(HelpTextItem, '%s/HelpText' % Key)\r
-            self.HelpText.append(HelpTextObj)\r
-        \r
-        Hob = ModuleHobClass()\r
-        Hob.Type = self.HobType\r
-        Hob.GuidCName = self.Name\r
-        Hob.SupArchList = self.CommonDefines.SupArchList\r
-        Hob.Usage = self.CommonDefines.Usage\r
-        Hob.FeatureFlag = self.CommonDefines.FeatureFlag\r
-        Hob.HelpTextList = GetHelpTextList(self.HelpText)\r
-        \r
-        return Hob\r
-\r
-    def ToXml(self, Hob, Key):\r
-        AttributeList = [['EventType', Hob.Type],\r
-                         ['Usage', Hob.Usage],\r
-                         ['SupArchList', GetStringOfList(Hob.SupArchList)],\r
-                         ['FeatureFlag', Hob.FeatureFlag],\r
-                        ]\r
-        NodeList = []\r
-        for Item in Hob.HelpTextList:\r
-            Tmp = HelpTextXml()\r
-            NodeList.append(Tmp.ToXml(Item, 'HelpText'))\r
-        Root = CreateXmlElement('%s' % Key, Hob.GuidCName, NodeList, AttributeList)\r
-        \r
-        return Root\r
-    \r
-    def __str__(self):\r
-        Str = "HobType = %s %s" % (self.HobType, self.CommonDefines)\r
-        for Item in self.HelpText:\r
-            Str = Str + '\n\t' + str(Item)\r
-        return Str\r
-\r
-# ModulePropertyXml\r
-class ModulePropertyXml(object):\r
-    def __init__(self):\r
-        self.CommonDefines = CommonDefinesXml()\r
-        self.ModuleType = ''\r
-        self.Path = ''\r
-        self.PcdIsDriver = ''\r
-        self.UefiSpecificationVersion = ''\r
-        self.PiSpecificationVersion = ''\r
-        self.Specification = ''\r
-        self.SpecificationVersion = ''\r
-        self.BootModes = []\r
-        self.Events = []\r
-        self.HOBs = []\r
-    \r
-    def FromXml(self, Item, Key, Header = None):\r
-        self.CommonDefines.FromXml(Item, Key)\r
-        self.ModuleType = XmlElement(Item, '%s/ModuleType' % Key)\r
-        self.Path = XmlElement(Item, '%s/Path' % Key)\r
-        self.PcdIsDriver = XmlElement(Item, '%s/PcdIsDriver' % Key)\r
-        self.UefiSpecificationVersion = XmlElement(Item, '%s/UefiSpecificationVersion' % Key)\r
-        self.PiSpecificationVersion = XmlElement(Item, '%s/PiSpecificationVersion' % Key)\r
-        self.Specification = XmlElement(Item, '%s/Specification' % Key)\r
-        self.SpecificationVersion = XmlAttribute(XmlNode(Item, '%s/Specification' % Key), 'Version')\r
-        for SubItem in XmlList(Item, '%s/BootMode' % Key):\r
-            A = BootModeXml()\r
-            BootMode = A.FromXml(SubItem, 'BootMode')\r
-            self.BootModes.append(BootMode)\r
-        for SubItem in XmlList(Item, '%s/Event' % Key):\r
-            A = EventXml()\r
-            Event = A.FromXml(SubItem, 'Event')\r
-            self.Events.append(Event)\r
-        for SubItem in XmlList(Item, '%s/HOB' % Key):\r
-            A = HobXml()\r
-            Hob = A.FromXml(SubItem, 'HOB')\r
-            self.HOBs.append(Hob)\r
-            \r
-        if Header == None:\r
-            Header = ModuleHeaderClass()\r
-        \r
-        Header.ModuleType = self.ModuleType\r
-        Header.SupArchList = self.CommonDefines.SupArchList\r
-        Header.SupModuleList = self.CommonDefines.SupModList\r
-        Header.CombinePath = self.Path\r
-        Header.PcdIsDriver = self.PcdIsDriver\r
-        Header.UefiSpecificationVersion = self.UefiSpecificationVersion\r
-        Header.PiSpecificationVersion = self.PiSpecificationVersion\r
-        \r
-        return Header, self.BootModes, self.Events, self.HOBs\r
-        \r
-    \r
-    def ToXml(self, Header, BootModes, Events, Hobs, Key):\r
-        AttributeList = [['SupArchList', GetStringOfList(Header.SupArchList)],\r
-                         ['SupModList', GetStringOfList(Header.SupModuleList)],\r
-                        ]\r
-        NodeList = [['ModuleType', Header.ModuleType],\r
-                    ['Path', Header.CombinePath],\r
-                    ['PcdIsDriver', Header.PcdIsDriver],\r
-                    ['UefiSpecificationVersion', Header.UefiSpecificationVersion],\r
-                    ['PiSpecificationVersion', Header.PiSpecificationVersion],\r
-                   ]\r
-        for Item in BootModes:\r
-            Tmp = BootModeXml()\r
-            NodeList.append(Tmp.ToXml(Item, 'BootMode'))\r
-        for Item in Events:\r
-            Tmp = EventXml()\r
-            NodeList.append(Tmp.ToXml(Item, 'Event'))\r
-        for Item in Hobs:\r
-            Tmp = HobXml()\r
-            NodeList.append(Tmp.ToXml(Item, 'Hob'))\r
-        Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
-        \r
-        return Root\r
-    \r
-    def __str__(self):\r
-        Str = "ModuleType = %s Path = %s PcdIsDriver = %s UefiSpecificationVersion = %s PiSpecificationVersion = %s Specification = %s SpecificationVersion = %s %s" \\r
-                % (self.ModuleType, self.Path, self.PcdIsDriver, self.UefiSpecificationVersion, self.PiSpecificationVersion, \\r
-                   self.Specification, self.SpecificationVersion, self.CommonDefines)\r
-        for Item in self.BootModes:\r
-            Str = Str + '\n\t' + str(Item)\r
-        for Item in self.Events:\r
-            Str = Str + '\n\t' + str(Item)\r
-        for Item in self.HOBs:\r
-            Str = Str + '\n\t' + str(Item)\r
-        return Str\r
-\r
-# SourceFileXml\r
-class SourceFileXml(object):\r
-    def __init__(self):\r
-        self.SourceFile = ''\r
-        self.ToolChainFamily = ''\r
-        self.FileType = ''\r
-        self.CommonDefines = CommonDefinesXml()\r
-\r
-    def FromXml(self, Item, Key):\r
-        self.ToolChainFamily = XmlAttribute(Item, 'Family')\r
-        self.FileType = XmlAttribute(Item, 'FileType')\r
-        self.SourceFile = XmlElement(Item, 'Filename')\r
-        self.CommonDefines.FromXml(Item, Key)\r
-        \r
-        SourceFile = ModuleSourceFileClass()\r
-        SourceFile.SourceFile = self.SourceFile\r
-        SourceFile.FileType = self.FileType\r
-        SourceFile.ToolChainFamily = self.ToolChainFamily\r
-        SourceFile.SupArchList = self.CommonDefines.SupArchList\r
-        SourceFile.FeatureFlag = self.CommonDefines.FeatureFlag\r
-        \r
-        return SourceFile\r
-    \r
-    def ToXml(self, SourceFile, Key):\r
-        AttributeList = [['SupArchList', GetStringOfList(SourceFile.SupArchList)],\r
-                         ['Family', SourceFile.ToolChainFamily],\r
-                         ['FileType', SourceFile.FileType],\r
-                         ['FeatureFlag', SourceFile.FeatureFlag],\r
-                        ]\r
-        Root = CreateXmlElement('%s' % Key, SourceFile.SourceFile, [], AttributeList)\r
-        \r
-        return Root\r
-\r
-# FilenameXml\r
-class FilenameXml(object):\r
-    def __init__(self):\r
-        self.OS = ''\r
-        self.Family = ''\r
-        self.FileType = ''\r
-        self.Filename = ''\r
-        self.Executable = ''\r
-        self.CommonDefines = CommonDefinesXml()\r
-    \r
-    def FromXml(self, Item, Key):\r
-        self.OS = XmlAttribute(Item, 'OS')\r
-        self.Family = XmlAttribute(Item, 'Family')\r
-        self.FileType = XmlAttribute(Item, 'FileType')\r
-        self.Filename = XmlElement(Item, 'Filename')\r
-        self.Executable = XmlElement(Item, 'Executable')\r
-        self.CommonDefines.FromXml(Item, Key)\r
-        \r
-        Filename = FileClass()\r
-        Filename.Family = self.Family\r
-        Filename.FileType = self.FileType\r
-        Filename.Filename = self.Filename\r
-        Filename.Executable = self.Executable\r
-        Filename.SupArchList = self.CommonDefines.SupArchList\r
-        Filename.FeatureFlag = self.CommonDefines.FeatureFlag\r
-        \r
-        return Filename\r
-    \r
-    def ToXml(self, Filename, Key):\r
-        AttributeList = [['SupArchList', GetStringOfList(Filename.SupArchList)],\r
-                         ['Family', Filename.Family],\r
-                         ['FileType', Filename.FileType],\r
-                         ['Executable', Filename.Executable],\r
-                         ['FeatureFlag', Filename.FeatureFlag],\r
-                        ]\r
-        NodeList = [['Filename', Filename.Filename],\r
-                   ]\r
-        Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
-        \r
-        return Root\r
-    \r
-    def __str__(self):\r
-        return "OS = %s Family = %s FileType = %s Filename = %s Executable = %s %s" \\r
-             % (self.OS, self.Family, self.FileType, self.Filename, self.Executable, self.CommonDefines)\r
-    \r
-class BinaryFileXml(object):\r
-    def __init__(self):\r
-        self.Filenames = []\r
-        self.PatchPcdValues = []\r
-        self.PcdExValues = []\r
-        self.LibraryInstances = []\r
-        self.BuildFlags = []\r
-    \r
-    def FromXml(self, Item, Key):\r
-        BinaryFile = ModuleBinaryFileClass()\r
-        for SubItem in XmlList(Item, '%s/Filename' % Key):\r
-            A = FilenameXml()\r
-            B = A.FromXml(SubItem, 'Filename')\r
-            BinaryFile.Filenames.append(B)\r
-        for SubItem in XmlList(Item, '%s/AsBuilt/PatchPcdValue' % Key):\r
-            A = PcdEntryXml()\r
-            B = A.FromXml(SubItem, 'PatchPcdValue')\r
-            BinaryFile.PatchPcdValues.append(B)\r
-        for SubItem in XmlList(Item, '%s/AsBuilt/PcdExValue' % Key):\r
-            A = PcdEntryXml()\r
-            B = A.FromXml(SubItem, 'PcdExValue')\r
-            BinaryFile.PatchPcdValues.append(B)\r
-        for SubItem in XmlList(Item, '%s/AsBuilt/LibraryInstances/GUID' % Key):\r
-            GUID = XmlElement(SubItem, 'GUID')\r
-            Version = XmlAttribute(XmlNode(SubItem, 'GUID'), 'Version')\r
-            BinaryFile.LibraryInstances.append([GUID, Version])\r
-        for SubItem in XmlList(Item, '%s/AsBuilt/BuildFlags' % Key):\r
-            BinaryFile.BuildFlags.append(XmlElement(SubItem, 'BuildFlags'))\r
-        \r
-        return BinaryFile\r
-    \r
-    def ToXml(self, BinaryFile, Key):\r
-        NodeList = []\r
-        for Item in BinaryFile.Filenames:\r
-            Tmp = FilenameXml()\r
-            NodeList.append(Tmp.ToXml(Item, 'Filename'))\r
-        AsBuiltNodeList = []\r
-        for Item in BinaryFile.PatchPcdValues:\r
-            Tmp = PcdEntryXml()\r
-            AsBuiltNodeList.append(Tmp.ToXml(Item, 'PatchPcdValue'))\r
-        for Item in BinaryFile.PcdExValues:\r
-            Tmp = PcdEntryXml()\r
-            AsBuiltNodeList.append(Tmp.ToXml(Item, 'PcdExValue'))\r
-        LibNodeList = []\r
-        for Item in BinaryFile.LibraryInstances:\r
-            LibNode = CreateXmlElement('GUID', Item[0], [], [['Version', Item[1]]])\r
-            LibNodeList.append(LibNode)\r
-        if LibNodeList:\r
-            AsBuiltNodeList.append(CreateXmlElement('LibraryInstances', '', LibNodeList, []))\r
-        for Item in BinaryFile.BuildFlags:\r
-            AsBuiltNodeList.append(CreateXmlElement('BuildFlags', Item, [], []))\r
-        Element = CreateXmlElement('AsBuilt', '', AsBuiltNodeList, [])\r
-        NodeList.append(Element)\r
-        \r
-        Root = CreateXmlElement('%s' % Key, '', NodeList, [])\r
-\r
-        return Root\r
-        \r
-    def __str__(self):\r
-        Str = "BinaryFiles:"\r
-        for Item in self.Filenames:\r
-            Str = Str + '\n\t' + str(Item)\r
-        for Item in self.PatchPcdValues:\r
-            Str = Str + '\n\t' + str(Item)\r
-        for Item in self.PcdExValues:\r
-            Str = Str + '\n\t' + str(Item)\r
-        for Item in self.LibraryInstances:\r
-            Str = Str + '\n\t' + str(Item)\r
-        for Item in self.BuildFlags:\r
-            Str = Str + '\n\t' + str(Item)\r
-        return Str\r
-\r
-# PackageXml\r
-class PackageXml(object):\r
-    def __init__(self):\r
-        self.Description = ''\r
-        self.Guid = ''\r
-        self.Version = ''\r
-        self.CommonDefines = CommonDefinesXml()\r
-        \r
-    def FromXml(self, Item, Key):\r
-        self.Description = XmlElement(Item, '%s/Description' % Key)                                              \r
-        self.Guid = XmlElement(Item, '%s/GUID' % Key)\r
-        self.Version = XmlAttribute(XmlNode(Item, '%s/GUID' % Key), 'Version')\r
-        self.CommonDefines.FromXml(XmlNode(Item, '%s' % Key), Key)\r
-        \r
-        PackageDependency = ModulePackageDependencyClass()\r
-        PackageDependency.FilePath = self.Description\r
-        PackageDependency.PackageGuid = self.Guid\r
-        PackageDependency.PackageVersion = self.Version\r
-        PackageDependency.FeatureFlag = self.CommonDefines.FeatureFlag\r
-        PackageDependency.SupArchList = self.CommonDefines.SupArchList\r
-        \r
-        return PackageDependency\r
-\r
-    def ToXml(self, PackageDependency, Key):\r
-        AttributeList = [['SupArchList', GetStringOfList(PackageDependency.SupArchList)],\r
-                         ['FeatureFlag', PackageDependency.FeatureFlag],\r
-                        ]\r
-        Element1 = CreateXmlElement('GUID', PackageDependency.PackageGuid, [], [['Version', PackageDependency.PackageVersion]])\r
-        NodeList = [['Description', PackageDependency.FilePath],\r
-                    Element1,\r
-                   ]\r
-\r
-        Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
-        \r
-        return Root\r
-\r
-    def __str__(self):\r
-        Str = "Description = %s Guid = %s Version = %s %s" \\r
-             % (self.Description, self.Guid, self.Version, self.CommonDefines)\r
-        return Str\r
-\r
-# ExternXml\r
-class ExternXml(object):\r
-    def __init__(self):\r
-        self.CommonDefines = CommonDefinesXml()\r
-        self.EntryPoint = ''\r
-        self.UnloadImage = ''\r
-        self.Constructor = ''\r
-        self.Destructor = ''\r
-        self.HelpText = []\r
-        \r
-    def FromXml(self, Item, Key):\r
-        self.CommonDefines.FromXml(Item, Key)\r
-        self.EntryPoint = XmlElement(Item, '%s/EntryPoint' % Key)\r
-        self.UnloadImage = XmlElement(Item, '%s/UnloadImage' % Key)\r
-        self.Constructor = XmlElement(Item, '%s/Constructor' % Key)\r
-        self.Destructor = XmlElement(Item, '%s/Destructor' % Key)\r
-        for HelpTextItem in XmlList(Item, '%s/HelpText' % Key):\r
-            HelpTextObj = HelpTextXml()\r
-            HelpTextObj.FromXml(HelpTextItem, '%s/HelpText' % Key)\r
-            self.HelpText.append(HelpTextObj)\r
-        \r
-        Extern = ModuleExternClass()\r
-        Extern.EntryPoint = self.EntryPoint\r
-        Extern.UnloadImage = self.UnloadImage\r
-        Extern.Constructor = self.Constructor\r
-        Extern.Destructor = self.Destructor\r
-        Extern.SupArchList = self.CommonDefines.SupArchList\r
-        Extern.FeatureFlag = self.CommonDefines.FeatureFlag\r
-        Extern.HelpTextList = GetHelpTextList(self.HelpText)\r
-        \r
-        return Extern\r
-    \r
-    def ToXml(self, Extern, Key):\r
-        AttributeList = [['SupArchList', GetStringOfList(Extern.SupArchList)],\r
-                         ['FeatureFlag', Extern.FeatureFlag],\r
-                        ]\r
-        NodeList = [['EntryPoint', Extern.EntryPoint],\r
-                    ['UnloadImage', Extern.UnloadImage],\r
-                    ['Constructor', Extern.Constructor],\r
-                    ['Destructor', Extern.Destructor],\r
-                   ]\r
-        for Item in Extern.HelpTextList:\r
-            Tmp = HelpTextXml()\r
-            NodeList.append(Tmp.ToXml(Item, 'HelpText'))\r
-\r
-        Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
-        \r
-        return Root\r
-    \r
-    def __str__(self):    \r
-        Str = "EntryPoint = %s UnloadImage = %s Constructor = %s Destructor = %s %s" \\r
-             % (self.EntryPoint, self.UnloadImage, self.Constructor, self.Destructor, self.CommonDefines)\r
-        for Item in self.HelpText:\r
-            Str = Str + '\n\t' + str(Item)\r
-        return Str\r
-# DepexXml\r
-class DepexXml(object):\r
-    def __init__(self):\r
-        self.Expression = ''\r
-        #self.HelpText = HelpTextXml()\r
-        self.HelpText = []\r
-    \r
-    def FromXml(self, Item, Key):\r
-        self.Expression = XmlElement(Item, '%s/Expression' % Key)\r
-        for HelpTextItem in XmlList(Item, '%s/HelpText' % Key):\r
-            HelpTextObj = HelpTextXml()\r
-            HelpTextObj.FromXml(HelpTextItem, '%s/HelpText' % Key)\r
-            self.HelpText.append(HelpTextObj)\r
-        \r
-        Depex = ModuleDepexClass()\r
-        Depex.Depex = self.Expression\r
-        Depex.HelpTextList = GetHelpTextList(self.HelpText)\r
-\r
-        return Depex\r
-        \r
-    def ToXml(self, Depex, Key):\r
-        AttributeList = []\r
-        NodeList = [['Expression', Depex.Depex],\r
-                   ]\r
-        for Item in Depex.HelpTextList:\r
-            Tmp = HelpTextXml()\r
-            NodeList.append(Tmp.ToXml(Item, 'HelpText'))\r
-\r
-        Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
-        \r
-        return Root\r
-    \r
-    def __str__(self):    \r
-        Str = "Expression = %s" % (self.Expression)\r
-        for Item in self.HelpText:\r
-            Str = Str + '\n\t' + str(Item)\r
-        return Str\r
-\r
-# PackageSurfaceAreaXml\r
-class PackageSurfaceAreaXml(object):\r
-    def __init__(self):\r
-        self.Package = None\r
-    \r
-    def FromXml(self, Item, Key):\r
-        # Create a package object\r
-        Package = PackageClass()\r
-        \r
-        # Header\r
-        Tmp = PackageHeaderXml()\r
-        PackageHeader = Tmp.FromXml(XmlNode(Item, '/PackageSurfaceArea/Header'), 'Header')\r
-        Package.PackageHeader = PackageHeader\r
-        \r
-        # ClonedFrom\r
-        Tmp = ClonedFromXml()\r
-        ClonedFrom = Tmp.FromXml(XmlNode(Item, '/PackageSurfaceArea/ClonedFrom'), 'ClonedFrom')\r
-        if ClonedFrom:\r
-            Package.PackageHeader.ClonedFrom.append(ClonedFrom)\r
-        \r
-        # LibraryClass\r
-        for SubItem in XmlList(Item, '/PackageSurfaceArea/LibraryClassDeclarations/LibraryClass'):\r
-            Tmp = LibraryClassXml()\r
-            LibraryClass = Tmp.FromXml(SubItem, 'LibraryClass')\r
-            Package.LibraryClassDeclarations.append(LibraryClass)\r
-        \r
-        # IndustryStandardHeader\r
-        for SubItem in XmlList(Item, '/PackageSurfaceArea/IndustryStandardIncludes/IndustryStandardHeader'):\r
-            Tmp = IndustryStandardHeaderXml()\r
-            Include = Tmp.FromXml(SubItem, 'IndustryStandardHeader')\r
-            Package.IndustryStdHeaders.append(Include)\r
-\r
-        # PackageHeader\r
-        for SubItem in XmlList(Item, '/PackageSurfaceArea/PackageIncludes/PackageHeader'):\r
-            Tmp = PackageIncludeHeaderXml()\r
-            Include = Tmp.FromXml(SubItem, 'PackageHeader')\r
-            Package.PackageIncludePkgHeaders.append(Include)\r
-        \r
-        # Guid\r
-        for SubItem in XmlList(Item, '/PackageSurfaceArea/GuidDeclarations/Entry'):\r
-            Tmp = GuidProtocolPpiXml()\r
-            GuidProtocolPpi = Tmp.FromXml(SubItem, 'Entry')\r
-            Package.GuidDeclarations.append(GuidProtocolPpi)\r
-    \r
-        # Protocol\r
-        for SubItem in XmlList(Item, '/PackageSurfaceArea/ProtocolDeclarations/Entry'):\r
-            Tmp = GuidProtocolPpiXml()\r
-            GuidProtocolPpi = Tmp.FromXml(SubItem, 'Entry')\r
-            Package.ProtocolDeclarations.append(GuidProtocolPpi)\r
-\r
-        # Ppi\r
-        for SubItem in XmlList(Item, '/PackageSurfaceArea/PpiDeclarations/Entry'):\r
-            Tmp = GuidProtocolPpiXml()\r
-            GuidProtocolPpi = Tmp.FromXml(SubItem, 'Entry')\r
-            Package.PpiDeclarations.append(GuidProtocolPpi)\r
-        \r
-        # PcdEntry\r
-        for SubItem in XmlList(Item, '/PackageSurfaceArea/PcdDeclarations/PcdEntry'):\r
-            Tmp = PcdEntryXml()\r
-            PcdEntry = Tmp.FromXml(SubItem, 'PcdEntry')\r
-            Package.PcdDeclarations.append(PcdEntry)\r
-        \r
-        # PcdCheck\r
-        for SubItem in XmlList(Item, '/PackageSurfaceArea/PcdRelationshipChecks/PcdCheck'):\r
-            Tmp = PcdCheckXml()\r
-            PcdCheck = Tmp.FromXml(SubItem, 'PcdCheck')\r
-            Package.PcdChecks.append(PcdCheck)\r
-        \r
-        # MiscellaneousFile\r
-        Tmp = MiscellaneousFileXml()\r
-        Package.MiscFiles = Tmp.FromXml(XmlNode(Item, '/PackageSurfaceArea/MiscellaneousFiles'), 'MiscellaneousFiles')\r
-       \r
-        # UserExtensions\r
-        Tmp = UserExtensionsXml()\r
-        Package.UserExtensions = Tmp.FromXml(XmlNode(Item, '/PackageSurfaceArea/UserExtensions'), 'UserExtensions')\r
-        \r
-        # Modules\r
-        for SubItem in XmlList(Item, '/PackageSurfaceArea/Modules/ModuleSurfaceArea'):\r
-            Tmp = ModuleSurfaceAreaXml()\r
-            Module = Tmp.FromXml(SubItem, 'ModuleSurfaceArea')\r
-            Package.Modules[(Module.ModuleHeader.Guid, Module.ModuleHeader.Version, Module.ModuleHeader.CombinePath)] = Module\r
-        \r
-        self.Package = Package\r
-        return self.Package\r
-\r
-    def ToXml(self, Package):\r
-        # Create PackageSurfaceArea node\r
-        DomPackage = minidom.Document().createElement('PackageSurfaceArea')\r
-        \r
-        # Header\r
-        Tmp = PackageHeaderXml()\r
-        DomPackage.appendChild(Tmp.ToXml(Package.PackageHeader, 'Header'))\r
-        \r
-        # ClonedFrom\r
-        Tmp = ClonedFromXml()\r
-        if Package.PackageHeader.ClonedFrom != []:\r
-            DomPackage.appendChild(Tmp.ToXml(Package.PackageHeader.ClonedFrom[0], 'ClonedFrom'))\r
-        \r
-        # LibraryClass\r
-        LibraryClassNode = CreateXmlElement('LibraryClassDeclarations', '', [], [])\r
-        for LibraryClass in Package.LibraryClassDeclarations:\r
-            Tmp = LibraryClassXml()\r
-            LibraryClassNode.appendChild(Tmp.ToXml(LibraryClass, 'LibraryClass'))\r
-        DomPackage.appendChild(LibraryClassNode)\r
-        \r
-        # IndustryStandardHeader\r
-        IndustryStandardHeaderNode = CreateXmlElement('IndustryStandardIncludes', '', [], [])\r
-        for Include in Package.IndustryStdHeaders:\r
-            Tmp = IndustryStandardHeaderXml()\r
-            IndustryStandardHeaderNode.appendChild(Tmp.ToXml(Include, 'IndustryStandardHeader'))\r
-        DomPackage.appendChild(IndustryStandardHeaderNode)\r
-        \r
-        # PackageHeader\r
-        PackageIncludeHeaderNode = CreateXmlElement('PackageIncludes', '', [], [])\r
-        for Include in Package.PackageIncludePkgHeaders:\r
-            Tmp = PackageIncludeHeaderXml()\r
-            PackageIncludeHeaderNode.appendChild(Tmp.ToXml(Include, 'PackageHeader'))\r
-        DomPackage.appendChild(PackageIncludeHeaderNode)\r
-        \r
-        # Guid\r
-        GuidProtocolPpiNode = CreateXmlElement('GuidDeclarations', '', [], [])\r
-        for GuidProtocolPpi in Package.GuidDeclarations:\r
-            Tmp = GuidProtocolPpiXml()\r
-            GuidProtocolPpiNode.appendChild(Tmp.ToXml(GuidProtocolPpi, 'Entry'))\r
-        DomPackage.appendChild(GuidProtocolPpiNode)\r
-    \r
-        # Protocol\r
-        GuidProtocolPpiNode = CreateXmlElement('ProtocolDeclarations', '', [], [])\r
-        for GuidProtocolPpi in Package.ProtocolDeclarations:\r
-            Tmp = GuidProtocolPpiXml()\r
-            GuidProtocolPpiNode.appendChild(Tmp.ToXml(GuidProtocolPpi, 'Entry'))\r
-        DomPackage.appendChild(GuidProtocolPpiNode)\r
-\r
-        # Ppi\r
-        GuidProtocolPpiNode = CreateXmlElement('PpiDeclarations', '', [], [])\r
-        for GuidProtocolPpi in Package.PpiDeclarations:\r
-            Tmp = GuidProtocolPpiXml()\r
-            GuidProtocolPpiNode.appendChild(Tmp.ToXml(GuidProtocolPpi, 'Entry'))\r
-        DomPackage.appendChild(GuidProtocolPpiNode)\r
-        \r
-        # PcdEntry\r
-        PcdEntryNode = CreateXmlElement('PcdDeclarations', '', [], [])\r
-        for PcdEntry in Package.PcdDeclarations:\r
-            Tmp = PcdEntryXml()\r
-            PcdEntryNode.appendChild(Tmp.ToXml(PcdEntry, 'PcdEntry'))\r
-        DomPackage.appendChild(PcdEntryNode)\r
-        \r
-        # PcdCheck\r
-        PcdCheckNode = CreateXmlElement('PcdRelationshipChecks', '', [], [])\r
-        for PcdCheck in Package.PcdChecks:\r
-            Tmp = PcdCheckXml()\r
-            PcdCheckNode.appendChild(Tmp.ToXml(PcdCheck, 'PcdCheck'))\r
-        DomPackage.appendChild(PcdCheckNode)\r
-        \r
-        # MiscellaneousFile\r
-        Tmp = MiscellaneousFileXml()\r
-        DomPackage.appendChild(Tmp.ToXml(Package.MiscFiles, 'MiscellaneousFiles'))\r
-       \r
-        # UserExtensions\r
-        Tmp = UserExtensionsXml()\r
-        DomPackage.appendChild(Tmp.ToXml(Package.UserExtensions, 'UserExtensions'))\r
-        \r
-        # Modules\r
-        ModuleNode = CreateXmlElement('Modules', '', [], [])\r
-        for Module in Package.Modules.values():\r
-            Tmp = ModuleSurfaceAreaXml()\r
-            ModuleNode.appendChild(Tmp.ToXml(Module))\r
-        DomPackage.appendChild(ModuleNode)\r
-        \r
-        return DomPackage\r
-\r
-# ModuleXml\r
-class ModuleSurfaceAreaXml(object):\r
-    def __init__(self):\r
-        self.Module = None\r
-    \r
-    def FromXml(self, Item, Key):\r
-        # Create a package object\r
-        Module = ModuleClass()\r
-        \r
-        # Header\r
-        Tmp = HeaderXml()\r
-        ModuleHeader = Tmp.FromXml(XmlNode(Item, '/ModuleSurfaceArea/Header'), 'Header')\r
-        Module.ModuleHeader = ModuleHeader\r
-        \r
-        # ModuleProperties\r
-        Tmp = ModulePropertyXml()\r
-        (Header, BootModes, Events, HOBs) = Tmp.FromXml(XmlNode(Item, '/ModuleSurfaceArea/ModuleProperties'), 'ModuleProperties', ModuleHeader)\r
-        Module.ModuleHeader = Header\r
-        Module.BootModes = BootModes\r
-        Module.Events = Events\r
-        Module.Hobs = HOBs\r
-        \r
-        # ClonedFrom\r
-        Tmp = ClonedFromXml()\r
-        ClonedFrom = Tmp.FromXml(XmlNode(Item, '/ModuleSurfaceArea/ClonedFrom'), 'ClonedFrom')\r
-        if ClonedFrom:\r
-            Module.ModuleHeader.ClonedFrom.append(ClonedFrom)\r
-        \r
-        # LibraryClass\r
-        #LibraryClassNode = CreateXmlElement('LibraryClassDefinitions', '', [], [])\r
-        for SubItem in XmlList(Item, '/ModuleSurfaceArea/LibraryClassDefinitions/LibraryClass'):\r
-            Tmp = LibraryClassXml()\r
-            LibraryClass = Tmp.FromXml(SubItem, 'LibraryClass')\r
-            Module.LibraryClasses.append(LibraryClass)\r
-        \r
-        # SourceFile\r
-        #SourceFileNode = CreateXmlElement('SourceFiles', '', [], [])\r
-        for SubItem in XmlList(Item, '/ModuleSurfaceArea/SourceFiles/Filename'):\r
-            Tmp = SourceFileXml()\r
-            SourceFile = Tmp.FromXml(SubItem, 'Filename')\r
-            Module.Sources.append(SourceFile)\r
-        \r
-        # BinaryFile\r
-        #BinaryFileNode = CreateXmlElement('BinaryFiles', '', [], [])\r
-        for SubItem in XmlList(Item, '/ModuleSurfaceArea/BinaryFiles/BinaryFile'):\r
-            Tmp = BinaryFileXml()\r
-            BinaryFile = Tmp.FromXml(SubItem, 'BinaryFile')\r
-            Module.Binaries.append(BinaryFile)\r
-        \r
-        # PackageDependencies\r
-        #PackageDependencyNode = CreateXmlElement('PackageDependencies', '', [], [])\r
-        for SubItem in XmlList(Item, '/ModuleSurfaceArea/PackageDependencies/Package'):\r
-            Tmp = PackageXml()\r
-            PackageDependency = Tmp.FromXml(SubItem, 'Package')\r
-            Module.PackageDependencies.append(PackageDependency)\r
-\r
-        # Guid\r
-        #GuidProtocolPpiNode = CreateXmlElement('Guids', '', [], [])\r
-        for SubItem in XmlList(Item, '/ModuleSurfaceArea/Guids/GuidCName'):\r
-            Tmp = GuidProtocolPpiXml()\r
-            GuidProtocolPpi = Tmp.FromXml(SubItem, 'GuidCName')\r
-            Module.Guids.append(GuidProtocolPpi)\r
-    \r
-        # Protocol\r
-        #GuidProtocolPpiNode = CreateXmlElement('Protocols', '', [], [])\r
-        for SubItem in XmlList(Item, '/ModuleSurfaceArea/Protocols/Protocol'):\r
-            Tmp = GuidProtocolPpiXml()\r
-            GuidProtocolPpi = Tmp.FromXml(SubItem, 'Protocol')\r
-            Module.Protocols.append(GuidProtocolPpi)\r
-\r
-        # Ppi\r
-        #GuidProtocolPpiNode = CreateXmlElement('PPIs', '', [], [])\r
-        for SubItem in XmlList(Item, '/ModuleSurfaceArea/PPIs/Ppi'):\r
-            Tmp = GuidProtocolPpiXml()\r
-            GuidProtocolPpi = Tmp.FromXml(SubItem, 'Ppi')\r
-            Module.Ppis.append(GuidProtocolPpi)\r
-        \r
-        # Extern\r
-        #ExternNode = CreateXmlElement('Externs', '', [], [])\r
-        for SubItem in XmlList(Item, '/ModuleSurfaceArea/Externs/Extern'):\r
-            Tmp = ExternXml()\r
-            Extern = Tmp.FromXml(SubItem, 'Extern')\r
-            Module.Externs.append(Extern)\r
-        \r
-        # PcdCoded\r
-        #PcdEntryNode = CreateXmlElement('PcdCoded', '', [], [])\r
-        for SubItem in XmlList(Item, '/ModuleSurfaceArea/PcdCoded/PcdEntry'):\r
-            Tmp = PcdEntryXml()\r
-            PcdEntry = Tmp.FromXml(SubItem, 'PcdEntry')\r
-            Module.PcdCodes.append(PcdEntry)\r
-\r
-        # PeiDepex\r
-        #DepexNode = CreateXmlElement('PeiDepex', '', [], [])\r
-        Tmp = DepexXml()\r
-        Module.PeiDepex = Tmp.FromXml(XmlNode(Item, '/ModuleSurfaceArea/PeiDepex'), 'PeiDepex')\r
-\r
-        # DxeDepex\r
-        #DepexNode = CreateXmlElement('DxeDepex', '', [], [])\r
-        Tmp = DepexXml()\r
-        Module.DxeDepex = Tmp.FromXml(XmlNode(Item, '/ModuleSurfaceArea/DxeDepex'), 'DxeDepex')\r
-        \r
-        # SmmDepex\r
-        #DepexNode = CreateXmlElement('SmmDepex', '', [], [])\r
-        Tmp = DepexXml()\r
-        Module.SmmDepex = Tmp.FromXml(XmlNode(Item, '/ModuleSurfaceArea/DxeDepex'), 'SmmDepex')\r
-\r
-        # MiscellaneousFile\r
-        Tmp = MiscellaneousFileXml()\r
-        Module.MiscFiles = Tmp.FromXml(XmlNode(Item, '/ModuleSurfaceArea/MiscellaneousFiles'), 'MiscellaneousFiles')\r
-        \r
-        # UserExtensions\r
-        Tmp = UserExtensionsXml()\r
-        Module.UserExtensions = Tmp.FromXml(XmlNode(Item, '/ModuleSurfaceArea/UserExtensions'), 'UserExtensions')\r
-        \r
-        # return the module object\r
-        self.Module = Module\r
-        return self.Module\r
-\r
-    def ToXml(self, Module):\r
-        # Create root node of module surface area\r
-        DomModule = minidom.Document().createElement('ModuleSurfaceArea')\r
-\r
-        # Header\r
-        Tmp = HeaderXml()\r
-        DomModule.appendChild(Tmp.ToXml(Module.ModuleHeader, 'Header'))\r
-        \r
-        # ModuleProperties\r
-        Tmp = ModulePropertyXml()\r
-        DomModule.appendChild(Tmp.ToXml(Module.ModuleHeader, Module.BootModes, Module.Events, Module.Hobs, 'ModuleProperties'))\r
-        \r
-        # ClonedFrom\r
-        Tmp = ClonedFromXml()\r
-        if Module.ModuleHeader.ClonedFrom != []:\r
-            DomModule.appendChild(Tmp.ToXml(Module.ModuleHeader.ClonedFrom[0], 'ClonedFrom'))\r
-        \r
-        # LibraryClass\r
-        LibraryClassNode = CreateXmlElement('LibraryClassDefinitions', '', [], [])\r
-        for LibraryClass in Module.LibraryClasses:\r
-            Tmp = LibraryClassXml()\r
-            LibraryClassNode.appendChild(Tmp.ToXml(LibraryClass, 'LibraryClass'))\r
-        DomModule.appendChild(LibraryClassNode)\r
-        \r
-        # SourceFile\r
-        SourceFileNode = CreateXmlElement('SourceFiles', '', [], [])\r
-        for SourceFile in Module.Sources:\r
-            Tmp = SourceFileXml()\r
-            SourceFileNode.appendChild(Tmp.ToXml(SourceFile, 'Filename'))\r
-        DomModule.appendChild(SourceFileNode)\r
-        \r
-        # BinaryFile\r
-        BinaryFileNode = CreateXmlElement('BinaryFiles', '', [], [])\r
-        for BinaryFile in Module.Binaries:\r
-            Tmp = BinaryFileXml()\r
-            BinaryFileNode.appendChild(Tmp.ToXml(BinaryFile, 'BinaryFile'))\r
-        DomModule.appendChild(BinaryFileNode)\r
-        \r
-        # PackageDependencies\r
-        PackageDependencyNode = CreateXmlElement('PackageDependencies', '', [], [])\r
-        for PackageDependency in Module.PackageDependencies:\r
-            Tmp = PackageXml()\r
-            PackageDependencyNode.appendChild(Tmp.ToXml(PackageDependency, 'Package'))\r
-        DomModule.appendChild(PackageDependencyNode)\r
-\r
-        # Guid\r
-        GuidProtocolPpiNode = CreateXmlElement('Guids', '', [], [])\r
-        for GuidProtocolPpi in Module.Guids:\r
-            Tmp = GuidProtocolPpiXml()\r
-            GuidProtocolPpiNode.appendChild(Tmp.ToXml(GuidProtocolPpi, 'GuidCName'))\r
-        DomModule.appendChild(GuidProtocolPpiNode)\r
-    \r
-        # Protocol\r
-        GuidProtocolPpiNode = CreateXmlElement('Protocols', '', [], [])\r
-        for GuidProtocolPpi in Module.Protocols:\r
-            Tmp = GuidProtocolPpiXml()\r
-            GuidProtocolPpiNode.appendChild(Tmp.ToXml(GuidProtocolPpi, 'Protocol'))\r
-        DomModule.appendChild(GuidProtocolPpiNode)\r
-\r
-        # Ppi\r
-        GuidProtocolPpiNode = CreateXmlElement('PPIs', '', [], [])\r
-        for GuidProtocolPpi in Module.Ppis:\r
-            Tmp = GuidProtocolPpiXml()\r
-            GuidProtocolPpiNode.appendChild(Tmp.ToXml(GuidProtocolPpi, 'Ppi'))\r
-        DomModule.appendChild(GuidProtocolPpiNode)\r
-        \r
-        # Extern\r
-        ExternNode = CreateXmlElement('Externs', '', [], [])\r
-        for Extern in Module.Externs:\r
-            Tmp = ExternXml()\r
-            ExternNode.appendChild(Tmp.ToXml(Extern, 'Extern'))\r
-        DomModule.appendChild(ExternNode)\r
-        \r
-        # PcdCoded\r
-        PcdEntryNode = CreateXmlElement('PcdCoded', '', [], [])\r
-        for PcdEntry in Module.PcdCodes:\r
-            Tmp = PcdEntryXml()\r
-            PcdEntryNode.appendChild(Tmp.ToXml(PcdEntry, 'PcdEntry'))\r
-        DomModule.appendChild(PcdEntryNode)\r
-\r
-        # PeiDepex\r
-        if Module.PeiDepex:\r
-            DepexNode = CreateXmlElement('PeiDepex', '', [], [])\r
-            Tmp = DepexXml()\r
-            DomModule.appendChild(Tmp.ToXml(Module.PeiDepex, 'PeiDepex'))\r
-\r
-        # DxeDepex\r
-        if Module.DxeDepex:\r
-            DepexNode = CreateXmlElement('DxeDepex', '', [], [])\r
-            Tmp = DepexXml()\r
-            DomModule.appendChild(Tmp.ToXml(Module.DxeDepex, 'DxeDepex'))\r
-        \r
-        # SmmDepex\r
-        if Module.SmmDepex:\r
-            DepexNode = CreateXmlElement('SmmDepex', '', [], [])\r
-            Tmp = DepexXml()\r
-            DomModule.appendChild(Tmp.ToXml(Module.SmmDepex, 'SmmDepex'))\r
-        \r
-        # MiscellaneousFile\r
-        Tmp = MiscellaneousFileXml()\r
-        DomModule.appendChild(Tmp.ToXml(Module.MiscFiles, 'MiscellaneousFiles'))\r
-        \r
-        # UserExtensions\r
-        Tmp = UserExtensionsXml()\r
-        DomModule.appendChild(Tmp.ToXml(Module.UserExtensions, 'UserExtensions'))\r
-        \r
-        return DomModule\r
-\r
-# DistributionPackageXml\r
-class DistributionPackageXml(object):\r
-    def __init__(self):\r
-        self.Dp = DistributionPackageClass()\r
-\r
-    def FromXml(self, Filename = None):\r
-        if Filename != None:\r
-            self.Dp = DistributionPackageClass()\r
-            \r
-            # Load to XML\r
-            self.Pkg = XmlParseFile(Filename)\r
-\r
-            # Parse Header information\r
-            Tmp = DistributionPackageHeaderXml()\r
-            DistributionPackageHeader = Tmp.FromXml(XmlNode(self.Pkg, '/DistributionPackage/DistributionHeader'), 'DistributionHeader')\r
-            self.Dp.Header = DistributionPackageHeader\r
-            \r
-            # Parse each PackageSurfaceArea\r
-            for Item in XmlList(self.Pkg, '/DistributionPackage/PackageSurfaceArea'):\r
-                Psa = PackageSurfaceAreaXml()\r
-                Package = Psa.FromXml(Item, 'PackageSurfaceArea')\r
-                self.Dp.PackageSurfaceArea[(Package.PackageHeader.Guid, Package.PackageHeader.Version, Package.PackageHeader.CombinePath)] = Package\r
-            \r
-            # Parse each ModuleSurfaceArea\r
-            for Item in XmlList(self.Pkg, '/DistributionPackage/ModuleSurfaceArea'):\r
-                Msa = ModuleSurfaceAreaXml()\r
-                Module = Msa.FromXml(Item, 'ModuleSurfaceArea')\r
-                self.Dp.ModuleSurfaceArea[(Module.ModuleHeader.Guid, Module.ModuleHeader.Version, Module.ModuleHeader.CombinePath)] = Module\r
-                \r
-            # Parse Tools\r
-            Tmp = MiscellaneousFileXml()\r
-            self.Dp.Tools = Tmp.FromXml2(XmlNode(self.Pkg, '/DistributionPackage/Tools'), 'Tools')\r
-            \r
-            # Parse MiscFiles\r
-            Tmp = MiscellaneousFileXml()\r
-            self.Dp.MiscellaneousFiles = Tmp.FromXml2(XmlNode(self.Pkg, '/DistributionPackage/MiscellaneousFiles'), 'MiscellaneousFiles')\r
-            \r
-            return self.Dp\r
-            \r
-    def ToXml(self, Dp):\r
-        if Dp != None:\r
-            # Parse DistributionPackageHeader\r
-            Attrs = [['xmlns', 'http://www.uefi.org/2008/2.1'], \r
-                     ['xmlns:xsi', 'http:/www.w3.org/2001/XMLSchema-instance'],\r
-                     ]\r
-            Root = CreateXmlElement('DistributionPackage', '', [], Attrs)\r
-            \r
-            Tmp = DistributionPackageHeaderXml()\r
-            Root.appendChild(Tmp.ToXml(Dp.Header, 'DistributionHeader'))\r
-            \r
-            # Parse each PackageSurfaceArea\r
-            for Package in Dp.PackageSurfaceArea.values():\r
-                Psa = PackageSurfaceAreaXml()\r
-                DomPackage = Psa.ToXml(Package)\r
-                Root.appendChild(DomPackage)\r
-            \r
-            # Parse each ModuleSurfaceArea\r
-            for Module in Dp.ModuleSurfaceArea.values():\r
-                Msa = ModuleSurfaceAreaXml()\r
-                DomModule = Msa.ToXml(Module)\r
-                Root.appendChild(DomModule)\r
-                \r
-            # Parse Tools\r
-            Tmp = MiscellaneousFileXml()\r
-            #Tools = Tmp.FromXml2(XmlNode(self.Pkg, '/DistributionPackage/Tools'), 'Tools')\r
-            Root.appendChild(Tmp.ToXml2(Dp.Tools, 'Tools'))\r
-            \r
-            # Parse MiscFiles\r
-            Tmp = MiscellaneousFileXml()\r
-            #Tools = Tmp.FromXml2(XmlNode(self.Pkg, '/DistributionPackage/MiscellaneousFiles'), 'MiscellaneousFiles')\r
-            Root.appendChild(Tmp.ToXml2(Dp.MiscellaneousFiles, 'MiscellaneousFiles'))\r
-            \r
-            return Root.toprettyxml(indent = '  ')\r
-        \r
-        return ''\r
-\r
-if __name__ == '__main__':\r
-    M = DistributionPackageXml()\r
-    M.FromXml('C:\Test.xml')\r
-    print M.ToXml(M.Dp)\r
-    
\ No newline at end of file
diff --git a/BaseTools/Source/Python/Common/XmlRoutines.py b/BaseTools/Source/Python/Common/XmlRoutines.py
deleted file mode 100644 (file)
index 5823067..0000000
+++ /dev/null
@@ -1,228 +0,0 @@
-## @file\r
-# This is an XML API that uses a syntax similar to XPath, but it is written in\r
-# standard python so that no extra python packages are required to use it.\r
-#\r
-# Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>\r
-# This program and the accompanying materials\r
-# are licensed and made available under the terms and conditions of the BSD License\r
-# which accompanies this distribution.  The full text of the license may be found at\r
-# http://opensource.org/licenses/bsd-license.php\r
-#\r
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-#\r
-\r
-##\r
-# Import Modules\r
-#\r
-import xml.dom.minidom\r
-\r
-## Create a element of XML\r
-#\r
-# @param Name\r
-# @param String\r
-# @param NodeList\r
-# @param AttributeList\r
-#\r
-# @revel Element\r
-#\r
-def CreateXmlElement(Name, String, NodeList, AttributeList):\r
-    Doc = xml.dom.minidom.Document()\r
-    Element = Doc.createElement(Name)\r
-    if String != '' and String != None:\r
-        Element.appendChild(Doc.createTextNode(String))\r
-    \r
-    for Item in NodeList:\r
-        if type(Item) == type([]):\r
-            Key = Item[0]\r
-            Value = Item[1]\r
-            if Key != '' and Key != None and Value != '' and Value != None:\r
-                Node = Doc.createElement(Key)\r
-                Node.appendChild(Doc.createTextNode(Value))\r
-                Element.appendChild(Node)\r
-        else:\r
-            Element.appendChild(Item)\r
-    for Item in AttributeList:\r
-        Key = Item[0]\r
-        Value = Item[1]\r
-        if Key != '' and Key != None and Value != '' and Value != None:\r
-            Element.setAttribute(Key, Value)\r
-    \r
-    return Element\r
-\r
-## Get a list of XML nodes using XPath style syntax.\r
-#\r
-# Return a list of XML DOM nodes from the root Dom specified by XPath String.\r
-# If the input Dom or String is not valid, then an empty list is returned.\r
-#\r
-# @param  Dom                The root XML DOM node.\r
-# @param  String             A XPath style path.\r
-#\r
-# @revel  Nodes              A list of XML nodes matching XPath style Sting.\r
-#\r
-def XmlList(Dom, String):\r
-    if String == None or String == "" or Dom == None or Dom == "":\r
-        return []\r
-    if Dom.nodeType == Dom.DOCUMENT_NODE:\r
-        Dom = Dom.documentElement\r
-    if String[0] == "/":\r
-        String = String[1:]\r
-    TagList = String.split('/')\r
-    Nodes = [Dom]\r
-    Index = 0\r
-    End = len(TagList) - 1\r
-    while Index <= End:\r
-        ChildNodes = []\r
-        for Node in Nodes:\r
-            if Node.nodeType == Node.ELEMENT_NODE and Node.tagName == TagList[Index]:\r
-                if Index < End:\r
-                    ChildNodes.extend(Node.childNodes)\r
-                else:\r
-                    ChildNodes.append(Node)\r
-        Nodes = ChildNodes\r
-        ChildNodes = []\r
-        Index += 1\r
-\r
-    return Nodes\r
-\r
-\r
-## Get a single XML node using XPath style syntax.\r
-#\r
-# Return a single XML DOM node from the root Dom specified by XPath String.\r
-# If the input Dom or String is not valid, then an empty string is returned.\r
-#\r
-# @param  Dom                The root XML DOM node.\r
-# @param  String             A XPath style path.\r
-#\r
-# @revel  Node               A single XML node matching XPath style Sting.\r
-#\r
-def XmlNode(Dom, String):\r
-    if String == None or String == ""  or Dom == None or Dom == "":\r
-        return ""\r
-    if Dom.nodeType == Dom.DOCUMENT_NODE:\r
-        Dom = Dom.documentElement\r
-    if String[0] == "/":\r
-        String = String[1:]\r
-    TagList = String.split('/')\r
-    Index = 0\r
-    End = len(TagList) - 1\r
-    ChildNodes = [Dom]\r
-    while Index <= End:\r
-        for Node in ChildNodes:\r
-            if Node.nodeType == Node.ELEMENT_NODE and Node.tagName == TagList[Index]:\r
-                if Index < End:\r
-                    ChildNodes = Node.childNodes\r
-                else:\r
-                    return Node\r
-                break\r
-        Index += 1\r
-    return ""\r
-\r
-\r
-## Get a single XML element using XPath style syntax.\r
-#\r
-# Return a single XML element from the root Dom specified by XPath String.\r
-# If the input Dom or String is not valid, then an empty string is returned.\r
-#\r
-# @param  Dom                The root XML DOM object.\r
-# @param  Strin              A XPath style path.\r
-#\r
-# @revel  Element            An XML element matching XPath style Sting.\r
-#\r
-def XmlElement(Dom, String):\r
-    try:\r
-        return XmlNode(Dom, String).firstChild.data.strip()\r
-    except:\r
-        return ""\r
-\r
-\r
-## Get a single XML element of the current node.\r
-#\r
-# Return a single XML element specified by the current root Dom.\r
-# If the input Dom is not valid, then an empty string is returned.\r
-#\r
-# @param  Dom                The root XML DOM object.\r
-#\r
-# @revel  Element            An XML element in current root Dom.\r
-#\r
-def XmlElementData(Dom):\r
-    try:\r
-        return Dom.firstChild.data.strip()\r
-    except:\r
-        return ""\r
-\r
-\r
-## Get a list of XML elements using XPath style syntax.\r
-#\r
-# Return a list of XML elements from the root Dom specified by XPath String.\r
-# If the input Dom or String is not valid, then an empty list is returned.\r
-#\r
-# @param  Dom                The root XML DOM object.\r
-# @param  String             A XPath style path.\r
-#\r
-# @revel  Elements           A list of XML elements matching XPath style Sting.\r
-#\r
-def XmlElementList(Dom, String):\r
-    return map(XmlElementData, XmlList(Dom, String))\r
-\r
-\r
-## Get the XML attribute of the current node.\r
-#\r
-# Return a single XML attribute named Attribute from the current root Dom.\r
-# If the input Dom or Attribute is not valid, then an empty string is returned.\r
-#\r
-# @param  Dom                The root XML DOM object.\r
-# @param  Attribute          The name of Attribute.\r
-#\r
-# @revel  Element            A single XML element matching XPath style Sting.\r
-#\r
-def XmlAttribute(Dom, Attribute):\r
-    try:\r
-        return Dom.getAttribute(Attribute).strip()\r
-    except:\r
-        return ''\r
-\r
-\r
-## Get the XML node name of the current node.\r
-#\r
-# Return a single XML node name from the current root Dom.\r
-# If the input Dom is not valid, then an empty string is returned.\r
-#\r
-# @param  Dom                The root XML DOM object.\r
-#\r
-# @revel  Element            A single XML element matching XPath style Sting.\r
-#\r
-def XmlNodeName(Dom):\r
-    try:\r
-        return Dom.nodeName.strip()\r
-    except:\r
-        return ''\r
-\r
-## Parse an XML file.\r
-#\r
-# Parse the input XML file named FileName and return a XML DOM it stands for.\r
-# If the input File is not a valid XML file, then an empty string is returned.\r
-#\r
-# @param  FileName           The XML file name.\r
-#\r
-# @revel  Dom                The Dom object achieved from the XML file.\r
-#\r
-def XmlParseFile(FileName):\r
-    try:\r
-        XmlFile = open(FileName)\r
-        Dom = xml.dom.minidom.parse(XmlFile)\r
-        XmlFile.close()\r
-        return Dom\r
-    except Exception, X:\r
-        print X\r
-        return ""\r
-\r
-# This acts like the main() function for the script, unless it is 'import'ed\r
-# into another script.\r
-if __name__ == '__main__':\r
-    # Nothing to do here. Could do some unit tests.\r
-    A = CreateXmlElement('AAA', 'CCC',  [['AAA', '111'], ['BBB', '222']], [['A', '1'], ['B', '2']])\r
-    B = CreateXmlElement('ZZZ', 'CCC',  [['XXX', '111'], ['YYY', '222']], [['A', '1'], ['B', '2']])\r
-    C = CreateXmlList('DDD', 'EEE', [A, B], ['FFF', 'GGG'])\r
-    print C.toprettyxml(indent = " ")\r
-    pass\r
diff --git a/BaseTools/Source/Python/CommonDataClass/DistributionPackageClass.py b/BaseTools/Source/Python/CommonDataClass/DistributionPackageClass.py
deleted file mode 100644 (file)
index 8f12026..0000000
+++ /dev/null
@@ -1,158 +0,0 @@
-## @file\r
-# This file is used to define a class object to describe a distribution package\r
-#\r
-# Copyright (c) 2008, Intel Corporation. All rights reserved.<BR>\r
-# This program and the accompanying materials\r
-# are licensed and made available under the terms and conditions of the BSD License\r
-# which accompanies this distribution.    The full text of the license may be found at\r
-# http://opensource.org/licenses/bsd-license.php\r
-#\r
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-\r
-##\r
-# Import Modules\r
-#\r
-import os.path\r
-from CommonClass import *\r
-from Common.Misc import sdict\r
-from Common.Misc import GetFiles\r
-from Common.DecClassObjectLight import Dec\r
-from Common.InfClassObjectLight import Inf\r
-from Common.XmlParser import *\r
-\r
-## DistributionPackageHeaderClass\r
-#\r
-class DistributionPackageHeaderClass(IdentificationClass, CommonHeaderClass):\r
-    def __init__(self):\r
-        IdentificationClass.__init__(self)\r
-        CommonHeaderClass.__init__(self)\r
-        self.ReadOnly = 'False'\r
-        self.RePackage = 'True'\r
-        self.Vendor = ''\r
-        self.Date = ''\r
-        self.Signature = 'Md5Sum'\r
-        self.XmlSpecification = ''\r
-\r
-## DistributionPackageClass\r
-#\r
-#\r
-class DistributionPackageClass(object):\r
-    def __init__(self):\r
-        self.Header = DistributionPackageHeaderClass()\r
-        self.PackageSurfaceArea = sdict() # {(Guid, Version, Path) : PackageObj}\r
-        self.ModuleSurfaceArea = sdict()  # {(Guid, Version, Path) : ModuleObj}\r
-        self.Tools = MiscFileClass()\r
-        self.MiscellaneousFiles = MiscFileClass()\r
-        self.UserExtensions = []\r
-    \r
-    ## Get all included packages and modules for a distribution package\r
-    # \r
-    # @param WorkspaceDir:  WorkspaceDir\r
-    # @param PackageList:   A list of all packages\r
-    # @param ModuleList:    A list of all modules\r
-    #\r
-    def GetDistributionPackage(self, WorkspaceDir, PackageList, ModuleList):\r
-        AllGuidVersionDict = {}\r
-        # Get Packages\r
-        if PackageList:\r
-            for PackageFile in PackageList:\r
-                PackageFileFullPath = os.path.normpath(os.path.join(WorkspaceDir, PackageFile))\r
-                DecObj = Dec(PackageFileFullPath, True, WorkspaceDir)\r
-                PackageObj = DecObj.Package\r
-                AllGuidVersionDict[PackageFileFullPath] = [PackageObj.PackageHeader.Guid, PackageObj.PackageHeader.Version]\r
-                \r
-                # Parser inf file one bye one\r
-                for File in PackageObj.MiscFiles.Files:\r
-                    Filename = os.path.normpath(os.path.join(PackageObj.PackageHeader.RelaPath, File.Filename))\r
-                    (Name, ExtName) = os.path.splitext(Filename)\r
-                    if ExtName.upper() == '.INF':\r
-                        InfObj = Inf(Filename, True, WorkspaceDir, DecObj.Identification.PackagePath)\r
-                        ModuleObj = InfObj.Module\r
-                        AllGuidVersionDict[File] = [ModuleObj.ModuleHeader.Guid, ModuleObj.ModuleHeader.Version]\r
-                        # Find and update Guid/Version of LibraryClass\r
-                        for Item in ModuleObj.LibraryClasses:\r
-                            if Item.RecommendedInstance:\r
-                                LibClassIns = os.path.normpath(os.path.join(WorkspaceDir, Item.RecommendedInstance))\r
-                                Guid, Version = '', ''\r
-                                if LibClassIns in AllGuidVersionDict:\r
-                                    Guid = AllGuidVersionDict[LibClassIns][0]\r
-                                    Version = AllGuidVersionDict[LibClassIns][1]\r
-                                else:\r
-                                    Lib = Inf(LibClassIns, True, WorkspaceDir)\r
-                                    Guid = Lib.Module.ModuleHeader.Guid\r
-                                    Version = Lib.Module.ModuleHeader.Version\r
-                                    AllGuidVersionDict[LibClassIns] = [Guid, Version]\r
-                                Item.RecommendedInstanceGuid = Guid\r
-                                Item.RecommendedInstanceVersion = Version\r
-                        # Find and update Guid/Version of \r
-                        for Item in ModuleObj.PackageDependencies:\r
-                            if Item.FilePath:\r
-                                PackageFilePath = os.path.normpath(os.path.join(WorkspaceDir, Item.FilePath))\r
-                                Guid, Version = '', ''\r
-                                if PackageFilePath in AllGuidVersionDict:\r
-                                    Guid = AllGuidVersionDict[PackageFilePath][0]\r
-                                    Version = AllGuidVersionDict[PackageFilePath][1]\r
-                                else:\r
-                                    PackageDependencies = Dec(PackageFilePath, True, WorkspaceDir)\r
-                                    Guid = PackageDependencies.Package.PackageHeader.Guid\r
-                                    Version = PackageDependencies.Package.PackageHeader.Version\r
-                                    AllGuidVersionDict[PackageFilePath] = [Guid, Version]\r
-                                Item.PackageGuid = Guid\r
-                                Item.PackageVersion = Version\r
-\r
-                        # Add module to package\r
-                        PackageObj.Modules[(ModuleObj.ModuleHeader.Guid, ModuleObj.ModuleHeader.Version, ModuleObj.ModuleHeader.CombinePath)] = ModuleObj\r
-                self.PackageSurfaceArea[(PackageObj.PackageHeader.Guid, PackageObj.PackageHeader.Version, PackageObj.PackageHeader.CombinePath)] = PackageObj\r
-\r
-        # Get Modules\r
-        if ModuleList:\r
-            for ModuleFile in ModuleList:\r
-                ModuleFileFullPath = os.path.normpath(os.path.join(WorkspaceDir, ModuleFile))\r
-                InfObj = Inf(ModuleFileFullPath, True, WorkspaceDir)\r
-                ModuleObj = InfObj.Module\r
-                AllGuidVersionDict[ModuleFileFullPath] = [ModuleObj.ModuleHeader.Guid, ModuleObj.ModuleHeader.Version]\r
-                # Find and update Guid/Version of LibraryClass\r
-                for Item in ModuleObj.LibraryClasses:\r
-                    if Item.RecommendedInstance:\r
-                        LibClassIns = os.path.normpath(os.path.join(WorkspaceDir, Item.RecommendedInstance))\r
-                        Guid, Version = '', ''\r
-                        if LibClassIns in AllGuidVersionDict:\r
-                            Guid = AllGuidVersionDict[LibClassIns][0]\r
-                            Version = AllGuidVersionDict[LibClassIns][1]\r
-                        else:\r
-                            Lib = Inf(LibClassIns, True, WorkspaceDir)\r
-                            Guid = Lib.Module.ModuleHeader.Guid\r
-                            Version = Lib.Module.ModuleHeader.Version\r
-                            AllGuidVersionDict[LibClassIns] = [Guid, Version]\r
-                        Item.RecommendedInstanceGuid = Guid\r
-                        Item.RecommendedInstanceVersion = Version\r
-                # Find and update Guid/Version of \r
-                for Item in ModuleObj.PackageDependencies:\r
-                    if Item.FilePath:\r
-                        PackageFilePath = os.path.normpath(os.path.join(WorkspaceDir, Item.FilePath))\r
-                        Guid, Version = '', ''\r
-                        if PackageFilePath in AllGuidVersionDict:\r
-                            Guid = AllGuidVersionDict[PackageFilePath][0]\r
-                            Version = AllGuidVersionDict[PackageFilePath][1]\r
-                        else:\r
-                            PackageDependencies = Dec(PackageFilePath, True, WorkspaceDir)\r
-                            Guid = PackageDependencies.Package.PackageHeader.Guid\r
-                            Version = PackageDependencies.Package.PackageHeader.Version\r
-                            AllGuidVersionDict[PackageFilePath] = [Guid, Version]\r
-                        Item.PackageGuid = Guid\r
-                        Item.PackageVersion = Version\r
-                self.ModuleSurfaceArea[(ModuleObj.ModuleHeader.Guid, ModuleObj.ModuleHeader.Version, ModuleObj.ModuleHeader.CombinePath)] = ModuleObj\r
-\r
-##\r
-#\r
-# This acts like the main() function for the script, unless it is 'import'ed into another\r
-# script.\r
-#\r
-if __name__ == '__main__':\r
-    D = DistributionPackageClass()\r
-    D.GetDistributionPackage(os.getenv('WORKSPACE'), ['MdePkg/MdePkg.dec', 'TianoModulePkg/TianoModulePkg.dec'], ['MdeModulePkg/Application/HelloWorld/HelloWorld.inf'])\r
-    Xml = DistributionPackageXml()\r
-    print Xml.ToXml(D)\r
-    E = Xml.FromXml('C:\\2.xml')\r
-    #print Xml.ToXml(E)\r
index cd47b805e5e77c48c600155503417ee02e1be89b..6f5f9fd0b5570e4318db377c5f78f023a900319c 100644 (file)
@@ -580,6 +580,7 @@ class Check(object):
             pass\r
 \r
     # Check whether the unnecessary inclusion of library classes in the Inf file\r
+    # Check whether the unnecessary duplication of library classe names in the DSC file\r
     def MetaDataFileCheckLibraryNoUse(self):\r
         if EccGlobalData.gConfig.MetaDataFileCheckLibraryNoUse == '1' or EccGlobalData.gConfig.MetaDataFileCheckAll == '1' or EccGlobalData.gConfig.CheckAll == '1':\r
             EdkLogger.quiet("Checking for library instance not used ...")\r
@@ -588,7 +589,20 @@ class Check(object):
             for Record in RecordSet:\r
                 if not EccGlobalData.gException.IsException(ERROR_META_DATA_FILE_CHECK_LIBRARY_NO_USE, Record[1]):\r
                     EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_LIBRARY_NO_USE, OtherMsg="The Library Class [%s] is not used in any platform" % (Record[1]), BelongsToTable='Inf', BelongsToItem=Record[0])\r
-\r
+            SqlCommand = """\r
+                         select A.ID, A.Value1, A.BelongsToFile, A.StartLine, B.StartLine from Dsc as A left join Dsc as B\r
+                         where A.Model = %s and B.Model = %s and A.Value3 = B.Value3 and A.Arch = B.Arch and A.ID <> B.ID\r
+                         and A.Value1 = B.Value1 and A.StartLine <> B.StartLine and B.BelongsToFile = A.BelongsToFile""" \\r
+                            % (MODEL_EFI_LIBRARY_CLASS, MODEL_EFI_LIBRARY_CLASS)\r
+            RecordSet = EccGlobalData.gDb.TblDsc.Exec(SqlCommand)\r
+            for Record in RecordSet:\r
+                if Record[3] and Record[4] and Record[3] != Record[4]:\r
+                    SqlCommand = """select FullPath from File where ID = %s""" % (Record[2])\r
+                    FilePathList = EccGlobalData.gDb.TblFile.Exec(SqlCommand)\r
+                    for FilePath in FilePathList:\r
+                        if not EccGlobalData.gException.IsException(ERROR_META_DATA_FILE_CHECK_LIBRARY_NAME_DUPLICATE, Record[1]):\r
+                            EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_LIBRARY_NAME_DUPLICATE, OtherMsg="The Library Class [%s] is duplicated in '%s' line %s and line %s." % (Record[1], FilePath, Record[3], Record[4]), BelongsToTable='Dsc', BelongsToItem=Record[0])\r
+                                                \r
     # Check whether an Inf file is specified in the FDF file, but not in the Dsc file, then the Inf file must be for a Binary module only\r
     def MetaDataFileCheckBinaryInfInFdf(self):\r
         if EccGlobalData.gConfig.MetaDataFileCheckBinaryInfInFdf == '1' or EccGlobalData.gConfig.MetaDataFileCheckAll == '1' or EccGlobalData.gConfig.CheckAll == '1':\r
index 48810e466c4785602ee9465c0a72eb656821d255..4039f57bc6485f81b5e45302f7e58a49da515873 100644 (file)
@@ -94,6 +94,7 @@ ERROR_META_DATA_FILE_CHECK_DUPLICATE_PPI = 10013
 ERROR_META_DATA_FILE_CHECK_MODULE_FILE_NO_USE = 10014\r
 ERROR_META_DATA_FILE_CHECK_PCD_TYPE = 10015\r
 ERROR_META_DATA_FILE_CHECK_MODULE_FILE_GUID_DUPLICATION = 10016\r
+ERROR_META_DATA_FILE_CHECK_LIBRARY_NAME_DUPLICATE = 10017\r
 \r
 ERROR_SPELLING_CHECK_ALL = 11000\r
 \r
@@ -171,6 +172,7 @@ gEccErrorMessage = {
     ERROR_META_DATA_FILE_CHECK_LIBRARY_INSTANCE_DEPENDENT : "A library instance must be defined for all dependent library classes",\r
     ERROR_META_DATA_FILE_CHECK_LIBRARY_INSTANCE_ORDER : "The library Instances specified by the LibraryClasses sections should be listed in order of dependencies",\r
     ERROR_META_DATA_FILE_CHECK_LIBRARY_NO_USE : "There should be no unnecessary inclusion of library classes in the INF file",\r
+    ERROR_META_DATA_FILE_CHECK_LIBRARY_NAME_DUPLICATE : "Duplicate Library Class Name found",\r
     ERROR_META_DATA_FILE_CHECK_BINARY_INF_IN_FDF : "An INF file is specified in the FDF file, but not in the DSC file, therefore the INF file must be for a Binary module only",\r
     ERROR_META_DATA_FILE_CHECK_PCD_DUPLICATE : "Duplicate PCDs found",\r
     ERROR_META_DATA_FILE_CHECK_PCD_FLASH : "PCD settings in the FDF file should only be related to flash",\r
index ff8736059f77f9e42eae99d2c2c5d55ede887a8b..ffbb62b3b0298d160707cc17a553a50d7f03f17f 100644 (file)
@@ -14,7 +14,7 @@
 ##\r
 # Import Modules\r
 #\r
-from Common.XmlRoutines import *\r
+from Xml.XmlRoutines import *\r
 import os.path\r
 \r
 # ExceptionXml to parse Exception Node of XML file\r
diff --git a/BaseTools/Source/Python/Ecc/Xml/XmlRoutines.py b/BaseTools/Source/Python/Ecc/Xml/XmlRoutines.py
new file mode 100644 (file)
index 0000000..5823067
--- /dev/null
@@ -0,0 +1,228 @@
+## @file\r
+# This is an XML API that uses a syntax similar to XPath, but it is written in\r
+# standard python so that no extra python packages are required to use it.\r
+#\r
+# Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>\r
+# This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution.  The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+\r
+##\r
+# Import Modules\r
+#\r
+import xml.dom.minidom\r
+\r
+## Create a element of XML\r
+#\r
+# @param Name\r
+# @param String\r
+# @param NodeList\r
+# @param AttributeList\r
+#\r
+# @revel Element\r
+#\r
+def CreateXmlElement(Name, String, NodeList, AttributeList):\r
+    Doc = xml.dom.minidom.Document()\r
+    Element = Doc.createElement(Name)\r
+    if String != '' and String != None:\r
+        Element.appendChild(Doc.createTextNode(String))\r
+    \r
+    for Item in NodeList:\r
+        if type(Item) == type([]):\r
+            Key = Item[0]\r
+            Value = Item[1]\r
+            if Key != '' and Key != None and Value != '' and Value != None:\r
+                Node = Doc.createElement(Key)\r
+                Node.appendChild(Doc.createTextNode(Value))\r
+                Element.appendChild(Node)\r
+        else:\r
+            Element.appendChild(Item)\r
+    for Item in AttributeList:\r
+        Key = Item[0]\r
+        Value = Item[1]\r
+        if Key != '' and Key != None and Value != '' and Value != None:\r
+            Element.setAttribute(Key, Value)\r
+    \r
+    return Element\r
+\r
+## Get a list of XML nodes using XPath style syntax.\r
+#\r
+# Return a list of XML DOM nodes from the root Dom specified by XPath String.\r
+# If the input Dom or String is not valid, then an empty list is returned.\r
+#\r
+# @param  Dom                The root XML DOM node.\r
+# @param  String             A XPath style path.\r
+#\r
+# @revel  Nodes              A list of XML nodes matching XPath style Sting.\r
+#\r
+def XmlList(Dom, String):\r
+    if String == None or String == "" or Dom == None or Dom == "":\r
+        return []\r
+    if Dom.nodeType == Dom.DOCUMENT_NODE:\r
+        Dom = Dom.documentElement\r
+    if String[0] == "/":\r
+        String = String[1:]\r
+    TagList = String.split('/')\r
+    Nodes = [Dom]\r
+    Index = 0\r
+    End = len(TagList) - 1\r
+    while Index <= End:\r
+        ChildNodes = []\r
+        for Node in Nodes:\r
+            if Node.nodeType == Node.ELEMENT_NODE and Node.tagName == TagList[Index]:\r
+                if Index < End:\r
+                    ChildNodes.extend(Node.childNodes)\r
+                else:\r
+                    ChildNodes.append(Node)\r
+        Nodes = ChildNodes\r
+        ChildNodes = []\r
+        Index += 1\r
+\r
+    return Nodes\r
+\r
+\r
+## Get a single XML node using XPath style syntax.\r
+#\r
+# Return a single XML DOM node from the root Dom specified by XPath String.\r
+# If the input Dom or String is not valid, then an empty string is returned.\r
+#\r
+# @param  Dom                The root XML DOM node.\r
+# @param  String             A XPath style path.\r
+#\r
+# @revel  Node               A single XML node matching XPath style Sting.\r
+#\r
+def XmlNode(Dom, String):\r
+    if String == None or String == ""  or Dom == None or Dom == "":\r
+        return ""\r
+    if Dom.nodeType == Dom.DOCUMENT_NODE:\r
+        Dom = Dom.documentElement\r
+    if String[0] == "/":\r
+        String = String[1:]\r
+    TagList = String.split('/')\r
+    Index = 0\r
+    End = len(TagList) - 1\r
+    ChildNodes = [Dom]\r
+    while Index <= End:\r
+        for Node in ChildNodes:\r
+            if Node.nodeType == Node.ELEMENT_NODE and Node.tagName == TagList[Index]:\r
+                if Index < End:\r
+                    ChildNodes = Node.childNodes\r
+                else:\r
+                    return Node\r
+                break\r
+        Index += 1\r
+    return ""\r
+\r
+\r
+## Get a single XML element using XPath style syntax.\r
+#\r
+# Return a single XML element from the root Dom specified by XPath String.\r
+# If the input Dom or String is not valid, then an empty string is returned.\r
+#\r
+# @param  Dom                The root XML DOM object.\r
+# @param  Strin              A XPath style path.\r
+#\r
+# @revel  Element            An XML element matching XPath style Sting.\r
+#\r
+def XmlElement(Dom, String):\r
+    try:\r
+        return XmlNode(Dom, String).firstChild.data.strip()\r
+    except:\r
+        return ""\r
+\r
+\r
+## Get a single XML element of the current node.\r
+#\r
+# Return a single XML element specified by the current root Dom.\r
+# If the input Dom is not valid, then an empty string is returned.\r
+#\r
+# @param  Dom                The root XML DOM object.\r
+#\r
+# @revel  Element            An XML element in current root Dom.\r
+#\r
+def XmlElementData(Dom):\r
+    try:\r
+        return Dom.firstChild.data.strip()\r
+    except:\r
+        return ""\r
+\r
+\r
+## Get a list of XML elements using XPath style syntax.\r
+#\r
+# Return a list of XML elements from the root Dom specified by XPath String.\r
+# If the input Dom or String is not valid, then an empty list is returned.\r
+#\r
+# @param  Dom                The root XML DOM object.\r
+# @param  String             A XPath style path.\r
+#\r
+# @revel  Elements           A list of XML elements matching XPath style Sting.\r
+#\r
+def XmlElementList(Dom, String):\r
+    return map(XmlElementData, XmlList(Dom, String))\r
+\r
+\r
+## Get the XML attribute of the current node.\r
+#\r
+# Return a single XML attribute named Attribute from the current root Dom.\r
+# If the input Dom or Attribute is not valid, then an empty string is returned.\r
+#\r
+# @param  Dom                The root XML DOM object.\r
+# @param  Attribute          The name of Attribute.\r
+#\r
+# @revel  Element            A single XML element matching XPath style Sting.\r
+#\r
+def XmlAttribute(Dom, Attribute):\r
+    try:\r
+        return Dom.getAttribute(Attribute).strip()\r
+    except:\r
+        return ''\r
+\r
+\r
+## Get the XML node name of the current node.\r
+#\r
+# Return a single XML node name from the current root Dom.\r
+# If the input Dom is not valid, then an empty string is returned.\r
+#\r
+# @param  Dom                The root XML DOM object.\r
+#\r
+# @revel  Element            A single XML element matching XPath style Sting.\r
+#\r
+def XmlNodeName(Dom):\r
+    try:\r
+        return Dom.nodeName.strip()\r
+    except:\r
+        return ''\r
+\r
+## Parse an XML file.\r
+#\r
+# Parse the input XML file named FileName and return a XML DOM it stands for.\r
+# If the input File is not a valid XML file, then an empty string is returned.\r
+#\r
+# @param  FileName           The XML file name.\r
+#\r
+# @revel  Dom                The Dom object achieved from the XML file.\r
+#\r
+def XmlParseFile(FileName):\r
+    try:\r
+        XmlFile = open(FileName)\r
+        Dom = xml.dom.minidom.parse(XmlFile)\r
+        XmlFile.close()\r
+        return Dom\r
+    except Exception, X:\r
+        print X\r
+        return ""\r
+\r
+# This acts like the main() function for the script, unless it is 'import'ed\r
+# into another script.\r
+if __name__ == '__main__':\r
+    # Nothing to do here. Could do some unit tests.\r
+    A = CreateXmlElement('AAA', 'CCC',  [['AAA', '111'], ['BBB', '222']], [['A', '1'], ['B', '2']])\r
+    B = CreateXmlElement('ZZZ', 'CCC',  [['XXX', '111'], ['YYY', '222']], [['A', '1'], ['B', '2']])\r
+    C = CreateXmlList('DDD', 'EEE', [A, B], ['FFF', 'GGG'])\r
+    print C.toprettyxml(indent = " ")\r
+    pass\r
diff --git a/BaseTools/Source/Python/Ecc/Xml/__init__.py b/BaseTools/Source/Python/Ecc/Xml/__init__.py
new file mode 100644 (file)
index 0000000..5d268d9
--- /dev/null
@@ -0,0 +1,20 @@
+## @file
+# Python 'Library' package initialization file.
+#
+# This file is required to make Python interpreter treat the directory
+# as containing package.
+#
+# Copyright (c) 2011, 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.
+#
+
+'''
+Xml
+'''
\ No newline at end of file
index 358215d66206dfb620616f65b3464f9c09885ee4..d3d50b638e771624b6f44613ee871999c22ab62e 100644 (file)
@@ -50,6 +50,7 @@ from Common.String import NormPath
 import Common.GlobalData as GlobalData\r
 from Common.Expression import *\r
 from Common import GlobalData\r
+from Common.String import ReplaceMacro\r
 \r
 import re\r
 import os\r
@@ -528,25 +529,35 @@ class FdfParser:
                 if not self.__GetNextToken():\r
                     raise Warning("expected include file name", self.FileName, self.CurrentLineNumber)\r
                 IncFileName = self.__Token\r
-                if not os.path.isabs(IncFileName):\r
-                    if IncFileName.startswith('$(WORKSPACE)'):\r
-                        Str = IncFileName.replace('$(WORKSPACE)', os.environ.get('WORKSPACE'))\r
-                        if os.path.exists(Str):\r
-                            if not os.path.isabs(Str):\r
-                                Str = os.path.abspath(Str)\r
-                        IncFileName = Str\r
-                    else:\r
-                        # file is in the same dir with FDF file\r
-                        FullFdf = self.FileName\r
-                        if not os.path.isabs(self.FileName):\r
-                            FullFdf = os.path.join(os.environ.get('WORKSPACE'), self.FileName)\r
-\r
-                        IncFileName = os.path.join(os.path.dirname(FullFdf), IncFileName)\r
-\r
-                if not os.path.exists(os.path.normpath(IncFileName)):\r
-                    raise Warning("Include file not exists", self.FileName, self.CurrentLineNumber)\r
+                __IncludeMacros = {}\r
+                __IncludeMacros['WORKSPACE'] = InputMacroDict['WORKSPACE']\r
+                __IncludeMacros['ECP_SOURCE'] = InputMacroDict['ECP_SOURCE']\r
+                __IncludeMacros['EFI_SOURCE'] = InputMacroDict['EFI_SOURCE']\r
+                __IncludeMacros['EDK_SOURCE'] = InputMacroDict['EDK_SOURCE']\r
+                \r
+                IncludedFile = NormPath(ReplaceMacro(IncFileName, __IncludeMacros, RaiseError=True))\r
+                #\r
+                # First search the include file under the same directory as FDF file\r
+                #\r
+                IncludedFile1 = PathClass(IncludedFile, os.path.dirname(self.FileName))\r
+                ErrorCode = IncludedFile1.Validate()[0]\r
+                if ErrorCode != 0:\r
+                    #\r
+                    # Then search the include file under the same directory as DSC file\r
+                    #\r
+                    IncludedFile1 = PathClass(IncludedFile, GenFdsGlobalVariable.ActivePlatform.Dir)\r
+                    ErrorCode = IncludedFile1.Validate()[0]\r
+                    if ErrorCode != 0:\r
+                        #\r
+                        # Also search file under the WORKSPACE directory\r
+                        #\r
+                        IncludedFile1 = PathClass(IncludedFile, GlobalData.gWorkspace)\r
+                        ErrorCode = IncludedFile1.Validate()[0]\r
+                        if ErrorCode != 0:\r
+                            raise Warning("The include file does not exist under below directories: \n%s\n%s\n%s\n"%(os.path.dirname(self.FileName), GenFdsGlobalVariable.ActivePlatform.Dir, GlobalData.gWorkspace), \r
+                                          self.FileName, self.CurrentLineNumber)\r
 \r
-                IncFileProfile = IncludeFileProfile(os.path.normpath(IncFileName))\r
+                IncFileProfile = IncludeFileProfile(IncludedFile1.Path)\r
 \r
                 CurrentLine = self.CurrentLineNumber\r
                 CurrentOffset = self.CurrentOffsetWithinLine\r
@@ -2942,6 +2953,9 @@ class FdfParser:
         if not self.__GetNextToken():\r
             raise Warning("expected FV name", self.FileName, self.CurrentLineNumber)\r
 \r
+        if self.__Token.upper() not in self.Profile.FvDict.keys():\r
+            raise Warning("FV name does not exist", self.FileName, self.CurrentLineNumber)\r
+\r
         CapsuleFv = CapsuleData.CapsuleFv()\r
         CapsuleFv.FvName = self.__Token\r
         CapsuleObj.CapsuleDataList.append(CapsuleFv)\r
@@ -2967,6 +2981,9 @@ class FdfParser:
         if not self.__GetNextToken():\r
             raise Warning("expected FD name", self.FileName, self.CurrentLineNumber)\r
 \r
+        if self.__Token.upper() not in self.Profile.FdDict.keys():\r
+            raise Warning("FD name does not exist", self.FileName, self.CurrentLineNumber)\r
+\r
         CapsuleFd = CapsuleData.CapsuleFd()\r
         CapsuleFd.FdName = self.__Token\r
         CapsuleObj.CapsuleDataList.append(CapsuleFd)\r
index f6890787ee20836c148b1610042a5de48e07ea97..a1a0a5e6391b1d1439ade80a7f0c0c028986c544 100644 (file)
@@ -27,7 +27,6 @@ COMMON_PYTHON=$(BASE_TOOLS_PATH)\Source\Python\Common\BuildToolError.py \
               $(BASE_TOOLS_PATH)\Source\Python\Common\Database.py \\r
               $(BASE_TOOLS_PATH)\Source\Python\Common\DataType.py \\r
               $(BASE_TOOLS_PATH)\Source\Python\Common\DecClassObject.py \\r
-              $(BASE_TOOLS_PATH)\Source\Python\Common\DecClassObjectLight.py \\r
               $(BASE_TOOLS_PATH)\Source\Python\Common\Dictionary.py \\r
               $(BASE_TOOLS_PATH)\Source\Python\Common\DscClassObject.py \\r
               $(BASE_TOOLS_PATH)\Source\Python\Common\EdkIIWorkspace.py \\r
@@ -38,7 +37,6 @@ COMMON_PYTHON=$(BASE_TOOLS_PATH)\Source\Python\Common\BuildToolError.py \
               $(BASE_TOOLS_PATH)\Source\Python\Common\GlobalData.py \\r
               $(BASE_TOOLS_PATH)\Source\Python\Common\Identification.py \\r
               $(BASE_TOOLS_PATH)\Source\Python\Common\InfClassObject.py \\r
-              $(BASE_TOOLS_PATH)\Source\Python\Common\InfClassObjectLight.py \\r
               $(BASE_TOOLS_PATH)\Source\Python\Common\MigrationUtilities.py \\r
               $(BASE_TOOLS_PATH)\Source\Python\Common\Misc.py \\r
               $(BASE_TOOLS_PATH)\Source\Python\Common\Parsing.py \\r
@@ -46,8 +44,6 @@ COMMON_PYTHON=$(BASE_TOOLS_PATH)\Source\Python\Common\BuildToolError.py \
               $(BASE_TOOLS_PATH)\Source\Python\Common\TargetTxtClassObject.py \\r
               $(BASE_TOOLS_PATH)\Source\Python\Common\ToolDefClassObject.py \\r
               $(BASE_TOOLS_PATH)\Source\Python\Common\VpdInfoFile.py \\r
-              $(BASE_TOOLS_PATH)\Source\Python\Common\XmlParser.py \\r
-              $(BASE_TOOLS_PATH)\Source\Python\Common\XmlRoutines.py \\r
               $(BASE_TOOLS_PATH)\Source\Python\Common\__init__.py \\r
               $(BASE_TOOLS_PATH)\Source\Python\Common\BuildVersion.py \\r
               $(BASE_TOOLS_PATH)\Source\Python\Workspace\BuildClassObject.py \\r
@@ -65,6 +61,7 @@ COMMON_PYTHON=$(BASE_TOOLS_PATH)\Source\Python\Common\BuildToolError.py \
               $(BASE_TOOLS_PATH)\Source\Python\Autogen\UniClassObject.py \\r
               $(BASE_TOOLS_PATH)\Source\Python\Autogen\__init__.py\r
 \r
+UPT_BUILDVERSION_PYTHON=$(BASE_TOOLS_PATH)\Source\Python\UPT\BuildVersion.py\r
               \r
 all: SetPythonPath $(APPLICATIONS)\r
 \r
@@ -104,7 +101,7 @@ $(BIN_DIR)\PatchPcdValue.exe: $(BASE_TOOLS_PATH)\Source\Python\PatchPcdValue\Pat
 $(BIN_DIR)\BPDG.exe: $(BASE_TOOLS_PATH)\Source\Python\BPDG\BPDG.py $(COMMON_PYTHON)\r
   @pushd . & @cd BPDG & @$(FREEZE) --include-modules=$(MODULES) --install-dir=$(BIN_DIR) BPDG.py & @popd\r
 \r
-$(BIN_DIR)\UPT.exe: $(BASE_TOOLS_PATH)\Source\Python\UPT\UPT.py $(BASE_TOOLS_PATH)\Source\Python\UPT\UPT.py $(COMMON_PYTHON)\r
+$(BIN_DIR)\UPT.exe: $(BASE_TOOLS_PATH)\Source\Python\UPT\UPT.py $(UPT_BUILDVERSION_PYTHON)\r
   @pushd . & @cd UPT & @$(FREEZE) --include-modules=$(MODULES) --install-dir=$(BIN_DIR) UPT.py & @popd\r
 \r
 clean:\r
index c5e9ee2f0d243370cdf89582eed3d004e9398e5a..34f6284a875062f54a63172b90e7d3621560422f 100644 (file)
@@ -37,7 +37,9 @@ gTypedefPattern = re.compile("^\s*typedef\s+struct(\s+\w+)?\s*[{]*$", re.MULTILI
 ## Regular expression for matching "#pragma pack"
 gPragmaPattern = re.compile("^\s*#pragma\s+pack", re.MULTILINE)
 ## Regular expression for matching HEX number
-gHexNumberPattern = re.compile("0[xX]([0-9a-fA-F]+)")
+gHexNumberPattern = re.compile("(0[xX])([0-9a-fA-F]+)U?")
+## Regular expression for matching decimal number with 'U' postfix
+gDecNumberPattern = re.compile("([0-9]+)U")
 ## Regular expression for matching "Include ()" in asl file
 gAslIncludePattern = re.compile("^(\s*)[iI]nclude\s*\(\"?([^\"\(\)]+)\"\)", re.MULTILINE)
 ## Regular expression for matching C style #include "XXX.asl" in asl file
@@ -169,10 +171,15 @@ def TrimPreprocessedFile(Source, Target, ConvertHex, TrimLong):
 
         # convert HEX number format if indicated
         if ConvertHex:
-            Line = gHexNumberPattern.sub(r"0\1h", Line)
+            Line = gHexNumberPattern.sub(r"0\2h", Line)
+        else:
+            Line = gHexNumberPattern.sub(r"\1\2", Line)
         if TrimLong:
             Line = gLongNumberPattern.sub(r"\1", Line)
 
+        # convert Decimal number format
+        Line = gDecNumberPattern.sub(r"\1", Line)
+
         if LineNumber != None:
             EdkLogger.verbose("Got line directive: line=%d" % LineNumber)
             # in case preprocessor removed some lines, like blank or comment lines
diff --git a/BaseTools/Source/Python/UPT/BuildVersion.py b/BaseTools/Source/Python/UPT/BuildVersion.py
new file mode 100644 (file)
index 0000000..4bb9a8b
--- /dev/null
@@ -0,0 +1,3 @@
+#This file is for build version number auto generation\r
+#\r
+gBUILD_VERSION = "Build 2423"\r
index 658c4e0cfb0b5cdfef49e56230ecdbd97c85252b..b67cd102d1601e89ee6cfbe0d063366ce077d1b4 100644 (file)
@@ -834,6 +834,59 @@ def ProcessLineExtender(LineList):
 
     return NewList
 
+## ProcessEdkComment
+#
+# Process EDK style comment in LineList: c style /* */ comment or cpp style // comment 
+#
+#
+# @param LineList The LineList need to be processed.
+# 
+# @return LineList  The LineList been processed.
+# @return FirstPos  Where Edk comment is first found, -1 if not found
+#
+def ProcessEdkComment(LineList):
+    FindEdkBlockComment = False
+    Count = 0
+    StartPos = -1
+    EndPos = -1
+    FirstPos = -1
+    
+    while(Count < len(LineList)):
+        Line = LineList[Count].strip()
+        if Line.startswith("/*"):
+            #
+            # handling c style comment
+            #
+            StartPos = Count
+            while Count < len(LineList):
+                Line = LineList[Count].strip()
+                if Line.endswith("*/"):
+                    if (Count == StartPos) and Line.strip() == '/*/':
+                        Count = Count + 1
+                        continue
+                    EndPos = Count
+                    FindEdkBlockComment = True
+                    break
+                Count = Count + 1
+            
+            if FindEdkBlockComment:
+                if FirstPos == -1:
+                    FirstPos = StartPos
+                for Index in xrange(StartPos, EndPos+1):
+                    LineList[Index] = ''
+                FindEdkBlockComment = False
+        elif Line.find("//") != -1:
+            #
+            # handling cpp style comment
+            #
+            LineList[Count] = Line.replace("//", '#')
+            if FirstPos == -1:
+                FirstPos = Count
+        
+        Count = Count + 1
+    
+    return LineList, FirstPos
+
 ## GetLibInstanceInfo
 #
 # Get the information from Library Instance INF file.
index 230c659189f88fd4e5c7f97172039e6c1382820c..063ca52d2b7aa99ca25bf0a2a1f2214ecfb28b1d 100644 (file)
@@ -196,6 +196,7 @@ ERR_INF_PARSER_VER_EXIST_BOTH_NUM_STR = \
     _("The INF file %s defines both VERSION_NUMBER and VERSION_STRING, "\r
       "using VERSION_STRING")\r
 ERR_INF_PARSER_NOT_SUPPORT_EDKI_INF = _("EDKI INF is not supported")\r
+ERR_INF_PARSER_EDKI_COMMENT_IN_EDKII = _("The EDKI style comment is not supported in EDKII modules")\r
 \r
 ERR_INF_PARSER_FEATUREPCD_USAGE_INVALID = _("The usage for FeaturePcd can only"\r
     " be type of \"CONSUMES\".") \r
index a6e3a6dd41c39dd17fd37ba9d11dd1ce37a7ffb4..d4eef451966cfe42bd2831d784daafa9d1541f3b 100644 (file)
@@ -24,14 +24,14 @@ SOURCES_PATH = .
 \r
 APPLICATIONS=$(BIN_DIR)\UPT.exe\r
 \r
-COMMON_PYTHON=$(SOURCES_PATH)\UPT.py\r
+UPT_BUILDVERSION_PYTHON=$(SOURCES_PATH)\BuildVersion.py\r
 \r
 all: SetPythonPath $(APPLICATIONS)\r
 \r
 SetPythonPath:\r
   set PYTHONPATH= $(SOURCES_PATH)\r
 \r
-$(BIN_DIR)\UPT.exe: $(SOURCES_PATH)\UPT.py $(COMMON_PYTHON)\r
+$(BIN_DIR)\UPT.exe: $(SOURCES_PATH)\UPT.py $(UPT_BUILDVERSION_PYTHON)\r
   @pushd . & @cd build & @$(FREEZE) --include-modules=$(MODULES) --install-dir=$(BIN_DIR) UPT.py & @popd\r
   @pushd . & @copy .\Dll\sqlite3.dll .\Bin\Sqlite3.dll & @popd \r
 clean:\r
index aa44e8038de2731e7f1931a25d2ac9fc1686e0a1..79f71448eecbae98897bb914cd9c611933afc859 100644 (file)
@@ -26,6 +26,7 @@ from copy import deepcopy
 from Library.String import GetSplitValueList\r
 from Library.String import ConvertSpecialChar\r
 from Library.Misc import ProcessLineExtender\r
+from Library.Misc import ProcessEdkComment\r
 from Library.Parsing import NormPath\r
 from Library.ParserValidate import IsValidInfMoudleTypeList\r
 from Library.ParserValidate import IsValidArch\r
@@ -164,6 +165,12 @@ class InfParser(InfSectionParser):
         #\r
         FileLinesList = ProcessLineExtender(FileLinesList)\r
         \r
+        #\r
+        # Process EdkI INF style comment if found\r
+        #\r
+        OrigLines = [Line for Line in FileLinesList]\r
+        FileLinesList, EdkCommentStartPos = ProcessEdkComment(FileLinesList)\r
+        \r
         #\r
         # Judge whether the INF file is Binary INF or not\r
         #\r
@@ -338,6 +345,17 @@ class InfParser(InfSectionParser):
                          ST.ERR_INF_PARSER_HEADER_MISSGING, \r
                          File=self.FullPath)\r
         \r
+        #\r
+        # EDKII INF should not have EDKI style comment\r
+        #\r
+        if EdkCommentStartPos != -1:\r
+            Logger.Error("InfParser", \r
+                         FORMAT_INVALID, \r
+                         ST.ERR_INF_PARSER_EDKI_COMMENT_IN_EDKII, \r
+                         File=self.FullPath,\r
+                         Line=EdkCommentStartPos + 1,\r
+                         ExtraData=OrigLines[EdkCommentStartPos])\r
+        \r
         #\r
         # extract [Event] [Hob] [BootMode] sections \r
         #            \r
index a9066a259a29636e43df1cd404054d5a4548519a..b168a51daacc2e5b3f770f0981f04076076c9a81 100644 (file)
@@ -43,7 +43,7 @@ import RmPkg
 from Library.Misc import CheckEnvVariable\r
 from Library import GlobalData\r
 from Core.IpiDb import IpiDatabase\r
-from Common.BuildVersion import gBUILD_VERSION\r
+from BuildVersion import gBUILD_VERSION\r
 \r
 ##\r
 # Version and Copyright\r
index bfa70543965218c08ef7c4e387c787e9ba7eabe5..d907b11ba11ac07053fe9c1688deee8eeb1ddf64 100644 (file)
@@ -769,7 +769,7 @@ class DscParser(MetaFileParser):
                 self._InSubsection = False
                 self._SubsectionType = MODEL_UNKNOWN
                 self._SubsectionName = ''
-                self._Owner.pop()
+                self._Owner[-1] = -1
                 continue
             # subsection header
             elif Line[0] == TAB_OPTION_START and Line[-1] == TAB_OPTION_END:
@@ -1247,19 +1247,48 @@ class DscParser(MetaFileParser):
                                  MODEL_META_DATA_CONDITIONAL_STATEMENT_IFNDEF]:
                     break
         elif self._ItemType == MODEL_META_DATA_INCLUDE:
-            # The included file must be relative to workspace
-            IncludedFile = NormPath(ReplaceMacro(self._ValueList[1], self._Macros, RaiseError=True))
-            IncludedFile = PathClass(IncludedFile, GlobalData.gWorkspace)
-            ErrorCode, ErrorInfo = IncludedFile.Validate()
+            # The included file must be relative to workspace or same directory as DSC file
+            __IncludeMacros = {}
+            #
+            # Allow using system environment variables  in path after !include
+            #
+            __IncludeMacros['WORKSPACE'] = GlobalData.gGlobalDefines['WORKSPACE']
+            if "ECP_SOURCE" in GlobalData.gGlobalDefines.keys():
+                __IncludeMacros['ECP_SOURCE'] = GlobalData.gGlobalDefines['ECP_SOURCE']
+            #
+            # During GenFds phase call DSC parser, will go into this branch.
+            #
+            elif "ECP_SOURCE" in GlobalData.gCommandLineDefines.keys():
+                __IncludeMacros['ECP_SOURCE'] = GlobalData.gCommandLineDefines['ECP_SOURCE']
+
+            __IncludeMacros['EFI_SOURCE'] = GlobalData.gGlobalDefines['EFI_SOURCE']
+            __IncludeMacros['EDK_SOURCE'] = GlobalData.gGlobalDefines['EDK_SOURCE']
+            #
+            # Allow using MACROs comes from [Defines] section to keep compatible. 
+            #
+            __IncludeMacros.update(self._Macros)
+            
+            IncludedFile = NormPath(ReplaceMacro(self._ValueList[1], __IncludeMacros, RaiseError=True))
+            #
+            # First search the include file under the same directory as DSC file
+            #
+            IncludedFile1 = PathClass(IncludedFile, self.MetaFile.Dir)
+            ErrorCode, ErrorInfo1 = IncludedFile1.Validate()
             if ErrorCode != 0:
-                EdkLogger.error('parser', ErrorCode, File=self._FileWithError, 
-                                Line=self._LineIndex+1, ExtraData=ErrorInfo)
+                #
+                # Also search file under the WORKSPACE directory
+                #
+                IncludedFile1 = PathClass(IncludedFile, GlobalData.gWorkspace)
+                ErrorCode, ErrorInfo2 = IncludedFile1.Validate()
+                if ErrorCode != 0:
+                    EdkLogger.error('parser', ErrorCode, File=self._FileWithError, 
+                                    Line=self._LineIndex+1, ExtraData=ErrorInfo1 + "\n"+ ErrorInfo2)
 
-            self._FileWithError = IncludedFile
+            self._FileWithError = IncludedFile1
 
-            IncludedFileTable = MetaFileStorage(self._Table.Cur, IncludedFile, MODEL_FILE_DSC, False)
+            IncludedFileTable = MetaFileStorage(self._Table.Cur, IncludedFile1, MODEL_FILE_DSC, False)
             Owner = self._Content[self._ContentIndex-1][0]
-            Parser = DscParser(IncludedFile, self._FileType, IncludedFileTable, 
+            Parser = DscParser(IncludedFile1, self._FileType, IncludedFileTable, 
                                Owner=Owner, From=Owner)
 
             # set the parser status with current status
@@ -1280,7 +1309,10 @@ class DscParser(MetaFileParser):
             Records = IncludedFileTable.GetAll()
             if Records:
                 self._Content[self._ContentIndex:self._ContentIndex] = Records
-
+                self._Content.pop(self._ContentIndex-1)
+                self._ValueList = None
+                self._ContentIndex -= 1
+                
     def __ProcessSkuId(self):
         self._ValueList = [ReplaceMacro(Value, self._Macros, RaiseError=True)
                            for Value in self._ValueList]