public inbox for gentoo-dev@lists.gentoo.org
 help / color / mirror / Atom feed
From: Steve Long <slong@rathaus.eclipse.co.uk>
To: gentoo-dev@lists.gentoo.org
Subject: [gentoo-dev]  Re: Re: Default src_install for EAPI-2 or following EAPI
Date: Sun, 21 Sep 2008 13:03:01 +0100	[thread overview]
Message-ID: <gb5dkp$h30$1@ger.gmane.org> (raw)
In-Reply-To: Pine.LNX.4.64.0809210744400.20111@wmax001.mathematik.uni-wuerzburg.de

Vaeth wrote:

> Steve Long wrote:
> 
>> Thomas Sachau wrote: [...]
>>
>> > [[ -n ${DOCS} ]] && dodoc ${DOCS}
> [...]
>> 
>> It might be wise to use an array for DOCS there
> 
> Since I have now seen suggestions for using arrays unnecessarily
> at least twice (see also
>   [RFC] Ability to pass arguments to src_configure/src_compile
> but I am only speaking about the usage of _arrays_ here),
> let me remark that the more clever way to this is
> 
>   [ -n "${DOCS}" ] && eval "dodoc ${DOCS}"
>
eval is _not_ clever. Try: /msg greybot eval
..or check http://wooledge.org:8000/BashFAQ/048
 
> This way, people can simply quote as they like:
> 
> DOCS="'filename with spaces' filename_without_space doc/*"
>
Yeuch.

> or also
> 
> DOCS="just_one_filename_without_special_characters"
>
You don't need quotes there.
 
