1 # -*-mode: perl-*- 2 3 $description = "Test GNU make's auto-reinvocation feature."; 4 5 $details = "\ 6 If the makefile or one it includes can be rebuilt then it is, and make 7 is reinvoked. We create a rule to rebuild the makefile from a temp 8 file, then touch the temp file to make it newer than the makefile."; 9 10 $omkfile = $makefile; 11 12 &utouch(-600, 'incl.mk'); 13 # For some reason if we don't do this then the test fails for systems 14 # with sub-second timestamps, maybe + NFS? Not sure. 15 &utouch(-1, 'incl-1.mk'); 16 17 run_make_test(' 18 all: ; @echo running rules. 19 20 #MAKEFILE# incl.mk: incl-1.mk 21 @echo rebuilding $@ 22 @echo >> $@ 23 24 include incl.mk', 25 '', "rebuilding incl.mk\nrunning rules.\n"); 26 27 # Make sure updating the makefile itself also works 28 29 &utouch(-600, $omkfile); 30 31 run_make_test(undef, '', "rebuilding #MAKEFILE#\nrunning rules.\n"); 32 33 &rmfiles('incl.mk', 'incl-1.mk'); 34 35 36 # In this test we create an included file that's out-of-date, but then 37 # the rule doesn't update it. Make shouldn't re-exec. 38 39 &utouch(-600, 'b','a'); 40 #&utouch(-10, 'a'); 41 &touch('c'); 42 43 run_make_test(' 44 SHELL = /bin/sh 45 46 all: ; @echo hello 47 48 a : b ; echo >> $@ 49 50 b : c ; [ -f $@ ] || echo >> $@ 51 52 c: ; echo >> $@ 53 54 include $(F)', 55 'F=a', "[ -f b ] || echo >> b\nhello\n"); 56 57 # Now try with the file we're not updating being the actual file we're 58 # including: this and the previous one test different parts of the code. 59 60 run_make_test(undef, "F=b", "[ -f b ] || echo >> b\nhello\n") 61 62 &rmfiles('a','b','c'); 63 64 # This tells the test driver that the perl test script executed properly. 65 1; 66