Module Name: src
Committed By: sjg
Date: Tue Jun 25 00:20:54 UTC 2013
Modified Files:
src/usr.bin/make: make.1 meta.c
Log Message:
Add .MAKE.META.IGNORE_PATHS to facilitate local additions to the paths
which should be ignored by meta_oodate().
To generate a diff of this commit:
cvs rdiff -u -r1.215 -r1.216 src/usr.bin/make/make.1
cvs rdiff -u -r1.31 -r1.32 src/usr.bin/make/meta.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/usr.bin/make/make.1
diff -u src/usr.bin/make/make.1:1.215 src/usr.bin/make/make.1:1.216
--- src/usr.bin/make/make.1:1.215 Wed May 22 19:35:11 2013
+++ src/usr.bin/make/make.1 Tue Jun 25 00:20:54 2013
@@ -1,4 +1,4 @@
-.\" $NetBSD: make.1,v 1.215 2013/05/22 19:35:11 christos Exp $
+.\" $NetBSD: make.1,v 1.216 2013/06/25 00:20:54 sjg Exp $
.\"
.\" Copyright (c) 1990, 1993
.\" The Regents of the University of California. All rights reserved.
@@ -29,7 +29,7 @@
.\"
.\" from: @(#)make.1 8.4 (Berkeley) 3/19/94
.\"
-.Dd May 22, 2013
+.Dd June 24, 2013
.Dt MAKE 1
.Os
.Sh NAME
@@ -856,6 +856,11 @@ In "meta" mode, this variable contains a
used (updated or not).
This list can be used to process the meta files to extract dependency
information.
+.It Va .MAKE.META.IGNORE_PATHS
+Provides a list of path prefixes that should be ignored;
+because the contents are expected to change over time.
+The default list includes:
+.Ql Pa /dev /etc /proc /tmp /var/run /var/tmp
.It Va .MAKE.META.PREFIX
Defines the message printed for each meta file updated in "meta verbose" mode.
The default value is:
Index: src/usr.bin/make/meta.c
diff -u src/usr.bin/make/meta.c:1.31 src/usr.bin/make/meta.c:1.32
--- src/usr.bin/make/meta.c:1.31 Mon Jun 24 21:16:02 2013
+++ src/usr.bin/make/meta.c Tue Jun 25 00:20:54 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: meta.c,v 1.31 2013/06/24 21:16:02 sjg Exp $ */
+/* $NetBSD: meta.c,v 1.32 2013/06/25 00:20:54 sjg Exp $ */
/*
* Implement 'meta' mode.
@@ -55,7 +55,12 @@
#endif
static BuildMon Mybm; /* for compat */
-static Lst metaBailiwick; /* our scope of control */
+static Lst metaBailiwick; /* our scope of control */
+static Lst metaIgnorePaths; /* paths we deliberately ignore */
+
+#ifndef MAKE_META_IGNORE_PATHS
+#define MAKE_META_IGNORE_PATHS ".MAKE.META.IGNORE_PATHS"
+#endif
Boolean useMeta = FALSE;
static Boolean useFilemon = FALSE;
@@ -607,6 +612,17 @@ meta_mode_init(const char *make_mode)
if (cp) {
str2Lst_Append(metaBailiwick, cp, NULL);
}
+ /*
+ * We ignore any paths that start with ${.MAKE.META.IGNORE_PATHS}
+ */
+ metaIgnorePaths = Lst_Init(FALSE);
+ Var_Append(MAKE_META_IGNORE_PATHS,
+ "/dev /etc /proc /tmp /var/run /var/tmp ${TMPDIR}", VAR_GLOBAL);
+ cp = Var_Subst(NULL,
+ "${" MAKE_META_IGNORE_PATHS ":O:u:tA}", VAR_GLOBAL, 0);
+ if (cp) {
+ str2Lst_Append(metaIgnorePaths, cp, NULL);
+ }
}
/*
@@ -1110,24 +1126,15 @@ meta_oodate(GNode *gn, Boolean oodate)
* be part of the dependencies because
* they are _expected_ to change.
*/
- if (strncmp(p, "/tmp/", 5) == 0 ||
- (tmplen > 0 && strncmp(p, tmpdir, tmplen) == 0))
- break;
-
- if (strncmp(p, "/var/", 5) == 0)
- break;
-
- /* Ignore device files. */
- if (strncmp(p, "/dev/", 5) == 0)
- break;
-
- /* Ignore /etc/ files. */
- if (strncmp(p, "/etc/", 5) == 0)
- break;
-
- /* Ignore /proc/ too. */
- if (strncmp(p, "/proc/", 6) == 0)
+ if (*p == '/' &&
+ Lst_ForEach(metaIgnorePaths, prefix_match, p)) {
+#ifdef DEBUG_META_MODE
+ if (DEBUG(META))
+ fprintf(debug_file, "meta_oodate: ignoring: %s\n",
+ p);
+#endif
break;
+ }
if ((cp = strrchr(p, '/'))) {
cp++;