diff options
Diffstat (limited to '')
-rw-r--r-- | src/kmk/tests/scripts/functions/for | 69 | ||||
-rw-r--r-- | src/kmk/tests/scripts/functions/foreach | 97 |
2 files changed, 166 insertions, 0 deletions
diff --git a/src/kmk/tests/scripts/functions/for b/src/kmk/tests/scripts/functions/for new file mode 100644 index 0000000..0152395 --- /dev/null +++ b/src/kmk/tests/scripts/functions/for @@ -0,0 +1,69 @@ +# $Id: for 2413 2010-09-11 17:43:04Z bird $ -*-perl-*- +## @file +# $(for init,condition,next,body) +# + +# +# Copyright (c) 2008-2010 knut st. osmundsen <bird-kBuild-spamx@anduin.net> +# +# This file is part of kBuild. +# +# kBuild is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# kBuild is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with kBuild. If not, see <http://www.gnu.org/licenses/> +# +# + +$description = "Tests the $(for ) loop function"; + +$details = "A few simple tests, nothing spectacular."; + +if ($is_kmk) { + + # TEST #0 - check that the feature is present. + # -------------------------------------------- + run_make_test(' +ifneq ($(for local i=0, $i <= 10, local i := $(expr $i + 1),$i),0 1 2 3 4 5 6 7 8 9 10) +$(error sub-test 0 failed:$(for local i=0, $i <= 10, local i := $(expr $i + 1),$i)) +endif + +.PHONY: all +all: ; @: +', +'', +''); + + # TEST #1 - the real test. + # ------------------------ + run_make_test(' +ifneq ($(for local i=0, $i <= 10, local i := $(expr $i + 1),$i),0 1 2 3 4 5 6 7 8 9 10) +$(error sub-test 0 failed) +endif +ifneq (.$(for local i=0, $i <= 3, local i := $(expr $i + 1), $i ).,. 0 1 2 3 .) +$(error sub-test 1 failed) +endif +ifneq (.$(foreach i,0 1 2 3, $i ).,. 0 1 2 3 .) +$(error sub-test 1b failed) +endif + +.PHONY: all +all: ; @: +', +'', +''); +} + + + +# Indicate that we're done. +1; + diff --git a/src/kmk/tests/scripts/functions/foreach b/src/kmk/tests/scripts/functions/foreach new file mode 100644 index 0000000..88ef0a7 --- /dev/null +++ b/src/kmk/tests/scripts/functions/foreach @@ -0,0 +1,97 @@ +# -*-perl-*- +# $Id$ + +$description = "Test the foreach function."; + +$details = "This is a test of the foreach function in gnu make. +This function starts with a space separated list of +names and a variable. Each name in the list is subsituted +into the variable and the given text evaluated. The general +form of the command is $(foreach var,$list,$text). Several +types of foreach loops are tested\n"; + + +# TEST 0 + +# Set an environment variable that we can test in the makefile. +# kmk: CC isn't a default. +$extraENV{FOOFOO} = 'foo foo'; +$CC_origin = $is_kmk ? "undefined" : "default"; + +run_make_test("space = ' '".' +null := +auto_var = udef space CC null FOOFOO MAKE foo CFLAGS WHITE @ < +foo = bletch null @ garf +av = $(foreach var, $(auto_var), $(origin $(var)) ) +override WHITE := BLACK +for_var = $(addsuffix .c,foo $(null) $(foo) $(space) $(av) ) +fe = $(foreach var2, $(for_var),$(subst .c,.o, $(var2) ) ) +all: auto for2 +auto : ; @echo $(av) +for2: ; @echo $(fe)', + '-j1 -e WHITE=WHITE CFLAGS=', + "undefined file ". $CC_origin ." file environment default file command line override automatic automatic +foo.o bletch.o null.o @.o garf.o .o .o undefined.o file.o ". $CC_origin .".o file.o environment.o default.o file.o command.o line.o override.o automatic.o automatic.o"); + +delete $extraENV{FOOFOO}; + +# TEST 1: Test that foreach variables take precedence over global +# variables in a global scope (like inside an eval). Tests bug #11913 + +run_make_test(' +.PHONY: all target +all: target + +x := BAD + +define mktarget +target: x := $(x) +target: ; @echo "$(x)" +endef + +x := GLOBAL + +$(foreach x,FOREACH,$(eval $(value mktarget)))', + '', + 'FOREACH'); + +# Allow variable names with trailing space +run_make_test(q! +$(foreach \ + a \ +, b c d \ +, $(info $a)) +all:;@: +!, + "", "b\nc\nd\n"); + +# Allow empty variable names. We still expand the body. + +run_make_test(' +x = $(foreach ,1 2 3,a) +y := $x + +all: ; @echo $y', + '', "a a a\n"); + +# Check some error conditions. + +run_make_test(' +x = $(foreach ) +y = $x + +all: ; @echo $y', + '', + "#MAKEFILE#:2: *** insufficient number of arguments (1) to function 'foreach'. Stop.", + 512); + +run_make_test(' +x = $(foreach x,y) +y := $x + +all: ; @echo $y', + '', + "#MAKEFILE#:2: *** insufficient number of arguments (2) to function 'foreach'. Stop.", + 512); + +1; |