-#!@PORTAGE_BASH@
+#!/bin/bash
# Copyright 1999-2009 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$
-source "${PORTAGE_BIN_PATH:-@PORTAGE_BASE@/bin}"/isolated-functions.sh
+source "${PORTAGE_BIN_PATH:-/usr/lib/portage/bin}"/isolated-functions.sh
if [ $# -lt 1 ] ; then
vecho "${0##*/}: at least one argument needed" 1>&2
exit 1
fi
-dir="${ED}usr/share/doc/${PF}/${_E_DOCDESTTREE_}"
+dir="${D}usr/share/doc/${PF}/${_E_DOCDESTTREE_}"
if [ ! -d "${dir}" ] ; then
install -d "${dir}"
fi
fi
case "$EAPI" in
- 0|1|2)
+ 0|1|2|3)
PRESERVE_SYMLINKS=n
;;
*)
rm -rf "${T}/${2}" || exit $?
case "$EAPI" in
- 0|1|2)
+ 0|1|2|3)
cp "$1" "$T/$2" || exit $?
;;
*)
# Skip this for older EAPIs since lots of ebuilds/eclasses
# have stuff in global scope that really belongs somewhere
# like pkg_setup or src_configure.
- if [[ -n $EAPI ]] && ! hasq "$EAPI" 0 1 2 ; then
+ if [[ -n $EAPI ]] && ! hasq "$EAPI" 0 1 2 3 ; then
die "use() called during invalid phase: $EBUILD_PHASE"
fi
_unpack_tar lzma
;;
xz)
- if hasq $eapi 0 1 2 ; then
+ if hasq $eapi 0 1 2 3 ; then
vecho "unpack ${x}: file format not recognized. Ignoring."
else
_unpack_tar xz
fi
# EAPI=3 adds --disable-dependency-tracking to econf
- if ! hasq "$EAPI" 0 1 2 ; then
+ if ! hasq "$EAPI" 0 1 2 3 ; then
set -- --disable-dependency-tracking "$@"
fi
fi
}
-_eapi3_src_install() {
+_eapi4_src_install() {
if [[ -f Makefile || -f GNUmakefile || -f makefile ]] ; then
emake DESTDIR="${D}" install
fi
if [[ -d $S ]] ; then
cd "${S}"
- elif hasq $EAPI 0 1 2; then
+ elif hasq $EAPI 0 1 2 3; then
cd "${WORKDIR}"
elif [[ -z ${A} ]] && ! has_phase_defined_up_to prepare; then
cd "${WORKDIR}"
if [[ -d $S ]] ; then
cd "${S}"
- elif hasq $EAPI 0 1 2; then
+ elif hasq $EAPI 0 1 2 3; then
cd "${WORKDIR}"
elif [[ -z ${A} ]] && ! has_phase_defined_up_to configure; then
cd "${WORKDIR}"
if [[ -d $S ]] ; then
cd "${S}"
- elif hasq $EAPI 0 1 2; then
+ elif hasq $EAPI 0 1 2 3; then
cd "${WORKDIR}"
elif [[ -z ${A} ]] && ! has_phase_defined_up_to compile; then
cd "${WORKDIR}"
mkdir "${PORTAGE_BUILDDIR}/image"
if [[ -d $S ]] ; then
cd "${S}"
- elif hasq $EAPI 0 1 2; then
+ elif hasq $EAPI 0 1 2 3; then
cd "${WORKDIR}"
elif [[ -z ${A} ]] && ! has_phase_defined_up_to install; then
cd "${WORKDIR}"
case "$arg" in
pretend)
- ! hasq $eapi 0 1 2 && \
+ ! hasq $eapi 0 1 2 3 && \
phase_func=pkg_pretend
;;
setup)
declare -F src_compile >/dev/null || \
src_compile() { _eapi2_src_compile "$@" ; }
- [[ $eapi == 2 ]] || declare -F src_install >/dev/null || \
- src_install() { _eapi3_src_install "$@" ; }
+ has $eapi 2 3 || declare -F src_install >/dev/null || \
+ src_install() { _eapi4_src_install "$@" ; }
if hasq $phase_func $default_phases ; then
[[ -n $EAPI ]] || EAPI=0
- if has "$EAPI" 0 1 2 ; then
+ if has "$EAPI" 0 1 2 3 ; then
export RDEPEND=${RDEPEND-${DEPEND}}
debug-print "RDEPEND: not set... Setting to: ${DEPEND}"
fi
pkg_nofetch pkg_postinst pkg_postrm pkg_preinst pkg_prerm
pkg_setup src_test src_unpack"
;;
- 2)
+ 2|3)
_valid_phases="src_compile pkg_config src_configure pkg_info
src_install pkg_nofetch pkg_postinst pkg_postrm pkg_preinst
src_prepare pkg_prerm pkg_setup src_test src_unpack"
# we may want to make this configurable somewhere else
local ebuild_helpers_path
case ${EAPI} in
- 3|3_pre1)
- ebuild_helpers_path="${PORTAGE_BIN_PATH}/ebuild-helpers/3:${PORTAGE_BIN_PATH}/ebuild-helpers"
+ 4|4_pre1)
+ ebuild_helpers_path="${PORTAGE_BIN_PATH}/ebuild-helpers/4:${PORTAGE_BIN_PATH}/ebuild-helpers"
;;
*)
ebuild_helpers_path="${PORTAGE_BIN_PATH}/ebuild-helpers"
}
nonfatal() {
- if has "${EAPI:-0}" 0 1 2; then
+ if has "${EAPI:-0}" 0 1 2 3; then
die "$FUNCNAME() not supported in this EAPI"
fi
if [[ $# -lt 1 ]]; then
for x in pkg_setup pkg_nofetch src_unpack src_prepare src_configure \
src_compile src_test src_install pkg_preinst pkg_postinst \
pkg_prerm pkg_postrm ; do
- unset -f default_$x _eapi{0,1,2}_$x
+ unset -f default_$x _eapi{0,1,2,3,4}_$x
done
unset x
mydict["USE"] = self.get("PORTAGE_USE", "")
# Don't export AA to the ebuild environment in EAPIs that forbid it
- if eapi not in ("0", "1", "2"):
+ if eapi not in ("0", "1", "2", "3"):
mydict.pop("AA", None)
# sandbox's bashrc sources /etc/profile which unsets ROOTPATH,
if mydo == "prepare" and eapi in ("0", "1"):
return os.EX_OK
- if mydo == "pretend" and eapi in ("0", "1", "2"):
+ if mydo == "pretend" and eapi in ("0", "1", "2", "3"):
return os.EX_OK
kwargs = actionmap[mydo]["args"]
return rval
-_testing_eapis = frozenset(["3_pre1"])
-_deprecated_eapis = frozenset(["2_pre3", "2_pre2", "2_pre1"])
+_testing_eapis = frozenset(["4_pre1"])
+_deprecated_eapis = frozenset(["3_pre1", "2_pre3", "2_pre2", "2_pre1"])
def _eapi_is_deprecated(eapi):
return eapi in _deprecated_eapis
mysettings["PORTAGE_BUILDDIR"], ".exit_status")
#set up KV variable -- DEP SPEEDUP :: Don't waste time. Keep var persistent.
- if eapi not in ('0', '1', '2'):
+ if eapi not in ('0', '1', '2', '3'):
# Discard KV for EAPIs that don't support it. Cache KV is restored
# from the backupenv whenever config.reset() is called.
mysettings.pop('KV', None)
if sys.hexversion >= 0x3000000:
keys = __iter__
+class OrderedDict(UserDict):
+
+ def __init__(self, *args, **kwargs):
+ self._order = []
+ UserDict.__init__(self, *args, **kwargs)
+
+ def __iter__(self):
+ return iter(self._order)
+
+ def __setitem__(self, key, item):
+ if key in self:
+ self._order.remove(key)
+ UserDict.__setitem__(self, key, item)
+ self._order.append(key)
+
+ def __delitem__(self, key):
+ UserDict.__delitem__(self, key)
+ self._order.remove(key)
+
+ def clear(self):
+ UserDict.clear(self)
+ del self._order[:]
+
+ if sys.hexversion >= 0x3000000:
+ keys = __iter__
+
class ProtectedDict(MutableMapping):
"""
given an initial dict, this wraps that dict storing changes in a secondary dict, protecting
# protocols and requires the base url to have a trailing
# slash, so join manually...
f = urllib_request_urlopen(base_url.rstrip("/") + "/Packages")
+ f_dec = codecs.iterdecode(f,
+ _encodings['repo.content'], errors='replace')
try:
- rmt_idx.readHeader(f)
+ rmt_idx.readHeader(f_dec)
remote_timestamp = rmt_idx.header.get("TIMESTAMP", None)
if not remote_timestamp:
# no timestamp in the header, something's wrong
rmt_idx.header.get("VERSION"), noiselevel=-1)
pkgindex = None
elif local_timestamp != remote_timestamp:
- rmt_idx.readBody(f)
+ rmt_idx.readBody(f_dec)
pkgindex = rmt_idx
finally:
f.close()
from portage.util import atomic_ofstream, ensure_dirs
ensure_dirs(os.path.dirname(pkgindex_file))
f = atomic_ofstream(pkgindex_file)
- try:
- pkgindex.write(f)
- finally:
- f.close()
+ pkgindex.write(f)
+ f.close()
if pkgindex:
self._remotepkgs = {}
for d in pkgindex.packages:
)
from portage.cache.cache_errors import CacheError
-from portage.cache.mappings import slot_dict_class
+from portage.cache.mappings import OrderedDict
from portage.const import REPO_NAME_LOC
from portage.data import portage_gid, secpass
from portage.dbapi import dbapi
matchall=(useflags is None))
myuris = flatten(myuris)
- uri_map = {}
+ uri_map = OrderedDict()
myuris.reverse()
while myuris:
return ("'%s'" % m.group(1)) + \
" call should be moved to src_prepare from line: %d"
-# EAPI-3 checks
-class Eapi3IncompatibleFuncs(LineCheck):
+# EAPI-4 checks
+class Eapi4IncompatibleFuncs(LineCheck):
repoman_check_name = 'EAPI.incompatible'
ignore_line = re.compile(r'(^\s*#)')
banned_commands_re = re.compile(r'^\s*(dosed|dohard)')
self.eapi = pkg.metadata['EAPI']
def check_eapi(self, eapi):
- return self.eapi not in ('0', '1', '2')
+ return self.eapi not in ('0', '1', '2', '3')
def check(self, num, line):
m = self.banned_commands_re.match(line)
if m is not None:
return ("'%s'" % m.group(1)) + \
- " has been banned in EAPI=3 on line: %d"
+ " has been banned in EAPI=4 on line: %d"
-class Eapi3GoneVars(LineCheck):
+class Eapi4GoneVars(LineCheck):
repoman_check_name = 'EAPI.incompatible'
ignore_line = re.compile(r'(^\s*#)')
undefined_vars_re = re.compile(r'.*\$(\{(AA|KV)\}|(AA|KV))')
self.eapi = pkg.metadata['EAPI']
def check_eapi(self, eapi):
- return self.eapi not in ('0', '1', '2')
+ return self.eapi not in ('0', '1', '2', '3')
def check(self, num, line):
m = self.undefined_vars_re.match(line)
if m is not None:
return ("variable '$%s'" % m.group(1)) + \
- " is gone in EAPI=3 on line: %d"
+ " is gone in EAPI=4 on line: %d"
_constant_checks = tuple((c() for c in (
IUseUndefined, InheritAutotools,
EMakeParallelDisabled, EMakeParallelDisabledViaMAKEOPTS,
DeprecatedBindnowFlags, SrcUnpackPatches, WantAutoDefaultValue,
- SrcCompileEconf, Eapi3IncompatibleFuncs, Eapi3GoneVars)))
+ SrcCompileEconf, Eapi4IncompatibleFuncs, Eapi4GoneVars)))
_here_doc_re = re.compile(r'.*\s<<[-]?(\w+)$')