<?xml version="1.0" encoding="iso-8859-1"?><!-- generator="b2evolution/2.4.5" -->
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:admin="http://webns.net/mvcb/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:content="http://purl.org/rss/1.0/modules/content/">
	<channel>
		<title>Zack Medico</title>
		<link>http://blogs.gentoo.org/zmedico</link>
		<description></description>
		<language>en-US</language>
		<docs>http://blogs.law.harvard.edu/tech/rss</docs>
		<admin:generatorAgent rdf:resource="http://b2evolution.net/?v=2.4.5"/>
		<ttl>60</ttl>
				<item>
			<title>New overlay config files: metadata/layout.conf and /etc/portage/repos.conf</title>
			<link>http://blogs.gentoo.org/zmedico/2009/04/20/overlay_layout_conf</link>
			<pubDate>Mon, 20 Apr 2009 21:39:10 +0000</pubDate>			<dc:creator>Zac MEDICO</dc:creator>
			<category domain="main">Gentoo</category>			<guid isPermaLink="false">1736@http://blogs.gentoo.org/</guid>
						<description>&lt;p&gt;Since &lt;a href=&quot;http://packages.gentoo.org/package/sys-apps/portage&quot;&gt;portage-2.2_rc29&lt;/a&gt; there is support for a &lt;strong&gt;&lt;a href=&quot;http://dev.gentoo.org/~zmedico/portage/doc/man/portage.5.html#layout.conf&quot;&gt;metadata/layout.conf&lt;/a&gt;&lt;/strong&gt; file in an overlay which is used to specify names of repositories which satisfy dependencies on eclasses and/or ebuilds. See the &lt;a href=&quot;http://archives.gentoo.org/gentoo-dev/msg_33c61550b4ed2b7b25dd5a4110e1ec81.xml&quot;&gt;QA Overlay Layout support&lt;/a&gt; thread on the &lt;a href=&quot;http://archives.gentoo.org/gentoo-dev/msg_33c61550b4ed2b7b25dd5a4110e1ec81.xml&quot;&gt;gentoo-dev&lt;/a&gt; mailing list for information about why this is necessary, and refer to the &lt;a href=&quot;http://dev.gentoo.org/~zmedico/portage/doc/man/portage.5.html#layout.conf&quot;&gt;portage(5)&lt;/a&gt; man page for details about the &lt;strong&gt;&lt;a href=&quot;http://dev.gentoo.org/~zmedico/portage/doc/man/portage.5.html#layout.conf&quot;&gt;layout.conf&lt;/a&gt;&lt;/strong&gt; format&lt;/p&gt;

&lt;p&gt;If you want overlay eclasses to override eclasses from other repos then you'll want to refer to the &lt;a href=&quot;http://dev.gentoo.org/~zmedico/portage/doc/man/portage.5.html#repos.conf&quot;&gt;portage(5)&lt;/a&gt; man page for information about the &lt;a href=&quot;http://dev.gentoo.org/~zmedico/portage/doc/man/portage.5.html#repos.conf&quot;&gt;&lt;strong&gt;/etc/portage/repos.conf&lt;/strong&gt;&lt;/a&gt; file which can be used to specify &lt;em&gt;site-specific&lt;/em&gt; repository configuration information. Note that configuration settings which are specified in &lt;a href=&quot;http://dev.gentoo.org/~zmedico/portage/doc/man/portage.5.html#repos.conf&quot;&gt;&lt;strong&gt;repos.conf&lt;/strong&gt;&lt;/a&gt; do not apply to tools such as &lt;a href=&quot;http://dev.gentoo.org/~zmedico/portage/doc/man/repoman.1.html&quot;&gt;&lt;strong&gt;repoman(1)&lt;/strong&gt;&lt;/a&gt; and &lt;a href=&quot;http://dev.gentoo.org/~zmedico/portage/doc/man/egencache.1.html&quot;&gt;&lt;strong&gt;egencache(1)&lt;/strong&gt;&lt;/a&gt;, since operations performed by these tools are inherently &lt;strong&gt;not&lt;/strong&gt; &lt;em&gt;site-specific&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Since &lt;a href=&quot;http://packages.gentoo.org/package/sys-apps/portage&quot;&gt;portage-2.2_rc31&lt;/a&gt;, &lt;a href=&quot;http://dev.gentoo.org/~zmedico/portage/doc/man/portage.5.html#repos.conf&quot;&gt;&lt;strong&gt;repos.conf&lt;/strong&gt;&lt;/a&gt; can be used to create repository aliases, in case you want to substitute one repo for another one that is specified in &lt;strong&gt;&lt;a href=&quot;http://dev.gentoo.org/~zmedico/portage/doc/man/portage.5.html#layout.conf&quot;&gt;layout.conf&lt;/a&gt;&lt;/strong&gt;. This is especially useful for &lt;a href=&quot;http://www.funtoo.org/&quot;&gt;funtoo&lt;/a&gt; users, who may want something like this in &lt;a href=&quot;http://dev.gentoo.org/~zmedico/portage/doc/man/portage.5.html#repos.conf&quot;&gt;&lt;strong&gt;/etc/portage/repos.conf&lt;/strong&gt;&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;[funtoo]&lt;br /&gt;
aliases = gentoo&lt;/code&gt;&lt;/p&gt;&lt;div class=&quot;item_footer&quot;&gt;&lt;p&gt;&lt;small&gt;&lt;a href=&quot;http://blogs.gentoo.org/zmedico/2009/04/20/overlay_layout_conf&quot;&gt;Original post&lt;/a&gt; blogged on &lt;a href=&quot;http://b2evolution.net/&quot;&gt;b2evolution&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;</description>
			<content:encoded><![CDATA[<p>Since <a href="http://packages.gentoo.org/package/sys-apps/portage">portage-2.2_rc29</a> there is support for a <strong><a href="http://dev.gentoo.org/~zmedico/portage/doc/man/portage.5.html#layout.conf">metadata/layout.conf</a></strong> file in an overlay which is used to specify names of repositories which satisfy dependencies on eclasses and/or ebuilds. See the <a href="http://archives.gentoo.org/gentoo-dev/msg_33c61550b4ed2b7b25dd5a4110e1ec81.xml">QA Overlay Layout support</a> thread on the <a href="http://archives.gentoo.org/gentoo-dev/msg_33c61550b4ed2b7b25dd5a4110e1ec81.xml">gentoo-dev</a> mailing list for information about why this is necessary, and refer to the <a href="http://dev.gentoo.org/~zmedico/portage/doc/man/portage.5.html#layout.conf">portage(5)</a> man page for details about the <strong><a href="http://dev.gentoo.org/~zmedico/portage/doc/man/portage.5.html#layout.conf">layout.conf</a></strong> format</p>

<p>If you want overlay eclasses to override eclasses from other repos then you'll want to refer to the <a href="http://dev.gentoo.org/~zmedico/portage/doc/man/portage.5.html#repos.conf">portage(5)</a> man page for information about the <a href="http://dev.gentoo.org/~zmedico/portage/doc/man/portage.5.html#repos.conf"><strong>/etc/portage/repos.conf</strong></a> file which can be used to specify <em>site-specific</em> repository configuration information. Note that configuration settings which are specified in <a href="http://dev.gentoo.org/~zmedico/portage/doc/man/portage.5.html#repos.conf"><strong>repos.conf</strong></a> do not apply to tools such as <a href="http://dev.gentoo.org/~zmedico/portage/doc/man/repoman.1.html"><strong>repoman(1)</strong></a> and <a href="http://dev.gentoo.org/~zmedico/portage/doc/man/egencache.1.html"><strong>egencache(1)</strong></a>, since operations performed by these tools are inherently <strong>not</strong> <em>site-specific</em>.</p>

<p>Since <a href="http://packages.gentoo.org/package/sys-apps/portage">portage-2.2_rc31</a>, <a href="http://dev.gentoo.org/~zmedico/portage/doc/man/portage.5.html#repos.conf"><strong>repos.conf</strong></a> can be used to create repository aliases, in case you want to substitute one repo for another one that is specified in <strong><a href="http://dev.gentoo.org/~zmedico/portage/doc/man/portage.5.html#layout.conf">layout.conf</a></strong>. This is especially useful for <a href="http://www.funtoo.org/">funtoo</a> users, who may want something like this in <a href="http://dev.gentoo.org/~zmedico/portage/doc/man/portage.5.html#repos.conf"><strong>/etc/portage/repos.conf</strong></a>:</p>
<p><code>[funtoo]<br />
aliases = gentoo</code></p><div class="item_footer"><p><small><a href="http://blogs.gentoo.org/zmedico/2009/04/20/overlay_layout_conf">Original post</a> blogged on <a href="http://b2evolution.net/">b2evolution</a>.</small></p></div>]]></content:encoded>
								<comments>http://blogs.gentoo.org/zmedico/2009/04/20/overlay_layout_conf#comments</comments>
		</item>
				<item>
			<title>Informative output for unresolved blockers</title>
			<link>http://blogs.gentoo.org/zmedico/2009/02/05/informative_blocker_output</link>
			<pubDate>Thu, 05 Feb 2009 18:23:33 +0000</pubDate>			<dc:creator>Zac MEDICO</dc:creator>
			<category domain="main">Gentoo</category>			<guid isPermaLink="false">1607@http://blogs.gentoo.org/</guid>
						<description>&lt;p&gt;In &lt;a href=&quot;http://packages.gentoo.org/package/sys-apps/portage&quot;&gt;portage-2.1.6.7&lt;/a&gt;, emerge output for unresolved blockers now includes information about how conflicting packages got pulled into the dependency graph. This information helps users understand the reason why a particular blocker hasn't been resolved automatically. Here is some sample output from &lt;a href=&quot;http://bugs.gentoo.org/show_bug.cgi?id=234907#c138&quot;&gt;bug 234907&lt;/a&gt;:
