/[gentoo]/xml/htdocs/proj/en/glep/glep-0055.html
Gentoo

Diff of /xml/htdocs/proj/en/glep/glep-0055.html

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 1.4 Revision 1.8
2<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 3<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 4
5<head> 5<head>
6 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 6 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
7 <meta name="generator" content="Docutils 0.5: http://docutils.sourceforge.net/" /> 7 <meta name="generator" content="Docutils 0.8.1: http://docutils.sourceforge.net/" />
8 <title>GLEP 55 -- Use EAPI-suffixed ebuilds (.ebuild-EAPI)</title> 8 <title>GLEP 55 -- Use EAPI-suffixed ebuilds (.ebuild-EAPI)</title>
9 <style type="text/css"> 9 <link rel="stylesheet" href="tools/glep.css" type="text/css" /></head>
10
11/*
12:Author: David Goodger
13:Contact: goodger@users.sourceforge.net
14:date: $Date: 2009/05/17 17:00:30 $
15:version: $Revision: 1.4 $
16:copyright: This stylesheet has been placed in the public domain.
17
18Default cascading style sheet for the PEP HTML output of Docutils.
19*/
20
21.first {
22 margin-top: 0 }
23
24.last {
25 margin-bottom: 0 }
26
27.navigation {
28 width: 100% ;
29 background: #cc99ff ;
30 margin-top: 0px ;
31 margin-bottom: 0px }
32
33.navigation .navicon {
34 width: 150px ;
35 height: 35px }
36
37.navigation .textlinks {
38 padding-left: 1em ;
39 text-align: left }
40
41.navigation td, .navigation th {
42 padding-left: 0em ;
43 padding-right: 0em ;
44 vertical-align: middle }
45
46.rfc2822 {
47 margin-top: 0.5em ;
48 margin-left: 0.5em ;
49 margin-right: 0.5em ;
50 margin-bottom: 0em }
51
52.rfc2822 td {
53 text-align: left }
54
55.rfc2822 th.field-name {
56 text-align: right ;
57 font-family: sans-serif ;
58 padding-right: 0.5em ;
59 font-weight: bold ;
60 margin-bottom: 0em }
61
62a.toc-backref {
63 text-decoration: none ;
64 color: black }
65
66body {
67 margin: 0px ;
68 margin-bottom: 1em ;
69 padding: 0px }
70
71dd {
72 margin-bottom: 0.5em }
73
74div.section {
75 margin-left: 1em ;
76 margin-right: 1em ;
77 margin-bottom: 1.5em }
78
79div.section div.section {
80 margin-left: 0em ;
81 margin-right: 0em ;
82 margin-top: 1.5em }
83
84div.abstract {
85 margin: 2em 5em }
86
87div.abstract p.topic-title {
88 font-weight: bold ;
89 text-align: center }
90
91div.attention, div.caution, div.danger, div.error, div.hint,
92div.important, div.note, div.tip, div.warning {
93 margin: 2em ;
94 border: medium outset ;
95 padding: 1em }
96
97div.attention p.admonition-title, div.caution p.admonition-title,
98div.danger p.admonition-title, div.error p.admonition-title,
99div.warning p.admonition-title {
100 color: red ;
101 font-weight: bold ;
102 font-family: sans-serif }
103
104div.hint p.admonition-title, div.important p.admonition-title,
105div.note p.admonition-title, div.tip p.admonition-title {
106 font-weight: bold ;
107 font-family: sans-serif }
108
109div.figure {
110 margin-left: 2em }
111
112div.footer, div.header {
113 font-size: smaller }
114
115div.footer {
116 margin-left: 1em ;
117 margin-right: 1em }
118
119div.system-messages {
120 margin: 5em }
121
122div.system-messages h1 {
123 color: red }
124
125div.system-message {
126 border: medium outset ;
127 padding: 1em }
128
129div.system-message p.system-message-title {
130 color: red ;
131 font-weight: bold }
132
133div.topic {
134 margin: 2em }
135
136h1 {
137 font-family: sans-serif ;
138 font-size: large }
139
140h2 {
141 font-family: sans-serif ;
142 font-size: medium }
143
144h3 {
145 font-family: sans-serif ;
146 font-size: small }
147
148h4 {
149 font-family: sans-serif ;
150 font-style: italic ;
151 font-size: small }
152
153h5 {
154 font-family: sans-serif;
155 font-size: x-small }
156
157h6 {
158 font-family: sans-serif;
159 font-style: italic ;
160 font-size: x-small }
161
162.section hr {
163 width: 75% }
164
165ol.simple, ul.simple {
166 margin-bottom: 1em }
167
168ol.arabic {
169 list-style: decimal }
170
171ol.loweralpha {
172 list-style: lower-alpha }
173
174ol.upperalpha {
175 list-style: upper-alpha }
176
177ol.lowerroman {
178 list-style: lower-roman }
179
180ol.upperroman {
181 list-style: upper-roman }
182
183p.caption {
184 font-style: italic }
185
186p.credits {
187 font-style: italic ;
188 font-size: smaller }
189
190p.label {
191 white-space: nowrap }
192
193p.topic-title {
194 font-family: sans-serif ;
195 font-weight: bold }
196
197pre.line-block {
198 font-family: serif ;
199 font-size: 100% }
200
201pre.literal-block, pre.doctest-block {
202 margin-left: 2em ;
203 margin-right: 2em ;
204 background-color: #eeeeee }
205
206span.classifier {
207 font-family: sans-serif ;
208 font-style: oblique }
209
210span.classifier-delimiter {
211 font-family: sans-serif ;
212 font-weight: bold }
213
214span.interpreted {
215 font-family: sans-serif }
216
217span.option-argument {
218 font-style: italic }
219
220span.pre {
221 white-space: pre }
222
223span.problematic {
224 color: red }
225
226table {
227 margin-top: 0.5em ;
228 margin-bottom: 0.5em }
229
230td, th {
231 padding-left: 0.5em ;
232 padding-right: 0.5em ;
233 vertical-align: top }
234
235td.num {
236 text-align: right }
237
238th.field-name {
239 font-weight: bold ;
240 text-align: left ;
241 white-space: nowrap }
242
243h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt {
244 font-size: 100% }
245
246tt {
247 background-color: #eeeeee }
248
249ul.auto-toc {
250 list-style-type: none }
251
252</style></head>
253<body bgcolor="white"> 10<body bgcolor="white">
254<table class="navigation" cellpadding="0" cellspacing="0" 11<table class="navigation" cellpadding="0" cellspacing="0"
255 width="100%" border="0"> 12 width="100%" border="0">
256<tr><td class="navicon" width="150" height="35"> 13<tr><td class="navicon" width="150" height="35">
257<a href="http://www.gentoo.org/" title="Gentoo Linux Home Page"> 14<a href="http://www.gentoo.org/" title="Gentoo Linux Home Page">
268<tbody valign="top"> 25<tbody valign="top">
269<tr class="field"><th class="field-name">GLEP:</th><td class="field-body">55</td> 26<tr class="field"><th class="field-name">GLEP:</th><td class="field-body">55</td>
270</tr> 27</tr>
271<tr class="field"><th class="field-name">Title:</th><td class="field-body">Use EAPI-suffixed ebuilds (.ebuild-EAPI)</td> 28<tr class="field"><th class="field-name">Title:</th><td class="field-body">Use EAPI-suffixed ebuilds (.ebuild-EAPI)</td>
272</tr> 29</tr>
273<tr class="field"><th class="field-name">Version:</th><td class="field-body">1.3</td> 30<tr class="field"><th class="field-name">Version:</th><td class="field-body">1.6</td>
274</tr> 31</tr>
275<tr class="field"><th class="field-name">Last-Modified:</th><td class="field-body"><a class="reference external" href="http://www.gentoo.org/cgi-bin/viewcvs.cgi/xml/htdocs/proj/en/glep/glep-0055.txt?cvsroot=gentoo">2009/05/17 15:50:27</a></td> 32<tr class="field"><th class="field-name">Last-Modified:</th><td class="field-body"><a class="reference external" href="http://www.gentoo.org/cgi-bin/viewcvs.cgi/xml/htdocs/proj/en/glep/glep-0055.txt?cvsroot=gentoo">2012/05/09 19:37:01</a></td>
276</tr> 33</tr>
277<tr class="field"><th class="field-name">Author:</th><td class="field-body">Piotr Jaroszyński &lt;peper&#32;&#97;t&#32;gentoo.org&gt;</td> 34<tr class="field"><th class="field-name">Author:</th><td class="field-body">Piotr Jaroszyński &lt;peper&#32;&#97;t&#32;gentoo.org&gt;</td>
278</tr> 35</tr>
279<tr class="field"><th class="field-name">Status:</th><td class="field-body">Draft</td> 36<tr class="field"><th class="field-name">Status:</th><td class="field-body">Rejected</td>
280</tr> 37</tr>
281<tr class="field"><th class="field-name">Type:</th><td class="field-body">Standards Track</td> 38<tr class="field"><th class="field-name">Type:</th><td class="field-body">Standards Track</td>
282</tr> 39</tr>
283<tr class="field"><th class="field-name">Content-Type:</th><td class="field-body"><a class="reference external" href="glep-0002.html">text/x-rst</a></td> 40<tr class="field"><th class="field-name">Content-Type:</th><td class="field-body"><a class="reference external" href="glep-0002.html">text/x-rst</a></td>
284</tr> 41</tr>
290</table> 47</table>
291<hr /> 48<hr />
292<div class="contents topic" id="contents"> 49<div class="contents topic" id="contents">
293<p class="topic-title first">Contents</p> 50<p class="topic-title first">Contents</p>
294<ul class="simple"> 51<ul class="simple">
52<li><a class="reference internal" href="#status" id="id3">Status</a></li>
295<li><a class="reference internal" href="#abstract" id="id3">Abstract</a></li> 53<li><a class="reference internal" href="#abstract" id="id4">Abstract</a></li>
296<li><a class="reference internal" href="#problem" id="id4">Problem</a></li> 54<li><a class="reference internal" href="#problem" id="id5">Problem</a></li>
297<li><a class="reference internal" href="#current-behaviour" id="id5">Current behaviour</a><ul> 55<li><a class="reference internal" href="#current-behaviour" id="id6">Current behaviour</a><ul>
298<li><a class="reference internal" href="#incompatible-change-of-inherit-e-g-make-it-look-in-the-package-dir-too" id="id6">Incompatible change of inherit (e.g. make it look in the package dir too)</a></li> 56<li><a class="reference internal" href="#incompatible-change-of-inherit-e-g-make-it-look-in-the-package-dir-too" id="id7">Incompatible change of inherit (e.g. make it look in the package dir too)</a></li>
299<li><a class="reference internal" href="#new-global-scope-function" id="id7">New global scope function</a></li> 57<li><a class="reference internal" href="#new-global-scope-function" id="id8">New global scope function</a></li>
300<li><a class="reference internal" href="#new-version-format" id="id8">New version format</a></li> 58<li><a class="reference internal" href="#new-version-format" id="id9">New version format</a></li>
301<li><a class="reference internal" href="#use-newer-bash-features" id="id9">Use newer bash features</a></li> 59<li><a class="reference internal" href="#use-newer-bash-features" id="id10">Use newer bash features</a></li>
302</ul>
303</li> 60</ul>
61</li>
304<li><a class="reference internal" href="#abstract-solution" id="id10">Abstract solution</a></li> 62<li><a class="reference internal" href="#abstract-solution" id="id11">Abstract solution</a></li>
305<li><a class="reference internal" href="#proposed-solution" id="id11">Proposed solution</a></li> 63<li><a class="reference internal" href="#proposed-solution" id="id12">Proposed solution</a></li>
306<li><a class="reference internal" href="#specification" id="id12">Specification</a></li> 64<li><a class="reference internal" href="#specification" id="id13">Specification</a></li>
307<li><a class="reference internal" href="#summary-of-ideas" id="id13">Summary of ideas</a><ul> 65<li><a class="reference internal" href="#summary-of-ideas" id="id14">Summary of ideas</a><ul>
308<li><a class="reference internal" href="#eapi-suffixed-ebuilds-proposed-solution" id="id14">EAPI-suffixed ebuilds (proposed solution)</a></li> 66<li><a class="reference internal" href="#eapi-suffixed-ebuilds-proposed-solution" id="id15">EAPI-suffixed ebuilds (proposed solution)</a></li>
309<li><a class="reference internal" href="#eapi-in-the-filename-with-one-time-extension-change" id="id15">EAPI in the filename with one-time extension change</a></li> 67<li><a class="reference internal" href="#eapi-in-the-filename-with-one-time-extension-change" id="id16">EAPI in the filename with one-time extension change</a></li>
310<li><a class="reference internal" href="#easily-fetchable-eapi-inside-the-ebuild" id="id16">Easily fetchable EAPI inside the ebuild</a></li> 68<li><a class="reference internal" href="#easily-fetchable-eapi-inside-the-ebuild" id="id17">Easily fetchable EAPI inside the ebuild</a></li>
311<li><a class="reference internal" href="#easily-fetchable-eapi-inside-the-ebuild-and-one-time-extension-change" id="id17">Easily fetchable EAPI inside the ebuild and one-time extension change</a></li> 69<li><a class="reference internal" href="#easily-fetchable-eapi-inside-the-ebuild-and-one-time-extension-change" id="id18">Easily fetchable EAPI inside the ebuild and one-time extension change</a></li>
312<li><a class="reference internal" href="#use-different-subdirectories-for-different-eapis-i-e-cat-pkg-eapix" id="id18">Use different subdirectories for different EAPIs, i.e. cat/pkg/eapiX/</a></li> 70<li><a class="reference internal" href="#use-different-subdirectories-for-different-eapis-i-e-cat-pkg-eapix" id="id19">Use different subdirectories for different EAPIs, i.e. cat/pkg/eapiX/</a></li>
313</ul>
314</li> 71</ul>
72</li>
315<li><a class="reference internal" href="#references" id="id19">References</a></li> 73<li><a class="reference internal" href="#references" id="id20">References</a></li>
316<li><a class="reference internal" href="#copyright" id="id20">Copyright</a></li> 74<li><a class="reference internal" href="#copyright" id="id21">Copyright</a></li>
317</ul> 75</ul>
318</div> 76</div>
319<blockquote> 77<blockquote>
320<p>&quot;A little learning is a dangerous thing; drink deep, or taste not the Pierian 78<p>&quot;A little learning is a dangerous thing; drink deep, or taste not the Pierian
321spring: there shallow draughts intoxicate the brain, and drinking largely 79spring: there shallow draughts intoxicate the brain, and drinking largely
322sobers us again.&quot;</p> 80sobers us again.&quot;</p>
323<p class="attribution">&mdash;Alexander Pope, An Essay on Criticism</p> 81<p class="attribution">&mdash;Alexander Pope, An Essay on Criticism</p>
324</blockquote> 82</blockquote>
83<div class="section" id="status">
84<h1><a class="toc-backref" href="#id3">Status</a></h1>
85<p>This GLEP was voted down by the Council in its meeting on 2010-08-23.
86The Council rejected it again in its meeting on 2012-05-08, in favour
87of parsing the EAPI from the bash assignment statement in ebuilds.</p>
88</div>
325<div class="section" id="abstract"> 89<div class="section" id="abstract">
326<h1><a class="toc-backref" href="#id3">Abstract</a></h1> 90<h1><a class="toc-backref" href="#id4">Abstract</a></h1>
327<p>This GLEP proposes usage of EAPI-suffixed file extensions for ebuilds (for 91<p>This GLEP proposes usage of EAPI-suffixed file extensions for ebuilds (for
328example, foo-1.2.3.ebuild-1).</p> 92example, foo-1.2.3.ebuild-1).</p>
329</div> 93</div>
330<div class="section" id="problem"> 94<div class="section" id="problem">
331<h1><a class="toc-backref" href="#id4">Problem</a></h1> 95<h1><a class="toc-backref" href="#id5">Problem</a></h1>
332<p>The current way of specifying the EAPI in ebuilds is flawed. In order to get the 96<p>The current way of specifying the EAPI in ebuilds is flawed. In order to get the
333EAPI the package manager needs to source the ebuild, which itself needs the EAPI 97EAPI the package manager needs to source the ebuild, which itself needs the EAPI
334in the first place. Otherwise it imposes a serious limitation, namely every ebuild, 98in the first place. Otherwise it imposes a serious limitation, namely every ebuild,
335using any of the future EAPIs, will have to be source'able by old package 99using any of the future EAPIs, will have to be source'able by old package
336managers and hence there is no way to do any of the following:</p> 100managers and hence there is no way to do any of the following:</p>
345<li>Use newer bash features.</li> 109<li>Use newer bash features.</li>
346</ul> 110</ul>
347</blockquote> 111</blockquote>
348</div> 112</div>
349<div class="section" id="current-behaviour"> 113<div class="section" id="current-behaviour">
350<h1><a class="toc-backref" href="#id5">Current behaviour</a></h1> 114<h1><a class="toc-backref" href="#id6">Current behaviour</a></h1>
351<p>Following subsections show what happens if you introduce any of the mentioned 115<p>Following subsections show what happens if you introduce any of the mentioned
352changes in an ebuild and try to install it with portage 2.1.6.13.</p> 116changes in an ebuild and try to install it with portage 2.1.6.13.</p>
353<div class="section" id="incompatible-change-of-inherit-e-g-make-it-look-in-the-package-dir-too"> 117<div class="section" id="incompatible-change-of-inherit-e-g-make-it-look-in-the-package-dir-too">
354<h2><a class="toc-backref" href="#id6">Incompatible change of inherit (e.g. make it look in the package dir too)</a></h2> 118<h2><a class="toc-backref" href="#id7">Incompatible change of inherit (e.g. make it look in the package dir too)</a></h2>
355<p><tt class="docutils literal"><span class="pre">sys-apps/foo-1.ebuild</span></tt>:</p> 119<p><tt class="docutils literal"><span class="pre">sys-apps/foo-1.ebuild</span></tt>:</p>
356<pre class="literal-block"> 120<pre class="literal-block">
357EAPI=&quot;5&quot; 121EAPI=&quot;5&quot;
358inherit &quot;foo&quot; 122inherit &quot;foo&quot;
359 123
382 146
383!!! All ebuilds that could satisfy &quot;sys-apps/foo&quot; have been masked. 147!!! All ebuilds that could satisfy &quot;sys-apps/foo&quot; have been masked.
384!!! One of the following masked packages is required to complete your request: 148!!! One of the following masked packages is required to complete your request:
385- sys-apps/foo-1 (masked by: corruption) 149- sys-apps/foo-1 (masked by: corruption)
386</pre> 150</pre>
387<p>Current portage looks for eclasses only in the <tt class="docutils literal"><span class="pre">eclass</span></tt> directory of a 151<p>Current portage looks for eclasses only in the <tt class="docutils literal">eclass</tt> directory of a
388repository. This results in a fatal error and ebuild being masked by corruption 152repository. This results in a fatal error and ebuild being masked by corruption
389- might be pretty confusing to users.</p> 153- might be pretty confusing to users.</p>
390</div> 154</div>
391<div class="section" id="new-global-scope-function"> 155<div class="section" id="new-global-scope-function">
392<h2><a class="toc-backref" href="#id7">New global scope function</a></h2> 156<h2><a class="toc-backref" href="#id8">New global scope function</a></h2>
393<p><tt class="docutils literal"><span class="pre">sys-apps/foo-1.ebuild</span></tt>:</p> 157<p><tt class="docutils literal"><span class="pre">sys-apps/foo-1.ebuild</span></tt>:</p>
394<pre class="literal-block"> 158<pre class="literal-block">
395EAPI=&quot;5&quot; 159EAPI=&quot;5&quot;
396new_global_scope_function &quot;foo&quot; 160new_global_scope_function &quot;foo&quot;
397 161
412newer version of portage before EAPI masked packages can be installed. 176newer version of portage before EAPI masked packages can be installed.
413</pre> 177</pre>
414<p>Not that bad as user is advised to upgrade portage.</p> 178<p>Not that bad as user is advised to upgrade portage.</p>
415</div> 179</div>
416<div class="section" id="new-version-format"> 180<div class="section" id="new-version-format">
417<h2><a class="toc-backref" href="#id8">New version format</a></h2> 181<h2><a class="toc-backref" href="#id9">New version format</a></h2>
418<p><tt class="docutils literal"><span class="pre">sys-apps/foo-2-rc1.ebuild</span></tt>:</p> 182<p><tt class="docutils literal"><span class="pre">sys-apps/foo-2-rc1.ebuild</span></tt>:</p>
419<pre class="literal-block"> 183<pre class="literal-block">
420Invalid ebuild name: /var/lib/gentoo/repositories/peper/sys-apps/foo/foo-2-rc1.ebuild 184Invalid ebuild name: /var/lib/gentoo/repositories/peper/sys-apps/foo/foo-2-rc1.ebuild
421 185
422emerge: there are no ebuilds to satisfy &quot;sys-apps/foo&quot; 186emerge: there are no ebuilds to satisfy &quot;sys-apps/foo&quot;
423</pre> 187</pre>
424<p>Not the best error message, especially if there are lots of them.</p> 188<p>Not the best error message, especially if there are lots of them.</p>
425</div> 189</div>
426<div class="section" id="use-newer-bash-features"> 190<div class="section" id="use-newer-bash-features">
427<h2><a class="toc-backref" href="#id9">Use newer bash features</a></h2> 191<h2><a class="toc-backref" href="#id10">Use newer bash features</a></h2>
428<p><tt class="docutils literal"><span class="pre">|&amp;</span></tt> is a new type of redirection added in bash-4. It cannot be used even in 192<p><tt class="docutils literal">|&amp;</tt> is a new type of redirection added in bash-4. It cannot be used even in
429local scope as bash still parses the whole ebuild.</p> 193local scope as bash still parses the whole ebuild.</p>
430<p><tt class="docutils literal"><span class="pre">sys-apps/foo-1.ebuild</span></tt>:</p> 194<p><tt class="docutils literal"><span class="pre">sys-apps/foo-1.ebuild</span></tt>:</p>
431<pre class="literal-block"> 195<pre class="literal-block">
432EAPI=&quot;5&quot; 196EAPI=&quot;5&quot;
433 197
459</pre> 223</pre>
460<p>Again, not the best error.</p> 224<p>Again, not the best error.</p>
461</div> 225</div>
462</div> 226</div>
463<div class="section" id="abstract-solution"> 227<div class="section" id="abstract-solution">
464<h1><a class="toc-backref" href="#id10">Abstract solution</a></h1> 228<h1><a class="toc-backref" href="#id11">Abstract solution</a></h1>
465<p>A solution to this problem has to lift those limitations and the only way to do 229<p>A solution to this problem has to lift those limitations and the only way to do
466it is to make the EAPI of an ebuild available to the package managers in a way 230it is to make the EAPI of an ebuild available to the package managers in a way
467that doesn't require them to source the ebuild. Another important requirement is 231that doesn't require them to source the ebuild. Another important requirement is
468for the solution to be backward compatible, which has the pleasant side-effect 232for the solution to be backward compatible, which has the pleasant side-effect
469of making the solution applicable in the Gentoo tree right away. Opposed to 233of making the solution applicable in the Gentoo tree right away. Opposed to
470waiting an arbitrary amount of time, which is never long enough anyway, as the 234waiting an arbitrary amount of time, which is never long enough anyway, as the
471issues listed on the common portage problems page - <a class="footnote-reference" href="#portageproblems" id="id2">[2]</a> - show.</p> 235issues listed on the common portage problems page - <a class="footnote-reference" href="#portageproblems" id="id2">[2]</a> - show.</p>
472</div> 236</div>
473<div class="section" id="proposed-solution"> 237<div class="section" id="proposed-solution">
474<h1><a class="toc-backref" href="#id11">Proposed solution</a></h1> 238<h1><a class="toc-backref" href="#id12">Proposed solution</a></h1>
475<p>The proposed solution is to use EAPI-suffixed file extensions for ebuilds. This 239<p>The proposed solution is to use EAPI-suffixed file extensions for ebuilds. This
476allows package managers to trivially read the EAPI from the ebuild filename. It 240allows package managers to trivially read the EAPI from the ebuild filename. It
477is also backwards compatible, because currently ebuilds are recognised by the 241is also backwards compatible, because currently ebuilds are recognised by the
478<tt class="docutils literal"><span class="pre">.ebuild</span></tt> file extension and hence EAPI-suffixed ebuilds are simply ignored by 242<tt class="docutils literal">.ebuild</tt> file extension and hence EAPI-suffixed ebuilds are simply ignored by
479the package managers.</p> 243the package managers.</p>
480</div> 244</div>
481<div class="section" id="specification"> 245<div class="section" id="specification">
482<h1><a class="toc-backref" href="#id12">Specification</a></h1> 246<h1><a class="toc-backref" href="#id13">Specification</a></h1>
483<p>Ebuild filename extension syntax: <tt class="docutils literal"><span class="pre">ebuild[-&lt;EAPI&gt;]</span></tt>, where <tt class="docutils literal"><span class="pre">[]</span></tt> denotes an 247<p>Ebuild filename extension syntax: <tt class="docutils literal"><span class="pre">ebuild[-&lt;EAPI&gt;]</span></tt>, where <tt class="docutils literal">[]</tt> denotes an
484optional part, and <tt class="docutils literal"><span class="pre">&lt;EAPI&gt;</span></tt> is the EAPI of the ebuild.</p> 248optional part, and <tt class="docutils literal">&lt;EAPI&gt;</tt> is the EAPI of the ebuild.</p>
485<p>The EAPI used by the ebuild is the EAPI included in the filename if it is set. 249<p>The EAPI used by the ebuild is the EAPI included in the filename if it is set.
486Otherwise the EAPI set inside the ebuild is used, which defaults to 0 (this is 250Otherwise the EAPI set inside the ebuild is used, which defaults to 0 (this is
487the current behaviour).</p> 251the current behaviour).</p>
488<p>Ebuilds with unsupported EAPIs are masked.</p> 252<p>Ebuilds with unsupported EAPIs are masked.</p>
489<p>It should be considered an error to set the EAPI both in the filename and in the 253<p>It should be considered an error to set the EAPI both in the filename and in the
516allowing authors to provide backwards compatible ebuilds, it would introduce 280allowing authors to provide backwards compatible ebuilds, it would introduce
517problems too. The first is the requirement to have strict EAPI ordering, the 281problems too. The first is the requirement to have strict EAPI ordering, the
518second is ensuring that all the ebuilds for a single category/package-version 282second is ensuring that all the ebuilds for a single category/package-version
519are equivalent, i.e. installing any of them has exactly the same effect on a 283are equivalent, i.e. installing any of them has exactly the same effect on a
520given system.</p> 284given system.</p>
285<p>Also note that it is not a new restriction. It is already possible to illegally
286have multiple versions with different EAPIs as e.g. <tt class="docutils literal">1.0 == 1.00 == <span class="pre">1.00-r0</span></tt>
287and hence you could have <tt class="docutils literal"><span class="pre">foo-1.0.ebuild</span></tt> with EAPI X and <tt class="docutils literal"><span class="pre">foo-1.00.ebuild</span></tt>
288with EAPI Y.</p>
521</div> 289</div>
522<div class="section" id="summary-of-ideas"> 290<div class="section" id="summary-of-ideas">
523<h1><a class="toc-backref" href="#id13">Summary of ideas</a></h1> 291<h1><a class="toc-backref" href="#id14">Summary of ideas</a></h1>
524<div class="section" id="eapi-suffixed-ebuilds-proposed-solution"> 292<div class="section" id="eapi-suffixed-ebuilds-proposed-solution">
525<h2><a class="toc-backref" href="#id14">EAPI-suffixed ebuilds (proposed solution)</a></h2> 293<h2><a class="toc-backref" href="#id15">EAPI-suffixed ebuilds (proposed solution)</a></h2>
526<dl class="docutils"> 294<dl class="docutils">
527<dt>Properties:</dt> 295<dt>Properties:</dt>
528<dd><ul class="first last simple"> 296<dd><ul class="first last simple">
529<li>Can be used right away: yes</li> 297<li>Can be used right away: yes</li>
530<li>Hurts performance: no</li> 298<li>Hurts performance: no</li>
532</dd> 300</dd>
533</dl> 301</dl>
534<p>Some say it is clear and simple, others that it is ugly and unintuitive.</p> 302<p>Some say it is clear and simple, others that it is ugly and unintuitive.</p>
535</div> 303</div>
536<div class="section" id="eapi-in-the-filename-with-one-time-extension-change"> 304<div class="section" id="eapi-in-the-filename-with-one-time-extension-change">
537<h2><a class="toc-backref" href="#id15">EAPI in the filename with one-time extension change</a></h2> 305<h2><a class="toc-backref" href="#id16">EAPI in the filename with one-time extension change</a></h2>
538<p>One of the proposed filename formats: 306<p>One of the proposed filename formats:
539<tt class="docutils literal"><span class="pre">&lt;PKG&gt;-&lt;VER&gt;.eapi-&lt;EAPI&gt;.eb</span></tt></p> 307<tt class="docutils literal"><span class="pre">&lt;PKG&gt;-&lt;VER&gt;.eapi-&lt;EAPI&gt;.eb</span></tt></p>
540<dl class="docutils"> 308<dl class="docutils">
541<dt>Properties:</dt> 309<dt>Properties:</dt>
542<dd><ul class="first last simple"> 310<dd><ul class="first last simple">
547</dl> 315</dl>
548<p>This is equivalent to the proposed solution.</p> 316<p>This is equivalent to the proposed solution.</p>
549<p>Some say it is better because the extension is static.</p> 317<p>Some say it is better because the extension is static.</p>
550</div> 318</div>
551<div class="section" id="easily-fetchable-eapi-inside-the-ebuild"> 319<div class="section" id="easily-fetchable-eapi-inside-the-ebuild">
552<h2><a class="toc-backref" href="#id16">Easily fetchable EAPI inside the ebuild</a></h2> 320<h2><a class="toc-backref" href="#id17">Easily fetchable EAPI inside the ebuild</a></h2>
553<dl class="docutils"> 321<dl class="docutils">
554<dt>Properties:</dt> 322<dt>Properties:</dt>
555<dd><ul class="first last simple"> 323<dd><ul class="first last simple">
556<li>Can be used right away: no</li> 324<li>Can be used right away: no</li>
557<li>Hurts performance: yes</li> 325<li>Hurts performance: yes</li>
562behaviour section for old package managers.</p> 330behaviour section for old package managers.</p>
563<p>Performance decrease comes from the fact that with version format changes in the 331<p>Performance decrease comes from the fact that with version format changes in the
564picture package managers need EAPI to parse the ebuild's version. That means that merely 332picture package managers need EAPI to parse the ebuild's version. That means that merely
565picking the best version of a package requires loading EAPI (from cache or the 333picking the best version of a package requires loading EAPI (from cache or the
566ebuild) for each available ebuild.</p> 334ebuild) for each available ebuild.</p>
335<p>Here is more or less how the package manager figures out the best available
336version for a package with N versions available.</p>
337<blockquote>
338<ul class="simple">
339<li>EAPI in the filename<ul>
340<li>Read the directory containing the package - readdir()</li>
341<li>For each ebuild, read its EAPI and using that parse its version - no I/O</li>
342<li>Sort the versions - no I/O</li>
343<li>Going down from the highest to the lowest version<ul>
344<li>Get the metadata from cache - 2 x stat() + read()</li>
345<li>break if the version is visible</li>
346</ul>
347</li>
348</ul>
349</li>
350<li>EAPI in the ebuild<ul>
351<li>Read the directory containing the package - readdir()</li>
352<li>For each ebuild load its metadata from cache to get its EAPI - N x (2 x stat() + read())</li>
353<li>Sort the versions - no I/O</li>
354<li>Going down from the highest to the lowest version<ul>
355<li>(metadata is already loaded) - no I/O</li>
356<li>break if the version is visible - no I/O</li>
357</ul>
358</li>
359</ul>
360</li>
361</ul>
362</blockquote>
363<p>The difference is in for how many versions the package manager needs to hit
364cache. With EAPI in the ebuild it needs to do that for all versions, with EAPI
365in the filename it depends on versions visibility.
366For example, package foo has versions 1, 2, 3, 4, 5 and 6. 6 is masked, 5 is
367~arch and 1,2,3 and 4 are arch. Say, the user accepts only arch for this
368package. With EAPI in the filename it will read metadata only for versions
3696, 5 and 4. With EAPI in the ebuild it needs to load metadata for all versions.</p>
370<p>It's hard to say what's the avarage case, but surely the worst case scenario
371(when only the lowest version is visible) is uncommon.</p>
567</div> 372</div>
568<div class="section" id="easily-fetchable-eapi-inside-the-ebuild-and-one-time-extension-change"> 373<div class="section" id="easily-fetchable-eapi-inside-the-ebuild-and-one-time-extension-change">
569<h2><a class="toc-backref" href="#id17">Easily fetchable EAPI inside the ebuild and one-time extension change</a></h2> 374<h2><a class="toc-backref" href="#id18">Easily fetchable EAPI inside the ebuild and one-time extension change</a></h2>
570<dl class="docutils"> 375<dl class="docutils">
571<dt>Properties:</dt> 376<dt>Properties:</dt>
572<dd><ul class="first last simple"> 377<dd><ul class="first last simple">
573<li>Can be used right away: yes</li> 378<li>Can be used right away: yes</li>
574<li>Hurts performance: yes</li> 379<li>Hurts performance: yes</li>
578<p>Performance decrease as described in the previous section.</p> 383<p>Performance decrease as described in the previous section.</p>
579<p>Some say it is clear and simple, others that it is confusing and unintuitive, 384<p>Some say it is clear and simple, others that it is confusing and unintuitive,
580because of the arbitrary format restrictions in what is a bash script otherwise.</p> 385because of the arbitrary format restrictions in what is a bash script otherwise.</p>
581</div> 386</div>
582<div class="section" id="use-different-subdirectories-for-different-eapis-i-e-cat-pkg-eapix"> 387<div class="section" id="use-different-subdirectories-for-different-eapis-i-e-cat-pkg-eapix">
583<h2><a class="toc-backref" href="#id18">Use different subdirectories for different EAPIs, i.e. cat/pkg/eapiX/</a></h2> 388<h2><a class="toc-backref" href="#id19">Use different subdirectories for different EAPIs, i.e. cat/pkg/eapiX/</a></h2>
584<dl class="docutils"> 389<dl class="docutils">
585<dt>Properties:</dt> 390<dt>Properties:</dt>
586<dd><ul class="first last simple"> 391<dd><ul class="first last simple">
587<li>Can be used right away: yes</li> 392<li>Can be used right away: yes</li>
588<li>Hurts performance: yes</li> 393<li>Hurts performance: yes</li>
593reads.</p> 398reads.</p>
594<p>Some say that it makes it much harder for maintainers to see what they have.</p> 399<p>Some say that it makes it much harder for maintainers to see what they have.</p>
595</div> 400</div>
596</div> 401</div>
597<div class="section" id="references"> 402<div class="section" id="references">
598<h1><a class="toc-backref" href="#id19">References</a></h1> 403<h1><a class="toc-backref" href="#id20">References</a></h1>
599<table class="docutils footnote" frame="void" id="glep54" rules="none"> 404<table class="docutils footnote" frame="void" id="glep54" rules="none">
600<colgroup><col class="label" /><col /></colgroup> 405<colgroup><col class="label" /><col /></colgroup>
601<tbody valign="top"> 406<tbody valign="top">
602<tr><td class="label"><a class="fn-backref" href="#id1">[1]</a></td><td>GLEP 54, scm package version suffix 407<tr><td class="label"><a class="fn-backref" href="#id1">[1]</a></td><td>GLEP 54, scm package version suffix
603(<a class="reference external" href="http://glep.gentoo.org/glep-0054.html">http://glep.gentoo.org/glep-0054.html</a>)</td></tr> 408(<a class="reference external" href="http://glep.gentoo.org/glep-0054.html">http://glep.gentoo.org/glep-0054.html</a>)</td></tr>
610(<a class="reference external" href="http://www.gentoo.org/proj/en/portage/doc/common-problems.xml">http://www.gentoo.org/proj/en/portage/doc/common-problems.xml</a>)</td></tr> 415(<a class="reference external" href="http://www.gentoo.org/proj/en/portage/doc/common-problems.xml">http://www.gentoo.org/proj/en/portage/doc/common-problems.xml</a>)</td></tr>
611</tbody> 416</tbody>
612</table> 417</table>
613</div> 418</div>
614<div class="section" id="copyright"> 419<div class="section" id="copyright">
615<h1><a class="toc-backref" href="#id20">Copyright</a></h1> 420<h1><a class="toc-backref" href="#id21">Copyright</a></h1>
616<p>This document has been placed in the public domain.</p> 421<p>This document has been placed in the public domain.</p>
617<!-- vim: set tw=80 fileencoding=utf-8 spell spelllang=en et : --> 422<!-- vim: set tw=80 fileencoding=utf-8 spell spelllang=en et : -->
618</div> 423</div>
619 424
620</div> 425</div>
621<div class="footer"> 426<div class="footer">
622<hr class="footer" /> 427<hr class="footer" />
623<a class="reference external" href="glep-0055.txt">View document source</a>. 428<a class="reference external" href="glep-0055.txt">View document source</a>.
624Generated on: 2009-05-17 16:58 UTC. 429Generated on: 2012-05-09 20:00 UTC.
625Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source. 430Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
626 431
627</div> 432</div>
628</body> 433</body>
629</html> 434</html>

Legend:
Removed from v.1.4  
changed lines
  Added in v.1.8

  ViewVC Help
Powered by ViewVC 1.1.20