OpenBSD "make" does not correctly apply single-suffix inference rules
to paths containing slashes. Double-suffix inference rules work
correctly in this situation. Here's a little demonstration, starting
with a double-suffix inference rule and a sub-directory:
$ mkdir a
$ touch a/foo.abc
$ cat > Makefile
.SUFFIXES: .abc .xyz
a/foo.xyz: a/foo.abc
.abc.xyz:
cp $< $@
^D
$ make
cp a/foo.abc a/foo.xyz
$
The inference rule was correctly applied to the a/foo.xyz target. So
far so good. Next, a single-suffix inference rule without a directory:
$ touch bar.abc
$ cat > Makefile
.SUFFIXES: .abc
bar: bar.abc
.abc:
cp $< $@
^D
$ make
cp bar.abc bar
$
Also correct. But now apply the same situation to a sub-directory:
$ mkdir b
$ touch b/baz.abc
$ cat > Makefile
.SUFFIXES: .abc
b/baz: b/baz.abc
.abc:
cp $< $@
^D
$ make
$
The inference rule does not fire and nothing is built. It looks like
this bug has been fixed, probably by accident, in other forks of bmake,
such as in FreeBSD (which works correctly for all three examples).