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
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