diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/ChangeLog | 45 | ||||
-rwxr-xr-x | tests/run_make_tests.pl | 54 | ||||
-rw-r--r-- | tests/scripts/features/default_names | 6 | ||||
-rw-r--r-- | tests/scripts/features/reinvoke | 12 | ||||
-rw-r--r-- | tests/scripts/functions/foreach | 2 | ||||
-rw-r--r-- | tests/scripts/functions/origin | 11 | ||||
-rw-r--r-- | tests/scripts/options/dash-l | 2 | ||||
-rw-r--r-- | tests/scripts/options/dash-n | 8 | ||||
-rw-r--r-- | tests/scripts/variables/MAKECMDGOALS | 4 | ||||
-rw-r--r-- | tests/test_driver.pl | 24 |
10 files changed, 119 insertions, 49 deletions
diff --git a/tests/ChangeLog b/tests/ChangeLog index dd763b1..b40612f 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,14 +1,45 @@ +1999-09-16 Paul D. Smith <psmith@gnu.org> + + * scripts/features/reinvoke: Remove invocations of "touch" in + makefiles. See the comments on the touch function rewrite below. + Note that UNIX touch behaves the same way if the file already + exists: it sets the time to the _local_ time. We don't want + this. This is probably a good tip for makefile writers in + general, actually... where practical. + * scripts/options/dash-l: Ditto. + * scripts/options/dash-n: Ditto. + + * test_driver.pl (run_each_test): In retrospect, I don't like the + .lN/.bN/.dN postfix required by DOS. So, for non-DOS systems I + changed it back to use .log, .base, and .diff. + + * run_make_tests.pl (set_more_defaults): Move the check for the + make pathname to here from set_defaults (that's too early since it + happens before the command line processing). + Create a new variable $port_type, calculated from $osname, to + specify what kind of system we're running on. We should integrate + the VOS stuff here, too. + (valid_option): Comment out the workdir/-work stuff so people + won't be fooled into thinking it works... someone needs to fix + this, though! + + * scripts/functions/origin: Use $port_type instead of $osname. + * scripts/functions/foreach: Ditto. + * scripts/features/default_names: Ditto. + 1999-09-15 Paul D. Smith <psmith@gnu.org> * test_driver.pl (touch): Rewrite this function. Previously it used to use utime() to hard-set the time based on the current - local clock. This fails badly on networked filesystems where the - FS server clock is skewed from the local clock: normally modifying - a file causes it to get a mod time based on the _server's_ clock. - Hard-setting it based on the _local_ clock causes gratuitous - errors and makes the tests unreliable except on local filesystems. - The new function will simply modify the file, allowing the - filesystem to set the mod time as it sees fit. + local clock, or, if the file didn't exist, it merely created it. + This mirrors exactly what real UNIX touch does, but it fails badly + on networked filesystems where the FS server clock is skewed from + the local clock: normally modifying a file causes it to get a mod + time based on the _server's_ clock. Hard-setting it based on the + _local_ clock causes gratuitous errors and makes the tests + unreliable except on local filesystems. The new function will + simply modify the file, allowing the filesystem to set the mod + time as it sees fit. * scripts/features/parallelism: The second test output could change depending on how fast some scripts completed; use "sleep" diff --git a/tests/run_make_tests.pl b/tests/run_make_tests.pl index 484dbe1..4130b3d 100755 --- a/tests/run_make_tests.pl +++ b/tests/run_make_tests.pl @@ -9,7 +9,6 @@ # [-verbose] # [-keep] # [-make <make prog>] -# [-work <work dir>] # (and others) require "test_driver.pl"; @@ -27,11 +26,14 @@ sub valid_option } return 1; } - elsif ($option =~ /^-work([-_]?dir)?$/) - { - $workdir = shift @argv; - return 1; - } + +# This doesn't work--it _should_! Someone needs to fix this badly. +# +# elsif ($option =~ /^-work([-_]?dir)?$/) +# { +# $workdir = shift @argv; +# return 1; +# } return 0; } @@ -120,16 +122,6 @@ sub set_defaults $make_path = "make"; $tmpfilesuffix = "mk"; $pwd = &get_this_pwd; - - # Find the full pathname of Make. For DOS systems this is more - # complicated, so we ask make itself. - - open(MAKEFILE,"> makefile.tmp"); - print MAKEFILE 'all: ; @echo $(MAKE)' . "\n"; - close(MAKEFILE); - $make_path = `$make_path -f makefile.tmp`; - chop $make_path; - unlink "makefile.tmp"; } sub set_more_defaults @@ -137,6 +129,36 @@ sub set_more_defaults local($string); local($index); + # find the type of the port. We do this up front to have a single + # point of change if it needs to be tweaked. + # + # This is probably not specific enough. + # + if ($osname =~ /Windows/i) { + $port_type = 'W32'; + } + # Bleah, the osname is so variable on DOS. This kind of bites. + # Well, as far as I can tell if we check for some text at the + # beginning of the line with either no spaces or a single space, then + # a D, then either "OS", "os", or "ev" and a space. That should + # match and be pretty specific. + elsif ($osname =~ /^([^ ]*|[^ ]* [^ ]*)D(OS|os|ev) /) { + $port_type = 'DOS'; + } + # Everything else, right now, is UNIX. Note that we should integrate + # the VOS support into this as well and get rid of $vos; we'll do + # that next time. + else { + $port_type = 'UNIX'; + } + + # Find the full pathname of Make. For DOS systems this is more + # complicated, so we ask make itself. + + $make_path = `sh -c 'echo "all:;\@echo \$(MAKE)" | $make_path -f-'`; + chop $make_path; + print "Make\t= `$make_path'\n" if $debug; + $string = `$make_path -v -f /dev/null 2> /dev/null`; $string =~ /^(GNU Make [^,\n]*)/; diff --git a/tests/scripts/features/default_names b/tests/scripts/features/default_names index 824f889..501f1fc 100644 --- a/tests/scripts/features/default_names +++ b/tests/scripts/features/default_names @@ -1,3 +1,5 @@ +# -*-perl-*- + $description = "This script tests to make sure that Make looks for default makefiles in the correct order (GNUmakefile,makefile,Makefile)"; @@ -13,7 +15,7 @@ close(MAKEFILE); # DOS/WIN32 platforms preserve case, but Makefile is the same file as makefile. # Just test what we can here (avoid Makefile versus makefile test). # -if ($osname !~ /DOS|Windows/i) +if ($port_type eq 'UNIX') { # Create another makefile called "makefile" open(MAKEFILE,"> makefile"); @@ -45,7 +47,7 @@ unlink $makefile; # DOS/WIN32 platforms preserve case, but Makefile is the same file as makefile. # Just test what we can here (avoid Makefile versus makefile test). # -if ($osname !~ /DOS|Windows/i) +if ($port_type eq 'UNIX') { $answer = "It chose makefile\n"; diff --git a/tests/scripts/features/reinvoke b/tests/scripts/features/reinvoke index 99fb466..713580c 100644 --- a/tests/scripts/features/reinvoke +++ b/tests/scripts/features/reinvoke @@ -18,7 +18,7 @@ all: ; \@echo 'running rules.' $makefile $makefile2: $makefile_orig \@echo 'rebuilding \$\@.' - \@touch \$\@ + \@echo >> \$\@ include $makefile2 @@ -54,11 +54,11 @@ SHELL = /bin/sh all: ; @echo hello -a : b ; touch $@ +a : b ; echo >> $@ -b : c ; [ -f $@ ] || touch $@ +b : c ; [ -f $@ ] || echo >> $@ -c: ; touch $@ +c: ; echo >> $@ include $(F) EOM @@ -74,7 +74,7 @@ sleep(2); &run_make_with_options($makefile3, "F=a", &get_logfile, 0); -$answer = "[ -f b ] || touch b\nhello\n"; +$answer = "[ -f b ] || echo >> b\nhello\n"; &compare_output($answer,&get_logfile(1)); # Now try with the file we're not updating being the actual file we're @@ -82,7 +82,7 @@ $answer = "[ -f b ] || touch b\nhello\n"; &run_make_with_options($makefile3, "F=b", &get_logfile, 0); -$answer = "[ -f b ] || touch b\nhello\n"; +$answer = "[ -f b ] || echo >> b\nhello\n"; &compare_output($answer,&get_logfile(1)); unlink('a','b','c'); diff --git a/tests/scripts/functions/foreach b/tests/scripts/functions/foreach index 0c63c47..b80751b 100644 --- a/tests/scripts/functions/foreach +++ b/tests/scripts/functions/foreach @@ -20,7 +20,7 @@ open(MAKEFILE,"> $makefile"); # On WIN32 systems, the user's path is found in %Path% ($Path) # -$pathvar = (($osname =~ /Windows/i) ? "Path" : "PATH"); +$pathvar = (($port_type eq 'Windows') ? "Path" : "PATH"); print MAKEFILE <<EOF; foo = bletch null \@ garf diff --git a/tests/scripts/functions/origin b/tests/scripts/functions/origin index 721d928..eab2d78 100644 --- a/tests/scripts/functions/origin +++ b/tests/scripts/functions/origin @@ -15,12 +15,13 @@ defined per the following list: 'override' defined by override in makefile 'automatic' Automatic variable\n"; -# On WIN32 systems, HOME is meaningless. SystemRoot should be defined though. -# With DJGPP, HOME is not guaranteed to be defined. Use DJDIR instead. +# On WIN32 systems, HOME is meaningless. SystemRoot should be defined +# though. With DJGPP, HOME is not guaranteed to be defined. Use DJDIR +# instead. # -$homevar = (($osname =~ /Windows/i) - ? "SystemRoot" - : (($osname =~ /DOS/i) ? "DJDIR" : "HOME")); +$homevar = (($port_type eq 'Windows') ? "SystemRoot" + : (($port_type eq 'DOS') ? "DJDIR" + : "HOME")); open(MAKEFILE,"> $makefile"); diff --git a/tests/scripts/options/dash-l b/tests/scripts/options/dash-l index 445b869..58216f9 100644 --- a/tests/scripts/options/dash-l +++ b/tests/scripts/options/dash-l @@ -25,7 +25,7 @@ SHELL = /bin/sh define test if [ ! -f test-file ]; then \ - touch test-file; sleep 2; rm -f test-file; \ + echo >> test-file; sleep 2; rm -f test-file; \ else \ echo $@ FAILED; \ fi diff --git a/tests/scripts/options/dash-n b/tests/scripts/options/dash-n index 97dac7a..c1f4aab 100644 --- a/tests/scripts/options/dash-n +++ b/tests/scripts/options/dash-n @@ -9,8 +9,8 @@ open(MAKEFILE, "> $makefile"); print MAKEFILE <<'EOMAKE'; -final: intermediate ; touch $@ -intermediate: orig ; touch $@ +final: intermediate ; echo >> $@ +intermediate: orig ; echo >> $@ EOMAKE @@ -19,11 +19,11 @@ close(MAKEFILE); &touch('orig'); &run_make_with_options($makefile, "", &get_logfile); -$answer = "touch intermediate\ntouch final\n"; +$answer = "echo >> intermediate\necho >> final\n"; &compare_output($answer, &get_logfile(1)); &run_make_with_options($makefile, "-Worig -n", &get_logfile); -$answer = "touch intermediate\ntouch final\n"; +$answer = "echo >> intermediate\necho >> final\n"; &compare_output($answer, &get_logfile(1)); unlink('orig', 'intermediate', 'final'); diff --git a/tests/scripts/variables/MAKECMDGOALS b/tests/scripts/variables/MAKECMDGOALS index ec33358..879283b 100644 --- a/tests/scripts/variables/MAKECMDGOALS +++ b/tests/scripts/variables/MAKECMDGOALS @@ -1,4 +1,6 @@ -$description = "The following test creates a makefile to test the MAKECMDGOALS variable."; +# -*-perl-*- + +$description = "Test the MAKECMDGOALS variable."; $details = "\ We construct a makefile with various targets, all of which print out diff --git a/tests/test_driver.pl b/tests/test_driver.pl index 001d247..8e38813 100644 --- a/tests/test_driver.pl +++ b/tests/test_driver.pl @@ -153,7 +153,7 @@ sub toplevel { print "\n$num_failed Test"; print "s" unless $num_failed == 1; - print " Failed (See .diff files in $workdir dir for details) :-(\n\n"; + print " Failed (See .$diffext files in $workdir dir for details) :-(\n\n"; return 0; } else @@ -363,9 +363,21 @@ sub run_each_test $testpath = "$workpath$pathsep$testname"; # Leave enough space in the extensions to append a number, even # though it needs to fit into 8+3 limits. - $log_filename = "$testpath.l"; - $diff_filename = "$testpath.d"; - $base_filename = "$testpath.b"; + if ($port_host eq 'DOS') { + $logext = 'l'; + $diffext = 'd'; + $baseext = 'b'; + $extext = ''; + } + else { + $logext = 'log'; + $diffext = 'diff'; + $baseext = 'base'; + $extext = '.'; + } + $log_filename = "$testpath.$logext"; + $diff_filename = "$testpath.$diffext"; + $base_filename = "$testpath.$baseext"; $tmp_filename = "$testpath.$tmpfilesuffix"; &setup_for_test; # suite-defined @@ -602,7 +614,7 @@ sub compare_output print "\nCreating Difference File ...\n"; } # Create the difference file - local($command) = "diff -u " . &get_basefile . " " . $logfile; + local($command) = "diff -c " . &get_basefile . " " . $logfile; &run_command_with_output(&get_difffile,$command); return 0; @@ -1030,7 +1042,7 @@ sub num_suffix local($num) = @_; if (--$num > 0) { - return "$num"; + return "$extext$num"; } return ""; |