Unix Technical Forum

SEO

vBulletin Search Engine Optimization


Go Back   Unix Technical Forum > Unix Operating Systems > Gentoo Linux Support

Register FAQ Members List Calendar Search Today's Posts Mark Forums Read
  #1 (permalink)  
Old 04-15-2008, 08:31 PM
Nikos Chantziaras
 
Posts: n/a
Default here-documents in ebuild

I'm writing an ebuild that has a src_test() and one of the tests needs
to be a here-document (command <<- EOF). But I need to do a 'die
"Failed"' call if the test fails and I can't get the syntax right.
Imagine this:

src_test() {
./frob <<- EOF || die "frob failed"
foo
bar
EOF
}

It passes 'ebuild digest' but fails on emerge. What's the right syntax?
Here's the error message:

[...]temp/environment: line 2329: syntax error near unexpected token `||'
[...]/temp/environment: line 2329: ` || die "frob failed";'
*
* Call stack:
* ebuild.sh, line 1641: Called die
* The specific snippet of code:
* preprocess_ebuild_env || \
* die "error processing environment"
* The die message:
* error processing environment
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #2 (permalink)  
Old 04-15-2008, 08:31 PM
pk
 
Posts: n/a
Default Re: here-documents in ebuild

Nikos Chantziaras wrote:

> I'm writing an ebuild that has a src_test() and one of the tests needs
> to be a here-document (command <<- EOF). But I need to do a 'die
> "Failed"' call if the test fails and I can't get the syntax right.
> Imagine this:
>
> src_test() {
> ./frob <<- EOF || die "frob failed"
> foo
> bar
> EOF
> }
>
> It passes 'ebuild digest' but fails on emerge. What's the right syntax?


Look:

$ grep aaa <<- EOF || echo "not found"
> bbb
> ccc
> EOF

not found
$ grep aaa <<- EOF || echo "not found"
> bbb
> ccc
> EOF
> EOF

not found

Note that the shell ignores the "EOF" if it has leading whitespace.
My guess is that the closing "EOF" should probably go right at the beginning
of the line. See eg app-text/htp/htp-1.15.ebuild, which uses a similar
construct.

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #3 (permalink)  
Old 04-15-2008, 08:31 PM
pk
 
Posts: n/a
Default Re: here-documents in ebuild

pk wrote:

> Note that the shell ignores the "EOF" if it has leading whitespace.
> My guess is that the closing "EOF" should probably go right at the
> beginning of the line. See eg app-text/htp/htp-1.15.ebuild, which uses a
> similar construct.


Ok, after some tests it seems that EOF can be indented using tabs, but not
spaces. So, try either putting EOF at the beginning, or indenting it with
tabs only.

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #4 (permalink)  
Old 04-15-2008, 08:31 PM
Nikos Chantziaras
 
Posts: n/a
Default Re: here-documents in ebuild

pk wrote:
> pk wrote:
>
>> Note that the shell ignores the "EOF" if it has leading whitespace.
>> My guess is that the closing "EOF" should probably go right at the
>> beginning of the line. See eg app-text/htp/htp-1.15.ebuild, which uses a
>> similar construct.

>
> Ok, after some tests it seems that EOF can be indented using tabs, but not
> spaces. So, try either putting EOF at the beginning, or indenting it with
> tabs only.


It is indented with tabs, and the script runs OK on it's own. It just
won't run inside the portage framework and I don't know why.
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #5 (permalink)  
Old 04-15-2008, 08:31 PM
pk
 
Posts: n/a
Default Re: here-documents in ebuild

Nikos Chantziaras wrote:

> It is indented with tabs, and the script runs OK on it's own.


How do you run an ebuild on its own? What commands did you try?

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #6 (permalink)  
Old 04-15-2008, 08:31 PM
Nikos Chantziaras
 
Posts: n/a
Default Re: here-documents in ebuild

pk wrote:
> Nikos Chantziaras wrote:
>
>> It is indented with tabs, and the script runs OK on it's own.

