bug-make
[Top][All Lists]
Advanced

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

Re: Splitting lines problem in make-3.80 versus 3.81


From: Paul Smith
Subject: Re: Splitting lines problem in make-3.80 versus 3.81
Date: Tue, 8 Sep 2009 17:20:52 -0400

On Tue, 2009-09-08 at 13:02 -0700, Warren Dodge wrote:
> I have attached a small tree of files which will show what we are trying
> to do. It has the "runit" script which will process through the
> combinations and save the results in log files.

I have looked at your examples.  I'm not sure why the obvious, and
recommended by the manual, change was not used; it worked fine for me.
This is a completely trivial transposition of EXACTLY the same code that
used to be present in the recipe.  You can keep or throw away TAB
characters; TABs that appear within a logical line (a backslash on the
previous physical line includes the next physical line as a logical
line) are not significant to make:

The original was:

$(MACROS): %.v: $(SYNDIR)/%.v %.pwrports
        @echo '--------------------' ; echo "Making $@"
        ${PERL} -pe '\
            address@hidden = split /\n/, `cat $(word 2,$^)`;} \
            { if (/^\s*\);/){\
                foreach $$i (@pwr){ print "  , $$i\n"; }\
              }\
              if (/^\s*endmodule\b/){\
                foreach $$i (@pwr){ print "  input $$i;\n"; }\
              }\
            }' $(word 1,$^) > $@
        mv $@ address@hidden
        -diff address@hidden address@hidden

and I changed this to:

PERL_SCRIPT = \
            address@hidden = split /\n/, `cat $(word 2,$^)`;} \
            { if (/^\s*\);/){\
                foreach $$i (@pwr){ print "  , $$i\n"; }\
              }\
              if (/^\s*endmodule\b/){\
                foreach $$i (@pwr){ print "  input $$i;\n"; }\
              }\
            }
$(MACROS): %.v: $(SYNDIR)/%.v %.pwrports
        @echo '--------------------' ; echo "Making $@"
        ${PERL} -pe '$(PERL_SCRIPT)' $(word 1,$^) > $@
        mv $@ address@hidden
        -diff address@hidden address@hidden

(note you can include the single quotes in the PERL_SCRIPT variable
instead if you want; it works the same either way--quotes are not
significant to make).

This works fine with ANY version of GNU make (or, as far as I'm aware,
any other implementation of make).


For the problems you found let me just say firstly, and I hope folks
don't take this the wrong way, that any failure in 3.80 to behave
properly is not that interesting to me except as a curiosity.  Certainly
we aren't going to go back and release "3.80.1" that fixes these
problems.

The issue you ran into with a target-specific variable in 3.81 (T2 in
your example) is interesting.  In this case we're parsing a variable,
BUT it's being interpreted as a recipe (in that backslash newlines
aren't being condensed).  I can kind of see how that might happen.  I
do, I guess, think this is a bug.  A variable assignment should be
parsed as a variable assignment, even if it's target-specific.  I'll
have to try to reproduce this with the current development code.





reply via email to

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