&lt;/p&gt;
&lt;pre&gt;Calculating dependencies... done!
[ebuild  N    ] sys-libs/e2fsprogs-libs-1.41.3-r1  USE=&quot;nls&quot;
[ebuild     U ] sys-fs/e2fsprogs-1.41.3 [1.40.9]
[blocks b     ] &amp;lt;sys-fs/e2fsprogs-1.41 (&quot;&amp;lt;sys-fs/e2fsprogs-1.41&quot; is blocking sys-libs/e2fsprogs-libs-1.41.3-r1)
[blocks B     ] sys-libs/com_err (&quot;sys-libs/com_err&quot; is blocking sys-libs/e2fsprogs-libs-1.41.3-r1)
[blocks B     ] sys-libs/ss (&quot;sys-libs/ss&quot; is blocking sys-libs/e2fsprogs-libs-1.41.3-r1)
[blocks B     ] sys-libs/e2fsprogs-libs (&quot;sys-libs/e2fsprogs-libs&quot; is blocking sys-libs/com_err-1.40.9, sys-libs/ss-1.40.9)

 * Error: The above package list contains packages which cannot be
 * installed at the same time on the same system.

  ('installed', '/', 'sys-libs/com_err-1.40.9', 'nomerge') pulled in by
    ~sys-libs/com_err-1.40.9 required by ('installed', '/', 'sys-libs/ss-1.40.9', 'nomerge')

  ('installed', '/', 'sys-libs/ss-1.40.9', 'nomerge') pulled in by
    sys-libs/ss required by world

  ('ebuild', '/', 'sys-libs/e2fsprogs-libs-1.41.3-r1', 'merge') pulled in by
    &amp;gt;=sys-libs/e2fsprogs-libs-1.41 required by ('installed', '/', 'sys-apps/util-linux-2.14.1', 'nomerge')
    ~sys-libs/e2fsprogs-libs-1.41.3 required by ('ebuild', '/', 'sys-fs/e2fsprogs-1.41.3', 'merge')
