Home | History | Annotate | Download | only in options
      1 #                                                                    -*-perl-*-
      2 
      3 $description = "Test the -L option.";
      4 
      5 $details = "Verify that symlink handling with and without -L works properly.";
      6 
      7 # Only run these tests if the system sypports symlinks
      8 
      9 # Apparently the Windows port of Perl reports that it does support symlinks
     10 # (in that the symlink() function doesn't fail) but it really doesn't, so
     11 # check for it explicitly.
     12 
     13 if ($port_type eq 'W32' || !( eval { symlink("",""); 1 })) {
     14   # This test is N/A 
     15   -1;
     16 } else {
     17 
     18   # Set up a symlink sym -> dep
     19   # We'll make both dep and targ older than sym
     20   $pwd =~ m%/([^/]+)$%;
     21   $dirnm = $1;
     22   &utouch(-10, 'dep');
     23   &utouch(-5, 'targ');
     24   symlink("../$dirnm/dep", 'sym');
     25 
     26   # Without -L, nothing should happen
     27   # With -L, it should update targ
     28   run_make_test('targ: sym ; @echo make $@ from $<', '',
     29                 "#MAKE#: `targ' is up to date.");
     30   run_make_test(undef, '-L', "make targ from sym");
     31 
     32   # Now update dep; in all cases targ should be out of date.
     33   &touch('dep');
     34   run_make_test(undef, '', "make targ from sym");
     35   run_make_test(undef, '-L', "make targ from sym");
     36 
     37   # Now update targ; in all cases targ should be up to date.
     38   &touch('targ');
     39   run_make_test(undef, '', "#MAKE#: `targ' is up to date.");
     40   run_make_test(undef, '-L', "#MAKE#: `targ' is up to date.");
     41 
     42   # Add in a new link between sym and dep.  Be sure it's newer than targ.
     43   sleep(1);
     44   rename('dep', 'dep1');
     45   symlink('dep1', 'dep');
     46 
     47   # Without -L, nothing should happen
     48   # With -L, it should update targ
     49   run_make_test(undef, '', "#MAKE#: `targ' is up to date.");
     50   run_make_test(undef, '-L', "make targ from sym");
     51 
     52   rmfiles('targ', 'dep', 'sym', 'dep1');
     53 
     54   # Check handling when symlinks point to non-existent files.  Without -L we
     55   # should get an error: with -L we should use the timestamp of the symlink.
     56 
     57   symlink("../$dirname/dep", 'sym');
     58   run_make_test('targ: sym ; @echo make $@ from $<', '',
     59                 "#MAKE#: *** No rule to make target `sym', needed by `targ'.  Stop.", 512);
     60 
     61   run_make_test('targ: sym ; @echo make $@ from $<', '-L',
     62                 'make targ from sym');
     63 
     64 
     65   rmfiles('targ', 'sym');
     66 
     67   1;
     68 }
     69