Re: multiline output variables.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello Dan and Noah,

I think the following idea is execllent:

On Mon, Jan 17, 2005 at 01:37:03PM -0800, Noah Misch wrote:
> If you wanted to avoid excluding any delimiter, you do something like this:
> 
> for ac_var in var1 var2 ... varN
> do
>     eval "case \$$ac_var in
>       *'
> '*)       filter=' | sed '\\''\$q;s/\$/\\\\/'\\' ;;
>        *) filter= ;;
>     esac"
>  
>     eval echo \"s,@$ac_var@,\$$ac_var,\;t t\" $filter
> done | existing_cleanup_seds

The code still isn't perfectly correct, though: what if a one line value
happens to end with a backslash?  How can you distinguish it from a
multiline value.

And I would use a more readable way to implement it:

for ac_var in var1 var2 ... varN
do
	eval ac_val="\"\$$ac_var\""
	case $ac_val in
	*'
'*)		echo "@$ac_var@$ac_val" | sed ...encode... ;;
	*)	echo "$ac_var@$ac_val"
	esac
done | sed ...

The "encode" sed program would take care to encode things properly,
for example 's/\\/\\x/g;$q;s/$/\\/' .
(The main point is that we have to escape real backslashes somehow.)

The post-processing program would recognize lines starting with @,
and decode them, for example:

/^@/!b ok
s/^@//
:loop
N
/\\$/b loop
s/\\x/\\/g
:ok
s/[\\\\&,]/\\\\&/g
s/[^@]*@/s,@&,/
s/$/,;t t/

Thanks to Noah's idea, the value can be any string, yet the performance
is fine.

I'm looking forward to see your code, Dan.

Have a nice day,
	Stepan Kasal


_______________________________________________
Autoconf mailing list
Autoconf@xxxxxxx
http://lists.gnu.org/mailman/listinfo/autoconf

[Index of Archives]     [GCC Help]     [Kernel Discussion]     [RPM Discussion]     [Red Hat Development]     [Yosemite News]     [Linux USB]     [Samba]

  Powered by Linux