| # -*-mode: perl-*- |
| |
| $description = "Test GNU make's auto-reinvocation feature."; |
| |
| $details = "\ |
| If the makefile or one it includes can be rebuilt then it is, and make |
| is reinvoked. We create a rule to rebuild the makefile from a temp |
| file, then touch the temp file to make it newer than the makefile."; |
| |
| $omkfile = $makefile; |
| |
| &utouch(-600, 'incl.mk'); |
| # For some reason if we don't do this then the test fails for systems |
| # with sub-second timestamps, maybe + NFS? Not sure. |
| &utouch(-1, 'incl-1.mk'); |
| |
| run_make_test(' |
| all: ; @echo running rules. |
| |
| #MAKEFILE# incl.mk: incl-1.mk |
| @echo rebuilding $@ |
| @echo >> $@ |
| |
| include incl.mk', |
| '', "rebuilding incl.mk\nrunning rules.\n"); |
| |
| # Make sure updating the makefile itself also works |
| |
| &utouch(-600, $omkfile); |
| |
| run_make_test(undef, '', "rebuilding #MAKEFILE#\nrunning rules.\n"); |
| |
| &rmfiles('incl.mk', 'incl-1.mk'); |
| |
| |
| # In this test we create an included file that's out-of-date, but then |
| # the rule doesn't update it. Make shouldn't re-exec. |
| |
| &utouch(-600, 'b','a'); |
| #&utouch(-10, 'a'); |
| &touch('c'); |
| |
| run_make_test(' |
| SHELL = /bin/sh |
| |
| all: ; @echo hello |
| |
| a : b ; echo >> $@ |
| |
| b : c ; [ -f $@ ] || echo >> $@ |
| |
| c: ; echo >> $@ |
| |
| include $(F)', |
| 'F=a', "[ -f b ] || echo >> b\nhello\n"); |
| |
| # Now try with the file we're not updating being the actual file we're |
| # including: this and the previous one test different parts of the code. |
| |
| run_make_test(undef, "F=b", "[ -f b ] || echo >> b\nhello\n") |
| |
| &rmfiles('a','b','c'); |
| |
| # This tells the test driver that the perl test script executed properly. |
| 1; |