Subject: bug#11029: bootstrap problems

From: Peter Rosin <[email-masked]>
Date: Mon, 19 Mar 2012 09:48:11 +0100

Peter O'Gorman skrev 2012-03-17 04:53:
> On 03/16/2012 04:30 PM, Peter Rosin wrote:
>> 2. Automake didn't like that ChangeLog was missing ->  "touch ChangeLog"
>>
> 
> I had a look at this, bootstrap is supposed to add a dummy ChangeLog for this, but does not, depending upon what bs_echo got set to.
> 
> func_ifcontains has this:
>     # The embedded echo is to squash whitespace before globbing.
>     _G_wslist=`$bs_echo " "$1" "`
>     _G_member=$2
>     _G_yes_cmd=$3
>     _G_no_cmd=${4-":"}
> 
>     case $_G_wslist in
>       *" $_G_member "*)
> 
> and is called like this:
> func_ifcontains '
>         announce-gen
>         do-release-commit-and-tag
>         gendocs
>         git-version-gen
>         gitlog-to-changelog
>         gnu-web-doc-update
>         gnupload
>         maintainer-makefile
>         readme-release
> ' gitlog-to-changelog func_ensure_changelog
> 
> If bs_echo is printf '%s\n' then the embedded newlines in $_G_wslist do not get eliminated by the `$bs_echo " "$1" "` and " gitlog-to-changelog " (with those spaces on both sides) is not in the string, so no ChangeLog is created.
> 
> This function doesn't appear to be part of gnulib yet, and I'm not sure how best to fix it.
> 
> Changing $bs_echo to 'echo' should work, so should using set foo $1; shift (after assigning $2,3 and 4) and then assigning _G_wslist=" $@ ".
> 
> I'll look to see how we eliminate spaces and newlines elsewhere in libtool and use the same idiom.

Something like this also works:

diff --git a/bootstrap b/bootstrap
index 7b26d00..21d2268 100755
--- a/bootstrap
+++ b/bootstrap
@@ -1803,10 +1803,12 @@ func_ifcontains ()
     _G_member=$2
     _G_yes_cmd=$3
     _G_no_cmd=${4-":"}
+    nl='
+'
 
     case $_G_wslist in
-      *" $_G_member "*)
-        eval "$_G_yes_cmd"
+      *[\ $nl]$_G_member[\ $nl]*)
+	eval "$_G_yes_cmd"
 	_G_status=$?
 	;;
       *)

It fixes the common case when bs_echo is printf '%s\n' at least.  But it doesn't
fix the real bug of course (feeding multiple args to bs_echo).

Cheers,
Peter