diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/ChangeLog | 16 | ||||
-rw-r--r-- | tests/scripts/features/se_explicit | 105 | ||||
-rw-r--r-- | tests/scripts/features/se_implicit | 188 | ||||
-rw-r--r-- | tests/scripts/features/se_statpat | 106 | ||||
-rw-r--r-- | tests/scripts/misc/general4 | 30 | ||||
-rw-r--r-- | tests/scripts/variables/automatic | 4 |
6 files changed, 443 insertions, 6 deletions
diff --git a/tests/ChangeLog b/tests/ChangeLog index ffaf1b1..8bc29b1 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,19 @@ +Sun Feb 27 23:33:32 2005 Boris Kolpackov <boris@kolpackov.net> + + * scripts/features/se_explicit: Test the second expansion in + explicit rules. + + * scripts/features/se_implicit: Test the second expansion in + implicit rules. + + * scripts/features/se_statpat: Test the second expansion in + static pattern rules. + + * tests/scripts/variables/automatic: Fix to work with the second + expansion. + + * scripts/misc/general4: Add a test for bug #12091. + 2005-02-09 Paul D. Smith <psmith@gnu.org> * scripts/features/recursion: Test command line variable settings: diff --git a/tests/scripts/features/se_explicit b/tests/scripts/features/se_explicit new file mode 100644 index 0000000..0e696be --- /dev/null +++ b/tests/scripts/features/se_explicit @@ -0,0 +1,105 @@ +# -*-perl-*- +$description = "Test second expansion in ordinary rules."; + +$details = ""; + +# Test #1: automatic variables. +# +run_make_test(' +.DEFAULT: ; @echo $@ + +foo: bar baz + +foo: biz | buz + +foo: $$@.1 \ + $$<.2 \ + $$(addsuffix .3,$$^) \ + $$(addsuffix .4,$$+) \ + $$|.5 \ + $$*.6 + +', +'', +'bar +baz +biz +buz +foo.1 +bar.2 +bar.3 +baz.3 +biz.3 +bar.4 +baz.4 +biz.4 +buz.5 +.6 +'); + + +# Test #2: target/pattern -specific variables. +# +run_make_test(' +.DEFAULT: ; @echo $@ + +foo.x: $$a $$b + +foo.x: a := bar + +%.x: b := baz + +', +'', +'bar +baz +'); + + +# Test #3: order of prerequisites. +# +run_make_test(' +.DEFAULT: ; @echo $@ + +all: foo bar baz + +# Subtest #1 +# +foo: foo.1; @: + +foo: foo.2 + +foo: foo.3 + + +# Subtest #2 +# +bar: bar.2 + +bar: bar.1; @: + +bar: bar.3 + + +# Subtest #3 +# +baz: baz.1 + +baz: baz.2 + +baz: ; @: + +', +'', +'foo.1 +foo.2 +foo.3 +bar.1 +bar.2 +bar.3 +baz.1 +baz.2 +'); + +# This tells the test driver that the perl test script executed properly. +1; diff --git a/tests/scripts/features/se_implicit b/tests/scripts/features/se_implicit new file mode 100644 index 0000000..b6b726c --- /dev/null +++ b/tests/scripts/features/se_implicit @@ -0,0 +1,188 @@ +# -*-perl-*- +$description = "Test second expansion in ordinary rules."; + +$details = ""; + +use Cwd; + +$dir = cwd; +$dir =~ s,.*/([^/]+)$,../$1,; + + +# Test #1: automatic variables. +# +run_make_test(' +.DEFAULT: ; @echo $@ + +foo.a: bar baz + +foo.a: biz | buz + +foo.%: 1.$$@ \ + 2.$$< \ + $$(addprefix 3.,$$^) \ + $$(addprefix 4.,$$+) \ + 5.$$| \ + 6.$$* + @: + +1.foo.a \ +2.bar \ +3.bar \ +3.baz \ +3.biz \ +4.bar \ +4.baz \ +4.biz \ +5.buz \ +6.a: + @echo $@ + +', +'', +'1.foo.a +2.bar +3.bar +3.baz +3.biz +4.bar +4.baz +4.biz +5.buz +6.a +bar +baz +biz +buz +'); + + +# Test #2: target/pattern -specific variables. +# +run_make_test(' +foo.x: + +foo.%: $$(%_a) $$(%_b) bar + @: + +foo.x: x_a := bar + +%.x: x_b := baz + +bar baz: ; @echo $@ + +', +'', +'bar +baz +'); + + +# Test #3: order of prerequisites. +# +run_make_test(' +.DEFAULT: ; @echo $@ + +all: foo bar baz + + +# Subtest #1 +# +%oo: %oo.1; @: + +foo: foo.2 + +foo: foo.3 + +foo.1: ; @echo $@ + + +# Subtest #2 +# +bar: bar.2 + +%ar: %ar.1; @: + +bar: bar.3 + +bar.1: ; @echo $@ + + +# Subtest #3 +# +baz: baz.1 + +baz: baz.2 + +%az: ; @: + +', +'', +'foo.1 +foo.2 +foo.3 +bar.1 +bar.2 +bar.3 +baz.1 +baz.2 +'); + + +# Test #4: stem splitting logic. +# +run_make_test(' +$(dir)/tmp/bar.o: + +$(dir)/tmp/foo/bar.c: ; @echo $@ +$(dir)/tmp/bar/bar.c: ; @echo $@ +foo.h: ; @echo $@ + +%.o: $$(addsuffix /%.c,foo bar) foo.h + @echo $@: {$<} $^ + +', +"dir=$dir", +"$dir/tmp/foo/bar.c +$dir/tmp/bar/bar.c +foo.h +$dir/tmp/bar.o: {$dir/tmp/foo/bar.c} $dir/tmp/foo/bar.c $dir/tmp/bar/bar.c foo.h +"); + + +# Test #5: stem splitting logic and order-only prerequisites. +# +run_make_test(' +$(dir)/tmp/foo.o: $(dir)/tmp/foo.c +$(dir)/tmp/foo.c: ; @echo $@ +bar.h: ; @echo $@ + +%.o: %.c|bar.h + @echo $@: {$<} {$|} $^ + +', +"dir=$dir", +"$dir/tmp/foo.c +bar.h +$dir/tmp/foo.o: {$dir/tmp/foo.c} {bar.h} $dir/tmp/foo.c +"); + + +# Test #6: lack of implicit prerequisites. +# +run_make_test(' +foo.o: foo.c +foo.c: ; @echo $@ + +%.o: + @echo $@: {$<} $^ + +', +'', +'foo.c +foo.o: {foo.c} foo.c +'); + + +# This tells the test driver that the perl test script executed properly. +1; diff --git a/tests/scripts/features/se_statpat b/tests/scripts/features/se_statpat new file mode 100644 index 0000000..9f1b4a3 --- /dev/null +++ b/tests/scripts/features/se_statpat @@ -0,0 +1,106 @@ +# -*-perl-*- +$description = "Test second expansion in static pattern rules."; + +$details = ""; + +# Test #1: automatic variables. +# +run_make_test(' +.DEFAULT: ; @echo $@ + +foo.a foo.b: foo.%: bar.% baz.% + +foo.a foo.b: foo.%: biz.% | buz.% + +foo.a foo.b: foo.%: $$@.1 \ + $$<.2 \ + $$(addsuffix .3,$$^) \ + $$(addsuffix .4,$$+) \ + $$|.5 \ + $$*.6 + +', +'', +'bar.a +baz.a +biz.a +buz.a +foo.a.1 +bar.a.2 +bar.a.3 +baz.a.3 +biz.a.3 +bar.a.4 +baz.a.4 +biz.a.4 +buz.a.5 +a.6 +'); + + +# Test #2: target/pattern -specific variables. +# +run_make_test(' +.DEFAULT: ; @echo $@ + +foo.x foo.y: foo.%: $$(%_a) $$($$*_b) + +foo.x: x_a := bar + +%.x: x_b := baz + + +', +'', +'bar +baz +'); + + +# Test #3: order of prerequisites. +# +run_make_test(' +.DEFAULT: ; @echo $@ + +all: foo.a bar.a baz.a + +# Subtest #1 +# +foo.a foo.b: foo.%: foo.%.1; @: + +foo.a foo.b: foo.%: foo.%.2 + +foo.a foo.b: foo.%: foo.%.3 + + +# Subtest #2 +# +bar.a bar.b: bar.%: bar.%.2 + +bar.a bar.b: bar.%: bar.%.1; @: + +bar.a bar.b: bar.%: bar.%.3 + + +# Subtest #3 +# +baz.a baz.b: baz.%: baz.%.1 + +baz.a baz.b: baz.%: baz.%.2 + +baz.a baz.b: ; @: + +', +'', +'foo.a.1 +foo.a.2 +foo.a.3 +bar.a.1 +bar.a.2 +bar.a.3 +baz.a.1 +baz.a.2 +'); + +# This tells the test driver that the perl test script executed properly. +1; diff --git a/tests/scripts/misc/general4 b/tests/scripts/misc/general4 index dd77f53..3b4595f 100644 --- a/tests/scripts/misc/general4 +++ b/tests/scripts/misc/general4 @@ -6,9 +6,6 @@ which have either broken at some point in the past or seem likely to break."; open(MAKEFILE,"> $makefile"); - -# The contents of the Makefile ... - print MAKEFILE <<'EOF'; # Make sure that subdirectories built as prerequisites are actually handled # properly. @@ -21,11 +18,36 @@ dir/subdir/file.b: dir/subdir ; @echo touch dir/subdir/file.b dir/subdir/%.a: dir/subdir/%.b ; @echo cp $< $@ EOF - close(MAKEFILE); &run_make_with_options($makefile,"",&get_logfile); $answer = "mkdir -p dir/subdir\ntouch dir/subdir/file.b\ncp dir/subdir/file.b dir/subdir/file.a\n"; &compare_output($answer,&get_logfile(1)); + +# Test implicit rules + +&touch('foo.c'); +run_make_test(' +foo: foo.o +', + 'CC="@echo cc" OUTPUT_OPTION=', + 'cc -c foo.c +cc foo.o -o foo'); +unlink('foo.c'); + + +# Test other implicit rule searching + +&touch('bar'); +run_make_test(' +test.foo: +%.foo : baz ; @echo done $< +%.foo : bar ; @echo done $< +fox: baz +', + '', + 'done bar'); +unlink('bar'); + 1; diff --git a/tests/scripts/variables/automatic b/tests/scripts/variables/automatic index 2919960..a51ca20 100644 --- a/tests/scripts/variables/automatic +++ b/tests/scripts/variables/automatic @@ -67,11 +67,11 @@ EOF close(MAKEFILE); &run_make_with_options($makefile2, "$dir/foo $dir/bar", &get_logfile); -$answer = ".x\n$dir/foo.x\n\$.x\n\$@.x\n$dir.x\nfoo.x\n$dir/bar.x\nbar.x\n"; +$answer = ".x\n$dir/foo.x\nx\n\$@.x\n$dir.x\nfoo.x\n$dir/bar.x\nbar.x\n"; &compare_output($answer, &get_logfile(1)); &run_make_with_options($makefile2, "$dir/x.z $dir/y.z", &get_logfile); -$answer = ".x\n$dir/x.z.x\n\$.x\n\$@.x\n$dir.x\nx.z.x\n.y\n$dir/y.z.y\n\$.y\n\$@.y\n$dir.y\ny.z.y\n"; +$answer = ".x\n$dir/x.z.x\nx\n\$@.x\n$dir.x\nx.z.x\n.y\n$dir/y.z.y\n\y\n\$@.y\n$dir.y\ny.z.y\n"; &compare_output($answer, &get_logfile(1)); &run_make_with_options($makefile2, "$dir/biz", &get_logfile); |