From 0799ce730d2404d1cd1d03ce2f4ac07cc079c72e Mon Sep 17 00:00:00 2001 From: Paul Smith Date: Tue, 21 Sep 2004 04:00:31 +0000 Subject: Fix some bugs in variable pattern substitution (e.g. $(VAR:A=B)), reported by Markus Mauhart . One was a simple typo; to fix the other we call patsubst_expand() for all instances of variable substitution, even when there is no '%'. We used to call subst_expand() with a special flag set in the latter case, but it didn't work properly in all situations. Easier to just use patsubst_expand() since that's what it is. --- tests/ChangeLog | 6 +++++ tests/run_make_tests.pl | 8 +++++++ tests/scripts/functions/substitution | 43 ++++++++++++++++++------------------ 3 files changed, 36 insertions(+), 21 deletions(-) (limited to 'tests') diff --git a/tests/ChangeLog b/tests/ChangeLog index 0e84c6b..eec2ef1 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,9 @@ +2004-09-20 Paul D. Smith + + * scripts/functions/substitution: Rewrite to use run_make_test() + interface, and add test for substitution failures reported by + Markus Mauhart . + 2004-03-22 Paul D. Smith * test_driver.pl (run_each_test, toplevel, compare_output): Change diff --git a/tests/run_make_tests.pl b/tests/run_make_tests.pl index 8452c6b..991e780 100755 --- a/tests/run_make_tests.pl +++ b/tests/run_make_tests.pl @@ -64,6 +64,14 @@ sub run_make_test $makefile = &get_tmpfile(); } + # If either the makestring or the answer don't end in newlines, add one In + # the future should we allow an option to disable this? For now if you + # want to test handling with no newline you have to call the underlying + # functions directly. + + $makestring =~ /\n$/s or $makestring .= "\n"; + $answer =~ /\n$/s or $answer .= "\n"; + # Replace @MAKEFILE@ with the makefile name and @MAKE@ with the path to # make in both $makestring and $answer. diff --git a/tests/scripts/functions/substitution b/tests/scripts/functions/substitution index 9280dbb..0d2f6a2 100644 --- a/tests/scripts/functions/substitution +++ b/tests/scripts/functions/substitution @@ -1,32 +1,33 @@ -$description = "The following test creates a makefile to ..."; +# -*-perl-*- -$details = ""; - -open(MAKEFILE,"> $makefile"); +$description = "Test the subst and patsubst functions"; -# The Contents of the MAKEFILE ... +$details = ""; -print MAKEFILE "foo := a.o b.o c.o\n" - ."bar := \$(foo:.o=.c)\n" - ."bar2:= \$(foo:%.o=%.c)\n" - ."bar3:= \$(patsubst %.c,%.o,x.c.c bar.c)\n" - ."all:\n" - ."\t\@echo \$(bar)\n" - ."\t\@echo \$(bar2)\n" - ."\t\@echo \$(bar3)\n"; +# Generic patsubst test: test both the function and variable form. -# END of Contents of MAKEFILE +run_make_test(' +foo := a.o b.o c.o +bar := $(foo:.o=.c) +bar2:= $(foo:%.o=%.c) +bar3:= $(patsubst %.c,%.o,x.c.c bar.c) +all:;@echo $(bar); echo $(bar2); echo $(bar3)', +'', +'a.c b.c c.c +a.c b.c c.c +x.c.o bar.o'); -close(MAKEFILE); +# Patsubst without '%'--shouldn't match because the whole word has to match +# in patsubst. Based on a bug report by Markus Mauhart -&run_make_with_options($makefile,"",&get_logfile); +run_make_test('all:;@echo $(patsubst Foo,Repl,FooFoo)', '', 'FooFoo'); -# Create the answer to what should be produced by this Makefile -$answer = "a.c b.c c.c\n" - ."a.c b.c c.c\n" - ."x.c.o bar.o\n"; +# Variable subst where a pattern matches multiple times in a single word. +# Based on a bug report by Markus Mauhart -&compare_output($answer,&get_logfile(1)); +run_make_test(' +A := fooBARfooBARfoo +all:;@echo $(A:fooBARfoo=REPL)', '', 'fooBARREPL'); 1; -- cgit v1.2.3