mirror of
https://github.com/mirror/make.git
synced 2026-08-30 11:18:08 +08:00
tests [WINDOWS32]: Support Strawberry Perl on Windows
Strawberry Perl has some different behaviors from ActiveState Perl which impact the test suite: - Avoid Perl's chomp() as it may not remove CRs; chomp() may remove only the final NL but not the CR in a CRNL line ending. - Strawberry Perl doesn't support ActiveState's system(1, ...) form. - Strawberry Perl (or msys?) does something weird with "/tmp" when provided to exec(), replacing it with the user's %TEMP%. - Strawberry Perl uses msys paths like /c/foo instead of C:\foo. * tests/test_driver.pl (get_osname): Strawberry Perl uses 'msys' as its $^O so if we see that use a port of 'W32'. (_run_with_timeout): Strawberry Perl doesn't support the special system(1, ...) form of system() so use POSIX standard fork/exec. (compare_answer): Paths generated by Strawberry Perl use msys path format (e.g., /c/foo instead of C:\foo); check for those differences and compare RE against both the unmodified and modified log. * tests/run_make_tests.pl (set_defaults): Switch from chomp to s/// to remove CRNL and NL line endings. * tests/scripts/features/errors: Executing directories on Strawberry will give an error; translate it to Windows error output format. * tests/scripts/features/output-sync: Ditto. * tests/scripts/features/temp_stdin: Ditto. * tests/scripts/functions/realpath: Ditto. * tests/scripts/options/dash-I: Ditto. * tests/scripts/variables/INCLUDE_DIRS: Ditto. * tests/scripts/misc/close_stdout: /dev/full is reported as existing on Strawberry Perl, but it doesn't do anything. Skip the test. * tests/scripts/variables/MAKEFLAGS: When an argument containing /tmp is passed to a program via exec(), something replaces it with the expansion of the %TEMP% variable. Instead of using /tmp create a local directory to use.
This commit is contained in:
@@ -45,7 +45,7 @@ create_file('defaultdirs.mk', "\$(info \$(.INCLUDE_DIRS))\nall:;\@:\n");
|
||||
my $cmd = subst_make_string("#MAKEPATH# -f defaultdirs.mk");
|
||||
my @dirs = `$cmd`;
|
||||
my $dirs = $dirs[0];
|
||||
chomp $dirs;
|
||||
$dirs =~ s/\r?\n//g;
|
||||
unlink('defaultdirs.mk');
|
||||
|
||||
run_make_test("
|
||||
|
||||
@@ -81,8 +81,13 @@ all:; \$(info makeflags='\$(MAKEFLAGS)')
|
||||
}
|
||||
}
|
||||
|
||||
# Strawberry Perl's exec()--or someting!--appears to replace all /tmp with the
|
||||
# user's %TEMP% value so we can't use that for -I testing. Make a directory.
|
||||
|
||||
mkdir('localtmp', 0777);
|
||||
|
||||
# Switches which carry arguments.
|
||||
@opts = (' -I/tmp', ' -Onone', ' --debug=b', ' -l2.5');
|
||||
@opts = (' -Ilocaltmp', ' -Onone', ' --debug=b', ' -l2.5');
|
||||
for my $fl (@flavors) {
|
||||
for my $opt (@opts) {
|
||||
run_make_test("
|
||||
@@ -106,7 +111,7 @@ all:; \$(info makeflags='\$(MAKEFLAGS)')
|
||||
|
||||
# Test that make filters out duplicates.
|
||||
# Each option is specified in the makefile, env and on the command line.
|
||||
@opts = (' -I/tmp', ' -Onone', ' --debug=b', ' -l2.5');
|
||||
@opts = (' -Ilocaltmp', ' -Onone', ' --debug=b', ' -l2.5');
|
||||
for my $fl (@flavors) {
|
||||
for my $opt (@opts) {
|
||||
$ENV{'MAKEFLAGS'} = $opt;
|
||||
@@ -136,24 +141,24 @@ all:; \$(info makeflags='\$(MAKEFLAGS)')
|
||||
for my $fl (@flavors) {
|
||||
$ENV{'MAKEFLAGS'} = 'ikB --no-print-directory --warn-undefined-variables --trace';
|
||||
run_make_test("
|
||||
MAKEFLAGS${fl}iknqrswd -I/tmp -I/tmp -Onone -Onone -l2.5 -l2.5
|
||||
MAKEFLAGS${fl}iknqrswd -Ilocaltmp -Ilocaltmp -Onone -Onone -l2.5 -l2.5
|
||||
all:; \$(info makeflags='\$(MAKEFLAGS)')
|
||||
",
|
||||
'-Onone -l2.5 -l2.5 -Onone -I/tmp -iknqrswd -i -n -s -k -I/tmp',
|
||||
"/makeflags='Bdiknqrsw -I/tmp -l2.5 -Onone --trace --warn-undefined-variables'/");
|
||||
'-Onone -l2.5 -l2.5 -Onone -Ilocaltmp -iknqrswd -i -n -s -k -Ilocaltmp',
|
||||
"/makeflags='Bdiknqrsw -Ilocaltmp -l2.5 -Onone --trace --warn-undefined-variables'/");
|
||||
}
|
||||
|
||||
# Verify MAKEFLAGS are all available to shell function at parse time.
|
||||
for my $fl (@flavors) {
|
||||
my $answer = 'Biknqrs -I/tmp -l2.5 -Onone --no-print-directory --warn-undefined-variables';
|
||||
my $answer = 'Biknqrs -Ilocaltmp -l2.5 -Onone --no-print-directory --warn-undefined-variables';
|
||||
$ENV{'MAKEFLAGS'} = 'ikB --no-print-directory --warn-undefined-variables';
|
||||
run_make_test("
|
||||
MAKEFLAGS${fl}iknqrsw -I/tmp -I/tmp -Onone -Onone -l2.5 -l2.5 --no-print-directory
|
||||
MAKEFLAGS${fl}iknqrsw -Ilocaltmp -Ilocaltmp -Onone -Onone -l2.5 -l2.5 --no-print-directory
|
||||
\$(info at parse time '\$(MAKEFLAGS)')
|
||||
XX := \$(shell echo \"\$\$MAKEFLAGS\")
|
||||
all:; \$(info at build time makeflags='\$(XX)')
|
||||
",
|
||||
'-Onone -l2.5 -l2.5 -Onone -I/tmp -iknqrs -i -n -s -k -I/tmp',
|
||||
'-Onone -l2.5 -l2.5 -Onone -Ilocaltmp -iknqrs -i -n -s -k -Ilocaltmp',
|
||||
"at parse time '$answer'
|
||||
at build time makeflags='$answer'");
|
||||
}
|
||||
@@ -161,14 +166,14 @@ at build time makeflags='$answer'");
|
||||
# Verify MAKEFLAGS and command line definitions are all available to shell function at parse time.
|
||||
for my $fl (@flavors) {
|
||||
$ENV{'MAKEFLAGS'} = 'ikB --no-print-directory --warn-undefined-variables';
|
||||
my $answer = 'Biknqrs -I/tmp -l2.5 -Onone --no-print-directory --warn-undefined-variables -- hello=world';
|
||||
my $answer = 'Biknqrs -Ilocaltmp -l2.5 -Onone --no-print-directory --warn-undefined-variables -- hello=world';
|
||||
run_make_test("
|
||||
MAKEFLAGS${fl}iknqrsw -I/tmp -I/tmp -Onone -Onone -l2.5 -l2.5 --no-print-directory
|
||||
MAKEFLAGS${fl}iknqrsw -Ilocaltmp -Ilocaltmp -Onone -Onone -l2.5 -l2.5 --no-print-directory
|
||||
\$(info at parse time '\$(MAKEFLAGS)')
|
||||
XX := \$(shell echo \"\$\$MAKEFLAGS\")
|
||||
all:; \$(info at build time makeflags='\$(XX)')
|
||||
",
|
||||
'-Onone -l2.5 -l2.5 -Onone -I/tmp -iknqrs -i -n -s -k -I/tmp hello=world',
|
||||
'-Onone -l2.5 -l2.5 -Onone -Ilocaltmp -iknqrs -i -n -s -k -Ilocaltmp hello=world',
|
||||
"at parse time '$answer'
|
||||
at build time makeflags='$answer'");
|
||||
}
|
||||
@@ -891,5 +896,7 @@ hello:; touch \$@
|
||||
|
||||
unlink('hello');
|
||||
|
||||
rmdir('localtmp');
|
||||
|
||||
# This tells the test driver that the perl test script executed properly.
|
||||
1;
|
||||
|
||||
Reference in New Issue
Block a user