Home | History | Annotate | Download | only in targets
      1 #! -*-perl-*-
      2 
      3 $description = "Test the behaviour of the .SECONDARY target.";
      4 
      5 $details = "\
      6 Test the behavior of the .SECONDARY special target.
      7 Create a makefile where a file would not normally be considered
      8 intermediate, then specify it as .SECONDARY.  Build and note that it's
      9 not automatically deleted.  Delete the file.  Rebuild to ensure that
     10 it's not created if it doesn't exist but doesn't need to be built.
     11 Change the original and ensure that the secondary file and the ultimate
     12 target are both rebuilt, and that the secondary file is not deleted.
     13 
     14 Try this with implicit rules and explicit rules: both should work.\n";
     15 
     16 open(MAKEFILE,"> $makefile");
     17 
     18 print MAKEFILE <<'EOF';
     19 
     20 .SECONDARY: foo.e
     21 
     22 # Implicit rule test
     23 %.d : %.e ; cp $< $@
     24 %.e : %.f ; cp $< $@
     25 
     26 foo.d: foo.e
     27 
     28 # Explicit rule test
     29 foo.c: foo.e ; cp $< $@
     30 EOF
     31 
     32 close(MAKEFILE);
     33 
     34 # TEST #1
     35 
     36 &utouch(-20, 'foo.f');
     37 
     38 &run_make_with_options($makefile,'foo.d',&get_logfile);
     39 $answer = "cp foo.f foo.e\ncp foo.e foo.d\n";
     40 &compare_output($answer, &get_logfile(1));
     41 
     42 # TEST #2
     43 
     44 unlink('foo.e');
     45 
     46 &run_make_with_options($makefile,'foo.d',&get_logfile);
     47 $answer = "$make_name: `foo.d' is up to date.\n";
     48 &compare_output($answer, &get_logfile(1));
     49 
     50 # TEST #3
     51 
     52 &utouch(-10, 'foo.d');
     53 &touch('foo.f');
     54 
     55 &run_make_with_options($makefile,'foo.d',&get_logfile);
     56 $answer = "cp foo.f foo.e\ncp foo.e foo.d\n";
     57 &compare_output($answer, &get_logfile(1));
     58 
     59 # TEST #4
     60 
     61 &run_make_with_options($makefile,'foo.c',&get_logfile);
     62 $answer = "cp foo.e foo.c\n";
     63 &compare_output($answer, &get_logfile(1));
     64 
     65 # TEST #5
     66 
     67 unlink('foo.e');
     68 
     69 &run_make_with_options($makefile,'foo.c',&get_logfile);
     70 $answer = "$make_name: `foo.c' is up to date.\n";
     71 &compare_output($answer, &get_logfile(1));
     72 
     73 # TEST #6
     74 
     75 &utouch(-10, 'foo.c');
     76 &touch('foo.f');
     77 
     78 &run_make_with_options($makefile,'foo.c',&get_logfile);
     79 $answer = "cp foo.f foo.e\ncp foo.e foo.c\n";
     80 &compare_output($answer, &get_logfile(1));
     81 
     82 unlink('foo.f', 'foo.e', 'foo.d', 'foo.c');
     83 
     84 # TEST #7 -- test the "global" .SECONDARY, with no targets.
     85 
     86 $makefile2 = &get_tmpfile;
     87 
     88 open(MAKEFILE, "> $makefile2");
     89 
     90 print MAKEFILE <<'EOF';
     91 .SECONDARY:
     92 
     93 final: intermediate
     94 intermediate: source
     95 
     96 final intermediate source:
     97 	echo $< > $@
     98 EOF
     99 
    100 close(MAKEFILE);
    101 
    102 &utouch(-10, 'source');
    103 touch('final');
    104 
    105 &run_make_with_options($makefile2, '', &get_logfile);
    106 $answer = "$make_name: `final' is up to date.\n";
    107 &compare_output($answer, &get_logfile(1));
    108 
    109 unlink('source', 'final', 'intermediate');
    110 
    111 
    112 # TEST #8 -- test the "global" .SECONDARY, with .PHONY.
    113 
    114 touch('version2');
    115 run_make_test('
    116 .PHONY: version
    117 .SECONDARY:
    118 version2: version ; @echo GOOD
    119 all: version2',
    120               'all', 'GOOD');
    121 
    122 unlink('version2');
    123 
    124 # This tells the test driver that the perl test script executed properly.
    125 1;
    126