From: Alec Warner <antarus@gentoo.org>
To: gentoo-dev@lists.gentoo.org
Subject: Re: [gentoo-dev] RFD: EAPI specification in ebuilds
Date: Wed, 7 Mar 2012 20:12:25 -0800 [thread overview]
Message-ID: <CAAr7Pr9BSRNJtnx=iRZJpcOdE+kMGHN-44uOn7FpA1A-DtZqaQ@mail.gmail.com> (raw)
In-Reply-To: <20311.51166.725757.212932@a1i15.kph.uni-mainz.de>
On Wed, Mar 7, 2012 at 12:41 PM, Ulrich Mueller <ulm@gentoo.org> wrote:
> Hi all,
>
> The way how we currently specify the EAPI in ebuilds has some
> problems. For example, there is no sane way to allow usage of features
> of a new bash version in a new EAPI. So we are currently stuck with
> bash 3.2. Also changes of global scope behaviour, like addition of new
> global scope functions (similar to "inherit") are not possible.
>
> These flaws are outlined in GLEP 55 [1]:
> | In order to get the EAPI the package manager needs to source the
> | ebuild, which itself needs the EAPI in the first place. Otherwise it
> | imposes a serious limitation, namely every ebuild, using any of the
> | future EAPIs, will have to be source'able by old package managers
> | [...]
>
> The council has voted down GLEP 55 more than a year ago, but at the
> same time requested that a solution for the mentioned issues should be
> found. [2] However, there was no progress since then.
>
> The issue arose again in bug 402167 [3] where several solutions have
> been discussed. Below, I try to summarise the possible options
> resulting from that discussion.
>
>
> *** Proposal 1: "Parse the EAPI assignment statement" ***
>
> This first proposal would require that the syntax of the EAPI
> assignment statement in ebuilds matches a well defined regular
> expression. A scan of the Portage tree shows that the statement only
> occurs in the following variations (using EAPI 4 as example):
>
> EAPI=4
> EAPI="4"
> EAPI='4'
>
> Sometimes this is followed by whitespace or a comment (starting with
> a # sign). Also, with very few exceptions the EAPI assignment occurs
> within the first few lines of the ebuild. For the vast majority of
> ebuilds it is in line 5.
>
> Written in a more formal way, appropriate for a specification:
> - Ebuilds must contain at most one EAPI assignment statement.
> - It must occur within the first N lines of the ebuild (N=10 and N=30
> have been suggested).
> - The statement must match the following regular expression (extended
> regexp syntax):
> ^[ \t]*EAPI=(['"]?)([A-Za-z0-9._+-]*)\1[ \t]*(#.*)?$
>
> Note: The first and the third point are already fulfilled by all
> ebuilds in the Portage tree. The second point will require very few
> ebuilds to be changed (9 packages for N=10, or 2 packages for N=30).
>
> The package manager would determine the EAPI by parsing the assignment
> with above regular expression. A sanity check would be added. Citing
> Zac Medico in [3]: "The fact that we can compare the probed EAPI to
> the actual EAPI variable after the ebuild is sourced seems like a
> perfect sanity check. We could easily detect inconsistencies and flag
> such ebuilds as invalid, providing a reliable feedback mechanism to
> ebuild developers."
>
> This proposal comes in two variants:
> 1a) The change is applied retroactively for all EAPIs.
> 1b) It is only applied for EAPI 5 and later (which means that the
> result of the EAPI parsing would be discarded for earlier EAPIs).
I don't like this idea because the sane way should be easy and straightforward.
Mixing a constant declaration with bash assignment just confuses users
who think the assignment is full bash when in fact it is not.
EAPI=$(somefunc)
EAPI=${SOMEVAR%%-*}
and so forth all don't meet the regex (and would be flagged invalid.)
However a naive author might think they work.
I don't think any naive author would think either would work in a comment
# EAPI=$(somefunc)
# EAPI=${SOEMVAR%%-*}
Bash doesn't parse comments, so confusion is unlikely.
>
>
> *** Proposal 2: "EAPI in header comment" ***
>
> A different approach would be to specify the EAPI in a specially
> formatted comment in the ebuild's header. No syntax has been suggested
> yet, but I believe that the following would work as a specification:
> - The EAPI must be declared in a special comment in the first line of
> the ebuild's header, as follows:
> - The first line of the ebuild must contain the word "ebuild",
> followed by whitespace, followed by the EAPI, followed by
> end-of-line or whitespace.
>
> Again, the proposal comes in two variants:
> 2a) It is combined with a one time change of the file extension, like
> .ebuild -> .eb.
> 2b) The usual EAPI assignment statement in the ebuild is still
> required, at least for a transition period.
>
> In the 2a case, the EAPI variable could be made read-only in bash
> before sourcing the ebuild. In the 2b case, a sanity check similar to
> the one mentioned above would be added.
>
>
> What do you think?
Overloading is bad.
There is no real difference between:
#!/usr/bin/ebuild --eapi 5
# EAPI=5
The problem is that the former is also the way to specify how to
execute the ebuild; so unless you plan to make ebuilds executable and
having /usr/bin/ebuild provide the ebuild environment, using that
syntax is confusing to users.
>
> (I really hope for a constructive discussion here. So, if you want
> to comment that all of the above proposals suck and GLEP 55 is much
> superior, then please open a new thread for it.)
You don't mention voting on glep 55 again; is there a reason why not?
>
> Ulrich
>
>
> [1] <http://www.gentoo.org/proj/en/glep/glep-0055.html#problem>
> [2] <http://www.gentoo.org/proj/en/council/meeting-logs/20100823-summary.txt>
> [3] <https://bugs.gentoo.org/show_bug.cgi?id=402167>
>
next prev parent reply other threads:[~2012-03-08 4:13 UTC|newest]
Thread overview: 125+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-03-07 20:41 [gentoo-dev] RFD: EAPI specification in ebuilds Ulrich Mueller
2012-03-07 20:44 ` Ciaran McCreesh
2012-03-07 21:07 ` Alexis Ballier
2012-03-07 22:04 ` David Leverton
2012-03-07 22:14 ` Michael Orlitzky
2012-03-08 0:17 ` Ulrich Mueller
2012-03-08 12:03 ` Michał Górny
2012-03-08 15:56 ` Michael Orlitzky
2012-03-08 17:28 ` Michał Górny
2012-03-08 17:48 ` Michael Orlitzky
2012-03-08 17:53 ` Ciaran McCreesh
2012-03-08 18:37 ` Michael Orlitzky
2012-03-08 18:48 ` Ciaran McCreesh
2012-03-08 21:35 ` Michael Orlitzky
2012-03-08 23:31 ` Alec Warner
2012-03-09 3:05 ` Michael Orlitzky
2012-03-09 5:04 ` Michał Górny
2012-03-09 5:35 ` Michael Orlitzky
2012-03-09 5:51 ` Zac Medico
2012-03-09 14:42 ` Michael Orlitzky
2012-03-09 15:05 ` Zac Medico
2012-03-09 15:21 ` Michael Orlitzky
2012-03-09 15:41 ` Zac Medico
2012-03-09 15:51 ` Alexis Ballier
2012-03-09 15:58 ` Zac Medico
2012-03-09 16:49 ` Michael Orlitzky
2012-03-09 16:57 ` Zac Medico
2012-03-09 19:20 ` Ciaran McCreesh
2012-03-10 16:06 ` Zac Medico
2012-03-12 1:55 ` Brian Harring
2012-03-12 4:08 ` Zac Medico
2012-03-12 8:36 ` Brian Harring
2012-03-12 15:35 ` Ciaran McCreesh
2012-03-12 16:05 ` Zac Medico
2012-03-12 16:12 ` Ciaran McCreesh
2012-03-12 16:28 ` Zac Medico
2012-03-14 2:01 ` Brian Harring
2012-03-14 2:16 ` Zac Medico
2012-03-09 15:52 ` Ian Stakenvicius
2012-03-09 16:15 ` Zac Medico
2012-03-09 16:33 ` Eray Aslan
2012-03-09 16:43 ` Zac Medico
2012-03-09 16:29 ` Michał Górny
2012-03-09 16:57 ` Michael Orlitzky
2012-03-09 17:11 ` Ulrich Mueller
2012-03-09 17:31 ` Michael Orlitzky
2012-03-09 17:47 ` Zac Medico
2012-03-09 18:03 ` Michael Orlitzky
2012-03-09 19:08 ` Rich Freeman
2012-03-12 2:03 ` Brian Harring
2012-03-12 2:20 ` Rich Freeman
2012-03-12 2:24 ` Alec Warner
2012-03-12 6:57 ` Kent Fredric
2012-03-12 6:50 ` Kent Fredric
2012-03-12 7:08 ` Zac Medico
2012-03-12 7:39 ` Kent Fredric
2012-03-12 8:27 ` Michał Górny
2012-03-12 8:30 ` Ciaran McCreesh
2012-03-12 9:09 ` Michał Górny
2012-03-12 9:16 ` Kent Fredric
2012-03-12 9:48 ` Ulrich Mueller
2012-03-12 10:12 ` Kent Fredric
2012-03-12 15:20 ` Rich Freeman
2012-03-12 17:01 ` Zac Medico
2012-03-12 17:30 ` Rich Freeman
2012-03-12 17:46 ` Zac Medico
2012-03-12 19:20 ` Rich Freeman
2012-03-12 8:39 ` Kent Fredric
2012-03-12 9:10 ` Michał Górny
2012-03-12 3:55 ` Zac Medico
2012-03-09 17:52 ` Michał Górny
2012-03-12 1:00 ` Brian Harring
2012-03-09 18:02 ` James Broadhead
2012-03-09 18:24 ` Alexis Ballier
2012-03-09 18:29 ` Zac Medico
2012-03-09 18:33 ` Michael Orlitzky
2012-03-09 18:56 ` Zac Medico
2012-03-09 19:23 ` Ciaran McCreesh
2012-03-09 20:09 ` Michael Orlitzky
2012-03-19 1:12 ` [gentoo-dev] " Steven J Long
2012-03-19 1:36 ` Kent Fredric
2012-03-19 3:21 ` Brian Harring
2012-03-24 13:24 ` [gentoo-dev] " Steven J Long
2012-03-07 22:36 ` [gentoo-dev] " Alexandre Rostovtsev
2012-03-08 2:22 ` Jeroen Roovers
2012-03-08 16:14 ` [gentoo-dev] Ebb (eb) was: " Todd Goodman
2012-03-08 4:12 ` Alec Warner [this message]
2012-03-08 7:27 ` [gentoo-dev] " Ulrich Mueller
2012-03-08 8:13 ` Alec Warner
2012-03-08 15:27 ` Zac Medico
2012-03-08 16:11 ` David Leverton
2012-03-08 16:21 ` Zac Medico
2012-03-08 16:29 ` Ciaran McCreesh
2012-03-08 16:50 ` Zac Medico
2012-03-08 16:59 ` Alexandre Rostovtsev
2012-03-08 17:03 ` Ciaran McCreesh
2012-03-08 19:17 ` Ulrich Mueller
2012-03-08 19:31 ` Ciaran McCreesh
2012-03-08 19:48 ` Alexis Ballier
2012-03-08 9:42 ` Marc Schiffbauer
2012-03-08 16:30 ` Zac Medico
2012-03-08 16:35 ` Ciaran McCreesh
2012-03-08 17:07 ` Zac Medico
2012-03-08 17:14 ` Ciaran McCreesh
2012-03-08 17:30 ` Jeroen Roovers
2012-03-08 17:37 ` Ciaran McCreesh
2012-03-10 1:06 ` Kent Fredric
2012-03-10 13:53 ` Ciaran McCreesh
2012-03-09 11:28 ` Marc Schiffbauer
2012-03-08 12:06 ` Michał Górny
2012-03-08 15:58 ` Michael Orlitzky
2012-03-08 16:51 ` Ulrich Mueller
2012-03-08 17:03 ` Rich Freeman
2012-03-08 16:47 ` Mike Gilbert
2012-03-08 17:52 ` Michał Górny
2012-03-08 17:56 ` Ciaran McCreesh
2012-03-08 18:22 ` Zac Medico
2012-03-08 19:04 ` Ulrich Mueller
2012-03-08 19:38 ` Alexis Ballier
2012-03-09 0:50 ` Walter Dnes
2012-03-18 7:23 ` Ralph Sennhauser
2012-03-18 11:18 ` Rich Freeman
2012-03-18 11:27 ` Ulrich Mueller
2012-04-12 19:53 ` [gentoo-dev] " Ulrich Mueller
2012-04-12 20:19 ` Mike Frysinger
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='CAAr7Pr9BSRNJtnx=iRZJpcOdE+kMGHN-44uOn7FpA1A-DtZqaQ@mail.gmail.com' \
--to=antarus@gentoo.org \
--cc=gentoo-dev@lists.gentoo.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox