1# -*-mode: perl-*- 2 3$description = "Test GNU make's auto-reinvocation feature."; 4 5$details = "\ 6If the makefile or one it includes can be rebuilt then it is, and make 7is reinvoked. We create a rule to rebuild the makefile from a temp 8file, 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 17run_make_test(' 18all: ; @echo running rules. 19 20#MAKEFILE# incl.mk: incl-1.mk 21 @echo rebuilding $@ 22 @echo >> $@ 23 24include 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 31run_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 43run_make_test(' 44SHELL = /bin/sh 45 46all: ; @echo hello 47 48a : b ; echo >> $@ 49 50b : c ; [ -f $@ ] || echo >> $@ 51 52c: ; echo >> $@ 53 54include $(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 60run_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. 651; 66