| 1 | GLEP: 33 |
1 | GLEP: 33 |
| 2 | Title: Eclass Restructure/Redesign |
2 | Title: Eclass Restructure/Redesign |
| 3 | Version: $Revision: 1.3 $ |
3 | Version: $Revision: 1.6 $ |
| 4 | Last-Modified: $Date: 2005/03/06 20:39:19 $ |
4 | Last-Modified: $Date: 2006/09/05 20:54:30 $ |
| 5 | Author: Brian Harring <ferringb@gentoo.org>, John Mylchreest <johnm@gentoo.org> |
5 | Author: Brian Harring <ferringb@gentoo.org>, John Mylchreest <johnm@gentoo.org> |
| 6 | Status: Draft |
6 | Status: Moribund |
| 7 | Type: Standards Track |
7 | Type: Standards Track |
| 8 | Content-Type: text/x-rst |
8 | Content-Type: text/x-rst |
| 9 | Created: 29-Jan-2005 |
9 | Created: 29-Jan-2005 |
| 10 | Post-History: 29-Jan-2005 6-Mar-2005 |
10 | Post-History: 29-Jan-2005 6-Mar-2005 15-Sep-2005 5-Sep-2006 |
| 11 | |
11 | |
|
|
12 | Status |
|
|
13 | ====== |
|
|
14 | |
|
|
15 | Approved by the Gentoo Council on 15 September 2005. As of Sept. 2006 |
|
|
16 | this GLEP is on hold, pending future revisions. |
| 12 | |
17 | |
| 13 | Abstract |
18 | Abstract |
| 14 | ======== |
19 | ======== |
| 15 | |
20 | |
| 16 | For any design, the transition from theoretical to applied exposes inadequacies |
21 | For any design, the transition from theoretical to applied exposes inadequacies |
| … | |
… | |
| 36 | ======================== |
41 | ======================== |
| 37 | |
42 | |
| 38 | Eclasses within the tree currently are a bit of a mess- they're forced to |
43 | Eclasses within the tree currently are a bit of a mess- they're forced to |
| 39 | maintain backwards compatibility w/ all previous functionality. In effect, |
44 | maintain backwards compatibility w/ all previous functionality. In effect, |
| 40 | their api is constant, and can only be added to- never changing the existing |
45 | their api is constant, and can only be added to- never changing the existing |
| 41 | functionality. This obviously is quite limiting, and leads to cruft accruing in |
46 | functionality. This obviously is quite limiting, and leads to cruft accruing in |
| 42 | eclasses as a eclasses design is refined. This needs to be dealt with prior to |
47 | eclasses as a eclasses design is refined. This needs to be dealt with prior to |
| 43 | eclass code reaching a critical mass where they become unmanageable/fragile |
48 | eclass code reaching a critical mass where they become unmanageable/fragile |
| 44 | (recent pushes for eclass versioning could be interpreted as proof of this). |
49 | (recent pushes for eclass versioning could be interpreted as proof of this). |
| 45 | |
50 | |
| 46 | Beyond that, eclasses were originally intended as a method to allow for ebuilds |
51 | Beyond that, eclasses were originally intended as a method to allow for ebuilds |
| 47 | to use a pre-existing block of code, rather then having to duplicate the code in |
52 | to use a pre-existing block of code, rather then having to duplicate the code in |
| 48 | each ebuild. This is a good thing, but there are ill effects that result from |
53 | each ebuild. This is a good thing, but there are ill effects that result from |
| 49 | the current design. Eclasses inherit other eclasses to get a single function- in |
54 | the current design. Eclasses inherit other eclasses to get a single function- in |
| 50 | doing so, modifying the the exported 'template' (default src_compile, default |
55 | doing so, modifying the the exported 'template' (default src_compile, default |
| 51 | src_unpack, various vars, etc). All the eclass designer was after was reusing a |
56 | src_unpack, various vars, etc). All the eclass designer was after was reusing a |
| 52 | function, not making their eclass sensitive to changes in the template of the |
57 | function, not making their eclass sensitive to changes in the template of the |
| 53 | eclass it's inheriting. The eclass designer -should- be aware of changes in the |
58 | eclass it's inheriting. The eclass designer -should- be aware of changes in the |
| 54 | function they're using, but shouldn't have to worry about their default src_* |
59 | function they're using, but shouldn't have to worry about their default src_* |
| 55 | and pkg_* functions being overwritten, let alone the env changes. |
60 | and pkg_* functions being overwritten, let alone the env changes. |
| 56 | |
61 | |
| … | |
… | |
| 61 | rather then requiring them to be aware of what phase of eclass changes is in |
66 | rather then requiring them to be aware of what phase of eclass changes is in |
| 62 | progress. |
67 | progress. |
| 63 | |
68 | |
| 64 | By rolling all changes into one large change, a line is intentionally drawn in |
69 | By rolling all changes into one large change, a line is intentionally drawn in |
| 65 | the sand. Old eclasses allowed for this, behaved this way. New eclasses allow |
70 | the sand. Old eclasses allowed for this, behaved this way. New eclasses allow |
| 66 | for that, and behave this way. This should reduce misconceptions about what is |
71 | for that, and behave this way. This should reduce misconceptions about what is |
| 67 | allowed/possible with eclasses, thus reducing bugs that result from said |
72 | allowed/possible with eclasses, thus reducing bugs that result from said |
| 68 | misconceptions. |
73 | misconceptions. |
| 69 | |
74 | |
| 70 | A few words on elibs- think of them as a clear definition between behavioral |
75 | A few words on elibs- think of them as a clear definition between behavioral |
| 71 | functionality of an eclass, and the library functionality. Eclass's modify |
76 | functionality of an eclass, and the library functionality. Eclass's modify |
| … | |
… | |
| 74 | |
79 | |
| 75 | Consider the majority of the portage bin/* scripts- these all are candidates for |
80 | Consider the majority of the portage bin/* scripts- these all are candidates for |
| 76 | being added to the tree as elibs, as is the bulk of eutils. |
81 | being added to the tree as elibs, as is the bulk of eutils. |
| 77 | |
82 | |
| 78 | |
83 | |
| 79 | Specification. |
84 | Specification |
| 80 | ============== |
85 | ============= |
| 81 | |
86 | |
| 82 | The various parts of this proposal are broken down into a set of changes and |
87 | The various parts of this proposal are broken down into a set of changes and |
| 83 | elaborations on why a proposed change is preferable. It's advisable to the |
88 | elaborations on why a proposed change is preferable. It's advisable to the |
| 84 | reader that this be read serially, rather then jumping around. |
89 | reader that this be read serially, rather then jumping around. |
| 85 | |
90 | |
| … | |
… | |
| 108 | initialization of the library that is absolutely needed. Additionally, they |
113 | initialization of the library that is absolutely needed. Additionally, they |
| 109 | cannot modify any ebuild template functions- src_compile, src_unpack. Since they are |
114 | cannot modify any ebuild template functions- src_compile, src_unpack. Since they are |
| 110 | required to not modify the metadata keys, nor in any way affect the ebuild aside |
115 | required to not modify the metadata keys, nor in any way affect the ebuild aside |
| 111 | from providing functionality, they can be conditionally pulled in. They also |
116 | from providing functionality, they can be conditionally pulled in. They also |
| 112 | are allowed to pull in other elibs, but strictly just elibs- no eclasses, just |
117 | are allowed to pull in other elibs, but strictly just elibs- no eclasses, just |
| 113 | other elibs. A real world example would be the eutils eclass. |
118 | other elibs. A real world example would be the eutils eclass. |
| 114 | |
119 | |
| 115 | Portage, since the elib's don't modify metadata, isn't required to track elibs |
120 | Portage, since the elib's don't modify metadata, isn't required to track elibs |
| 116 | as it tracks eclasses. Thus a change in an elib doesn't result in half the tree |
121 | as it tracks eclasses. Thus a change in an elib doesn't result in half the tree |
| 117 | forced to be regenerated/marked stale when changed (this is more of an infra |
122 | forced to be regenerated/marked stale when changed (this is more of an infra |
| 118 | benefit, although regen's that take too long due to eclass changes have been |
123 | benefit, although regen's that take too long due to eclass changes have been |
| 119 | known to cause rsync issues due to missing timestamps). |
124 | known to cause rsync issues due to missing timestamps). |
| 120 | |
125 | |
| 121 | Elibs will not be available in the global scope of an eclass, or ebuild- nor during the |
126 | Elibs will not be available in the global scope of an eclass, or ebuild- nor during the |
| 122 | depends phase (basically a phase that sources the ebuild, to get it's metadata). Elib |
127 | depends phase (basically a phase that sources the ebuild, to get its metadata). Elib |
| 123 | calls in the global scope will be tracked, but the elib will not be loaded till just before |
128 | calls in the global scope will be tracked, but the elib will not be loaded till just before |
| 124 | the setup phase (pkg_setup). There are two reasons for this- first, it ensures elibs are |
129 | the setup phase (pkg_setup). There are two reasons for this- first, it ensures elibs are |
| 125 | completely incapable of modifying metadata. There is no room for confusion, late loading |
130 | completely incapable of modifying metadata. There is no room for confusion, late loading |
| 126 | of elibs gives you the functionality for all phases, except for depends- depends being the |
131 | of elibs gives you the functionality for all phases, except for depends- depends being the |
| 127 | only phase that is capable of specifying metadata. Second, as an added bonus, late |
132 | only phase that is capable of specifying metadata. Second, as an added bonus, late |
| 128 | loading reduces the amount of bash sourced for a regen- faster regens. This however is minor, |
133 | loading reduces the amount of bash sourced for a regen- faster regens. This however is minor, |
| 129 | and is an ancillary benefit of the first reason. |
134 | and is an ancillary benefit of the first reason. |
| … | |
… | |
| 148 | fi |
153 | fi |
| 149 | |
154 | |
| 150 | |
155 | |
| 151 | Regarding maintainability of elibs, it should be a less of a load then old |
156 | Regarding maintainability of elibs, it should be a less of a load then old |
| 152 | eclasses. One of the major issues with old eclasses is that their functions are |
157 | eclasses. One of the major issues with old eclasses is that their functions are |
| 153 | quite incestuous- they're bound tightly to the env they're defined in. This |
158 | quite incestuous- they're bound tightly to the env they're defined in. This |
| 154 | makes eclass functions a bit fragile- the restrictions on what can, and cannot |
159 | makes eclass functions a bit fragile- the restrictions on what can, and cannot |
| 155 | be done in elibs will address this, making functionality less fragile (thus a |
160 | be done in elibs will address this, making functionality less fragile (thus a |
| 156 | bit more maintainable). |
161 | bit more maintainable). |
| 157 | |
162 | |
| 158 | There is no need for backwards compatibility with elibs- they just must work |
163 | There is no need for backwards compatibility with elibs- they just must work |
| … | |
… | |
| 169 | |
174 | |
| 170 | The reduced role of Eclasses, and a clarification of existing Eclass requirements |
175 | The reduced role of Eclasses, and a clarification of existing Eclass requirements |
| 171 | --------------------------------------------------------------------------------- |
176 | --------------------------------------------------------------------------------- |
| 172 | |
177 | |
| 173 | Since elibs are now intended on holding common bash functionality, the focus of |
178 | Since elibs are now intended on holding common bash functionality, the focus of |
| 174 | eclasses should be in defining an appropriate template for ebuilds. For example, |
179 | eclasses should be in defining an appropriate template for ebuilds. For example, |
| 175 | defining common DEPENDS, RDEPENDS, src_compile functions, src_unpack, etc. |
180 | defining common DEPENDS, RDEPENDS, src_compile functions, src_unpack, etc. |
| 176 | Additionally, eclasses should pull in any elibs they need for functionality. |
181 | Additionally, eclasses should pull in any elibs they need for functionality. |
| 177 | |
182 | |
| 178 | Eclass functionality that isn't directly related to the metadata, or src_* and |
183 | Eclass functionality that isn't directly related to the metadata, or src_* and |
| 179 | pkg_* funcs should be shifted into elibs to allow for maximal code reuse. This |
184 | pkg_* funcs should be shifted into elibs to allow for maximal code reuse. This |
| … | |
… | |
| 216 | |
221 | |
| 217 | |
222 | |
| 218 | The end of backwards compatibility... |
223 | The end of backwards compatibility... |
| 219 | ------------------------------------- |
224 | ------------------------------------- |
| 220 | |
225 | |
| 221 | With current eclasses, once the eclass is in use, it's api can no longer be |
226 | With current eclasses, once the eclass is in use, its api can no longer be |
| 222 | changed, nor can the eclass ever be removed from the tree. This is why we still |
227 | changed, nor can the eclass ever be removed from the tree. This is why we still |
| 223 | have *ancient* eclasses that are completely unused sitting in the tree, for |
228 | have *ancient* eclasses that are completely unused sitting in the tree, for |
| 224 | example inherit.eclass . The reason for this, not surprisingly is a portage |
229 | example inherit.eclass. The reason for this, not surprisingly, is a portage |
| 225 | deficiency- on unmerging an installed ebuild, portage used the eclass from the |
230 | deficiency: on unmerging an installed ebuild, portage used the eclass from the |
| 226 | current tree. |
231 | current tree. |
| 227 | |
232 | |
| 228 | For a real world example of this, if you merged a glibc 2 years back, whatever |
233 | For a real world example of this, if you merged a glibc 2 years back, whatever |
| 229 | eclasses it used must still be compatible, or you may not be able to unmerge the |
234 | eclasses it used must still be compatible, or you may not be able to unmerge the |
| 230 | older glibc version during an upgrade to a newer version. So either the glibc |
235 | older glibc version during an upgrade to a newer version. So either the glibc |
| … | |
… | |
| 266 | |
271 | |
| 267 | In other words, these new eclasses would in effect, be old eclasses since older |
272 | In other words, these new eclasses would in effect, be old eclasses since older |
| 268 | portage versions could still access them. |
273 | portage versions could still access them. |
| 269 | |
274 | |
| 270 | |
275 | |
| 271 | Tree restructuring. |
276 | Tree restructuring |
| 272 | ------------------- |
277 | ------------------ |
| 273 | |
278 | |
| 274 | There are only two way to block the existing (as of this writing) inherit |
279 | There are only two way to block the existing (as of this writing) inherit |
| 275 | functionality from accessing the new eclasses- either change the extension of |
280 | functionality from accessing the new eclasses- either change the extension of |
| 276 | eclasses to something other then 'eclass', or to have them stored in a separate |
281 | eclasses to something other then 'eclass', or to have them stored in a separate |
| 277 | subdirectory of the tree then eclass. |
282 | subdirectory of the tree then eclass. |
| … | |
… | |
| 287 | eclasses, please reread the previous section. It's unfortunately a requirement |
292 | eclasses, please reread the previous section. It's unfortunately a requirement |
| 288 | to take advantage of all that the next major portage release will allow. |
293 | to take advantage of all that the next major portage release will allow. |
| 289 | |
294 | |
| 290 | The proposed directory structure is ${PORTDIR}/include/{eclass,elib}. |
295 | The proposed directory structure is ${PORTDIR}/include/{eclass,elib}. |
| 291 | Something like ${PORTDIR}/new-eclass, or ${PORTDIR}/eclass-ng could be used |
296 | Something like ${PORTDIR}/new-eclass, or ${PORTDIR}/eclass-ng could be used |
| 292 | (although many would cringe at the -ng), but such a name is unwise. Consider the |
297 | (although many would cringe at the -ng), but such a name is unwise. Consider the |
| 293 | possibility (likely a fact) that new eclasses someday may be found lacking, and |
298 | possibility (likely a fact) that new eclasses someday may be found lacking, and |
| 294 | refined further (version three as it were). Or perhaps we want to add yet more |
299 | refined further (version three as it were). Or perhaps we want to add yet more |
| 295 | functionality with direct relation to sourcing new files, and we would then need |
300 | functionality with direct relation to sourcing new files, and we would then need |
| 296 | to further populate ${PORTDIR}. |
301 | to further populate ${PORTDIR}. |
| 297 | |
302 | |
| 298 | The new-eclass directory will be (at least) 2 levels deep- for example: |
303 | The new-eclass directory will be (at least) 2 levels deep- for example: |
| 299 | |
304 | |
| … | |
… | |
| 315 | to ensure no files are missing, and that nothing has been tainted. |
320 | to ensure no files are missing, and that nothing has been tainted. |
| 316 | |
321 | |
| 317 | The elib directory will be structured in the same way, for the same reasons. |
322 | The elib directory will be structured in the same way, for the same reasons. |
| 318 | |
323 | |
| 319 | Repoman will have to be extended to work within new eclass and elib groups, and |
324 | Repoman will have to be extended to work within new eclass and elib groups, and |
| 320 | to handle signing and committing. This is intentional, and a good thing. This |
325 | to handle signing and committing. This is intentional, and a good thing. This |
| 321 | gives repoman the possibility of doing sanity checks on elibs/new eclasses. |
326 | gives repoman the possibility of doing sanity checks on elibs/new eclasses. |
| 322 | |
327 | |
| 323 | Note these checks will not prevent developers from doing dumb things with eclass- |
328 | Note these checks will not prevent developers from doing dumb things with eclass- |
| 324 | these checks would only be capable of doing basic sanity checks, such as syntax checks. |
329 | these checks would only be capable of doing basic sanity checks, such as syntax checks. |
| 325 | There is no way to prevent people from doing dumb things (exempting perhaps repeated |
330 | There is no way to prevent people from doing dumb things (exempting perhaps repeated |
| … | |
… | |
| 331 | --------------------------------------------------------- |
336 | --------------------------------------------------------- |
| 332 | |
337 | |
| 333 | As clarified above, new eclasses will exist in a separate directory that will be |
338 | As clarified above, new eclasses will exist in a separate directory that will be |
| 334 | intentionally inaccessible to the inherit function. As such, users of older |
339 | intentionally inaccessible to the inherit function. As such, users of older |
| 335 | portage versions *will* have to upgrade to merge any ebuild that uses elibs/new |
340 | portage versions *will* have to upgrade to merge any ebuild that uses elibs/new |
| 336 | eclasses. A depend on the next major portage version would transparently handle |
341 | eclasses. A depend on the next major portage version would transparently handle |
| 337 | this for rsync users. |
342 | this for rsync users. |
| 338 | |
343 | |
| 339 | There still is the issue of users who haven't upgraded to the required portage |
344 | There still is the issue of users who haven't upgraded to the required portage |
| 340 | version. This is a minor concern frankly- portage releases include new |
345 | version. This is a minor concern frankly- portage releases include new |
| 341 | functionality, and bug fixes. If they won't upgrade, it's assumed they have |
346 | functionality, and bug fixes. If they won't upgrade, it's assumed they have |
| 342 | their reasons and are big boys, thus able to handle the complications themselves. |
347 | their reasons and are big boys, thus able to handle the complications themselves. |
| 343 | |
348 | |
| 344 | The real issue is broken envs, whether in binpkgs, or for installed packages. |
349 | The real issue is broken envs, whether in binpkgs, or for installed packages. |
| 345 | Two options exist- either the old eclasses are left in the tree indefinitely, or |
350 | Two options exist- either the old eclasses are left in the tree indefinitely, or |
| … | |
… | |
| 381 | |
386 | |
| 382 | Note for this to happen requires either rather... unwise uses of root, or significant |
387 | Note for this to happen requires either rather... unwise uses of root, or significant |
| 383 | fs corruption. Regardless of the cause, it's quite likely for this to even become an |
388 | fs corruption. Regardless of the cause, it's quite likely for this to even become an |
| 384 | issue, the system's vdb is completely unusable. It's a moot issue at that point. |
389 | issue, the system's vdb is completely unusable. It's a moot issue at that point. |
| 385 | If you lose your vdb, or it gets seriously damaged, it's akin to lobotomizing portage- |
390 | If you lose your vdb, or it gets seriously damaged, it's akin to lobotomizing portage- |
| 386 | it doesn't know what's installed, it doesn't know of it's own files, and in general, |
391 | it doesn't know what's installed, it doesn't know of its own files, and in general, |
| 387 | a rebuilding of the system is about the only sane course of action. The missing env is |
392 | a rebuilding of the system is about the only sane course of action. The missing env is |
| 388 | truly the least of the users concern in such a case. |
393 | truly the least of the users concern in such a case. |
| 389 | |
394 | |
| 390 | Continuing with the more likely scenario, users unwilling to upgrade portage will |
395 | Continuing with the more likely scenario, users unwilling to upgrade portage will |
| 391 | *not* be left out in the rain. Merging the old eclass compat ebuild will provide |
396 | *not* be left out in the rain. Merging the old eclass compat ebuild will provide |
| 392 | the missing eclasses, thus providing that lost functionality . |
397 | the missing eclasses, thus providing that lost functionality. |
| 393 | |
398 | |
| 394 | Note the intention isn't to force them to upgrade, hence the ability to restore the |
399 | Note the intention isn't to force them to upgrade, hence the ability to restore the |
| 395 | lost functionality. The intention is to clean up the existing mess, and allow us |
400 | lost functionality. The intention is to clean up the existing mess, and allow us |
| 396 | to move forward. The saying "you've got to break a few eggs to make an omelet" |
401 | to move forward. The saying "you've got to break a few eggs to make an omelet" |
| 397 | is akin, exempting the fact we're providing a way to make the eggs whole again |
402 | is akin, exempting the fact we're providing a way to make the eggs whole again |
| 398 | (the king's men would've loved such an option). |
403 | (the king's men would've loved such an option). |
| 399 | |
404 | |
| 400 | |
405 | |
| 401 | Migrating to the new setup |
406 | Migrating to the new setup |
| … | |
… | |
| 417 | infrastructure server that generates the cache for rsync users will have to |
422 | infrastructure server that generates the cache for rsync users will have to |
| 418 | either be upgraded to a version of portage supporting new eclasses, or patched. |
423 | either be upgraded to a version of portage supporting new eclasses, or patched. |
| 419 | The former being much more preferable then the latter for the portage devs. |
424 | The former being much more preferable then the latter for the portage devs. |
| 420 | |
425 | |
| 421 | Beyond that, an appropriate window for old eclasses to exist in the tree must be |
426 | Beyond that, an appropriate window for old eclasses to exist in the tree must be |
| 422 | determined, and prior to that window passing an ebuild must be added to the tree |
427 | determined, and prior to that window passing, an ebuild must be added to the tree |
| 423 | so users can get the old eclasses if needed. |
428 | so users can get the old eclasses if needed. |
| 424 | |
429 | |
| 425 | For eclass devs to migrate from old to new, it is possible for them to just |
430 | For eclass devs to migrate from old to new, it is possible for them to just |
| 426 | transfer the old eclass into an appropriate grouping in the new eclass directory, |
431 | transfer the old eclass into an appropriate grouping in the new eclass directory, |
| 427 | although it's advisable they cleanse all cruft out of the eclass. You can |
432 | although it's advisable they cleanse all cruft out of the eclass. You can |
| 428 | migrate ebuilds gradually over to the new eclass, and don't have to worry about |
433 | migrate ebuilds gradually over to the new eclass, and don't have to worry about |
| 429 | having to support ebuilds from X years back. |
434 | having to support ebuilds from X years back. |
| 430 | |
435 | |
| 431 | Essentially, you have a chance to nail the design perfectly/cleanly, and have a |
436 | Essentially, you have a chance to nail the design perfectly/cleanly, and have a |
| 432 | window in which to redesign it. It's humbly suggested eclass devs take |
437 | window in which to redesign it. It's humbly suggested eclass devs take |
| … | |
… | |
| 444 | |
449 | |
| 445 | To recap: |
450 | To recap: |
| 446 | :: |
451 | :: |
| 447 | |
452 | |
| 448 | New eclasses and elib functionality will be tied to a specific portage |
453 | New eclasses and elib functionality will be tied to a specific portage |
| 449 | version. A DEPENDs on said portage version should address this for rsync |
454 | version. A DEPENDs on said portage version should address this for rsync |
| 450 | users who refuse to upgrade to a portage version that supports the new |
455 | users who refuse to upgrade to a portage version that supports the new |
| 451 | eclasses/elibs and will gradually be unable to merge ebuilds that use said |
456 | eclasses/elibs and will gradually be unable to merge ebuilds that use said |
| 452 | functionality. It is their choice to upgrade, as such, the gradual |
457 | functionality. It is their choice to upgrade, as such, the gradual |
| 453 | 'thinning' of available ebuilds should they block the portage upgrade is |
458 | 'thinning' of available ebuilds should they block the portage upgrade is |
| 454 | their responsibility. |
459 | their responsibility. |
| 455 | |
460 | |
| 456 | Old eclasses at some point in the future should be removed from the tree, |
461 | Old eclasses at some point in the future should be removed from the tree, |
| 457 | and released in a tarball/ebuild. This will cause installed ebuilds that |
462 | and released in a tarball/ebuild. This will cause installed ebuilds that |
| 458 | rely on the old eclass to be unable to unmerge, with the same applying for |
463 | rely on the old eclass to be unable to unmerge, with the same applying for |
| 459 | merging of binpkgs dependent on the following paragraph. |
464 | merging of binpkgs dependent on the following paragraph. |
| 460 | |
465 | |
| 461 | The old eclass-compat is only required for users who do not upgrade their |
466 | The old eclass-compat is only required for users who do not upgrade their |
| 462 | portage installation, and one further exemption- if the user has somehow |
467 | portage installation, and one further exemption- if the user has somehow |