#                                                                    -*-perl-*-

$description = "Test the make -k (don't stop on error) option.\n";

$details = "\
The makefile created in this test is a simulation of building
a small product.  However, the trick to this one is that one
of the dependencies of the main target does not exist.
Without the -k option, make would fail immediately and not
build any part of the target.  What we are looking for here,
is that make builds the rest of the dependencies even though
it knows that at the end it will fail to rebuild the main target.";

open(MAKEFILE,"> $makefile");

# The Contents of the MAKEFILE ...

print MAKEFILE <<EOF;
VPATH = work
edit:  main.o kbd.o commands.o display.o
\t\@echo cc -o edit main.o kbd.o commands.o display.o

main.o : main.c defs.h
\t\@echo cc -c main.c

kbd.o : kbd.c defs.h command.h
\t\@echo cc -c kbd.c

commands.o : command.c defs.h command.h
\t\@echo cc -c commands.c

display.o : display.c defs.h buffer.h
\t\@echo cc -c display.c
EOF

# END of Contents of MAKEFILE

close(MAKEFILE);


mkdir('work');
@files_to_touch = ("work${pathsep}main.c","work${pathsep}defs.h",
               "work${pathsep}command.h",
               "work${pathsep}commands.c","work${pathsep}display.c",
               "work${pathsep}buffer.h",
               "work${pathsep}command.c");

&touch(@files_to_touch);

if ($vos) {
  $error_code = 3307;
}
else {
  $error_code = 512;
}

&run_make_with_options($makefile, "-k", &get_logfile, $error_code);

# Create the answer to what should be produced by this Makefile
$answer = "cc -c main.c
$make_name: *** No rule to make target 'kbd.c', needed by 'kbd.o'.
cc -c commands.c
cc -c display.c
$make_name: Target 'edit' not remade because of errors.\n";

# COMPARE RESULTS

&compare_output($answer, &get_logfile(1));

unlink(@files_to_touch) unless $keep;


# TEST 1: Make sure that top-level targets that depend on targets that
# previously failed to build, aren't attempted.  Regression for PR/1634.

$makefile2 = &get_tmpfile;

open(MAKEFILE, "> $makefile2");
print MAKEFILE <<'EOF';
.SUFFIXES:

all: exe1 exe2; @echo making $@

exe1 exe2: lib; @echo cp $^ $@

lib: foo.o; @echo cp $^ $@

foo.o: ; exit 1
EOF

close(MAKEFILE);

&run_make_with_options($makefile2, "-k", &get_logfile, $error_code);

$answer = "exit 1
$make_name: *** [$makefile2:9: foo.o] Error 1
$make_name: Target 'all' not remade because of errors.\n";

&compare_output($answer, &get_logfile(1));

# TEST -- make sure we keep the error code if we can't create an included
# makefile.

if (defined $ERR_no_such_file) {
    run_make_test('all: ; @echo hi
include ifile
ifile: no-such-file; exit 1
',
                  '-k',
                  "#MAKEFILE#:2: ifile: $ERR_no_such_file
#MAKE#: *** No rule to make target 'no-such-file', needed by 'ifile'.
#MAKEFILE#:2: failed to remake makefile 'ifile'",
                  512);
}

1;
