test.txt::
@$(RM) $@;
for
i in $(TEST) ; \
do
\
if
[ -d $$i ] ; then \
$(ECHO)
"`basename $$comp` $$comp">> $@; \
fi
;\
done
The same implementation works fine with
gmake 3.80, but when using gmake 3.81 I get the following error.
Syntax error: end of file unexpected
TEST consists of a list of directories
around 384 of them.
When I reduce the list to 300 it works
fine evenwith 3.81
Thanks & Regards,
Bhaskar G
"Philip Guenther" <address@hidden>
10/18/2006 07:55 PM
To
"Bhaskar G" <address@hidden>
cc
address@hidden
Subject
Re: gmake 3.80 vs 3,81
Classification
On 10/18/06, Bhaskar G <address@hidden> wrote:
> The sed script that I use with gmake 3.80 works fine but not with
3.81. I
> get the following errors.
To bad you don't actually show us the relevant lines of the makefile.
Oh well, I guess I can only quote to you the
"Backward-incompatibility" entries from the gmake 3.81 NEWS file.
I
suggest you read each and think carefully about whether any of those
changes could be involved.
* WARNING: Backward-incompatibility!
GNU make now implements a generic "second expansion" feature
on the
prerequisites of both explicit and implicit (pattern) rules. In
order
to enable this feature, the special target '.SECONDEXPANSION' must
be
defined before the first target which takes advantage of it. If
this
feature is enabled then after all rules have been parsed the
prerequisites are expanded again, this time with all the automatic
variables in scope. This means that in addition to using standard
SysV $$@ in prerequisites lists, you can also use complex functions
such as $$(notdir $$@) etc. This behavior applies to implicit
rules,
as well, where the second expansion occurs when the rule is matched.
However, this means that when '.SECONDEXPANSION' is enabled you
must
double-quote any "$" in your filenames; instead of "foo:
boo$$bar" you
now must write "foo: foo$$$$bar". Note that the
SysV $$@ etc. feature,
which used to be available by default, is now ONLY available when
the
.SECONDEXPANSION target is defined. If your makefiles take
advantage
of this SysV feature you will need to update them.
* WARNING: Backward-incompatibility!
In order to comply with POSIX, the way in which GNU make processes
backslash-newline sequences in command strings has changed. If
your
makefiles use backslash-newline sequences inside of single-quoted
strings in command scripts you will be impacted by this change.
See
the GNU make manual subsection "Splitting Command Lines"
(node
"Splitting Lines"), in section "Command Syntax",
chapter "Writing the
Commands in Rules", for details.
* WARNING: Backward-incompatibility!
Some previous versions of GNU make had a bug where "#"
in a function
invocation such as $(shell ...) was treated as a make comment. A
workaround was to escape these with backslashes. This bug
has been
fixed: if your makefile uses "\#" in a function invocation
the
backslash is now preserved, so you'll need to remove it.