From 4d72c4c11e3aff65e9bb36e5fcf75f088b140049 Mon Sep 17 00:00:00 2001 From: Paul Smith Date: Wed, 10 Jul 2002 12:59:07 +0000 Subject: Implement SysV-style $$@ support. I looked at E.Parmelan's patch but decided to implement this a different way, and didn't use it. --- tests/ChangeLog | 5 +++++ tests/scripts/variables/automatic | 29 ++++++++++++++++++++++++++--- tests/test_driver.pl | 18 ++++++++++++++++-- 3 files changed, 47 insertions(+), 5 deletions(-) (limited to 'tests') diff --git a/tests/ChangeLog b/tests/ChangeLog index fec5186..3a13e9e 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,8 @@ +2002-07-10 Paul D. Smith + + * scripts/variables/automatic: Add some tests for $$@, $$(@D), and + $$(@F). + 2002-07-09 Paul D. Smith * scripts/variables/automatic: Create a test for automatic variables. diff --git a/tests/scripts/variables/automatic b/tests/scripts/variables/automatic index b80d478..cb17efe 100644 --- a/tests/scripts/variables/automatic +++ b/tests/scripts/variables/automatic @@ -30,9 +30,8 @@ close(MAKEFILE); # TEST #1 -- simple test # ------- -&touch(qw(foo.x baz.z)); - -sleep(1); +# Touch these into the past +&utouch(-10, qw(foo.x baz.z)); &run_make_with_options($makefile, "", &get_logfile); $answer = "touch $dir/bar.y @@ -47,4 +46,28 @@ touch $dir/foo.x\n"; unlink(qw(foo.x bar.y baz.z)); +# TEST #2 -- test the SysV emulation of $$@ etc. +# ------- + +$makefile2 = &get_tmpfile; + +open(MAKEFILE, "> $makefile2"); +print MAKEFILE "dir = $dir\n"; +print MAKEFILE <<'EOF'; +.SUFFIXES: +.DEFAULT: ; @echo '$@' + +$(dir)/foo $(dir)/bar: $@.x $$@.x $$$@.x $$$$@.x $$(@D).x $$(@F).x + +$(dir)/x.z $(dir)/y.z: $(dir)/%.z : $@.% $$@.% $$$@.% $$$$@.% $$(@D).% $$(@F).% +EOF + +&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"; +&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"; +&compare_output($answer, &get_logfile(1)); + 1; diff --git a/tests/test_driver.pl b/tests/test_driver.pl index a7a3b9f..38ee54a 100644 --- a/tests/test_driver.pl +++ b/tests/test_driver.pl @@ -825,15 +825,29 @@ sub remove_directory_tree_inner sub touch { - local (@filenames) = @_; local ($file); - foreach $file (@filenames) { + foreach $file (@_) { (open(T, ">> $file") && print(T "\n") && close(T)) || &error("Couldn't touch $file: $!\n", 1); } } +# Touch with a time offset. To DTRT, call touch() then use stat() to get the +# access/mod time for each file and apply the offset. + +sub utouch +{ + local ($off) = shift; + local ($file); + + &touch(@_); + + local (@s) = stat($_[0]); + + utime($s[8]+$off, $s[9]+$off, @_); +} + # open a file, write some stuff to it, and close it. sub create_file -- cgit v1.2.3