support/package-builder/SpecUtils.py
2820c61a
 from SpecParser import SpecParser
 from StringUtils import StringUtils
0f1fdc4b
 import platform
2820c61a
 import os
 
 class Specutils(object):
5062126c
 
2820c61a
     def __init__(self,specfile):
         self.specfile=""
         self.spec = SpecParser()
         if self.isSpecFile(specfile):
             self.specfile=specfile
             self.spec.parseSpecFile(self.specfile)
5062126c
 
2820c61a
     def isSpecFile(self,specfile):
         if os.path.isfile(specfile) and specfile[-5:] == ".spec":
             return True
         return False
5062126c
 
2820c61a
     def getSourceNames(self):
         sourceNames=[]
         strUtils = StringUtils()
         pkg = self.spec.packages.get('default')
         if pkg is None:
             return None
         for source in pkg.sources:
             sourceName=strUtils.getFileNameFromURL(source)
             sourceNames.append(sourceName)
         return sourceNames
5062126c
 
3cc43c92
     def getChecksums(self):
         pkg = self.spec.packages.get('default')
         return pkg.checksums
7253ce7d
 
     def getChecksumForSource(self,source):
         pkg = self.spec.packages.get('default')
         return pkg.checksums.get(source)
5062126c
 
920a9773
     def getSourceURLs(self):
         sourceNames=[]
         strUtils = StringUtils()
         pkg = self.spec.packages.get('default')
         if pkg is None:
             return None
         for source in pkg.sources:
             sourceNames.append(source)
         return sourceNames
 
2820c61a
     def getPatchNames(self):
         patchNames=[]
         strUtils = StringUtils()
         pkg = self.spec.packages.get('default')
         if pkg is None:
             return None
         for patch in pkg.patches:
             patchName=strUtils.getFileNameFromURL(patch)
             patchNames.append(patchName)
         return patchNames
5062126c
 
2820c61a
     def getPackageNames(self):
         packageNames=[]
         for key in self.spec.packages.keys():
             pkg = self.spec.packages.get(key)
             packageNames.append(pkg.name)
         return packageNames
5062126c
 
adf248d5
     def getIsRPMPackage(self,pkgName):
         defaultPkgName=self.spec.packages['default'].name
         if pkgName == defaultPkgName:
             pkgName = "default"
         if pkgName in self.spec.packages.keys():
             pkg = self.spec.packages.get(pkgName)
             if pkg.filesMacro is not None:
                 return True
         return False
 
2820c61a
     def getRPMNames(self):
         rpmNames=[]
         for key in self.spec.packages.keys():
             pkg = self.spec.packages.get(key)
             rpmName=pkg.name+"-"+pkg.version+"-"+pkg.release
             rpmNames.append(rpmName)
         return rpmNames
 
     def getRPMName(self, pkgName):
         rpmName=None
         for key in self.spec.packages.keys():
             pkg = self.spec.packages.get(key)
             if pkg.name == pkgName:
                 rpmName=pkg.name+"-"+pkg.version+"-"+pkg.release
                 break
         return rpmName
 
     def getRPMVersion(self, pkgName):
         version=None
         for key in self.spec.packages.keys():
             pkg = self.spec.packages.get(key)
             if pkg.name == pkgName:
                 version=pkg.version
                 break
         return version
 
     def getRPMRelease(self, pkgName):
         release=None
         for key in self.spec.packages.keys():
             pkg = self.spec.packages.get(key)
             if pkg.name == pkgName:
                 release=pkg.release
                 break
         return release
 
5062126c
     def getLicense(self):
2820c61a
         licenseInfo=None
5062126c
         pkg = self.spec.packages.get('default')
         if pkg is None:
             return None
         return pkg.license
2820c61a
 
5062126c
     def getURL(self):
         pkg = self.spec.packages.get('default')
         if pkg is None:
             return None
         return pkg.URL
 
     def getSourceURL(self):
         pkg = self.spec.packages.get('default')
         if pkg is None:
             return None
         if len(pkg.sources) == 0:
             return None
         sourceURL = pkg.sources[0]
         if sourceURL.startswith("http") or sourceURL.startswith("ftp"):
             return sourceURL
         return None
920a9773
 
2820c61a
     def getBuildArch(self, pkgName):
0f1fdc4b
         buildArch=platform.machine()
