#                                                                    -*-perl-*-

$description = "Test the -C option to GNU Make.";

use File::Spec;

# Pre-set $makefile to be in a subdirectory
$makefile = 'Makefile';

my $_srcdir = 'src';
mkdir($_srcdir, 0775);

my $_incdir = 'inc';
mkdir($_incdir, 0775);

my $_mkpath = File::Spec->catfile($_srcdir, $makefile);
create_file($_mkpath, "include \$(file)\nall: ;\n");

# TEST #1
# -------
run_make_test('', "-C $_srcdir --no-print-directory",
              "#MAKE#: 'all' is up to date.");

# TEST #2
# -------
# Do it again with trailing "/"; this should work the same

run_make_test(undef, "-C $_srcdir/ --no-print-directory",
              "#MAKE#: 'all' is up to date.");

# Test stringing together multiple -C options

run_make_test(undef, "-C $_incdir -C .. -C $_srcdir --no-print-directory",
              "#MAKE#: 'all' is up to date.");

# SV 63552 - Ensure -I is considered after -C

my $_incfile = 'test';
my $_incpath = File::Spec->catfile($_incdir, $_incfile);
create_file($_incpath, '$(info included)');

my $_incopt = File::Spec->catfile('..', $_incdir);

run_make_test(undef, "-C src -I $_incopt --no-print-directory file=$_incfile",
              "included\n#MAKE#: 'all' is up to date.");

unlink($_incpath);
rmdir($_incdir);

unlink($_mkpath);
rmdir($_srcdir);
1;
