Date: Thu, 9 Oct 1997 16:47:47 +0200 (CEST) From: Martin Kammerhofer <dada@sbox.tu-graz.ac.at> To: FreeBSD-gnats-submit@FreeBSD.ORG Subject: bin/4736: Bugs in /usr/share/mk/bsd.*.mk bsd-make include files Message-ID: <199710091447.QAA07975@lend.tu-graz.ac.at> Resent-Message-ID: <199710091500.IAA05117@hub.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 4736
>Category: bin
>Synopsis: Bugs in /usr/share/mk/bsd.*.mk bsd-make include files
>Confidential: no
>Severity: non-critical
>Priority: medium
>Responsible: freebsd-bugs
>State: open
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Thu Oct 9 08:00:01 PDT 1997
>Last-Modified:
>Originator: Martin Kammerhofer
>Organization:
Graz University of Technology
>Release: FreeBSD 2.2.2-RELEASE i386
>Environment:
probably all BSDs, for sure in FreeBSD 2.2.2
>Description:
There are make rules wich are intended to define default rules
for undefined targets, i.e targets never occuring on the left
side of a dependency.
E.g. from bsd.subdir.mk:
.for __target in all checkdpadd clean cleandir depend lint \
maninstall obj objlink
.if !target(__target)
${__target}: _SUBDIRUSE
.endif
.endfor
These do not work as intended because ``__target'' is taken
literally. It should - of course - read:
.if !target(${__target})
As a consequence these default rules are added *unconditionally*
(except for the case where someone has explicitely defined
a ``__target'' target, in which case no rule at all would get
added).
There are at least three of these bugs:
<ttyp4 /src/share/mk>fgrep -n target\(_ *
bsd.port.subdir.mk:51:.if !target(__target)
bsd.sgml.mk:152:.if !target(__target)
bsd.subdir.mk:31:.if !target(__target)
>How-To-Repeat:
<ttyp4 /var/tmp>cat Makefile
SUBDIR = nosuchsubdir
all:
@echo "This rule won't fall over after fixing this bug"
clean: _SUBDIRUSE
@echo "This is expected to fail"
.include <bsd.subdir.mk>
<ttyp4 /var/tmp>make
This rule won't fall over after fixing this bug
===> nosuchsubdir
cd: can't cd to /var/tmp/nosuchsubdir
*** Error code 2
Stop.
<ttyp4 /var/tmp>
>Fix:
substitute ``target(${__target})'' for ``target(__target)''
Note: Since this affects all makes it could theoretically break
existing Makefiles if they relied on this bug.
If you want the default rules added, you have to specify
a ``_SUBDIRUSE'' dependency like in ``clean'' above.
>Audit-Trail:
>Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199710091447.QAA07975>
