public inbox for gentoo-dev@lists.gentoo.org
 help / color / mirror / Atom feed
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>
>



  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