}
_eapi1_src_compile() {
- if [[ -x ${ECONF_SOURCE:-.}/configure ]] ; then
- econf
- fi
+ _eapi2_src_configure
_eapi2_src_compile
}
fi
if ! hasq keepwork $FEATURES; then
- rm -rf "${PORTAGE_BUILDDIR}/.exit_status"
- rm -rf "${PORTAGE_BUILDDIR}/.logid"
- rm -rf "${PORTAGE_BUILDDIR}/.unpacked"
- rm -rf "${PORTAGE_BUILDDIR}/.compiled"
- rm -rf "${PORTAGE_BUILDDIR}/.tested"
- rm -rf "${PORTAGE_BUILDDIR}/.packaged"
+ rm -f "$PORTAGE_BUILDDIR"/.{exit_status,logid,unpacked} \
+ "$PORTAGE_BUILDDIR"/.{configured,compiled,tested,packaged}
+
rm -rf "${PORTAGE_BUILDDIR}/build-info"
rm -rf "${WORKDIR}"
fi
vecho ">>> Configuring source in $srcdir ..."
ebuild_phase src_configure
+ touch "$PORTAGE_BUILDDIR"/.configured
vecho ">>> Source configured."
- #|| abort_configure "fail"
- cd "$PORTAGE_BUILDDIR"
- touch .configured
+
[[ $(type -t post_src_configure) = function ]] && \
qa_call post_src_configure
vecho ">>> Compiling source in ${srcdir} ..."
ebuild_phase src_compile
+ touch "$PORTAGE_BUILDDIR"/.compiled
vecho ">>> Source compiled."
- #|| abort_compile "fail"
- cd "${PORTAGE_BUILDDIR}"
- touch .compiled
+
[ "$(type -t post_src_compile)" == "function" ] && qa_call post_src_compile
trap SIGINT SIGQUIT
debug-print "RDEPEND: not set... Setting to: ${DEPEND}"
fi
- # Set default EAPI if necessary, so that most
- # code can simply assume that it's defined.
- # PREFIX HACK: ignore prefix, and then respect it again
- [[ -n ${EAPI/prefix/} ]] || EAPI="${EAPI}${EAPI:+ }0"
-
# add in dependency info from eclasses
IUSE="${IUSE} ${E_IUSE}"
DEPEND="${DEPEND} ${E_DEPEND}"
set +f
fi
+# Set default EAPI if necessary, so that most
+# code can simply assume that it's defined.
+# PREFIX HACK: ignore prefix, and then respect it again
+[[ -n ${EAPI/prefix/} ]] || EAPI="${EAPI}${EAPI:+ }0"
+
# enable bashrc support for the clean phase
[[ ${EBUILD_PHASE} == clean ]] && source_all_bashrcs
<title>Ebuild</title>
&package_ebuild_phases;
&package_ebuild_helper_functions;
+&package_ebuild_eapi_0;
+&package_ebuild_eapi_1;
&package_ebuild_eapi_2;
</chapter>
--- /dev/null
+<sect1 id='package-ebuild-eapi-0'>
+ <title>EAPI 0</title>
+ <sect2 id='package-ebuild-eapi-0-phases'>
+ <title>Phases</title>
+ <sect3 id='package-ebuild-eapi-0-phases-default-src-compile'>
+ <title>Default src_compile Phase Function</title>
+ <programlisting>
+src_compile() {
+ if [ -x ./configure ] ; then
+ econf
+ fi
+ if [ -f Makefile ] || [ -f GNUmakefile ] || [ -f makefile ] ; then
+ emake || die "emake failed"
+ fi
+}
+ </programlisting>
+ </sect3>
+ </sect2>
+</sect1>
--- /dev/null
+<sect1 id='package-ebuild-eapi-1'>
+ <title>EAPI 1</title>
+ <sect2 id='package-ebuild-eapi-1-phases'>
+ <title>Phases</title>
+ <sect3 id='package-ebuild-eapi-1-phases-default-src-compile'>
+ <title>Default src_compile Phase Function</title>
+ <para>
+ Support for the ECONF_SOURCE variable, which is also supported
+ by econf, has been added to the default src_compile implementation.
+ </para>
+ <programlisting>
+src_compile() {
+ if [[ -x ${ECONF_SOURCE:-.}/configure ]] ; then
+ econf
+ fi
+ if [ -f Makefile ] || [ -f GNUmakefile ] || [ -f makefile ] ; then
+ emake || die "emake failed"
+ fi
+}
+ </programlisting>
+ </sect3>
+ </sect2>
+ <sect2 id='package-ebuild-eapi-1-slot-deps'>
+ <title>SLOT Dependencies</title>
+ <para>
+ Any valid atom can be constrained to match a specific SLOT. This is
+ accomplished by appending a colon to the atom, followed by a SLOT value.
+ </para>
+ <table><title>Slot Dependency Examples</title>
+ <tgroup cols='1' align='left' >
+ <colspec colname='atom'/>
+ <thead>
+ <row>
+ <entry>Atom</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>x11-libs/qt:3</entry>
+ </row>
+ <row>
+ <entry>~x11-libs/qt-3.3.8:3</entry>
+ </row>
+ <row>
+ <entry>>=x11-libs/qt-3.3.8:3</entry>
+ </row>
+ <row>
+ <entry>=x11-libs/qt-3.3*:3</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect2>
+</sect1>
src_configure function is called in between the src_unpack and
src_compile functions.
</para>
+ <programlisting>
+src_configure() {
+ if [[ -x ${ECONF_SOURCE:-.}/configure ]] ; then
+ econf
+ fi
+}
+
+src_compile() {
+ if [ -f Makefile ] || [ -f GNUmakefile ] || [ -f makefile ] ; then
+ emake || die "emake failed"
+ fi
+}
+ </programlisting>
<table><title>Execution Order of Phase Functions</title>
<tgroup cols='1' align='left' >
<colspec colname='name'/>
<!ENTITY package_ebuild SYSTEM "package/ebuild.docbook">
<!ENTITY package_ebuild_phases SYSTEM "package/ebuild/phases.docbook">
<!ENTITY package_ebuild_helper_functions SYSTEM "package/ebuild/helper_functions.docbook">
+ <!ENTITY package_ebuild_eapi_0 SYSTEM "package/ebuild/eapi/0.docbook">
+ <!ENTITY package_ebuild_eapi_1 SYSTEM "package/ebuild/eapi/1.docbook">
<!ENTITY package_ebuild_eapi_2 SYSTEM "package/ebuild/eapi/2.docbook">
<!ENTITY qa SYSTEM "qa.docbook">
<!ENTITY config SYSTEM "config.docbook">
-.TH "COLOR.MAP" "5" "Jul 2007" "Portage 2.1.3" "Portage"
+.TH "COLOR.MAP" "5" "Aug 2008" "Portage 2.2" "Portage"
.SH "NAME"
color.map \- custom color settings for Portage
.SH "SYNOPSIS"
-.TH "DISPATCH-CONF" "1" "Dec 2005" "Portage 2.1" "Portage"
+.TH "DISPATCH-CONF" "1" "Aug 2008" "Portage 2.2" "Portage"
.SH NAME
dispatch-conf \- Sanely update configuration files after emerging new packages
.SH SYNOPSIS
-.TH "EBUILD" "1" "Jun 2007" "Portage 2.1.3" "Portage"
+.TH "EBUILD" "1" "Aug 2008" "Portage 2.2" "Portage"
.SH "NAME"
ebuild \- a low level interface to the Portage system
.SH "SYNOPSIS"
-.TH "EBUILD" "5" "Jun 2007" "Portage 2.1.3" "Portage"
+.TH "EBUILD" "5" "Aug 2008" "Portage 2.2" "Portage"
.SH "NAME"
ebuild \- the internal format, variables, and functions in an ebuild script
.SH "DESCRIPTION"
-.TH "EMAINT" "1" "Dec 2005" "Portage 2.1" "Portage"
+.TH "EMAINT" "1" "Aug 2008" "Portage 2.2" "Portage"
.SH NAME
emaint \- performs system health checks and maintenance
.SH SYNOPSIS
-.TH "EMERGE" "1" "Jun 2007" "Portage 2.1.3" "Portage"
+.TH "EMERGE" "1" "Aug 2008" "Portage 2.2" "Portage"
.SH "NAME"
emerge \- Command\-line interface to the Portage system
.SH "SYNOPSIS"
-.TH "ENV-UPDATE" "1" "Mar 2006" "Portage 2.1" "Portage"
+.TH "ENV-UPDATE" "1" "Aug 2008" "Portage 2.2" "Portage"
.SH NAME
env\-update \- updates environment settings automatically
.SH SYNOPSIS
-.TH "ETC-UPDATE" "1" "Dec 2005" "Portage 2.1" "Portage"
+.TH "ETC-UPDATE" "1" "Aug 2008" "Portage 2.2" "Portage"
.SH NAME
etc-update \- handle configuration file updates
.SH SYNOPSIS
-.TH "MAKE.CONF" "5" "Jun 2007" "Portage 2.1.3" "Portage"
+.TH "MAKE.CONF" "5" "Aug 2008" "Portage 2.2" "Portage"
.SH "NAME"
make.conf \- custom settings for Portage
.SH "SYNOPSIS"
.br
Defaults to the value of $ARCH.
.TP
-\fBBUILD_PREFIX\fR = \fI[path]\fR
-Defines the location of the package working directory.
-.br
-Defaults to ${PORTAGE_TMPDIR}/portage
-.TP
.B CBUILD
This variable is passed by the \fIebuild scripts\fR to the \fIconfigure\fR
as \fI\-\-build=${CBUILD}\fR only if it is defined. Do not set this yourself
-.TH "PORTAGE" "5" "Jun 2007" "Portage 2.1.3" "Portage"
+.TH "PORTAGE" "5" "Aug 2008" "Portage 2.2" "Portage"
.SH NAME
portage \- the heart of Gentoo
.SH "DESCRIPTION"
-.TH "QUICKPKG" "1" "Dec 2005" "Portage 2.1" "Portage"
+.TH "QUICKPKG" "1" "Aug 2008" "Portage 2.2" "Portage"
.SH NAME
quickpkg \- creates portage packages
.SH SYNOPSIS
-.TH "REPOMAN" "1" "Dec 2005" "Portage 2.1" "Portage"
+.TH "REPOMAN" "1" "Aug 2008" "Portage 2.2" "Portage"
.SH NAME
repoman \- Gentoo's program to enforce a minimal level of quality assurance in packages added to the portage tree
.SH SYNOPSIS
portdb = root_config.trees["porttree"].dbapi
self.root = real_vartree.root
self.settings = real_vartree.settings
- mykeys = list(Package.metadata_keys)
- for required_key in ("COUNTER", "SLOT"):
- if required_key not in mykeys:
- mykeys.append(required_key)
+ mykeys = list(real_vartree.dbapi._aux_cache_keys)
self._pkg_cache = pkg_cache
self.dbapi = PackageVirtualDbapi(real_vartree.settings)
vdb_path = os.path.join(self.root, portage.VDB_PATH)
def _pkg(self, cpv):
root_config = self._root_config
real_vardb = root_config.trees["vartree"].dbapi
+ db_keys = list(real_vardb._aux_cache_keys)
pkg = Package(cpv=cpv, installed=True,
- metadata=izip(Package.metadata_keys,
- real_vardb.aux_get(cpv, Package.metadata_keys)),
+ metadata=izip(db_keys, real_vardb.aux_get(cpv, db_keys)),
root_config=root_config,
type_name="installed")
return pkg
pkg_tree_map = RootConfig.pkg_tree_map
- _mydbapi_keys = Package.metadata_keys
-
_dep_keys = ["DEPEND", "RDEPEND", "PDEPEND"]
# If dep calculation time exceeds this value then automatically
if "--usepkg" in self.myopts:
db_keys = list(bindb._aux_cache_keys)
dbs.append((bindb, "binary", True, False, db_keys))
- db_keys = self._mydbapi_keys
+ db_keys = list(trees[myroot]["vartree"].dbapi._aux_cache_keys)
dbs.append((vardb, "installed", True, True, db_keys))
self._filtered_trees[myroot]["dbs"] = dbs
if "--usepkg" in self.myopts:
os.path.realpath(self.trees[myroot]["bintree"].getname(mykey)):
print colorize("BAD", "\n*** You need to adjust PKGDIR to emerge this package.\n")
return 0, myfavorites
- metadata = izip(self._mydbapi_keys,
- bindb.aux_get(mykey, self._mydbapi_keys))
+ db_keys = list(bindb._aux_cache_keys)
+ metadata = izip(db_keys, bindb.aux_get(mykey, db_keys))
pkg = Package(type_name="binary", root_config=root_config,
cpv=mykey, built=True, metadata=metadata,
onlydeps=onlydeps)
else:
raise portage.exception.PackageNotFound(
"%s is not in a valid portage tree hierarchy or does not exist" % x)
- metadata = izip(self._mydbapi_keys,
- portdb.aux_get(mykey, self._mydbapi_keys))
+ db_keys = list(portdb._aux_cache_keys)
+ metadata = izip(db_keys, portdb.aux_get(mykey, db_keys))
pkg = Package(type_name="ebuild", root_config=root_config,
cpv=mykey, metadata=metadata, onlydeps=onlydeps)
pkgsettings.setcpv(pkg)
pkg = self._pkg_cache.get(
(type_name, root_config.root, cpv, operation))
if pkg is None:
- db = root_config.trees[
- self.pkg_tree_map[type_name]].dbapi
- metadata = izip(Package.metadata_keys,
- db.aux_get(cpv, Package.metadata_keys))
+ tree_type = self.pkg_tree_map[type_name]
+ db = root_config.trees[tree_type].dbapi
+ db_keys = list(self._trees_orig[root_config.root][
+ tree_type].dbapi._aux_cache_keys)
+ metadata = izip(db_keys, db.aux_get(cpv, db_keys))
pkg = Package(cpv=cpv, metadata=metadata,
root_config=root_config, installed=installed)
if type_name == "ebuild":
continue
if action != "merge":
continue
- mydb = trees[myroot][self.pkg_tree_map[pkg_type]].dbapi
+ tree_type = self.pkg_tree_map[pkg_type]
+ mydb = trees[myroot][tree_type].dbapi
+ db_keys = list(self._trees_orig[myroot][
+ tree_type].dbapi._aux_cache_keys)
try:
- metadata = izip(self._mydbapi_keys,
- mydb.aux_get(pkg_key, self._mydbapi_keys))
+ metadata = izip(db_keys, mydb.aux_get(pkg_key, db_keys))
except KeyError:
# It does no exist or it is corrupt.
if action == "uninstall":
# jobs are added, so we need to limit the rate of adding
# new jobs.
self._job_delay_max = 5
- self._job_delay_factor = 0.75
+ self._job_delay_factor = 1.0
+ self._job_delay_exp = 1.5
self._previous_job_start_time = None
self._set_digraph(digraph)
settings = merge.merge.settings
build_dir = settings.get("PORTAGE_BUILDDIR")
build_log = settings.get("PORTAGE_LOG_FILE")
- fetch_log = self._fetch_Log
+ fetch_log = self._fetch_log
self._failed_pkgs.append(self._failed_pkg(
build_dir=build_dir, build_log=build_log,
current_time = time.time()
- delay = self._job_delay_factor * self._jobs
+ delay = self._job_delay_factor * self._jobs ** self._job_delay_exp
if delay > self._job_delay_max:
delay = self._job_delay_max
if (current_time - self._previous_job_start_time) < delay:
if installed:
operation = "nomerge"
- db = root_config.trees[
- depgraph.pkg_tree_map[type_name]].dbapi
- metadata = izip(Package.metadata_keys,
- db.aux_get(cpv, Package.metadata_keys))
+ tree_type = depgraph.pkg_tree_map[type_name]
+ db = root_config.trees[tree_type].dbapi
+ db_keys = list(self.trees[root_config.root][
+ tree_type].dbapi._aux_cache_keys)
+ metadata = izip(db_keys, db.aux_get(cpv, db_keys))
pkg = Package(cpv=cpv, metadata=metadata,
root_config=root_config, installed=installed)
if type_name == "ebuild":
xterm_titles = "notitles" not in settings.features
pkg_cache = {}
+ db_keys = list(vartree.dbapi._aux_cache_keys)
def _pkg(cpv):
pkg = pkg_cache.get(cpv)
if pkg is None:
pkg = Package(cpv=cpv, installed=True,
- metadata=izip(Package.metadata_keys,
- vartree.dbapi.aux_get(cpv, Package.metadata_keys)),
+ metadata=izip(db_keys, vartree.dbapi.aux_get(cpv, db_keys)),
root_config=root_config,
type_name="installed")
pkg_cache[cpv] = pkg
# Distributed under the terms of the GNU General Public License v2
# $Id$
+__all__ = ["PreservedLibsRegistry", "LinkageMap",
+ "vardbapi", "vartree", "dblink"] + \
+ ["write_contents", "tar_contents"]
+
from portage.checksum import perform_md5
from portage.const import CACHE_PATH, CONFIG_MEMORY_FILE, PORTAGE_BIN_PATH, \
PRIVATE_PATH, VDB_PATH, EPREFIX, EPREFIX_LSTRIP
import os, re, sys, stat, errno, commands, copy, time, subprocess
import logging
+import shlex
from itertools import izip
try:
self.vartree = vartree
self._aux_cache_keys = set(
["CHOST", "COUNTER", "DEPEND", "DESCRIPTION",
- "EAPI", "HOMEPAGE", "INHERITED", "IUSE", "KEYWORDS",
+ "EAPI", "HOMEPAGE", "IUSE", "KEYWORDS",
"LICENSE", "PDEPEND", "PROVIDE", "RDEPEND",
"repository", "RESTRICT" , "SLOT", "USE"])
self._aux_cache_obj = None
def _collision_protect(self, srcroot, destroot, mypkglist, mycontents):
collision_ignore = set([normalize_path(myignore) for myignore in \
- self.settings.get("COLLISION_IGNORE", "").split()])
+ shlex.split(self.settings.get("COLLISION_IGNORE", ""))])
showMessage = self._display_merge
scheduler = self._scheduler