Module Name: src Committed By: sjg Date: Mon Aug 15 19:20:17 UTC 2016
Modified Files: src/usr.bin/make: make.1 meta.c Log Message: Add .MAKE.META.IGNORE_FILTER to allow more complicated filtering of filemon data. The filter is applied to paths Read or Excuted, and if it expands to nothing, the entry is skipped. For example; dirdeps.mk can set this to: .MAKE.META.IGNORE_FILTER = M*/${.MAKE.DEPENDFILE_PREFIX}* when checking if DIRDEPS_CACHE is up to date, where only Makefile.depend* are of interest. To generate a diff of this commit: cvs rdiff -u -r1.260 -r1.261 src/usr.bin/make/make.1 cvs rdiff -u -r1.65 -r1.66 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.260 src/usr.bin/make/make.1:1.261 --- src/usr.bin/make/make.1:1.260 Wed Aug 10 23:49:12 2016 +++ src/usr.bin/make/make.1 Mon Aug 15 19:20:17 2016 @@ -1,4 +1,4 @@ -.\" $NetBSD: make.1,v 1.260 2016/08/10 23:49:12 sjg Exp $ +.\" $NetBSD: make.1,v 1.261 2016/08/15 19:20:17 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 August 10, 2016 +.Dd August 15, 2016 .Dt MAKE 1 .Os .Sh NAME @@ -927,6 +927,9 @@ The default list includes: .It Va .MAKE.META.IGNORE_PATTERNS Provides a list of patterns to match against pathnames. Ignore any that match. +.It Va .MAKE.META.IGNORE_FILTER +Provides a list of variable modifiers to apply to each pathname. +Ignore if the expansion is an empty string. .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.65 src/usr.bin/make/meta.c:1.66 --- src/usr.bin/make/meta.c:1.65 Wed Aug 10 18:49:40 2016 +++ src/usr.bin/make/meta.c Mon Aug 15 19:20:17 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: meta.c,v 1.65 2016/08/10 18:49:40 sjg Exp $ */ +/* $NetBSD: meta.c,v 1.66 2016/08/15 19:20:17 sjg Exp $ */ /* * Implement 'meta' mode. @@ -65,6 +65,9 @@ static char *metaIgnorePathsStr; /* stri #ifndef MAKE_META_IGNORE_PATTERNS #define MAKE_META_IGNORE_PATTERNS ".MAKE.META.IGNORE_PATTERNS" #endif +#ifndef MAKE_META_IGNORE_FILTER +#define MAKE_META_IGNORE_FILTER ".MAKE.META.IGNORE_FILTER" +#endif Boolean useMeta = FALSE; static Boolean useFilemon = FALSE; @@ -75,6 +78,7 @@ static Boolean metaEnv = FALSE; /* don' static Boolean metaVerbose = FALSE; static Boolean metaIgnoreCMDs = FALSE; /* ignore CMDs in .meta files */ static Boolean metaIgnorePatterns = FALSE; /* do we need to do pattern matches */ +static Boolean metaIgnoreFilter = FALSE; /* do we have more complex filtering? */ static Boolean metaCurdirOk = FALSE; /* write .meta in .CURDIR Ok? */ static Boolean metaSilent = FALSE; /* if we have a .meta be SILENT */ @@ -641,6 +645,11 @@ meta_mode_init(const char *make_mode) metaIgnorePatterns = TRUE; free(cp); } + cp = NULL; + if (Var_Value(MAKE_META_IGNORE_FILTER, VAR_GLOBAL, &cp)) { + metaIgnoreFilter = TRUE; + free(cp); + } } /* @@ -1320,6 +1329,26 @@ meta_oodate(GNode *gn, Boolean oodate) free(pm); } + if (metaIgnoreFilter) { + char *fm; + + /* skip if filter result is empty */ + snprintf(fname1, sizeof(fname1), + "${%s:L:${%s:ts:}}", + p, MAKE_META_IGNORE_FILTER); + fm = Var_Subst(NULL, fname1, gn, VARF_WANTRES); + if (*fm == '\0') { +#ifdef DEBUG_META_MODE + if (DEBUG(META)) + fprintf(debug_file, "meta_oodate: ignoring filtered: %s\n", + p); +#endif + free(fm); + break; + } + free(fm); + } + /* * The rest of the record is the file name. * Check if it's not an absolute path.