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. 7This function starts with a space separated list of 8names and a variable. Each name in the list is subsituted 9into the variable and the given text evaluated. The general 10form of the command is $(foreach var,$list,$text). Several 11types 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 19run_make_test("space = ' '".' 20null := 21auto_var = udef space CC null FOOFOO MAKE foo CFLAGS WHITE @ < 22foo = bletch null @ garf 23av = $(foreach var, $(auto_var), $(origin $(var)) ) 24override WHITE := BLACK 25for_var = $(addsuffix .c,foo $(null) $(foo) $(space) $(av) ) 26fe = $(foreach var2, $(for_var),$(subst .c,.o, $(var2) ) ) 27all: auto for2 28auto : ; @echo $(av) 29for2: ; @echo $(fe)', 30 '-e WHITE=WHITE CFLAGS=', 31 "undefined file default file environment default file command line override automatic automatic 32foo.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 34delete $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 39run_make_test(' 40.PHONY: all target 41all: target 42 43x := BAD 44 45define mktarget 46target: x := $(x) 47target: ; @echo "$(x)" 48endef 49 50x := GLOBAL 51 52$(foreach x,FOREACH,$(eval $(value mktarget)))', 53 '', 54 'FOREACH'); 55 56 57# TEST 2: Check some error conditions. 58 59run_make_test(' 60x = $(foreach ) 61y = $x 62 63all: ; @echo $y', 64 '', 65 "#MAKEFILE#:2: *** insufficient number of arguments (1) to function `foreach'. Stop.", 66 512); 67 68run_make_test(' 69x = $(foreach ) 70y := $x 71 72all: ; @echo $y', 73 '', 74 "#MAKEFILE#:2: *** insufficient number of arguments (1) to function `foreach'. Stop.", 75 512); 76 771; 78