| # -*-perl-*- | |
| $description = "\ | |
| The following test creates a makefile to test the presence | |
| of multiple rules for one target. One file can be the | |
| target of several rules if at most one rule has commands; | |
| the other rules can only have dependencies."; | |
| $details = "\ | |
| The makefile created in this test contains two hardcoded rules | |
| for foo.o and bar.o. It then gives another multiple target rule | |
| with the same names as above but adding more dependencies. | |
| Additionally, another variable extradeps is listed as a | |
| dependency but is defined to be null. It can however be defined | |
| on the make command line as extradeps=extra.h which adds yet | |
| another dependency to the targets."; | |
| open(MAKEFILE,"> $makefile"); | |
| # The Contents of the MAKEFILE ... | |
| print MAKEFILE <<EOF; | |
| objects = foo.o bar.o | |
| foo.o : defs.h | |
| bar.o : defs.h test.h | |
| extradeps = | |
| \$(objects) : config.h \$(extradeps) | |
| \t\@echo EXTRA EXTRA | |
| EOF | |
| # END of Contents of MAKEFILE | |
| close(MAKEFILE); | |
| &touch("defs.h","test.h","config.h"); | |
| if ($vos) | |
| { | |
| $error_code = 3307; | |
| } | |
| else | |
| { | |
| $error_code = 512; | |
| } | |
| &run_make_with_options($makefile, | |
| "extradeps=extra.h", | |
| &get_logfile, | |
| $error_code); | |
| # Create the answer to what should be produced by this Makefile | |
| $answer = "$make_name: *** No rule to make target 'extra.h', needed by 'foo.o'. Stop.\n"; | |
| &compare_output($answer,&get_logfile(1)); | |
| # TEST #2 | |
| # ------- | |
| &touch("extra.h"); | |
| &run_make_with_options($makefile, | |
| "extradeps=extra.h", | |
| &get_logfile, | |
| 0); | |
| # Create the answer to what should be produced by this Makefile | |
| $answer = "EXTRA EXTRA\n"; | |
| &compare_output($answer,&get_logfile(1)); | |
| unlink("defs.h","test.h","config.h","extra.h"); | |
| # sv 62650. | |
| # Test the message that make prints when a file found by directory search | |
| # is preferred over the local one. | |
| run_make_test(q! | |
| vpath hello.c src | |
| all: hello.c; $(info $@ from $^) | |
| hello.c: ; $(info 1 $@) | |
| src/hello.c: ; $(info 2 $@) | |
| !, '', | |
| "#MAKEFILE#:4: recipe was specified for file 'hello.c' at #MAKEFILE#:4, | |
| #MAKEFILE#:4: but 'hello.c' is now considered the same file as 'src/hello.c' | |
| #MAKEFILE#:4: recipe for 'hello.c' will be ignored in favor of the one for 'src/hello.c' | |
| 2 src/hello.c | |
| all from src/hello.c | |
| #MAKE#: 'all' is up to date.\n"); | |
| 1; |