]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/Ecc/MetaFileWorkspace/MetaFileParser.py
BaseTools:Support decimal version number in ECC check
[mirror_edk2.git] / BaseTools / Source / Python / Ecc / MetaFileWorkspace / MetaFileParser.py
index 9c27c8e16a052a9f527bc30ebb97660297163fd7..2d98ac5eadb2532fce7e03374360003d41856e89 100644 (file)
@@ -31,6 +31,10 @@ from GenFds.FdfParser import FdfParser
 from Common.LongFilePathSupport import OpenLongFilePath as open\r
 from Common.LongFilePathSupport import CodecOpenLongFilePath\r
 \r
+## RegEx for finding file versions\r
+hexVersionPattern = re.compile(r'0[xX][\da-f-A-F]{5,8}')\r
+decVersionPattern = re.compile(r'\d+\.\d+')\r
+\r
 ## A decorator used to parse macro definition\r
 def ParseMacro(Parser):\r
     def MacroParser(self):\r
@@ -331,11 +335,19 @@ class MetaFileParser(object):
         Name, Value = self._ValueList[1], self._ValueList[2]\r
         # Sometimes, we need to make differences between EDK and EDK2 modules\r
         if Name == 'INF_VERSION':\r
-            try:\r
+            if hexVersionPattern.match(Value):\r
                 self._Version = int(Value, 0)\r
-            except:\r
+            elif decVersionPattern.match(Value):\r
+                ValueList = Value.split('.')\r
+                Major = int(ValueList[0], 0)\r
+                Minor = int(ValueList[1], 0)\r
+                if Major > 0xffff or Minor > 0xffff:\r
+                    EdkLogger.error('Parser', FORMAT_INVALID, "Invalid version number",\r
+                                    ExtraData=self._CurrentLine, File=self.MetaFile, Line=self._LineIndex + 1)\r
+                self._Version = int('0x{0:04x}{1:04x}'.format(Major, Minor), 0)\r
+            else:\r
                 EdkLogger.error('Parser', FORMAT_INVALID, "Invalid version number",\r
-                                ExtraData=self._CurrentLine, File=self.MetaFile, Line=self._LineIndex+1)\r
+                                ExtraData=self._CurrentLine, File=self.MetaFile, Line=self._LineIndex + 1)\r
         elif Name == 'MODULE_UNI_FILE':\r
             UniFile = os.path.join(os.path.dirname(self.MetaFile), Value)\r
             if os.path.exists(UniFile):\r