From 5b1430135b20df1bf29dd53274fa6b845f0a7ed9 Mon Sep 17 00:00:00 2001 From: Fabian Groffen Date: Sun, 10 Aug 2008 09:37:51 +0000 Subject: [PATCH] Merged from trunk -r11372:11387 | 11373 | Bug #234157 - Remove BUILD_PREFIX from the docs since it's | | zmedico | not a user config variable. | | 11374 | Bug #234100 - Update date and portage version in man page | | zmedico | headers. | | 11375 | * Use shlex.split() for splitting COLLISION_IGNORE. * Define | | zmedico | __all__. | | 11376 | Add write_contents() and tar_contents() functions to | | zmedico | __all__. | | 11377 | Fix dyn_clean() to properly clean | | zmedico | $PORTAGE_BUILDDIR/.configured. | | 11378 | Make the scheduler's job delay ramp up faster by increasing | | zmedico | the factor to 1.0 and adding an exponent of 1.5. | | 11379 | Eliminate duplicate code by making _eapi1_src_compile() call | | zmedico | _eapi2_src_configure(). | | 11380 | Remove pointless `cd` calls in dyn_configure() and | | zmedico | dyn_compile(). | | 11381 | Remove INHERITED from the vardbapi aux_get cache since it's | | zmedico | not really that useful (@live-rebuild currently pulls | | | INHERITED from the highest visible ebuild). Also adjust keys | | | used to pull metadata for Package instances, so that | | | INHERITED won't get pulled from the vardbapi anymore. | | 11382 | Fix typo. | | zmedico | | | 11383 | Add new sections for EAPI 0 and 1 (currently empty). | | zmedico | | | 11384 | Document the differences between EAPIs 0 and 1. | | zmedico | | | 11385 | Add sample code for the new src_configure and src_compile | | zmedico | phase functions. | | 11386 | Remove most references to Package.metadata_keys and replace | | zmedico | them with approriate keys for the given package type. | | 11387 | Move the default EAPI definition where it will work in any | | zmedico | case it might be necessary, such as after loading an exising | | | environment. | svn path=/main/branches/prefix/; revision=11390 --- bin/ebuild.sh | 33 +++++++----------- doc/package/ebuild.docbook | 2 ++ doc/package/ebuild/eapi/0.docbook | 19 ++++++++++ doc/package/ebuild/eapi/1.docbook | 54 ++++++++++++++++++++++++++++ doc/package/ebuild/eapi/2.docbook | 13 +++++++ doc/portage.docbook | 2 ++ man/color.map.5 | 2 +- man/dispatch-conf.1 | 2 +- man/ebuild.1 | 2 +- man/ebuild.5 | 2 +- man/emaint.1 | 2 +- man/emerge.1 | 2 +- man/env-update.1 | 2 +- man/etc-update.1 | 2 +- man/make.conf.5 | 7 +--- man/portage.5 | 2 +- man/quickpkg.1 | 2 +- man/repoman.1 | 2 +- pym/_emerge/__init__.py | 58 +++++++++++++++---------------- pym/portage/dbapi/vartree.py | 9 +++-- 20 files changed, 151 insertions(+), 68 deletions(-) create mode 100644 doc/package/ebuild/eapi/0.docbook create mode 100644 doc/package/ebuild/eapi/1.docbook diff --git a/bin/ebuild.sh b/bin/ebuild.sh index 08aa8341d..faa0c5d9f 100755 --- a/bin/ebuild.sh +++ b/bin/ebuild.sh @@ -623,9 +623,7 @@ _eapi0_src_test() { } _eapi1_src_compile() { - if [[ -x ${ECONF_SOURCE:-.}/configure ]] ; then - econf - fi + _eapi2_src_configure _eapi2_src_compile } @@ -737,12 +735,9 @@ dyn_clean() { 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 @@ -889,10 +884,9 @@ dyn_configure() { 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 @@ -914,10 +908,9 @@ dyn_compile() { 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 @@ -1896,11 +1889,6 @@ if ! hasq ${EBUILD_PHASE} clean && \ 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}" @@ -1911,6 +1899,11 @@ if ! hasq ${EBUILD_PHASE} clean && \ 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 diff --git a/doc/package/ebuild.docbook b/doc/package/ebuild.docbook index fa4f75609..162b79c53 100644 --- a/doc/package/ebuild.docbook +++ b/doc/package/ebuild.docbook @@ -2,5 +2,7 @@ Ebuild &package_ebuild_phases; &package_ebuild_helper_functions; +&package_ebuild_eapi_0; +&package_ebuild_eapi_1; &package_ebuild_eapi_2; diff --git a/doc/package/ebuild/eapi/0.docbook b/doc/package/ebuild/eapi/0.docbook new file mode 100644 index 000000000..72e998b9c --- /dev/null +++ b/doc/package/ebuild/eapi/0.docbook @@ -0,0 +1,19 @@ + + EAPI 0 + + Phases + + Default src_compile Phase Function + +src_compile() { + if [ -x ./configure ] ; then + econf + fi + if [ -f Makefile ] || [ -f GNUmakefile ] || [ -f makefile ] ; then + emake || die "emake failed" + fi +} + + + + diff --git a/doc/package/ebuild/eapi/1.docbook b/doc/package/ebuild/eapi/1.docbook new file mode 100644 index 000000000..ad84ae6f9 --- /dev/null +++ b/doc/package/ebuild/eapi/1.docbook @@ -0,0 +1,54 @@ + + EAPI 1 + + Phases + + Default src_compile Phase Function + + Support for the ECONF_SOURCE variable, which is also supported + by econf, has been added to the default src_compile implementation. + + +src_compile() { + if [[ -x ${ECONF_SOURCE:-.}/configure ]] ; then + econf + fi + if [ -f Makefile ] || [ -f GNUmakefile ] || [ -f makefile ] ; then + emake || die "emake failed" + fi +} + + + + + SLOT Dependencies + + 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. + + Slot Dependency Examples + + + + + Atom + + + + + x11-libs/qt:3 + + + ~x11-libs/qt-3.3.8:3 + + + >=x11-libs/qt-3.3.8:3 + + + =x11-libs/qt-3.3*:3 + + + +
+
+
diff --git a/doc/package/ebuild/eapi/2.docbook b/doc/package/ebuild/eapi/2.docbook index 1bd1c986c..8e152f21d 100644 --- a/doc/package/ebuild/eapi/2.docbook +++ b/doc/package/ebuild/eapi/2.docbook @@ -109,6 +109,19 @@ src_configure function is called in between the src_unpack and src_compile functions. + +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 +} + Execution Order of Phase Functions diff --git a/doc/portage.docbook b/doc/portage.docbook index c038079a2..bfe9750d3 100644 --- a/doc/portage.docbook +++ b/doc/portage.docbook @@ -15,6 +15,8 @@ + + diff --git a/man/color.map.5 b/man/color.map.5 index 39f76a4cb..7b11ba23a 100644 --- a/man/color.map.5 +++ b/man/color.map.5 @@ -1,4 +1,4 @@ -.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" diff --git a/man/dispatch-conf.1 b/man/dispatch-conf.1 index 5bc34b210..a19ca1fbc 100644 --- a/man/dispatch-conf.1 +++ b/man/dispatch-conf.1 @@ -1,4 +1,4 @@ -.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 diff --git a/man/ebuild.1 b/man/ebuild.1 index 5fa2f8116..1bbb004e4 100644 --- a/man/ebuild.1 +++ b/man/ebuild.1 @@ -1,4 +1,4 @@ -.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" diff --git a/man/ebuild.5 b/man/ebuild.5 index d4af35d17..ef5f2136e 100644 --- a/man/ebuild.5 +++ b/man/ebuild.5 @@ -1,4 +1,4 @@ -.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" diff --git a/man/emaint.1 b/man/emaint.1 index 2cf31420f..31624b208 100644 --- a/man/emaint.1 +++ b/man/emaint.1 @@ -1,4 +1,4 @@ -.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 diff --git a/man/emerge.1 b/man/emerge.1 index e92f85d2e..65a893e9c 100644 --- a/man/emerge.1 +++ b/man/emerge.1 @@ -1,4 +1,4 @@ -.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" diff --git a/man/env-update.1 b/man/env-update.1 index 12f8fc878..a7d069599 100644 --- a/man/env-update.1 +++ b/man/env-update.1 @@ -1,4 +1,4 @@ -.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 diff --git a/man/etc-update.1 b/man/etc-update.1 index c4b771962..12feff1cb 100644 --- a/man/etc-update.1 +++ b/man/etc-update.1 @@ -1,4 +1,4 @@ -.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 diff --git a/man/make.conf.5 b/man/make.conf.5 index 0eee4cd73..c60203038 100644 --- a/man/make.conf.5 +++ b/man/make.conf.5 @@ -1,4 +1,4 @@ -.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" @@ -36,11 +36,6 @@ set this to '~ppc'. This is an incremental variable. Only define a .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 diff --git a/man/portage.5 b/man/portage.5 index d6a29678a..3a1237f59 100644 --- a/man/portage.5 +++ b/man/portage.5 @@ -1,4 +1,4 @@ -.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" diff --git a/man/quickpkg.1 b/man/quickpkg.1 index a0ec2ab19..4c033e6d5 100644 --- a/man/quickpkg.1 +++ b/man/quickpkg.1 @@ -1,4 +1,4 @@ -.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 diff --git a/man/repoman.1 b/man/repoman.1 index 53802540b..befd96b92 100644 --- a/man/repoman.1 +++ b/man/repoman.1 @@ -1,4 +1,4 @@ -.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 diff --git a/pym/_emerge/__init__.py b/pym/_emerge/__init__.py index 781532758..2ef7ceaae 100644 --- a/pym/_emerge/__init__.py +++ b/pym/_emerge/__init__.py @@ -1061,10 +1061,7 @@ class FakeVartree(portage.vartree): 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) @@ -1224,9 +1221,9 @@ class FakeVartree(portage.vartree): 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 @@ -4088,8 +4085,6 @@ class depgraph(object): 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 @@ -4209,7 +4204,7 @@ class depgraph(object): 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: @@ -4824,8 +4819,8 @@ class depgraph(object): 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) @@ -4862,8 +4857,8 @@ class depgraph(object): 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) @@ -5730,10 +5725,11 @@ class depgraph(object): 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": @@ -7636,10 +7632,12 @@ class depgraph(object): 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": @@ -8924,7 +8922,8 @@ class Scheduler(PollScheduler): # 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) @@ -9566,7 +9565,7 @@ class Scheduler(PollScheduler): 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, @@ -9788,7 +9787,7 @@ class Scheduler(PollScheduler): 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: @@ -10044,10 +10043,11 @@ class Scheduler(PollScheduler): 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": @@ -10186,13 +10186,13 @@ def unmerge(root_config, myopts, unmerge_action, 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 diff --git a/pym/portage/dbapi/vartree.py b/pym/portage/dbapi/vartree.py index e58bb6c82..78eb91115 100644 --- a/pym/portage/dbapi/vartree.py +++ b/pym/portage/dbapi/vartree.py @@ -2,6 +2,10 @@ # 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 @@ -29,6 +33,7 @@ from portage.elog.filtering import filter_mergephases, filter_unmergephases import os, re, sys, stat, errno, commands, copy, time, subprocess import logging +import shlex from itertools import izip try: @@ -788,7 +793,7 @@ class vardbapi(dbapi): 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 @@ -2728,7 +2733,7 @@ class dblink(object): 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 -- 2.26.2