&lt;/pre&gt;
&lt;p&gt;The above output shows that the &lt;strong&gt;sys-libs/ss&lt;/strong&gt; package got pulled into the dependency graph by the &lt;strong&gt;world&lt;/strong&gt; set. This package is obsolete, so the user should remove it from &lt;em&gt;/var/lib/portage/world&lt;/em&gt;. In the future, I plan to add support for emerge to ask the user if they'd like to have the obsolete package automatically removed from the world file (&lt;a href=&quot;http://bugs.gentoo.org/show_bug.cgi?id=257009&quot;&gt;bug 257009&lt;/a&gt;).&lt;/p&gt;&lt;div class=&quot;item_footer&quot;&gt;&lt;p&gt;&lt;small&gt;&lt;a href=&quot;http://blogs.gentoo.org/zmedico/2009/02/05/informative_blocker_output&quot;&gt;Original post&lt;/a&gt; blogged on &lt;a href=&quot;http://b2evolution.net/&quot;&gt;b2evolution&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;</description>
			<content:encoded><![CDATA[<p>In <a href="http://packages.gentoo.org/package/sys-apps/portage">portage-2.1.6.7</a>, emerge output for unresolved blockers now includes information about how conflicting packages got pulled into the dependency graph. This information helps users understand the reason why a particular blocker hasn't been resolved automatically. Here is some sample output from <a href="http://bugs.gentoo.org/show_bug.cgi?id=234907#c138">bug 234907</a>:
</p>
<pre>Calculating dependencies... done!
[ebuild  N    ] sys-libs/e2fsprogs-libs-1.41.3-r1  USE="nls"
[ebuild     U ] sys-fs/e2fsprogs-1.41.3 [1.40.9]
[blocks b     ] &lt;sys-fs/e2fsprogs-1.41 ("&lt;sys-fs/e2fsprogs-1.41" is blocking sys-libs/e2fsprogs-libs-1.41.3-r1)
[blocks B     ] sys-libs/com_err ("sys-libs/com_err" is blocking sys-libs/e2fsprogs-libs-1.41.3-r1)
[blocks B     ] sys-libs/ss ("sys-libs/ss" is blocking sys-libs/e2fsprogs-libs-1.41.3-r1)
[blocks B     ] sys-libs/e2fsprogs-libs ("sys-libs/e2fsprogs-libs" is blocking sys-libs/com_err-1.40.9, sys-libs/ss-1.40.9)

 * Error: The above package list contains packages which cannot be
 * installed at the same time on the same system.

  ('installed', '/', 'sys-libs/com_err-1.40.9', 'nomerge') pulled in by
    ~sys-libs/com_err-1.40.9 required by ('installed', '/', 'sys-libs/ss-1.40.9', 'nomerge')

  ('installed', '/', 'sys-libs/ss-1.40.9', 'nomerge') pulled in by
    sys-libs/ss required by world

  ('ebuild', '/', 'sys-libs/e2fsprogs-libs-1.41.3-r1', 'merge') pulled in by
    &gt;=sys-libs/e2fsprogs-libs-1.41 required by ('installed', '/', 'sys-apps/util-linux-2.14.1', 'nomerge')
    ~sys-libs/e2fsprogs-libs-1.41.3 required by ('ebuild', '/', 'sys-fs/e2fsprogs-1.41.3', 'merge')
</pre>
<p>The above output shows that the <strong>sys-libs/ss</strong> package got pulled into the dependency graph by the <strong>world</strong> set. This package is obsolete, so the user should remove it from <em>/var/lib/portage/world</em>. In the future, I plan to add support for emerge to ask the user if they'd like to have the obsolete package automatically removed from the world file (<a href="http://bugs.gentoo.org/show_bug.cgi?id=257009">bug 257009</a>).</p><div class="item_footer"><p><small><a href="http://blogs.gentoo.org/zmedico/2009/02/05/informative_blocker_output">Original post</a> blogged on <a href="http://b2evolution.net/">b2evolution</a>.</small></p></div>]]></content:encoded>
								<comments>http://blogs.gentoo.org/zmedico/2009/02/05/informative_blocker_output#comments</comments>
		</item>
				<item>
			<title>New @live-rebuild and @module-rebuild package sets</title>
			<link>http://blogs.gentoo.org/zmedico/2008/07/31/live_rebuild_package_set</link>
			<pubDate>Thu, 31 Jul 2008 07:39:06 +0000</pubDate>			<dc:creator>Zac MEDICO</dc:creator>
			<category domain="main">Gentoo</category>			<guid isPermaLink="false">1545@http://blogs.gentoo.org/</guid>
						<description>&lt;p&gt;I've implemented new &lt;a href=&quot;http://sources.gentoo.org/viewcvs.py/portage?view=rev&amp;amp;rev=11292&quot;&gt;@live-rebuild&lt;/a&gt; and &lt;a href=&quot;http://sources.gentoo.org/viewcvs.py/portage?view=rev&amp;amp;rev=11293&quot;&gt;@module-rebuild&lt;/a&gt; package sets, and added them to the default sets.conf file for the next &lt;a href=&quot;http://packages.gentoo.org/package/sys-apps/portage&quot;&gt;sys-apps/portage&lt;/a&gt; release (that will be 2.2_rc6). Here are the relevant sections from sets.conf:&lt;/p&gt;
&lt;pre&gt;
# Installed ebuilds that inherit from known live eclasses.
[live-rebuild]
class = portage.sets.dbapi.InheritSet
world-candidate = False
inherits = cvs darcs git mercurial subversion

# Installed packages that own files inside /lib/modules.
[module-rebuild]
class = portage.sets.dbapi.OwnerSet
world-candidate = False
files = /lib/modules
&lt;/pre&gt;

&lt;p&gt;Given the new &lt;a href=&quot;http://dev.gentoo.org/~zmedico/portage/doc/portage.html#config-set-classes-InheritSet&quot;&gt;InheritSet&lt;/a&gt; and &lt;a href=&quot;http://dev.gentoo.org/~zmedico/portage/doc/portage.html#config-set-classes-OwnerSet&quot;&gt;OwnerSet&lt;/a&gt; classes, it's easy to define similar sets based on inherited eclasses and installed files, respectively.&lt;/p&gt;&lt;div class=&quot;item_footer&quot;&gt;&lt;p&gt;&lt;small&gt;&lt;a href=&quot;http://blogs.gentoo.org/zmedico/2008/07/31/live_rebuild_package_set&quot;&gt;Original post&lt;/a&gt; blogged on &lt;a href=&quot;http://b2evolution.net/&quot;&gt;b2evolution&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;</description>
			<content:encoded><![CDATA[<p>I've implemented new <a href="http://sources.gentoo.org/viewcvs.py/portage?view=rev&amp;rev=11292">@live-rebuild</a> and <a href="http://sources.gentoo.org/viewcvs.py/portage?view=rev&amp;rev=11293">@module-rebuild</a> package sets, and added them to the default sets.conf file for the next <a href="http://packages.gentoo.org/package/sys-apps/portage">sys-apps/portage</a> release (that will be 2.2_rc6). Here are the relevant sections from sets.conf:</p>
<pre>
# Installed ebuilds that inherit from known live eclasses.
[live-rebuild]
class = portage.sets.dbapi.InheritSet
world-candidate = False
inherits = cvs darcs git mercurial subversion

# Installed packages that own files inside /lib/modules.
[module-rebuild]
class = portage.sets.dbapi.OwnerSet
world-candidate = False
files = /lib/modules
</pre>

<p>Given the new <a href="http://dev.gentoo.org/~zmedico/portage/doc/portage.html#config-set-classes-InheritSet">InheritSet</a> and <a href="http://dev.gentoo.org/~zmedico/portage/doc/portage.html#config-set-classes-OwnerSet">OwnerSet</a> classes, it's easy to define similar sets based on inherited eclasses and installed files, respectively.</p><div class="item_footer"><p><small><a href="http://blogs.gentoo.org/zmedico/2008/07/31/live_rebuild_package_set">Original post</a> blogged on <a href="http://b2evolution.net/">b2evolution</a>.</small></p></div>]]></content:encoded>
								<comments>http://blogs.gentoo.org/zmedico/2008/07/31/live_rebuild_package_set#comments</comments>
		</item>
				<item>
			<title>EAPI="2_pre1" with USE dependencies</title>
			<link>http://blogs.gentoo.org/zmedico/2008/07/31/eapi_2_pre1_use_dependencies</link>
			<pubDate>Thu, 31 Jul 2008 04:46:15 +0000</pubDate>			<dc:creator>Zac MEDICO</dc:creator>
			<category domain="main">Gentoo</category>			<guid isPermaLink="false">1544@http://blogs.gentoo.org/</guid>
						<description>&lt;p&gt;Version 2.2_rc5 of &lt;a href=&quot;http://packages.gentoo.org/package/sys-apps/portage&quot;&gt;sys-apps/portage&lt;/a&gt; adds support for &lt;strong&gt;EAPI=&quot;2_pre1&quot;&lt;/strong&gt; which has some changes in &lt;strong&gt;conditional USE dependency&lt;/strong&gt; syntax. The previous experimental EAPI=&quot;2_pre0&quot; value is no longer supported.&lt;/p&gt;
&lt;p&gt;For more information about experimental EAPI features, refer to &lt;a href=&quot;http://bugs.gentoo.org/show_bug.cgi?id=233213&quot;&gt;bug #233213&lt;/a&gt; and also see the &lt;a href=&quot;http://dev.gentoo.org/~zmedico/portage/doc/portage.html#package-ebuild-eapi-2&quot;&gt;&quot;Ebuild&quot; chapter&lt;/a&gt; of the html documentation that is installed with &lt;a href=&quot;http://packages.gentoo.org/package/sys-apps/portage&quot;&gt;portage&lt;/a&gt; when USE=doc is enabled. I've posted a copy of the &lt;strong&gt;EAPI=&quot;2_pre1&quot;&lt;/strong&gt; documentation here:&lt;/p&gt;

&lt;pre&gt;

&lt;strong&gt;EAPI 2_pre1&lt;/strong&gt;

  &lt;strong&gt;Helpers&lt;/strong&gt;

    &lt;strong&gt;doman&lt;/strong&gt;

      Language codes in file names are now used for path translation.

      &lt;strong&gt;Table 6.1. Man Page Path Translation&lt;/strong&gt;

        &lt;strong&gt;Source&lt;/strong&gt;        &lt;strong&gt;Destination&lt;/strong&gt;
        foo.1         /usr/share/man/man1/foo.1
        foo.lang.1    /usr/share/man/lang/man1/foo.1

  &lt;strong&gt;USE Dependencies&lt;/strong&gt;

    &lt;strong&gt;Unconditional USE Dependencies&lt;/strong&gt;

      &lt;strong&gt;Table 6.2. Syntax Examples&lt;/strong&gt;

        &lt;strong&gt;Example&lt;/strong&gt;          &lt;strong&gt;Meaning&lt;/strong&gt;
        foo[bar]         foo must have bar enabled
        foo[bar,baz]     foo must have both bar and baz enabled
        foo[-bar,baz]    foo must have bar disabled and baz enabled

    &lt;strong&gt;Conditional USE Dependencies&lt;/strong&gt;

      &lt;strong&gt;Table 6.3. Syntax Examples&lt;/strong&gt;

        &lt;strong&gt;Compact Form&lt;/strong&gt;    &lt;strong&gt;Equivalent Expanded Form&lt;/strong&gt;
        foo[bar?]       bar? ( foo[bar]  ) !bar? ( foo       )
        foo[!bar?]      bar? ( foo       ) !bar? ( foo[-bar] )
        foo[bar=]       bar? ( foo[bar]  ) !bar? ( foo[-bar] )
        foo[!bar=]      bar? ( foo[-bar] ) !bar? ( foo[bar]  )
&lt;/pre&gt;
&lt;div class=&quot;item_footer&quot;&gt;&lt;p&gt;&lt;small&gt;&lt;a href=&quot;http://blogs.gentoo.org/zmedico/2008/07/31/eapi_2_pre1_use_dependencies&quot;&gt;Original post&lt;/a&gt; blogged on &lt;a href=&quot;http://b2evolution.net/&quot;&gt;b2evolution&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;</description>
			<content:encoded><![CDATA[<p>Version 2.2_rc5 of <a href="http://packages.gentoo.org/package/sys-apps/portage">sys-apps/portage</a> adds support for <strong>EAPI="2_pre1"</strong> which has some changes in <strong>conditional USE dependency</strong> syntax. The previous experimental EAPI="2_pre0" value is no longer supported.</p>
<p>For more information about experimental EAPI features, refer to <a href="http://bugs.gentoo.org/show_bug.cgi?id=233213">bug #233213</a> and also see the <a href="http://dev.gentoo.org/~zmedico/portage/doc/portage.html#package-ebuild-eapi-2">"Ebuild" chapter</a> of the html documentation that is installed with <a href="http://packages.gentoo.org/package/sys-apps/portage">portage</a> when USE=doc is enabled. I've posted a copy of the <strong>EAPI="2_pre1"</strong> documentation here:</p>

<pre>

<strong>EAPI 2_pre1</strong>

  <strong>Helpers</strong>

    <strong>doman</strong>

      Language codes in file names are now used for path translation.

      <strong>Table 6.1. Man Page Path Translation</strong>

        <strong>Source</strong>        <strong>Destination</strong>
        foo.1         /usr/share/man/man1/foo.1
        foo.lang.1    /usr/share/man/lang/man1/foo.1

  <strong>USE Dependencies</strong>

    <strong>Unconditional USE Dependencies</strong>

      <strong>Table 6.2. Syntax Examples</strong>

        <strong>Example</strong>          <strong>Meaning</strong>
        foo[bar]         foo must have bar enabled
        foo[bar,baz]     foo must have both bar and baz enabled
        foo[-bar,baz]    foo must have bar disabled and baz enabled

    <strong>Conditional USE Dependencies</strong>

      <strong>Table 6.3. Syntax Examples</strong>

        <strong>Compact Form</strong>    <strong>Equivalent Expanded Form</strong>
        foo[bar?]       bar? ( foo[bar]  ) !bar? ( foo       )
        foo[!bar?]      bar? ( foo       ) !bar? ( foo[-bar] )
        foo[bar=]       bar? ( foo[bar]  ) !bar? ( foo[-bar] )
        foo[!bar=]      bar? ( foo[-bar] ) !bar? ( foo[bar]  )
</pre>
<div class="item_footer"><p><small><a href="http://blogs.gentoo.org/zmedico/2008/07/31/eapi_2_pre1_use_dependencies">Original post</a> blogged on <a href="http://b2evolution.net/">b2evolution</a>.</small></p></div>]]></content:encoded>
								<comments>http://blogs.gentoo.org/zmedico/2008/07/31/eapi_2_pre1_use_dependencies#comments</comments>
		</item>
				<item>
			<title>Portage now supports building multiple packages in parallel</title>
			<link>http://blogs.gentoo.org/zmedico/2008/07/23/portage_parallel_builds</link>
			<pubDate>Wed, 23 Jul 2008 22:57:22 +0000</pubDate>			<dc:creator>Zac MEDICO</dc:creator>
			<category domain="main">Gentoo</category>			<guid isPermaLink="false">1543@http://blogs.gentoo.org/</guid>
						<description>&lt;p&gt;In &lt;a href=&quot;http://packages.gentoo.org/package/sys-apps/portage&quot;&gt;&gt;=portage-2.2_rc2&lt;/a&gt; there are a few new emerge options that many Gentoo users will probably be interested in:&lt;/p&gt;

&lt;pre&gt;
--jobs JOBS
	Specifies the number of packages to build simultaneously.
	Also see the related --load-average option.

--keep-going
	Continue as much as possible after an error. When an error
	occurs, dependencies are recalculated for remaining packages
	and any with unsatisfied dependencies are automatically
	dropped. Also see the related --skipfirst option.

--load-average LOAD
	Specifies that no new builds should be started if there are
	other builds running and the load average is at least LOAD (a
	floating-point number). This option is recommended for use in
	combination with --jobs in order to avoid excess load. See
	make(1) for information about analogous options that should
	be configured via MAKEOPTS in make.conf(5).
&lt;/pre&gt;

&lt;p&gt;Here is some sample parallel build output from a &lt;a href=&quot;http://packages.gentoo.org/package/dev-util/catalyst&quot;&gt;catalyst&lt;/a&gt; stage2 build, with emerge's new --jobs option enabled:&lt;/p&gt;

&lt;pre&gt;
&gt;&gt;&gt; Building (1 of 10) sys-devel/gettext-0.17 for /
&gt;&gt;&gt; Building (2 of 10) sys-libs/zlib-1.2.3-r1 for /
&gt;&gt;&gt; Building (3 of 10) virtual/libintl-0 for /
&gt;&gt;&gt; Building (4 of 10) dev-util/unifdef-1.20 for /
&gt;&gt;&gt; Installing virtual/libintl-0 to /
&gt;&gt;&gt; Installing dev-util/unifdef-1.20 to /
&gt;&gt;&gt; Building (5 of 10) sys-kernel/linux-headers-2.6.23-r3 for /
&gt;&gt;&gt; Installing sys-libs/zlib-1.2.3-r1 to /
&gt;&gt;&gt; Jobs: 3 of 10 complete, 2 running               Load avg: 3.44, 1.46, 0.69
&lt;/pre&gt;
&lt;div class=&quot;item_footer&quot;&gt;&lt;p&gt;&lt;small&gt;&lt;a href=&quot;http://blogs.gentoo.org/zmedico/2008/07/23/portage_parallel_builds&quot;&gt;Original post&lt;/a&gt; blogged on &lt;a href=&quot;http://b2evolution.net/&quot;&gt;b2evolution&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;</description>
			<content:encoded><![CDATA[<p>In <a href="http://packages.gentoo.org/package/sys-apps/portage">>=portage-2.2_rc2</a> there are a few new emerge options that many Gentoo users will probably be interested in:</p>

<pre>
--jobs JOBS
	Specifies the number of packages to build simultaneously.
	Also see the related --load-average option.

--keep-going
	Continue as much as possible after an error. When an error
	occurs, dependencies are recalculated for remaining packages
	and any with unsatisfied dependencies are automatically
	dropped. Also see the related --skipfirst option.

--load-average LOAD
	Specifies that no new builds should be started if there are
	other builds running and the load average is at least LOAD (a
	floating-point number). This option is recommended for use in
	combination with --jobs in order to avoid excess load. See
	make(1) for information about analogous options that should
	be configured via MAKEOPTS in make.conf(5).
</pre>

<p>Here is some sample parallel build output from a <a href="http://packages.gentoo.org/package/dev-util/catalyst">catalyst</a> stage2 build, with emerge's new --jobs option enabled:</p>

<pre>
>>> Building (1 of 10) sys-devel/gettext-0.17 for /
>>> Building (2 of 10) sys-libs/zlib-1.2.3-r1 for /
>>> Building (3 of 10) virtual/libintl-0 for /
>>> Building (4 of 10) dev-util/unifdef-1.20 for /
>>> Installing virtual/libintl-0 to /
>>> Installing dev-util/unifdef-1.20 to /
>>> Building (5 of 10) sys-kernel/linux-headers-2.6.23-r3 for /
>>> Installing sys-libs/zlib-1.2.3-r1 to /
>>> Jobs: 3 of 10 complete, 2 running               Load avg: 3.44, 1.46, 0.69
</pre>
<div class="item_footer"><p><small><a href="http://blogs.gentoo.org/zmedico/2008/07/23/portage_parallel_builds">Original post</a> blogged on <a href="http://b2evolution.net/">b2evolution</a>.</small></p></div>]]></content:encoded>
								<comments>http://blogs.gentoo.org/zmedico/2008/07/23/portage_parallel_builds#comments</comments>
		</item>
				<item>
			<title>Handling File Collisions Between Blocking Packages</title>
			<link>http://blogs.gentoo.org/zmedico/2008/05/09/blocking_package_file_collisions</link>
			<pubDate>Fri, 09 May 2008 16:17:21 +0000</pubDate>			<dc:creator>Zac MEDICO</dc:creator>
			<category domain="main">Gentoo</category>			<guid isPermaLink="false">1521@http://blogs.gentoo.org/</guid>
						<description>&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://dev.gentoo.org/~zmedico/portage/doc/portage.html#dependency-resolution-package-modeling-blocker-conflicts&quot;&gt;Blocker Conflicts&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If one package blocks another package, the two packages conflict such that they cannot be installed simultaneously. These conflicts are often due to file collisions. In some cases, packages that block each other can be temporarily installed simultaneously. In order to resolve file collisions that occur between two blocking packages that are installed simultaneously, the overlapping files must be removed from the contents list of the package which was installed first.&lt;/p&gt;

&lt;p&gt;Some cases may exist such that temporary simultaneous installation of blocking packages will cause some sort of problem. However, this type of solution will only be chosen for blockers that can not be satisfied in any other way, such as by &lt;a href=&quot;http://planet.gentoo.org/developers/zmedico/2007/08/19/using_blockers_to_adjust_merge_order&quot;&gt;simple adjustment of merge order&lt;/a&gt;. In addition, this type of solution will not be chosen if a blocking package will overwrite files belonging to packages from the system set, or packages that are runtime dependencies of &lt;a href=&quot;http://packages.gentoo.org/package/sys-apps/portage&quot;&gt;Portage&lt;/a&gt; itself. These constraints serve to limit the probability that a chosen solution will cause an unforeseen problem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;gtk-doc-am vs. gtk-doc-1.8-r2&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;
These are the packages that would be merged, in reverse order:

Calculating dependencies... done!
[blocks b     ] dev-util/gtk-doc-am (is blocking dev-util/gtk-doc-1.8-r2)
[uninstall    ]  dev-util/gtk-doc-1.8-r2  USE=&quot;emacs -debug -doc&quot;
[nomerge      ] x11-libs/gtk+-2.12.9-r2  USE=&quot;X cups jpeg tiff xinerama -debug -doc -vim-syntax&quot;
[ebuild  N    ]  dev-util/gtk-doc-am-1.10-r1  0 kB

Total: 1 package (1 new, 1 uninstall), Size of downloads: 0 kB
Conflict: 1 block
&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;coreutils vs. mktemp&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;
These are the packages that would be merged, in reverse order:

Calculating dependencies... done!
[nomerge      ] sys-apps/coreutils-6.11 [6.9-r1] USE=&quot;acl nls xattr (-selinux) -static -vanilla%&quot;
[blocks b     ]  sys-apps/mktemp (is blocking sys-apps/coreutils-6.11)
[blocks b     ] &gt;=sys-apps/coreutils-6.10 (is blocking sys-apps/mktemp-1.5)
[uninstall    ]  sys-apps/mktemp-1.5
[ebuild     U ] sys-apps/coreutils-6.11 [6.9-r1] USE=&quot;acl nls xattr (-selinux) -static -vanilla%&quot; 0 kB

Total: 1 package (1 upgrade, 1 uninstall), Size of downloads: 0 kB
Conflict: 2 blocks
&lt;/pre&gt;
&lt;div class=&quot;item_footer&quot;&gt;&lt;p&gt;&lt;small&gt;&lt;a href=&quot;http://blogs.gentoo.org/zmedico/2008/05/09/blocking_package_file_collisions&quot;&gt;Original post&lt;/a&gt; blogged on &lt;a href=&quot;http://b2evolution.net/&quot;&gt;b2evolution&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;</description>
			<content:encoded><![CDATA[<p><strong><a href="http://dev.gentoo.org/~zmedico/portage/doc/portage.html#dependency-resolution-package-modeling-blocker-conflicts">Blocker Conflicts</a></strong></p>

<p>If one package blocks another package, the two packages conflict such that they cannot be installed simultaneously. These conflicts are often due to file collisions. In some cases, packages that block each other can be temporarily installed simultaneously. In order to resolve file collisions that occur between two blocking packages that are installed simultaneously, the overlapping files must be removed from the contents list of the package which was installed first.</p>

<p>Some cases may exist such that temporary simultaneous installation of blocking packages will cause some sort of problem. However, this type of solution will only be chosen for blockers that can not be satisfied in any other way, such as by <a href="http://planet.gentoo.org/developers/zmedico/2007/08/19/using_blockers_to_adjust_merge_order">simple adjustment of merge order</a>. In addition, this type of solution will not be chosen if a blocking package will overwrite files belonging to packages from the system set, or packages that are runtime dependencies of <a href="http://packages.gentoo.org/package/sys-apps/portage">Portage</a> itself. These constraints serve to limit the probability that a chosen solution will cause an unforeseen problem.</p>

<p><strong>gtk-doc-am vs. gtk-doc-1.8-r2</strong></p>
<pre>
These are the packages that would be merged, in reverse order:

Calculating dependencies... done!
[blocks b     ] dev-util/gtk-doc-am (is blocking dev-util/gtk-doc-1.8-r2)
[uninstall    ]  dev-util/gtk-doc-1.8-r2  USE="emacs -debug -doc"
[nomerge      ] x11-libs/gtk+-2.12.9-r2  USE="X cups jpeg tiff xinerama -debug -doc -vim-syntax"
[ebuild  N    ]  dev-util/gtk-doc-am-1.10-r1  0 kB

Total: 1 package (1 new, 1 uninstall), Size of downloads: 0 kB
Conflict: 1 block
</pre>

<p><strong>coreutils vs. mktemp</strong></p>
<pre>
These are the packages that would be merged, in reverse order:

Calculating dependencies... done!
[nomerge      ] sys-apps/coreutils-6.11 [6.9-r1] USE="acl nls xattr (-selinux) -static -vanilla%"
[blocks b     ]  sys-apps/mktemp (is blocking sys-apps/coreutils-6.11)
[blocks b     ] >=sys-apps/coreutils-6.10 (is blocking sys-apps/mktemp-1.5)
[uninstall    ]  sys-apps/mktemp-1.5
[ebuild     U ] sys-apps/coreutils-6.11 [6.9-r1] USE="acl nls xattr (-selinux) -static -vanilla%" 0 kB

Total: 1 package (1 upgrade, 1 uninstall), Size of downloads: 0 kB
Conflict: 2 blocks
</pre>
<div class="item_footer"><p><small><a href="http://blogs.gentoo.org/zmedico/2008/05/09/blocking_package_file_collisions">Original post</a> blogged on <a href="http://b2evolution.net/">b2evolution</a>.</small></p></div>]]></content:encoded>
								<comments>http://blogs.gentoo.org/zmedico/2008/05/09/blocking_package_file_collisions#comments</comments>
		</item>
				<item>
			<title>Using Blockers to Automatically Uninstall Unwanted Packages</title>
			<link>http://blogs.gentoo.org/zmedico/2008/05/06/blocker_conflict_automatic_uninstall</link>
			<pubDate>Tue, 06 May 2008 18:29:58 +0000</pubDate>			<dc:creator>Zac MEDICO</dc:creator>
			<category domain="main">Gentoo</category>			<guid isPermaLink="false">1519@http://blogs.gentoo.org/</guid>
						<description>&lt;p&gt;A while ago I wrote a blog entry about&lt;br /&gt;
&lt;a href=&quot;http://planet.gentoo.org/developers/zmedico/2007/08/19/using_blockers_to_adjust_merge_order&quot;&gt;&lt;br /&gt;
using blockers to adjust merge order&lt;/a&gt;. Now, in&lt;br /&gt;
&lt;a href=&quot;http://packages.gentoo.org/package/sys-apps/portage&quot;&gt;portage-2.1.5&lt;/a&gt;,&lt;br /&gt;
blockers are also resolved automatically in cases when it makes&lt;br /&gt;
sense to uninstall a conflicting package (&lt;a href=&quot;http://bugs.gentoo.org/show_bug.cgi?id=172812&quot;&gt;bug #172812&lt;/a&gt;).&lt;br /&gt;
This feature should allow automatic resolution of&lt;br /&gt;
&lt;a href=&quot;http://dev.gentoo.org/~zmedico/portage/doc/portage.html#dependency-resolution-package-modeling-blocker-conflicts&quot;&gt;&lt;br /&gt;
blocker conflicts&lt;/a&gt; in many more cases than previously possible, so Gentoo&lt;br /&gt;
users won't be inconvenienced with the task of resolving them manually.&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;gtk-doc-am vs. gtk-doc-1.8-r2&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;
These are the packages that would be merged, in reverse order:

Calculating dependencies... done!
[nomerge      ] x11-libs/gtk+-2.12.9-r2  USE=&quot;X cups jpeg tiff xinerama -debug -doc -vim-syntax&quot;
[ebuild  N    ]  dev-util/gtk-doc-am-1.10-r1  0 kB
[blocks b     ] dev-util/gtk-doc-am (is blocking dev-util/gtk-doc-1.8-r2)
[uninstall    ]  dev-util/gtk-doc-1.8-r2  USE=&quot;emacs -debug -doc&quot;

Total: 1 package (1 new, 1 uninstall), Size of downloads: 0 kB
Conflict: 1 block
&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;coreutils vs. mktemp&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;
These are the packages that would be merged, in reverse order:

Calculating dependencies... done!
[ebuild     U ] sys-apps/coreutils-6.11 [6.9-r1] USE=&quot;acl nls xattr (-selinux) -static -vanilla%&quot; 0 kB
[blocks b     ]  sys-apps/mktemp (is blocking sys-apps/coreutils-6.11)
[blocks b     ] &gt;=sys-apps/coreutils-6.10 (is blocking sys-apps/mktemp-1.5)
[uninstall    ]  sys-apps/mktemp-1.5

Total: 1 package (1 upgrade, 1 uninstall), Size of downloads: 0 kB
Conflict: 2 blocks
&lt;/pre&gt;&lt;div class=&quot;item_footer&quot;&gt;&lt;p&gt;&lt;small&gt;&lt;a href=&quot;http://blogs.gentoo.org/zmedico/2008/05/06/blocker_conflict_automatic_uninstall&quot;&gt;Original post&lt;/a&gt; blogged on &lt;a href=&quot;http://b2evolution.net/&quot;&gt;b2evolution&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;</description>
			<content:encoded><![CDATA[<p>A while ago I wrote a blog entry about<br />
<a href="http://planet.gentoo.org/developers/zmedico/2007/08/19/using_blockers_to_adjust_merge_order"><br />
using blockers to adjust merge order</a>. Now, in<br />
<a href="http://packages.gentoo.org/package/sys-apps/portage">portage-2.1.5</a>,<br />
blockers are also resolved automatically in cases when it makes<br />
sense to uninstall a conflicting package (<a href="http://bugs.gentoo.org/show_bug.cgi?id=172812">bug #172812</a>).<br />
This feature should allow automatic resolution of<br />
<a href="http://dev.gentoo.org/~zmedico/portage/doc/portage.html#dependency-resolution-package-modeling-blocker-conflicts"><br />
blocker conflicts</a> in many more cases than previously possible, so Gentoo<br />
users won't be inconvenienced with the task of resolving them manually.</p>


<p><strong>gtk-doc-am vs. gtk-doc-1.8-r2</strong></p>
<pre>
These are the packages that would be merged, in reverse order:

Calculating dependencies... done!
[nomerge      ] x11-libs/gtk+-2.12.9-r2  USE="X cups jpeg tiff xinerama -debug -doc -vim-syntax"
[ebuild  N    ]  dev-util/gtk-doc-am-1.10-r1  0 kB
[blocks b     ] dev-util/gtk-doc-am (is blocking dev-util/gtk-doc-1.8-r2)
[uninstall    ]  dev-util/gtk-doc-1.8-r2  USE="emacs -debug -doc"

Total: 1 package (1 new, 1 uninstall), Size of downloads: 0 kB
Conflict: 1 block
</pre>

<p><strong>coreutils vs. mktemp</strong></p>
<pre>
These are the packages that would be merged, in reverse order:

Calculating dependencies... done!
[ebuild     U ] sys-apps/coreutils-6.11 [6.9-r1] USE="acl nls xattr (-selinux) -static -vanilla%" 0 kB
[blocks b     ]  sys-apps/mktemp (is blocking sys-apps/coreutils-6.11)
[blocks b     ] >=sys-apps/coreutils-6.10 (is blocking sys-apps/mktemp-1.5)
[uninstall    ]  sys-apps/mktemp-1.5

Total: 1 package (1 upgrade, 1 uninstall), Size of downloads: 0 kB
Conflict: 2 blocks
</pre><div class="item_footer"><p><small><a href="http://blogs.gentoo.org/zmedico/2008/05/06/blocker_conflict_automatic_uninstall">Original post</a> blogged on <a href="http://b2evolution.net/">b2evolution</a>.</small></p></div>]]></content:encoded>
								<comments>http://blogs.gentoo.org/zmedico/2008/05/06/blocker_conflict_automatic_uninstall#comments</comments>
		</item>
				<item>
			<title>Portage Dependency Resolution - Decision Making</title>
			<link>http://blogs.gentoo.org/zmedico/2008/04/22/portage_dependency_resolution_decision_m</link>
			<pubDate>Tue, 22 Apr 2008 05:57:22 +0000</pubDate>			<dc:creator>Zac MEDICO</dc:creator>
			<category domain="main">Gentoo</category>			<guid isPermaLink="false">1507@http://blogs.gentoo.org/</guid>
						<description>&lt;p&gt;
I've written &quot;Part II. Dependency Resolution&quot; for the sys-apps/portage documentation (installed with USE=doc enabled). The &quot;Decision Making&quot; chapter is posted here. There are also two more small chapters about &lt;a href=&quot;http://dev.gentoo.org/~zmedico/portage/doc/portage.html#dependency-resolution&quot;&gt;package modeling and task scheduling&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Portage Dependency Resolution - Decision Making&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dependency Expression Evaluation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In terms of boolean logic, a dependency expression can&lt;br /&gt;
be expressed in disjunctive normal form (DNF), which is a&lt;br /&gt;
disjunction of conjunctive clauses. Each conjunctive clause&lt;br /&gt;
represents one possible alternative combination of dependency&lt;br /&gt;
atoms capable of satisfying the dependency expression.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Look-Ahead&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When there are multiple combinations to choose from, a&lt;br /&gt;
look-ahead mechanism will choose an optimal combination to&lt;br /&gt;
satisfy constraints and minimize cost. The following package&lt;br /&gt;
states influence the cost calculation for a given combination:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;installed&lt;/li&gt;
  &lt;li&gt;selected (for installation)&lt;/li&gt;
  &lt;li&gt;not selected (for installation)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In cost calculations, virtual packages by themselves are&lt;br /&gt;
considered to cost nothing since they do not directly install&lt;br /&gt;
anything. It is the dependencies of a virtual package that&lt;br /&gt;
contribute to it's cost.&lt;code&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Constraint Propagation&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
Combinations that include packages from the &quot;installed&quot; or&lt;br /&gt;
&quot;selected&quot; categories are less costly than those that include&lt;br /&gt;
packages from the &quot;not selected&quot; category. When a package&lt;br /&gt;
is chosen for installation, it transitions to the &quot;selected&quot;&lt;br /&gt;
state. This state change propagates to the cost calculations of&lt;br /&gt;
later decisions, influencing later decisions to be consistent&lt;br /&gt;
with earlier decisions. This feedback mechanism serves to&lt;br /&gt;
propagate constraints and can influence the modeling process&lt;br /&gt;
to converge on a more optimal final state.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Expanded Search Space&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
When evaluating virtual atoms, an expanded search space is&lt;br /&gt;
considered which recursively traverses the dependencies of&lt;br /&gt;
virtual packages from all slots matching a given virtual&lt;br /&gt;
atom. All combinations in this expanded search space are&lt;br /&gt;
considered when choosing an optimal combination to satisfy&lt;br /&gt;
constraints with minimal cost.&lt;/code&gt;&lt;/p&gt;&lt;div class=&quot;item_footer&quot;&gt;&lt;p&gt;&lt;small&gt;&lt;a href=&quot;http://blogs.gentoo.org/zmedico/2008/04/22/portage_dependency_resolution_decision_m&quot;&gt;Original post&lt;/a&gt; blogged on &lt;a href=&quot;http://b2evolution.net/&quot;&gt;b2evolution&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;</description>
			<content:encoded><![CDATA[<p>
I've written "Part II. Dependency Resolution" for the sys-apps/portage documentation (installed with USE=doc enabled). The "Decision Making" chapter is posted here. There are also two more small chapters about <a href="http://dev.gentoo.org/~zmedico/portage/doc/portage.html#dependency-resolution">package modeling and task scheduling</a>.
</p>
<p><strong>Portage Dependency Resolution - Decision Making</strong></p>

<p><strong>Dependency Expression Evaluation</strong></p>

<p>In terms of boolean logic, a dependency expression can<br />
be expressed in disjunctive normal form (DNF), which is a<br />
disjunction of conjunctive clauses. Each conjunctive clause<br />
represents one possible alternative combination of dependency<br />
atoms capable of satisfying the dependency expression.</p>

<p><strong>Look-Ahead</strong></p>

<p>When there are multiple combinations to choose from, a<br />
look-ahead mechanism will choose an optimal combination to<br />
satisfy constraints and minimize cost. The following package<br />
states influence the cost calculation for a given combination:</p>

<ul>
  <li>installed</li>
  <li>selected (for installation)</li>
  <li>not selected (for installation)</li>
</ul>

<p>In cost calculations, virtual packages by themselves are<br />
considered to cost nothing since they do not directly install<br />
anything. It is the dependencies of a virtual package that<br />
contribute to it's cost.<code><br />
<br />
<strong>Constraint Propagation</strong><br />
<br />
Combinations that include packages from the "installed" or<br />
"selected" categories are less costly than those that include<br />
packages from the "not selected" category. When a package<br />
is chosen for installation, it transitions to the "selected"<br />
state. This state change propagates to the cost calculations of<br />
later decisions, influencing later decisions to be consistent<br />
with earlier decisions. This feedback mechanism serves to<br />
propagate constraints and can influence the modeling process<br />
to converge on a more optimal final state.<br />
<br />
<strong>Expanded Search Space</strong><br />
<br />
When evaluating virtual atoms, an expanded search space is<br />
considered which recursively traverses the dependencies of<br />
virtual packages from all slots matching a given virtual<br />
atom. All combinations in this expanded search space are<br />
considered when choosing an optimal combination to satisfy<br />
constraints with minimal cost.</code></p><div class="item_footer"><p><small><a href="http://blogs.gentoo.org/zmedico/2008/04/22/portage_dependency_resolution_decision_m">Original post</a> blogged on <a href="http://b2evolution.net/">b2evolution</a>.</small></p></div>]]></content:encoded>
								<comments>http://blogs.gentoo.org/zmedico/2008/04/22/portage_dependency_resolution_decision_m#comments</comments>
		</item>
			</channel>
</rss>
