from pakfire.constants import *
from pakfire.i18n import _
-from base import Package
-from lexer import FileLexer
+import base
+import lexer
+import make
class InnerTarFile(tarfile.TarFile):
def __init__(self, *args, **kwargs):
return t
-class FilePackage(Package):
+class FilePackage(base.Package):
"""
This class is a wrapper that reads package data from the (outer)
tarball and should never be used solely.
"""
def __init__(self, pakfire, repo, filename):
- Package.__init__(self, pakfire, repo)
+ base.Package.__init__(self, pakfire, repo)
self.filename = os.path.abspath(filename)
# Place to cache the metadata
a = self.open_archive()
f = a.extractfile("info")
- self.lexer = FileLexer(f.readlines())
+ self.lexer = lexer.FileLexer(f.readlines())
f.close()
a.close()
return payload_archive.extractfile(member)
+ def open_makefile(self):
+ """
+ Opens the makefile inside the package.
+ """
+ f = self.open_file("%s.%s" % (self.name, MAKEFILE_EXTENSION))
+ if not f:
+ return
+
+ return make.Makefile(self.pakfire, lines=f.readlines())
+
@property
def metadata(self):
"""
assert arches, self
return arches
+ @property
+ def requires(self):
+ m = self.open_makefile()
+ if not m:
+ return []
+
+ requires = m.lexer.build.get_var("requires")
+ requires = requires.splitlines()
+
+ return self.filter_deps(requires)
+
class BinaryPackage(FilePackage):
_type = "binary"
import pakfire.util as util
from base import Package
-from file import SourcePackage
from pakfire.constants import *
from pakfire.i18n import _
from pakfire.system import system
class MakefileBase(Package):
- def __init__(self, pakfire, filename):
+ def __init__(self, pakfire, filename=None, lines=None):
Package.__init__(self, pakfire)
- # Save the filename of the makefile.
- self.filename = os.path.abspath(filename)
-
# Update environment.
environ = self.pakfire.distro.environ
environ.update({
- "BASEDIR" : os.path.dirname(self.filename),
"PARALLELISMFLAGS" : "-j%d" % system.parallelism,
})
- # Open and parse the makefile.
- self.lexer = lexer.RootLexer.open(self.filename, environ=environ)
+ if filename:
+ self.filename = os.path.abspath(filename)
+ environ["BASEDIR"] = os.path.dirname(self.filename)
+
+ # Open and parse the makefile.
+ self.lexer = lexer.RootLexer.open(self.filename, environ=environ)
+
+ else:
+ self.filename = None
+ self.lexer = lexer.RootLexer(lines, environ=environ)
@property
def package_filename(self):
class Makefile(MakefileBase):
@property
def uuid(self):
- hash1 = util.calc_hash1(self.filename)
+ if self.filename:
+ hash1 = util.calc_hash1(self.filename)
- # Return UUID version 5 (SHA1 hash)
- return "%8s-%4s-5%3s-%4s-%11s" % \
- (hash1[0:8], hash1[9:13], hash1[14:17], hash1[18:22], hash1[23:34])
+ # Return UUID version 5 (SHA1 hash)
+ return "%8s-%4s-5%3s-%4s-%11s" % \
+ (hash1[0:8], hash1[9:13], hash1[14:17], hash1[18:22], hash1[23:34])
+
+ return "" # XXX What to do here?
@property
def path(self):
- return os.path.dirname(self.filename)
+ if self.filename:
+ return os.path.dirname(self.filename)
@property
def arch(self):
@property
def files(self):
+ if not self.filename:
+ return []
+
files = []
basedir = os.path.dirname(self.filename)
from pakfire.constants import *
from pakfire.i18n import _
-from file import BinaryPackage, InnerTarFile, InnerTarFileXz, SourcePackage
+import file
class Packager(object):
payload_compression = None
f = open(filelist, "w")
if self.payload_compression == "xz":
- datafile = InnerTarFileXz.open(datafile)
+ datafile = file.InnerTarFileXz.open(datafile)
else:
- datafile = InnerTarFile.open(datafile)
+ datafile = file.InnerTarFile.open(datafile)
while True:
m = datafile.next()
size = 0
if self.payload_compression == "xz":
- tar = InnerTarFileXz.open(datafile)
+ tar = file.InnerTarFileXz.open(datafile)
else:
- tar = InnerTarFile.open(datafile)
+ tar = file.InnerTarFile.open(datafile)
while True:
m = tar.next()
tmpdir = self.mktemp(directory=True)
if self.payload_compression == "xz":
- tarfile = InnerTarFileXz.open(datafile)
+ tarfile = file.InnerTarFileXz.open(datafile)
else:
- tarfile = InnerTarFile.open(datafile)
+ tarfile = file.InnerTarFile.open(datafile)
tarfile.extractall(path=tmpdir)
tarfile.close()
datafile = self.mktemp()
if self.payload_compression == "xz":
- tar = InnerTarFileXz.open(datafile, mode="w")
+ tar = file.InnerTarFileXz.open(datafile, mode="w")
else:
- tar = InnerTarFile.open(datafile, mode="w")
+ tar = file.InnerTarFile.open(datafile, mode="w")
# All files in the tarball are relative to this directory.
basedir = self.buildroot
def find_files(self, datafile, patterns):
if self.payload_compression == "xz":
- datafile = InnerTarFileXz.open(datafile)
+ datafile = file.InnerTarFileXz.open(datafile)
else:
- datafile = InnerTarFile.open(datafile)
+ datafile = file.InnerTarFile.open(datafile)
members = datafile.getmembers()
except OSError:
shutil.copy2(tempfile, resultfile)
- return BinaryPackage(self.pakfire, self.pakfire.repos.dummy, resultfile)
+ return file.BinaryPackage(self.pakfire, self.pakfire.repos.dummy, resultfile)
class SourcePackager(Packager):
filename = self.mktemp()
if self.payload_compression == "xz":
- datafile = InnerTarFileXz.open(filename, mode="w")
+ datafile = file.InnerTarFileXz.open(filename, mode="w")
else:
- datafile = InnerTarFile.open(filename, mode="w")
+ datafile = file.InnerTarFile.open(filename, mode="w")
i = 0
for arcname, file in files: