#                                                                    -*-perl-*-

$description = "The following test creates a makefile to test the -I option.";

$details = "\
This test tests the -I option by including a filename in
another directory and giving make that directory name
under -I in the command line.  Without this option, the make
would fail to find the included file.  It also checks to make
sure that the -I option gets passed to recursive makes.";

use File::Spec;

# Create a directory and put a makefile in it.
# We can't put it in the current directory since that's automatically searched
# anyway.
my $subdir = 'idir';
mkdir($subdir, 0777);

my $included = 'ifile.mk';
my $ipath = File::Spec->catfile($subdir, $included);
create_file($ipath, "
ANOTHER:
\t\@echo This is another included makefile
recurse:
\t\@\$(MAKE) ANOTHER -f \$(main_makefile)\n");

my $nosuch = "#MAKEFILE#:5: $included: $ERR_no_such_file
#MAKE#: *** No rule to make target '$included'.  Stop.\n";


# Verify that we get an error if we don't have -I
run_make_test(qq!
main_makefile := \$(firstword \$(MAKEFILE_LIST))
all:
\t\@echo There should be no errors for this makefile
include $included
!,
              '', $nosuch, 512);

# Check basic -I works
run_make_test(undef, "-I $subdir all",
              "There should be no errors for this makefile\n");

# Check that the included target works
run_make_test(undef, "-I $subdir ANOTHER",
              "This is another included makefile\n");

# Check that -I is passed down through MAKEFLAGS
run_make_test(undef, "-I $subdir recurse",
              "#MAKE#[1]: Entering directory '#PWD#'
This is another included makefile
#MAKE#[1]: Leaving directory '#PWD#'\n");

# Verify that we get an error if we add -I- to delete previous includes
run_make_test(undef, "-I $subdir -I- all", $nosuch, 512);

# Make another directory with the same name and make sure the right one is
# chosen if -I- stops the path.

mkdir('idir2', 0777);
my $ipath2 = File::Spec->catfile('idir2', $included);
create_file($ipath2, "This is a bad makefile!!\n");

run_make_test(undef, "-I idir2 -I $subdir ANOTHER",
              "$included:1: *** missing separator.  Stop.\n", 512);

run_make_test(undef, "-I idir2 -I - -I $subdir ANOTHER",
              "This is another included makefile\n");

# Check that -I- is passed down through MAKEFLAGS
run_make_test(undef, "-I idir2 -I - -I $subdir recurse",
              "#MAKE#[1]: Entering directory '#PWD#'
This is another included makefile
#MAKE#[1]: Leaving directory '#PWD#'\n");

unlink($ipath2);
rmdir('idir2');

# The only way to check if -I- voids included directories is to see if a file
# exists in one and try to include it.  We very likely can't add our own files
# to the default directories since they're probably write-protected.  This
# won't work if none of the default directories contain any files :-/

create_file('defaultdirs.mk', "\$(info \$(.INCLUDE_DIRS))\nall:;\@:\n");
my $cmd = subst_make_string('"#MAKEPATH#" -f defaultdirs.mk');
my @dirs = `$cmd`;
my $dirs = $dirs[0];
$dirs =~ s/\r?\n//g;
unlink('defaultdirs.mk');

my $fn = undef;
foreach my $dn (split ' ', $dirs) {
    # On Windows the default is "." which is bogus!
    if ($dn ne '.') {
        my @files = glob(File::Spec->catfile($dn, "*"));
        if (@files) {
            (undef, undef, $fn) = File::Spec->splitpath($files[0]);
            last;
        }
    }
}

if ($fn) {
    run_make_test("
all:;
include $fn
",
                  '-I-', "#MAKEFILE#:3: $fn: $ERR_no_such_file
#MAKE#: *** No rule to make target '$fn'.  Stop.\n", 512);
}

unlink($ipath);
rmdir($subdir);

1;
