mirror of
https://github.com/mirror/make.git
synced 2026-08-30 11:18:08 +08:00
[SV 63821] Don't set up default suffix rules if makefile sets -r
When built-in rules are disabled by adding -r to MAKEFLAGS in the makefile, don't add suffix rules at all so that if suffixes are added back via .SUFFIXES, the rules are still not there. * src/main.c (main): Set default suffix rules after parsing makefiles. * src/default.c (install_default_suffix_rules): Install a default suffix rule only if there is no user defined rule. * tests/scripts/features/suffixrules: Add tests.
This commit is contained in:
committed by
Paul Smith
parent
f5dc17ac2d
commit
e9dd614d73
@@ -95,5 +95,70 @@ run_make_test(undef,
|
||||
|
||||
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');
|
||||
|
||||
# Complete
|
||||
1;
|
||||
|
||||
Reference in New Issue
Block a user