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/scripts/functions/substitution | 43 ++++++++++++++++++------------------ 1 file changed, 22 insertions(+), 21 deletions(-) (limited to 'tests/scripts/functions/substitution') 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