Home | History | Annotate | Download | only in features
      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