1 # -*-perl-*- 2 # $Id: foreach,v 1.5 2006/03/10 02:20:46 psmith Exp $ 3 4 $description = "Test the foreach function."; 5 6 $details = "This is a test of the foreach function in gnu make. 7 This function starts with a space separated list of 8 names and a variable. Each name in the list is subsituted 9 into the variable and the given text evaluated. The general 10 form of the command is $(foreach var,$list,$text). Several 11 types of foreach loops are tested\n"; 12 13 14 # TEST 0 15 16 # Set an environment variable that we can test in the makefile. 17 $extraENV{FOOFOO} = 'foo foo'; 18 19 run_make_test("space = ' '".' 20 null := 21 auto_var = udef space CC null FOOFOO MAKE foo CFLAGS WHITE @ < 22 foo = bletch null @ garf 23 av = $(foreach var, $(auto_var), $(origin $(var)) ) 24 override WHITE := BLACK 25 for_var = $(addsuffix .c,foo $(null) $(foo) $(space) $(av) ) 26 fe = $(foreach var2, $(for_var),$(subst .c,.o, $(var2) ) ) 27 all: auto for2 28 auto : ; @echo $(av) 29 for2: ; @echo $(fe)', 30 '-e WHITE=WHITE CFLAGS=', 31 "undefined file default file environment default file command line override automatic automatic 32 foo.o bletch.o null.o @.o garf.o .o .o undefined.o file.o default.o file.o environment.o default.o file.o command.o line.o override.o automatic.o automatic.o"); 33 34 delete $extraENV{FOOFOO}; 35 36 # TEST 1: Test that foreach variables take precedence over global 37 # variables in a global scope (like inside an eval). Tests bug #11913 38 39 run_make_test(' 40 .PHONY: all target 41 all: target 42 43 x := BAD 44 45 define mktarget 46 target: x := $(x) 47 target: ; @echo "$(x)" 48 endef 49 50 x := GLOBAL 51 52 $(foreach x,FOREACH,$(eval $(value mktarget)))', 53 '', 54 'FOREACH'); 55 56 57 # TEST 2: Check some error conditions. 58 59 run_make_test(' 60 x = $(foreach ) 61 y = $x 62 63 all: ; @echo $y', 64 '', 65 "#MAKEFILE#:2: *** insufficient number of arguments (1) to function `foreach'. Stop.", 66 512); 67 68 run_make_test(' 69 x = $(foreach ) 70 y := $x 71 72 all: ; @echo $y', 73 '', 74 "#MAKEFILE#:2: *** insufficient number of arguments (1) to function `foreach'. Stop.", 75 512); 76 77 1; 78