#                                                                    -*-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 = $workdir
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);


@files_to_touch = ("$workdir${pathsep}main.c","$workdir${pathsep}defs.h",
               "$workdir${pathsep}command.h",
               "$workdir${pathsep}commands.c","$workdir${pathsep}display.c",
               "$workdir${pathsep}buffer.h",
	       "$workdir${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: *** [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.

run_make_test('all: ; @echo hi
include ifile
ifile: no-such-file; @false
',
              '-k',
              "#MAKEFILE#:2: ifile: No such file or directory
#MAKE#: *** No rule to make target `no-such-file', needed by `ifile'.
#MAKE#: Failed to remake makefile `ifile'.
hi\n",
              512);

1;
