mirror of
				https://github.com/jart/cosmopolitan.git
				synced 2025-10-26 03:00:57 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			121 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
			
		
		
	
	
			121 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
| #                                                                    -*-perl-*-
 | |
| 
 | |
| $description = "\
 | |
| This tests random features of make's algorithms, often somewhat obscure,
 | |
| which have either broken at some point in the past or seem likely to
 | |
| break.";
 | |
| 
 | |
| run_make_test('
 | |
| # Make sure that subdirectories built as prerequisites are actually handled
 | |
| # properly.
 | |
| 
 | |
| all: dir/subdir/file.a
 | |
| 
 | |
| dir/subdir: ; @echo mkdir -p dir/subdir
 | |
| 
 | |
| dir/subdir/file.b: dir/subdir ; @echo touch dir/subdir/file.b
 | |
| 
 | |
| dir/subdir/%.a: dir/subdir/%.b ; @echo cp $< $@',
 | |
|               '', "mkdir -p dir/subdir\ntouch dir/subdir/file.b\ncp dir/subdir/file.b dir/subdir/file.a\n");
 | |
| 
 | |
| # 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 implicit rules with '$' in the name (see se_implicit)
 | |
| 
 | |
| run_make_test(q!
 | |
| %.foo : baz$$bar ; @echo 'done $<'
 | |
| %.foo : bar$$baz ; @echo 'done $<'
 | |
| test.foo:
 | |
| baz$$bar bar$$baz: ; @echo '$@'
 | |
| !,
 | |
|               '',
 | |
|               "baz\$bar\ndone baz\$bar");
 | |
| 
 | |
| 
 | |
| # Test implicit rules with '$' in the name (see se_implicit)
 | |
| # Use the '$' in the pattern.
 | |
| 
 | |
| run_make_test(q!
 | |
| %.foo : %$$bar ; @echo 'done $<'
 | |
| test.foo:
 | |
| test$$bar: ; @echo '$@'
 | |
| !,
 | |
|               '',
 | |
|               "test\$bar\ndone test\$bar");
 | |
| 
 | |
| # Make sure that subdirectories built as prerequisites are actually handled
 | |
| # properly... this time with '$'
 | |
| 
 | |
| run_make_test(q!
 | |
| 
 | |
| all: dir/subdir/file.$$a
 | |
| 
 | |
| dir/subdir: ; @echo mkdir -p '$@'
 | |
| 
 | |
| dir/subdir/file.$$b: dir/subdir ; @echo touch '$@'
 | |
| 
 | |
| dir/subdir/%.$$a: dir/subdir/%.$$b ; @echo 'cp $< $@'
 | |
| !,
 | |
|               '', "mkdir -p dir/subdir\ntouch dir/subdir/file.\$b\ncp dir/subdir/file.\$b dir/subdir/file.\$a\n");
 | |
| 
 | |
| # Test odd whitespace at the beginning of a line
 | |
| 
 | |
| run_make_test("
 | |
| all:
 | |
|    \f
 | |
| 
 | |
|     \\
 | |
|  \f  \\
 | |
|     \013 \\
 | |
| all: ; \@echo hi
 | |
| ",
 | |
|               '', "hi\n");
 | |
| 
 | |
| # SV-56834 Ensure setting PATH in the makefile works properly
 | |
| my $sname = "foobar$scriptsuffix";
 | |
| 
 | |
| mkdir('sd', 0775);
 | |
| create_file("sd/$sname", "exit 0\n");
 | |
| chmod 0755, "sd/$sname";
 | |
| 
 | |
| run_make_test(qq!
 | |
| PATH := sd
 | |
| all: ; $sname >/dev/null
 | |
| !,
 | |
|               '', "$sname >/dev/null\n");
 | |
| 
 | |
| # Don't use the general PATH if not found on the target path
 | |
| 
 | |
| $extraENV{PATH} = "$ENV{PATH}:sd";
 | |
| 
 | |
| run_make_test(qq!
 | |
| PATH := ..
 | |
| all: ; $sname
 | |
| !,
 | |
|               '', "$sname\n#MAKE#: $sname: $ERR_no_such_file\n#MAKE#: *** [#MAKEFILE#:3: all] Error 127", 512);
 | |
| 
 | |
| unlink("sd/$sname");
 | |
| rmdir('sd');
 | |
| 
 | |
| # Ensure that local programs are not found if "." is not on the PATH
 | |
| 
 | |
| create_file($sname, '');
 | |
| chmod 0755, $sname;
 | |
| 
 | |
| run_make_test(qq!
 | |
| PATH := ..
 | |
| all: ; $sname
 | |
| !,
 | |
|               '', "$sname\n#MAKE#: $sname: $ERR_no_such_file\n#MAKE#: *** [#MAKEFILE#:3: all] Error 127", 512);
 | |
| 
 | |
| unlink($sname);
 | |
| 
 | |
| 1;
 |