summaryrefslogtreecommitdiffstats
path: root/Tools/Python
diff options
context:
space:
mode:
authorbbahnsen <bbahnsen@6f19259b-4bc3-4df7-8a09-765794883524>2007-01-25 01:18:46 +0000
committerbbahnsen <bbahnsen@6f19259b-4bc3-4df7-8a09-765794883524>2007-01-25 01:18:46 +0000
commit822d4f3a53a69dcbc1c9eaaf318a0d69d9b8de0e (patch)
treea44f67c691d948abb965e999165fe2f718b6eb72 /Tools/Python
parente2cce12fd643b53d63d65e2dacad481f5197c296 (diff)
downloadedk2-822d4f3a53a69dcbc1c9eaaf318a0d69d9b8de0e.tar.gz
edk2-822d4f3a53a69dcbc1c9eaaf318a0d69d9b8de0e.tar.bz2
edk2-822d4f3a53a69dcbc1c9eaaf318a0d69d9b8de0e.zip
Adding a couple of features for far processing, including detecting duplicate files.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@2304 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'Tools/Python')
-rwxr-xr-xTools/Python/InstallFar.py23
-rwxr-xr-xTools/Python/MkFar.py37
-rwxr-xr-xTools/Python/WorkspaceRoutines.py7
3 files changed, 43 insertions, 24 deletions
diff --git a/Tools/Python/InstallFar.py b/Tools/Python/InstallFar.py
index 6e28998cff..7bc03aa0ca 100755
--- a/Tools/Python/InstallFar.py
+++ b/Tools/Python/InstallFar.py
@@ -13,6 +13,7 @@ class Flags:
self.verbose = False
self.force = False
self.reinstall = False
+ self.dir = ''
class Database:
@@ -52,7 +53,7 @@ class Database:
XmlElement(fpd, "/PlatformHeader/PlatformName")
for farfile in XmlList(self.dom, "/FrameworkDatabase/FarList/Filename"):
- farGuid = farfile.getAttribute("FarGuid")
+ farGuid = Guid(farfile.getAttribute("FarGuid"))
self.installedFars[farGuid] = XmlElementData(farfile)
self.packageList = XmlNode(self.dom, "/FrameworkDatabase/PackageList")
@@ -131,8 +132,8 @@ def GetFpdGuidVersion(Dom, strip=0):
gpath = ["PlatformSurfaceArea", "PlatformHeader", "GuidValue"]
vpath = ["PlatformSurfaceArea", "PlatformHeader", "Version"]
- return string.lower(XmlElement(Dom, "/".join(gpath[strip:]))), \
- XmlElement(Dom, "/".join(vpath[strip:]))
+ return Guid(XmlElement(Dom, "/".join(gpath[strip:]))), \
+ XmlElement(Dom, "/".join(vpath[strip:]))
def GetSpdGuidVersion(Dom, strip=0):
@@ -141,8 +142,8 @@ def GetSpdGuidVersion(Dom, strip=0):
gpath = ["PackageSurfaceArea", "SpdHeader", "GuidValue"]
vpath = ["PackageSurfaceArea", "SpdHeader", "Version"]
- return string.lower(XmlElement(Dom, "/".join(gpath[strip:]))), \
- XmlElement(Dom, "/".join(vpath[strip:]))
+ return Guid(XmlElement(Dom, "/".join(gpath[strip:]))), \
+ XmlElement(Dom, "/".join(vpath[strip:]))
def InstallFar(farfile, workspaceLocation=""):
@@ -189,7 +190,7 @@ def InstallFar(farfile, workspaceLocation=""):
msa = XmlParseString(far.read(msafilePath))
for package in XmlList(msa, "/ModuleSurfaceArea/PackageDependencies/Package"):
- guid = package.getAttribute("PackageGuid")
+ guid = Guid(package.getAttribute("PackageGuid"))
version = package.getAttribute("PackageVersion")
# Does anyone provide this package?
@@ -215,8 +216,8 @@ def InstallFar(farfile, workspaceLocation=""):
# Go through the dependencies
for dependency in XmlList(fpd, "/PlatformSurfaceArea/FrameworkModules/ModuleSA") + \
XmlList(fpd, "/PlatformSurfaceArea/FrameworkModules/ModuleSA/Libraries/Instance"):
- packagesNeeded.add((string.lower(dependency.getAttribute("PackageGuid")),
- dependency.getAttribute("PackageVersion")))
+ packagesNeeded.add((Guid(dependency.getAttribute("PackageGuid")),
+ dependency.getAttribute("PackageVersion")))
# Let's see if all the packages are in the workspace
for guid, version in packagesNeeded:
@@ -228,7 +229,7 @@ def InstallFar(farfile, workspaceLocation=""):
installError = True
# Check the fars
- thisFarGuid = string.lower(XmlElement(manifest, "/FrameworkArchiveManifest/FarHeader/GuidValue"))
+ thisFarGuid = Guid(XmlElement(manifest, "/FrameworkArchiveManifest/FarHeader/GuidValue"))
if fdb.HasFar(thisFarGuid):
if not flags.reinstall:
print "Error: There is a far with this guid already installed."
@@ -301,7 +302,7 @@ if __name__ == '__main__':
flags = Flags()
# Process the command line args.
- optlist, args = getopt.getopt(sys.argv[1:], '?hvf', ['help', 'verbose', 'force', 'reinstall'])
+ optlist, args = getopt.getopt(sys.argv[1:], '?hvfd:', ['directory=', 'help', 'verbose', 'force', 'reinstall'])
# First pass through the options list.
for o, a in optlist:
@@ -314,6 +315,8 @@ if __name__ == '__main__':
optlist.remove((o,a))
if o in ["-v", "--verbose"]:
flags.verbose = True
+ if o in ["-d", "--directory"]:
+ flags.dir = a
if o in ["-f", "--force"]:
flags.force = True
if o in ["--reinstall"]:
diff --git a/Tools/Python/MkFar.py b/Tools/Python/MkFar.py
index a12ba2105f..2848b1de65 100755
--- a/Tools/Python/MkFar.py
+++ b/Tools/Python/MkFar.py
@@ -25,9 +25,16 @@ class Far:
far = Far()
"""The far object is constructed from the template file the user passed in."""
+def AddToZip(zip, infile):
+
+ """Add a file to a zip file, provided it is not already there."""
+
+ if not infile in zip.namelist():
+ zip.write(inWorkspace(infile), infile)
+
def parseMsa(msaFile, spdDir):
- """ XXX Parse an msa file and return a list of all the files that this msa
+ """Parse an msa file and return a list of all the files that this msa
includes."""
filelist = [msaFile]
@@ -39,7 +46,7 @@ def parseMsa(msaFile, spdDir):
xmlPaths = [
"/ModuleSurfaceArea/SourceFiles/Filename",
"/ModuleSurfaceArea/NonProcessedFiles/Filename" ]
-
+
for xmlPath in xmlPaths:
for f in XmlList(msa, xmlPath):
filelist.append(str(os.path.join(msaDir, XmlElementData(f))))
@@ -57,10 +64,16 @@ def parseSpd(spdFile):
spd = xml.dom.minidom.parse(inWorkspace(spdFile))
+ # We are currently ignoring these hints.
+ readonly = XmlElement(spd, "/PackageSurfaceArea/PackageDefinitions/ReadOnly") != "false"
+ repackage = XmlElement(spd, "/PackageSurfaceArea/PackageDefinitions/RePackage") != "false"
+
xmlPaths = [
"/PackageSurfaceArea/LibraryClassDeclarations/LibraryClass/IncludeHeader",
- "/PackageSurfaceArea/IndustryStdIncludes/IndustryStdHeader/IncludeHeader",
- "/PackageSurfaceArea/PackageHeaders/IncludePkgHeader" ]
+ "/PackageSurfaceArea/IndustryStdIncludes/IndustryStdHeader/IncludeHeader" ]
+
+ # These are covered by the Industry Standard Includes.
+ # "/PackageSurfaceArea/PackageHeaders/IncludePkgHeader"
for xmlPath in xmlPaths:
for f in XmlList(spd, xmlPath):
@@ -87,7 +100,7 @@ def makeFarHeader(doc):
"""Create a dom tree for the Far Header. It will use information from the
template file passed on the command line, if present."""
-
+
header = XmlAppendChildElement(doc.documentElement, "FarHeader")
XmlAppendChildElement(header, "FarName", far.FarName)
@@ -125,7 +138,10 @@ def makeFar(files, farname):
contents = XmlAppendChildElement(top_element, "Contents")
XmlAppendChildElement(top_element, "UserExtensions")
- zip = zipfile.ZipFile(farname, "w")
+ try:
+ zip = zipfile.ZipFile(farname, "w", zipfile.ZIP_DEFLATED)
+ except:
+ zip = zipfile.ZipFile(farname, "w", zipfile.ZIP_STORED)
for infile in set(files):
if not os.path.exists(inWorkspace(infile)):
print "Error: Non-existent file '%s'." % infile
@@ -139,7 +155,7 @@ def makeFar(files, farname):
package = XmlAppendChildElement(packList, "FarPackage")
XmlAppendChildElement(package, "FarFilename", lean(infile), {"Md5Sum": Md5(inWorkspace(infile))})
- zip.write(inWorkspace(infile), infile)
+ AddToZip(zip, infile)
XmlAppendChildElement(package, "GuidValue", spdGuid)
XmlAppendChildElement(package, "Version", spdVersion)
XmlAppendChildElement(package, "DefaultPath", spdDir)
@@ -149,17 +165,17 @@ def makeFar(files, farname):
for spdfile in filelist:
XmlAppendChildElement(packContents, "FarFilename", lean(spdfile), {"Md5Sum": Md5(inWorkspace(os.path.join(spdDir, spdfile)))})
- zip.write(inWorkspace(os.path.join(spdDir, spdfile)), os.path.join(spdDir,spdfile))
+ AddToZip(zip, os.path.join(spdDir,spdfile))
elif extension == ".fpd":
platform = XmlAppendChildElement(platList, "FarPlatform")
XmlAppendChildElement(platform, "FarFilename", lean(infile), {"Md5Sum": Md5(inWorkspace(infile))})
- zip.write(inWorkspace(infile), infile)
+ AddToZip(zip, infile)
else:
XmlAppendChildElement(contents, "FarFilename", lean(infile), {"Md5Sum": Md5(inWorkspace(infile))})
- zip.write(inWorkspace(infile), infile)
+ AddToZip(zip, infile)
zip.writestr("FrameworkArchiveManifest.xml", man.toxml('UTF-8'))
zip.close()
@@ -202,7 +218,6 @@ is a text file that allows more contol over the contents of the far.
# Second pass through the options list. These can override the first pass.
for o, a in optlist:
- print o, a
if o in ["-o", "--far", "--output"]:
far.FileName = a
diff --git a/Tools/Python/WorkspaceRoutines.py b/Tools/Python/WorkspaceRoutines.py
index f1f8be2b3c..c75cd57c52 100755
--- a/Tools/Python/WorkspaceRoutines.py
+++ b/Tools/Python/WorkspaceRoutines.py
@@ -27,7 +27,7 @@ def genguid():
getpass.getuser() +
str(time.time()) +
socket.gethostbyname(socket.gethostname())).hexdigest()
- return "%s-%s-%s-%s-%s" % (g[0:8], g[8:12], g[12:16], g[16:20], g[20:])
+ return Guid("%s-%s-%s-%s-%s" % (g[0:8], g[8:12], g[12:16], g[16:20], g[20:]))
def lean(path):
"""Lean the slashes forward"""
@@ -56,5 +56,6 @@ def Md5(filename):
return sum
-
-
+def Guid(guidString):
+ """Convert the guid string into a canonical form suitable for comparison."""
+ return string.lower(guidString)