2820c61a
         for key in self.spec.packages.keys():
             pkg = self.spec.packages.get(key)
             if pkg.name == pkgName:
                 buildArch=pkg.buildarch
                 break
         return buildArch
5062126c
 
2820c61a
     def getRequiresAllPackages(self):
5f40784b
         dependentPackages=[]
2820c61a
         for key in self.spec.packages.keys():
             pkg = self.spec.packages.get(key)
             for dpkg in pkg.requires:
5f40784b
                 dependentPackages.append(dpkg.package)
         dependentPackages=list(set(dependentPackages))
2820c61a
         packageNames=self.getPackageNames()
         for pkgName in packageNames:
5f40784b
             if pkgName in dependentPackages:
                 dependentPackages.remove(pkgName)
         return dependentPackages
5062126c
 
2820c61a
     def getBuildRequiresAllPackages(self):
5f40784b
         dependentPackages=[]
2820c61a
         for key in self.spec.packages.keys():
             pkg = self.spec.packages.get(key)
             for dpkg in pkg.buildrequires:
5f40784b
                 dependentPackages.append(dpkg.package)
         dependentPackages=list(set(dependentPackages))
2820c61a
         packageNames=self.getPackageNames()
         for pkgName in packageNames:
5f40784b
             if pkgName in dependentPackages:
                 dependentPackages.remove(pkgName)
         return dependentPackages
5062126c
 
5f40784b
     def getCheckBuildRequiresAllPackages(self):
         dependentPackages=[]
         for key in self.spec.packages.keys():
             pkg = self.spec.packages.get(key)
             for dpkg in pkg.checkbuildrequires:
                 dependentPackages.append(dpkg.package)
         dependentPackages=list(set(dependentPackages))
         return dependentPackages
5062126c
 
2820c61a
     def getRequires(self,pkgName):
         dependentPackages=[]
         for key in self.spec.packages.keys():
             pkg = self.spec.packages.get(key)
             if pkg.name == pkgName:
                 for dpkg in pkg.requires:
                     dependentPackages.append(dpkg.package)
         return dependentPackages
 
     def getBuildRequires(self,pkgName):
         dependentPackages=[]
         for key in self.spec.packages.keys():
             pkg = self.spec.packages.get(key)
             if pkg.name == pkgName:
                 for dpkg in pkg.buildrequires:
                     dependentPackages.append(dpkg.package)
         return dependentPackages
5062126c
 
2820c61a
     def getProvides(self,packageName):
5f40784b
         dependentPackages=[]
2820c61a
         defaultPkgName=self.spec.packages['default'].name
         pkg = None
         if self.spec.packages.has_key(packageName):
             pkg = self.spec.packages.get(packageName)
         if defaultPkgName == packageName:
             pkg=self.spec.packages['default']
         if pkg is not None:
             for dpkg in pkg.provides:
5f40784b
                 dependentPackages.append(dpkg.package)
2820c61a
         else:
             print "package not found"
5f40784b
         return dependentPackages
5062126c
 
2820c61a
     def getVersion(self):
         pkg = self.spec.packages.get('default')
         return pkg.version
5062126c
 
2820c61a
     def getRelease(self):
         pkg = self.spec.packages.get('default')
         return pkg.release
5062126c
 
5e29a499
     def getBasePackageName(self):
         pkg = self.spec.packages.get('default')
         return pkg.name
5062126c
 
cb4e8710
     def getSecurityHardeningOption(self):
         return self.spec.globalSecurityHardening
 
b5e09fac
     def isCheckAvailable(self):
         check=False
         if self.spec.checkMacro is not None:
             check=True
         return check
 
fba234bc
     def getDefinitions(self):
         return self.spec.defs
 
2820c61a
 def main():
     spec = Specutils("/workspace1/myrepos/photon/SPECS/docker/docker.spec")
     print "packages",spec.getPackageNames()
     print "packages",spec.getRPMNames()
     print "sources",spec.getSourceNames()
5062126c
     print "patches",spec.getPatchNames()
2820c61a
     print "requires",spec.getRequires('libltdl-devel')
     print "requires",spec.getRequires('libtool')
5062126c
 
     print "provides",spec.getProvides('libtool')
2820c61a
     print "all-requires",spec.getRequiresAllPackages()
     print "all-build-requires",spec.getBuildRequiresAllPackages()
5062126c
 
2820c61a
 if __name__ == '__main__':
     main()
5062126c