Subject: bug#11029: bootstrap problems

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

Peter Rosin skrev 2012-03-19 09:48:
> 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).

Oh crap, I forgot the part that made me send any response at all...

I.e. I think the standard way to deal with this in libtool is to
use $NL2SP.  To make up for failing to add that bit, I'm providing a
patch as well...

diff --git a/bootstrap b/bootstrap
index 7b26d00..d118109 100755
--- a/bootstrap
+++ b/bootstrap
@@ -206,6 +206,17 @@ copy=false
 # "auto".
 vc_ignore=
 
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+    # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+  bs_SP2NL='tr \040 \012'
+  bs_NL2SP='tr \015\012 \040\040'
+  ;;
+ *) # EBCDIC based system
+  bs_SP2NL='tr \100 \n'
+  bs_NL2SP='tr \r\n \100\100'
+  ;;
+esac
 
 ## ------------------- ##
 ## Hookable functions. ##
@@ -1799,14 +1810,14 @@ func_ifcontains ()
     $debug_cmd
 
     # The embedded echo is to squash whitespace before globbing.
-    _G_wslist=`$bs_echo " "$1" "`
+    _G_wslist=`$bs_echo " $1 " | $bs_NL2SP`
     _G_member=$2
     _G_yes_cmd=$3
     _G_no_cmd=${4-":"}
 
     case $_G_wslist in
       *" $_G_member "*)
-        eval "$_G_yes_cmd"
+	eval "$_G_yes_cmd"
 	_G_status=$?
 	;;
       *)

Cheers,
Peter