vBulletin Search Engine Optimization
| |||||||
| Register | FAQ | Members List | Calendar | Search | Today's Posts | Mark Forums Read |
| ||||
| 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 |
| |||
| 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. |
| |||
| 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. |
| |||
| 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. |
| |||
| 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" |
| |||
| 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. |
| |||
| 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 } |
| |||
| 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 |
| ||||
| 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. |
| Thread Tools | |
| Display Modes | |
| |