>
> How do you run an ebuild on its own? What commands did you try?


With "on its own" I meant that a script using this construct is accepted
perfectly by bash.

#! /bin/sh
../frob <<- EOF || echo "frob failed"
foo
bar
EOF

The above works OK. Btw, when you try to emerge the
app-text/htp-1.15.ebuild you pointed me to (once unmasked), you'll see
that it dies during the early steps with the same message:


/var/tmp/portage/app-text/htp-1.15/temp/environment: line 184: syntax
error near unexpected token `||'
/var/tmp/portage/app-text/htp-1.15/temp/environment: line 184: ` || die'


I guess the only solution is to check the result of the test afterwards
with something like [ $? -eq 0 ] || die "frob failed"
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #7 (permalink)  
Old 04-15-2008, 08:31 PM
pk
 
Posts: n/a
Default Re: here-documents in ebuild

Nikos Chantziaras wrote:

> Btw, when you try to emerge the app-text/htp-1.15.ebuild you pointed me to
> (once unmasked), you'll see that it dies during the early steps with the
> same message:
>
>
> /var/tmp/portage/app-text/htp-1.15/temp/environment: line 184: syntax
> error near unexpected token `||'
> /var/tmp/portage/app-text/htp-1.15/temp/environment: line 184: ` || die'


Then file a bug on bugs.gentoo.org to report that. Someone will likely come
up with a fix, so you'll learn where the problem is.

> I guess the only solution is to check the result of the test afterwards
> with something like [ $? -eq 0 ] || die "frob failed"


This should be a suitable temporary solution.

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #8 (permalink)  
Old 04-15-2008, 08:31 PM
pk
 
Posts: n/a
Default Re: here-documents in ebuild

pk wrote:

>> /var/tmp/portage/app-text/htp-1.15/temp/environment: line 184: syntax
>> error near unexpected token `||'
>> /var/tmp/portage/app-text/htp-1.15/temp/environment: line 184: ` || die'

>
> Then file a bug on bugs.gentoo.org to report that. Someone will likely
> come up with a fix, so you'll learn where the problem is.


That seems indeed a bug. In the environment, the function becomes

src_unpack ()
{
unpack ${A} || die;
patch -l "${S}/src/misc-proc.c" <<EOF
[snip]
EOF
|| die
}

Which is quite different from what's in the ebuild:

src_unpack() {
unpack ${A} || die
# Patch to remove meta-generator tag with "ego-gratifying Easter egg":
patch -l "${S}/src/misc-proc.c" << EOF || die
[snip]
EOF
}

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #9 (permalink)  
Old 04-15-2008, 08:31 PM
Nikos Chantziaras
 
Posts: n/a
Default Re: here-documents in ebuild

pk wrote:
> pk wrote:
> That seems indeed a bug. In the environment, the function becomes
>
> src_unpack ()
> {
> unpack ${A} || die;
> patch -l "${S}/src/misc-proc.c" <<EOF
> [snip]
> EOF
> || die
> }
>
> Which is quite different from what's in the ebuild:
>
> src_unpack() {
> unpack ${A} || die
> # Patch to remove meta-generator tag with "ego-gratifying Easter egg":
> patch -l "${S}/src/misc-proc.c" << EOF || die
> [snip]
> EOF
> }


Gah, more bugs. Actually, only the first line has an effect:

command << EOF
str1
str2
str3
EOF

Only str1 gets passed to command. str2 and str3 are totally ignored :S
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #10 (permalink)  
Old 04-15-2008, 08:31 PM
Nikos Chantziaras
 
Posts: n/a
Default Re: here-documents in ebuild

Nikos Chantziaras wrote:
> Gah, more bugs. Actually, only the first line has an effect:
>
> command << EOF
> str1
> str2
> str3
> EOF
>
> Only str1 gets passed to command. str2 and str3 are totally ignored :S


Ignore that. It was a mistake on my part; it's working fine.
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On



All times are GMT. The time now is 07:18 AM.


Powered by vBulletin® Version 3.6.5
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145