>>>>> On Thu, 8 Mar 2012, Michał Górny wrote:
>> *** Proposal 1: "Parse the EAPI assignment statement" ***
>>
>> [...]
>>
>> 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]*(#.*)?$
> I'd make the regexp less strict -- at least allow whitespace around '='.
> If the intent is to not rely on a specific bash version for a global
> scope, why should we limit it to the (current) bash syntax?
This could certainly be done ...
> And it may be also a good idea to not rely on a specific line format,
> so e.g. 'dnl EAPI=4' will work as well.
... but loosening it too much looks a little dangerous, because it
would probably match comments and could produce unintended matches.
If we allow for a general syntax, we should restrict it to the first
line of the ebuild. But that is proposal 2 then.
>> 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).
> Err... so what happens if 'new parsing' detects EAPI 4 and 'old
> parsing' detects EAPI 5?
This cannot happen for a legal ebuild:
- If the ebuild is EAPI 4, then sourcing it ("old parsing") must
detect EAPI 4.
- If the ebuild is EAPI 5, then "new parsing" must detect EAPI 5.
> Or more exactly, how does it know when an older EAPI is used if it
> is supposed to not use the value it uses to detect EAPI?
If new parsing detects EAPI 5 or later, then use this value (and do a
sanity check after the ebuild has been sourced). Otherwise, discard
the value determined by new parsing and detect the EAPI in the
traditional way by sourcing the ebuild.
Ulrich