> or also - when Push from /usr/bin/functions-eix.sh is used
> (which might be implemented simpler without using other functions):
> 
> Push DOCS 'filename with spaces' filename_without_space "${S}"/doc/*
> 
Or just do DOCS+=(foo/* someFile 'some other File') at any point.

BASH arrays will cope with *any* character apart from NUL, which isn't
allowed in filenames. Can you _guarantee_ the same?

For instance, what if some crazy designer puts a file called:
Vaeth's "Latest" Hits
..in that doc dir; what happens after the Push function has been called and,
only at a later stage, the eval is run on the result of that glob
expansion?
 
> Not only has this the advantage that it is POSIX (and thus does not
> force ebuilds to use the particular shell "bash" - a policy which perhaps
> some day might be changed: It is dangerous to depend on a particular
> implementation),

I'm not getting back into that discussion, since we had the same one over a
period of months already. Ebuilds require BASH; get over it. If we could
move ahead with actually using BASH properly (and cleanly) it would be
nice. BASH is as portable as GNU make is, and you clearly have no issue
depending on that, and Python or C++.

BTW, POSIX sh doesn't need ${DOCS} or ${S} either, you're just wasting
characters.

> the array-less solution is also much simpler to 
> implement, easy to understand from the source, and clearer in usage.

Not to me it's not, it looks awful, to read and to type, as well as being
fragile.

Furthermore you're bringing eval into the script new people are going to
look at to learn from (it's core functionality, fulfilling a basic task)
which is dangerous from a long-term pov, imo. Leave aside having to
maintain that cruft.

> Case distinctions like
> 
>> if isArr DOCS; then
>>    ((${#DOCS[@]})) && dodoc "${DOCS[@]}"
>> else [[ $DOCS ]] && dodoc $DOCS
>> fi
> 
> are just awful.

Actually if you factor out that isArr is a utility function (exactly like
Push) that code is very easy to follow, as well as coping with all
filenames, and itself would be part of a lib function. The only reason to
have the check is for backward-compatibility, or to allow people to use
whichever they feel most comfortable with.

One might not know how to count/use arrays in BASH, fair enough; that's how.
Given that basic knowledge[1] of the tool used to write ebuilds since the
very beginning, I cannot see how that is hard to follow.

I'm willing to bet your sh scripts aren't really as portable as you think.
If you want to see how portable sh is done, read:
http://sources.redhat.com/autobook/autobook/autobook_210.html#SEC210
(all of it) and then try to persuade us that we should be writing ebuilds
like that.

If you want to do that kind of thing, much better imo to do another type of
ebuild, eg a pbuild using Python, and only call sh when absolutely
necessary, if at all.

BTW, thanks for eix; it's a lovely utility.

[1] http://wooledge.org/mywiki/BashFAQ/005





  parent reply	other threads:[~2008-09-21 12:11 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <bcwiO-7zO-1@gated-at.bofh.it>
     [not found] ` <be8YL-33V-3@gated-at.bofh.it>
     [not found]   ` <be9Lf-478-5@gated-at.bofh.it>
2008-09-21  6:18     ` [gentoo-dev] Re: Default src_install for EAPI-2 or following EAPI Vaeth
2008-09-21 11:44       ` Thomas Anderson
2008-09-21 12:03       ` Steve Long [this message]
2008-09-21 13:04         ` Ulrich Mueller
2008-09-21 17:30           ` Kent Fredric
2008-09-21 18:50             ` Ulrich Mueller
2008-09-21 20:23               ` Steve Long
2008-09-21 20:46                 ` Ulrich Mueller
2008-09-21 21:10                   ` Steve Long
2008-09-23 19:39                   ` Thomas Sachau
2008-09-23 23:21                     ` Bo Ørsted Andresen
2008-09-24  5:28                       ` Alec Warner
2008-09-24  9:01                         ` Bo Ørsted Andresen
2008-09-24  7:46                       ` Nirbheek Chauhan
2008-09-27 10:17                         ` Thomas Sachau
2008-09-28 18:24                           ` [gentoo-dev] Usage of econf with an additional || die Thomas Sachau
2008-09-28 18:28                             ` Vlastimil Babka
2008-09-30  6:55                             ` Peter Volkov
2008-09-30 10:36                               ` Ben de Groot
2008-09-30 12:03                                 ` Jeremy Olexa
2008-09-30 16:47                                   ` Thomas Sachau
2008-09-30 17:10                                     ` Matthias Schwarzott
2008-09-30 10:39                               ` Zac Medico
2008-09-29  5:16                           ` [gentoo-dev] Re: Default src_install for EAPI-2 or following EAPI Nirbheek Chauhan
2008-09-30 17:05                             ` Petteri Räty
2008-10-05  8:52                               ` [gentoo-dev] " Ulrich Mueller
2008-10-05 14:15                                 ` Robert Buchholz
2008-10-05 15:45                                   ` Ulrich Mueller
2008-10-05 16:47                                     ` Robert Buchholz
2008-10-05 17:03                                       ` Ulrich Mueller
2008-10-05 17:58                                       ` Thomas Sachau
2008-09-24  0:35                     ` [gentoo-dev] " Robert Buchholz
2008-09-24  8:26                       ` Santiago M. Mola
2008-09-24  1:34                     ` [gentoo-dev] " Steve Long
2008-09-24  6:38                       ` [gentoo-dev] " Ulrich Mueller
2008-09-24 16:21                         ` [gentoo-dev] OT: " Steve Long
2008-09-24 16:33                           ` [gentoo-dev] " Steve Long
2008-09-24  6:40                       ` [gentoo-dev] " Duncan
2008-09-22  1:35       ` Alec Warner
2008-09-22  8:22         ` Duncan
     [not found] <beqsE-8pJ-13@gated-at.bofh.it>
     [not found] ` <beqsE-8pJ-15@gated-at.bofh.it>
     [not found]   ` <beqsE-8pJ-17@gated-at.bofh.it>
     [not found]     ` <beqsD-8pJ-11@gated-at.bofh.it>
     [not found]       ` <bew51-7fR-11@gated-at.bofh.it>
2008-09-21 22:11         ` [gentoo-dev] " Vaeth

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='gb5dkp$h30$1@ger.gmane.org' \
    --to=slong@rathaus.eclipse.co.uk \
    --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