Subject: bin/5204: There's no (safe) way to add files into the 'make depend' mix.
To: None <gnats-bugs@gnats.netbsd.org>
From: None <cgd@NetBSD.ORG>
List: netbsd-bugs
Date: 03/25/1998 22:33:20
>Number: 5204
>Category: bin
>Synopsis: There's no (safe) way to add files into the 'make depend' mix.
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: bin-bug-people (Utility Bug People)
>State: open
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Wed Mar 25 22:35:00 1998
>Last-Modified:
>Originator: Chris G. Demetriou
>Organization:
Kernel Hackers 'r' Us
>Release: NetBSD-current as of Wed Mar 25 22:08:36 PST 1998
>Environment:
System: NetBSD brick.int.demetriou.com 1.3E NetBSD 1.3E (BRICK) #47: Sun Mar 22 15:13:37 PST 1998 cgd@brick.int.demetriou.com:/usr/src/sys/arch/i386/compile/BRICK i386
>Description:
Some users of the system .mk templates want to be able to add
files into the list of files for which dependencies are generated
when 'make depend' is run. There's currently no "good" way to do
that. The contents of ${SRCS} and ${DPSRCS} are fed to mkdep,
but each of those variables has problems: ${SRCS} is used to
create the list of objects used to build the main target for
the directory, and ${DPSRCS} are removed when 'make clean' is
done.
An example of a use where you'd want to get a file run through
mkdep is lint stubs for libraries' assembly functions. They're
static source files (aren't generated, shouldn't be removed),
but you _do_ want dependencies generated for them. (It's
infeasible to hard-code those dependencies in the Makefiles that
cause the files to be used, because the set of MD headers they
use may change, etc., and having to modify the Makefiles in
that case is a maintenance nightmare.)
Intuitively, I thought that "DPSRCS" was the right variable to
use (DPSRCS read as "additional sources to mkdep" to me), but
then i noticed the cleaning behaviour.
Some current users of DPSRCS are want the cleaning behaviour.
However, some don't (e.g. libc, libposix). The latter set can
get by with the current behaviour, because of the way their
directory structures are set up, but that's fragile and not
particularly safe.
>How-To-Repeat:
Find a need to get dependencies made for a file, without
wanting that file to be removed when cleaning.
Try to do that with the standard make templates.
Lose.
>Fix:
Add a variable that does the right thing. I think DPSRCS is
the right name for the variable which adds things to the list
to be mkdep'd but which _don't_ get removed when cleaning.
I'd suggest adding a MAKEDPSRCS variable which gets fed to
mkdep, and replace the uses of DPSRCS in ksh and tn3270
with uses of MAKEDPSRCS. Additionally, the lines in
bsd.kmod.mk, bsd.lib.mk and bsd.prog.mk which set DPSRCS
from .l and .y files in SRCS, which make the
directories' main targets depend on DPSRCS, and which
cause DPSRCS to be removed when cleaning should be changed
to modify, use, and clean MAKEDPSRCS instead.
>Audit-Trail:
>Unformatted: