#                                                                    -*-perl-*-

$description = "Test suffix rules.";

$details = "";

# TEST #0: Clear all suffixes

touch('foo.c');

run_make_test(q!
.SUFFIXES:
all: foo.o ; @echo $@ $<
!,
              '', "#MAKE#: *** No rule to make target 'foo.o', needed by 'all'.  Stop.\n", 512);

unlink('foo.c');

# Test #1: Add a simple suffix rule

touch('foo.baz');

run_make_test(q!
.SUFFIXES: .biz .baz

.baz.biz: ; @echo make $@
!,
              'foo.biz', "make foo.biz\n");

unlink('foo.baz');

# Test #2: Make sure the defaults still work

touch('foo.c');

run_make_test(undef, 'foo.o COMPILE.c=@echo OUTPUT_OPTION=', "foo.c\n");

unlink('foo.c');

# Test #3: Replacing all suffixes

touch('foo.baz');

run_make_test(q!
.SUFFIXES:
.SUFFIXES: .biz .baz

.baz.biz: ; @echo make $@
!,
              'foo.biz', "make foo.biz\n");

unlink('foo.baz');

# SV 40657: "Suffix rules" with deps are normal rules

my $prewarn = 'warning: ignoring prerequisites on suffix rule definition';

touch('foo.bar');

# Verify warnings for single-suffix rules

run_make_test(q!
.SUFFIXES:
.SUFFIXES: .baz

.baz: foo.bar ; @echo make $@ from $<

$X.POSIX:
!,
              'X=1 .baz', "#MAKEFILE#:5: $prewarn\nmake .baz from foo.bar\n");

# In POSIX mode we don't get a warning

run_make_test(undef, 'X= .baz', "make .baz from foo.bar\n");

# Test double-suffix rules

run_make_test(q!
.SUFFIXES:
.SUFFIXES: .biz .baz

$X.POSIX:

.baz.biz: foo.bar ; @echo make $@ from $<
!,
              'X=1 .baz.biz', "#MAKEFILE#:7: $prewarn\nmake .baz.biz from foo.bar\n");

# SV 40657: In POSIX mode we don't get a warning

run_make_test(undef, 'X= .baz.biz', "make .baz.biz from foo.bar\n");

unlink('foo.bar');

# SV 40657: In POSIX mode, no pattern rules should be created

utouch(-20, 'foo.baz');

run_make_test(undef,
              'X= foo.biz', "#MAKE#: *** No rule to make target 'foo.biz'.  Stop.\n", 512);

# SV 40657: In Non-POSIX mode, a pattern rule is created

run_make_test(undef,
              'X=1 foo.biz', "#MAKEFILE#:7: $prewarn\nmake foo.biz from foo.baz\n");

# SV 40657: ... but any prerequisites are ignored

utouch(-10, 'foo.biz');
touch('foo.bar');

run_make_test(undef,
              'X=1 foo.biz', "#MAKEFILE#:7: $prewarn\n#MAKE#: 'foo.biz' is up to date.\n");

unlink('foo.baz', 'foo.biz', 'foo.bar');


touch('hello.c');
unlink('hello.o');

# sv 63821.
# Default suffix rule .c.o.

run_make_test('all: hello.o', 'COMPILE.c=@echo OUTPUT_OPTION=', 'hello.c');

# User defined rules beat built-in rules.

run_make_test(q!
all: hello.o
.c.o:; $(info $@ user defined .c.o rule)
!, '', "hello.o user defined .c.o rule\n#MAKE#: Nothing to be done for 'all'.\n");

# sv 63821.
# The same as above, but suffixes are cleared.

run_make_test(q!
all: hello.o
.SUFFIXES:
.c.o:; $(info $@ user defined .c.o rule)
!, '', "#MAKE#: *** No rule to make target 'hello.o', needed by 'all'.  Stop.\n", 512);

# sv 63821.
# Suffixes are cleared and defined in the makefile.

run_make_test(q!
all: hello.o
.SUFFIXES:
.SUFFIXES: .c .o
.c.o:; $(info $@ user defined .c.o rule)
!, '', "hello.o user defined .c.o rule\n#MAKE#: Nothing to be done for 'all'.\n");

# sv 63821.
# When built-in rules are disabled, but certain suffixes are added to
# .SUFFIXES, make should exit with the 'No rule...' error message.

run_make_test(q!
.SUFFIXES: .c .o
all: hello.o
!, '-r', "#MAKE#: *** No rule to make target 'hello.o', needed by 'all'.  Stop.\n", 512);

# sv 63821.
# Same as above, but this time built-in rules are disabled inside the makefile.

run_make_test(q!
MAKEFLAGS += -r
.SUFFIXES: .c .o
all: hello.o
!, '', "#MAKE#: *** No rule to make target 'hello.o', needed by 'all'.  Stop.\n", 512);

# sv 63821.
# Same as above, but this time there is a rule.

run_make_test(q!
all: hello.o
MAKEFLAGS += -r
.SUFFIXES: .c .o
.c.o:; $(info $@ user defined .c.o rule)
!, '', "hello.o user defined .c.o rule\n#MAKE#: Nothing to be done for 'all'.\n");

unlink('hello.c', 'hello.o');

# sv 65324.
# Crash in disable_builtins.
run_make_test(q!
all:;
!, '-r MAKEFLAGS=', "#MAKE#: 'all' is up to date.\n");


# Complete
1;
