#!/usr/bin/env python import os, sys, re, getopt, string, glob, xml.dom.minidom, pprint, zipfile, tempfile from XmlRoutines import * from WorkspaceRoutines import * def parseMsa(msaFile, spdDir): filelist = [msaFile] msaDir = os.path.dirname(msaFile) msa = xml.dom.minidom.parse(inWorkspace(msaFile)) xmlPaths = [ "/ModuleSurfaceArea/SourceFiles/Filename" ] for xmlPath in xmlPaths: for f in XmlList(msa, xmlPath): filelist.append(str(os.path.join(msaDir, XmlElementData(f)))) return filelist def parseSpd(spdFile): filelist = [spdFile] msaFileList = [] spdDir = os.path.dirname(spdFile) spd = xml.dom.minidom.parse(inWorkspace(spdFile)) xmlPaths = [ "/PackageSurfaceArea/LibraryClassDeclarations/LibraryClass/IncludeHeader", "/PackageSurfaceArea/IndustryStdIncludes/IndustryStdHeader/IncludeHeader", "/PackageSurfaceArea/ """ domImpl = xml.dom.minidom.getDOMImplementation() man = domImpl.createDocument(None, "FrameworkArchiveManifest", None) top_element = man.documentElement header = man.createElement("FarHeader") top_element.appendChild(header) packList = man.createElement("FarPackageList") top_element.appendChild(packList) platList = man.createElement("FarPlatformList") top_element.appendChild(platList) contents = man.createElement("Contents") top_element.appendChild(contents) zip = zipfile.ZipFile(farname, "w") for file in args: if not os.path.exists(inWorkspace(file)): print "Skipping non-existent file '%s'." % file (_, extension) = os.path.splitext(file) if extension == ".spd": filelist = parseSpd(file) for file in filelist: package = man.createElement("FarPackage") packList.appendChild(package) spdfilename = man.createElement("FarFileName") package.appendChild(spdfilename) spdfilename.appendChild( man.createTextNode(file) ) elif extension == ".fpd": filelist = [file] else: filelist = [] for f in set(filelist): zip.write(inWorkspace(f), f) zip.writestr("FrameworkArchiveManifest.xml", man.toprettyxml(" ")) zip.close() return # This acts like the main() function for the script, unless it is 'import'ed into another # script. if __name__ == '__main__': # Create a pretty printer for dumping data structures in a readable form. # pp = pprint.PrettyPrinter(indent=2) # Process the command line args. optlist, args = getopt.getopt(sys.argv[1:], 'h', [ 'example-long-arg=', 'testing']) makeFar(args, "test.far")