[Top][All Lists]

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

Re: cwrapper generates long strings.

From: Peter Rosin
Subject: Re: cwrapper generates long strings.
Date: Sat, 02 Oct 2010 13:42:02 +0200
User-agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv: Gecko/20100915 Thunderbird/3.1.4

Den 2010-10-02 08:32 skrev Ralf Wildenhues:
> Hi Peter,
> * Peter Rosin wrote on Fri, Oct 01, 2010 at 11:22:54PM CEST:
>> Subject: [PATCH] cwrapper: split long lines when dumping the wrapper script.
>> * libltdl/config/ltmain.m4sh (func_emit_cwrapperexe_src): If
>> the wrapper script contains long lines, split them for
>> readability and to conform with C standards.
> OK with me with nits addressed.  I see this as a fairly straightforward
> way to work around the issue; we can still think about following Chuck's
> proposal in due course even with this in place.
> Nit 1: testsuite exposure.  Should be fairly straightforward to set
> a couple of times until long enough (but not too long so that
> environment plus command line length already go over the limit), then
> build a library and a program linked against it, covering the path that
> failed for you, no?

Should do it, but I can't fix that this weekend.  I guess I'll get to it
sometime next week.

>> --- a/libltdl/config/ltmain.m4sh
>> +++ b/libltdl/config/ltmain.m4sh
>> @@ -4268,9 +4268,14 @@ void lt_dump_script (FILE* f)
>>  {
>>  EOF
>>          func_emit_wrapper yes |
>> -              $SED -e 's/\([\\"]\)/\\\1/g' \
>> -               -e 's/^/  fputs ("/' -e 's/$/\\n", f);/'
>> -
>> +          $SED -n -e '
>> +s/^\(.\{79\}\)\(..*\)/\1\n\2/
> \n is portable only in the regex part, but not in the replacement part.
> For that you need backslash then literal newline.

Ok, so replacing with


is portable?  Easy enough, I'll fold it in with nit 1 and repost
before I push (if someone beats me to it and writes the test, feel
free to snarf the sed program and push if you do).

>> +h
>> +s/\([\\"]\)/\\\1/g
>> +s/$/\\n/
>> +s/\([^\n]*\).*/  fputs ("\1", f);/p
> Why not above, right after h, do s/\n.*// and then simplify this s
> command?
>> +g
>> +D'

Because then we no longer know if the C-string "\n" at the end of the
line (added by the 's/$/\\n/' statement) should be inserted or not.
The trick is to add it and then cut it out if the string was too long
(contains a literal newline from the s command).  We can only have
the "\n" for the final chunk, otherwise the output will be riddled
with too many newlines.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]