# Make all these little package from the build environment.
logging.info(_("Creating packages:"))
for pkg in reversed(self.pkg.packages):
- packager = packages.packager.BinaryPackager(self.pakfire, pkg, self.buildroot)
+ packager = packages.packager.BinaryPackager(self.pakfire, pkg,
+ self, self.buildroot)
packager.run(self.resultdir)
logging.info("")
license = %(license)s
summary = %(summary)s
+
def description
%(description)s
end
import logging
import os
+import re
import shutil
import socket
import tarfile
import lexer
import packager
+import pakfire.chroot as chroot
import pakfire.util as util
from base import Package
self._name = name
self.lexer = lexer
+ # Store additional dependencies in here.
+ self._dependencies = {}
+
@property
def name(self):
return self._name
def uuid(self):
return None
- def get_deps_from_builder(self, builder):
- pass
+ def track_dependencies(self, builder, path):
+ result = builder.do("/usr/lib/buildsystem-tools/dependency-tracker %s" \
+ % path, returnOutput=True)
+
+ for line in result.splitlines():
+ m = re.match(r"^(\w+)=(.*)$", line)
+ if m is None:
+ continue
+
+ key, val = m.groups()
+
+ if not key in ("prerequires", "requires", "provides", "conflicts", "obsoletes",):
+ continue
+
+ val = val.strip("\"")
+ val = val.split()
+
+ self._dependencies[key] = sorted(val)
+
+ def get_deps(self, key):
+ # Collect all dependencies that were set in the makefile by the user.
+ deps = self.lexer.get_var(key).split()
+
+ # Collect all dependencies that were discovered by the tracker.
+ deps += self._dependencies.get(key, [])
+
+ # Remove duplicates.
+ deps = set(deps)
+ deps = list(deps)
+
+ return sorted(deps)
@property
def prerequires(self):
- return []
+ return self.get_deps("prerequires")
@property
def requires(self):
- return []
+ return self.get_deps("requires")
@property
def provides(self):
- return []
+ return self.get_deps("provides")
@property
def obsoletes(self):
- return []
+ return self.get_deps("obsoletes")
@property
def conflicts(self):
- return []
+ return self.get_deps("conflicts")
def get_scriptlet(self, type):
return self.lexer.scriptlets.get(type, None)
continue
logging.debug("Removing tmpfile: %s" % file)
- os.remove(file)
- def mktemp(self):
+ if os.path.isdir(file):
+ util.rm(file)
+ else:
+ os.remove(file)
+
+ def mktemp(self, directory=False):
# XXX use real mk(s)temp here
filename = os.path.join("/", LOCAL_TMP_PATH, util.random_string())
+ if directory:
+ os.makedirs(filename)
+
self.tmpfiles.append(filename)
return filename
class BinaryPackager(Packager):
- def __init__(self, pakfire, pkg, buildroot):
+ def __init__(self, pakfire, pkg, builder, buildroot):
Packager.__init__(self, pakfire, pkg)
+ self.builder = builder
self.buildroot = buildroot
def create_metafile(self, datafile):
info = collections.defaultdict(lambda: "")
+ # Extract datafile in temporary directory and scan for dependencies.
+ tmpdir = self.mktemp(directory=True)
+
+ tarfile = InnerTarFile(datafile)
+ tarfile.extractall(path=tmpdir)
+ tarfile.close()
+
+ # Run the dependency tracker.
+ self.pkg.track_dependencies(self.builder, tmpdir)
+
# Generic package information including Pakfire information.
info.update({
"pakfire_version" : PAKFIRE_VERSION,
# Update package information for string formatting.
info.update({
- "groups" : " ".join(self.pkg.groups),
- "requires" : " ".join(self.pkg.requires),
+ "groups" : " ".join(self.pkg.groups),
+ "prerequires" : "\n".join([PACKAGE_INFO_DEPENDENCY_LINE % d \
+ for d in self.pkg.prerequires]),
+ "requires" : "\n".join([PACKAGE_INFO_DEPENDENCY_LINE % d \
+ for d in self.pkg.requires]),
+ "provides" : "\n".join([PACKAGE_INFO_DEPENDENCY_LINE % d \
+ for d in self.pkg.provides]),
+ "conflicts" : "\n".join([PACKAGE_INFO_DEPENDENCY_LINE % d \
+ for d in self.pkg.conflicts]),
+ "obsoletes" : "\n".join([PACKAGE_INFO_DEPENDENCY_LINE % d \
+ for d in self.pkg.obsoletes]),
})
# Format description.
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-08-29 18:18+0200\n"
+"POT-Creation-Date: 2011-08-29 19:24+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
msgid "Do not verify build dependencies."
msgstr ""
-#: ../pakfire/compress.py:133 ../pakfire/packages/packager.py:462
+#: ../pakfire/compress.py:133 ../pakfire/packages/packager.py:483
#, python-format
msgid "Compressing %s"
msgstr ""
msgstr ""
#. Load progressbar.
-#: ../pakfire/packages/packager.py:288
+#: ../pakfire/packages/packager.py:309
msgid "Packaging"
msgstr ""
-#: ../pakfire/packages/packager.py:579
+#: ../pakfire/packages/packager.py:600
#, python-format
msgid "Building source package %s:"
msgstr ""