Training courses

Kernel and Embedded Linux

Bootlin training courses

Embedded Linux, kernel,
Yocto Project, Buildroot, real-time,
graphics, boot time, debugging...

Bootlin logo

Elixir Cross Referencer

#                                                                    -*-perl-*-
$description = "Test handling of static pattern rules.";

$details = "\
The makefile created in this test has three targets.  The
filter command is used to get those target names ending in
.o and statically creates a compile command with the target
name and the target name with .c.  It also does the same thing
for another target filtered with .elc and creates a command
to emacs a .el file";

&touch('bar.c', 'lose.c');

#   TEST #0
#   -------

run_make_test('
files = foo.elc bar.o lose.o

$(filter %.o,$(files)): %.o: %.c ; @echo CC -c $(CFLAGS) $< -o $@

$(filter %.elc,$(files)): %.elc: %.el ; @echo emacs $<
',
              '',
              'CC -c bar.c -o bar.o');

#  TEST #1
#  -------

run_make_test(undef, 'lose.o', 'CC -c lose.c -o lose.o');


#   TEST #2
#   -------
&touch("foo.el");

run_make_test(undef, 'foo.elc', 'emacs foo.el');

# Clean up after the first tests.
unlink('foo.el', 'bar.c', 'lose.c');


# TEST #3 -- PR/1670: don't core dump on invalid static pattern rules
# -------

run_make_test('
.DEFAULT: ; @echo $@
foo: foo%: % %.x % % % y.% % ; @echo $@
',
              '', ".x\ny.\nfoo");


# TEST #4 -- bug #12180: core dump on a stat pattern rule with an empty
#                        prerequisite list.
run_make_test('
foo.x bar.x: %.x : ; @echo $@

',
              '', 'foo.x');


# TEST #5 -- bug #13881: double colon static pattern rule does not
#                        substitute %.
run_make_test('
foo.bar:: %.bar: %.baz
foo.baz: ;@:
',
              '', '');


# TEST #6: make sure the second stem does not overwrite the first
#          perprerequisite's stem (Savannah bug #16053).
#
run_make_test('
all.foo.bar: %.foo.bar: %.one

all.foo.bar: %.bar: %.two

all.foo.bar:
	@echo $*
	@echo $^

.DEFAULT:;@:
',
'',
'all.foo
all.one all.foo.two');


# TEST #7: make sure the second stem does not overwrite the first
#          perprerequisite's stem when second expansion is enabled
#          (Savannah bug #16053).
#
run_make_test('
.SECONDEXPANSION:

all.foo.bar: %.foo.bar: %.one $$*-one

all.foo.bar: %.bar: %.two $$*-two

all.foo.bar:
	@echo $*
	@echo $^

.DEFAULT:;@:
',
'',
'all.foo
all.one all-one all.foo.two all.foo-two');

1;