# This file is used to define common parsing related functions used in parsing\r
# Inf/Dsc/Makefile process\r
#\r
-# Copyright (c) 2008 - 2014, Intel Corporation. All rights reserved.<BR>\r
+# Copyright (c) 2008 - 2018, 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
##\r
# Import Modules\r
#\r
+from __future__ import absolute_import\r
import Common.LongFilePathOs as os, re\r
import Common.EdkLogger as EdkLogger\r
from Common.DataType import *\r
from CommonDataClass.DataClass import *\r
from Common.StringUtils import CleanString, GetSplitValueList, ReplaceMacro\r
-import EotGlobalData\r
+from . import EotGlobalData\r
from Common.StringUtils import GetSplitList\r
from Common.LongFilePathSupport import OpenLongFilePath as open\r
\r
+import subprocess\r
+\r
+## DeCompress\r
+#\r
+# Call external decompress tool to decompress the fv section\r
+#\r
+def DeCompress(Method, Input):\r
+ # Write the input to a temp file\r
+ open('_Temp.bin', 'wb').write(Input)\r
+ cmd = ''\r
+ if Method == 'Lzma':\r
+ cmd = r'LzmaCompress -o _New.bin -d _Temp.bin'\r
+ if Method == 'Efi':\r
+ cmd = r'TianoCompress -d --uefi -o _New.bin _Temp.bin'\r
+ if Method == 'Framework':\r
+ cmd = r'TianoCompress -d -o _New.bin _Temp.bin'\r
+\r
+ # Call tool to create the decompressed output file\r
+ Process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)\r
+ Process.communicate()[0]\r
+\r
+ # Return the beffer of New.bin\r
+ if os.path.exists('_New.bin'):\r
+ return open('_New.bin', 'rb').read()\r
+\r
+\r
## PreProcess() method\r
#\r
# Pre process a file\r
# @param MergeMultipleLines: Switch for if merge multiple lines\r
# @param LineNo: Default line no\r
#\r
-# @return Lines: The file contents after remvoing comments\r
+# @return Lines: The file contents after removing comments\r
#\r
def PreProcess(Filename, MergeMultipleLines = True, LineNo = -1):\r
Lines = []\r
# @return: The name of parameter\r
#\r
def GetParameterName(Parameter):\r
- if type(Parameter) == type('') and Parameter.startswith('&'):\r
+ if isinstance(Parameter, type('')) and Parameter.startswith('&'):\r
return Parameter[1:].replace('{', '').replace('}', '').replace('\r', '').replace('\n', '').strip()\r
else:\r
return Parameter.strip()\r
# @param Table: Table to be searched\r
# @param Key: The keyword\r
#\r
-# @return Value: The value of the the keyword\r
+# @return Value: The value of the keyword\r
#\r
def FindKeyValue(Db, Table, Key):\r
SqlCommand = """select Value from %s where Name = '%s' and (Model = %s or Model = %s)""" % (Table, Key, MODEL_IDENTIFIER_VARIABLE, MODEL_IDENTIFIER_ASSIGNMENT_EXPRESSION)\r