summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon J. Gerraty <sjg@FreeBSD.org>2016-09-08 23:49:33 +0000
committerSimon J. Gerraty <sjg@FreeBSD.org>2016-09-08 23:49:33 +0000
commitcdfa59c89c7a4274fa9ef8ce13af86fc68d6f47e (patch)
tree51660867e28adadc777f16ecd32b9e92468a964f
parente6b08231c85258b2333fb56db71683be756f8b51 (diff)
downloadsrc-test2-cdfa59c89c7a4274fa9ef8ce13af86fc68d6f47e.tar.gz
src-test2-cdfa59c89c7a4274fa9ef8ce13af86fc68d6f47e.zip
Import bmake-20160818vendor/NetBSD/bmake/20160818
Interesting changes: o meta.c: move handling of .MAKE.META.IGNORE_* to meta_ignore() so we can call it before adding entries to missingFiles. Thus we do not track files we have been told to ignore. o meta_oodate: apply .MAKE.META.IGNORE_FILTER (if defined) to pathnames, and skip if the expansion is empty. Useful for dirdeps.mk when checking DIRDEPS_CACHE. o meta.c: remove all missingFiles entries that match a deleted dir. o main.c: set .ERROR_CMD if possible.
Notes
Notes: svn path=/vendor/NetBSD/bmake/dist/; revision=305631 svn path=/vendor/NetBSD/bmake/20160818/; revision=305632; tag=vendor/NetBSD/bmake/20160818
-rw-r--r--ChangeLog29
-rw-r--r--Makefile4
-rw-r--r--bmake.121
-rw-r--r--bmake.cat117
-rw-r--r--main.c21
-rw-r--r--make.121
-rw-r--r--meta.c158
-rw-r--r--mk/ChangeLog31
-rw-r--r--mk/dirdeps.mk55
-rw-r--r--mk/install-mk4
-rw-r--r--mk/lib.mk3
-rw-r--r--mk/meta.sys.mk15
-rw-r--r--mk/prog.mk3
-rwxr-xr-xos.sh7
-rw-r--r--suff.c44
15 files changed, 329 insertions, 104 deletions
diff --git a/ChangeLog b/ChangeLog
index deee9bf7b505..731d9393e26e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,32 @@
+2016-08-18 Simon J. Gerraty <sjg@bad.crufty.net>
+
+ * Makefile (_MAKE_VERSION): 20160818
+ its a neater number; pick up whitespace fixes to man page.
+
+2016-08-17 Simon J. Gerraty <sjg@bad.crufty.net>
+
+ * Makefile (_MAKE_VERSION): 20160817
+ Merge with NetBSD make, pick up
+ o meta.c: move handling of .MAKE.META.IGNORE_* to meta_ignore()
+ so we can call it before adding entries to missingFiles.
+ Thus we do not track files we have been told to ignore.
+
+2016-08-15 Simon J. Gerraty <sjg@bad.crufty.net>
+
+ * Makefile (_MAKE_VERSION): 20160815
+ Merge with NetBSD make, pick up
+ o meta_oodate: apply .MAKE.META.IGNORE_FILTER (if defined) to
+ pathnames, and skip if the expansion is empty.
+ Useful for dirdeps.mk when checking DIRDEPS_CACHE.
+
+2016-08-12 Simon J. Gerraty <sjg@bad.crufty.net>
+
+ * Makefile (_MAKE_VERSION): 20160812
+ Merge with NetBSD make, pick up
+ o meta.c: remove all missingFiles entries that match a deleted
+ dir.
+ o main.c: set .ERROR_CMD if possible.
+
2016-06-06 Simon J. Gerraty <sjg@bad.crufty.net>
* Makefile (_MAKE_VERSION): 20160606
diff --git a/Makefile b/Makefile
index 9c63e4fc0748..fbb9b0a6c943 100644
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,7 @@
-# $Id: Makefile,v 1.67 2016/06/07 00:46:12 sjg Exp $
+# $Id: Makefile,v 1.72 2016/08/18 23:02:26 sjg Exp $
# Base version on src date
-_MAKE_VERSION= 20160606
+_MAKE_VERSION= 20160818
PROG= bmake
diff --git a/bmake.1 b/bmake.1
index 93cf7acf12ea..4ea8dee773f9 100644
--- a/bmake.1
+++ b/bmake.1
@@ -1,4 +1,4 @@
-.\" $NetBSD: make.1,v 1.259 2016/06/03 07:07:37 wiz Exp $
+.\" $NetBSD: make.1,v 1.262 2016/08/18 19:23:20 wiz 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 June 2, 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:
@@ -974,7 +977,19 @@ per normal evaluation rules.
.It Va MAKE_PRINT_VAR_ON_ERROR
When
.Nm
-stops due to an error, it prints its name and the value of
+stops due to an error, it sets
+.Ql Va .ERROR_TARGET
+to the name of the target that failed,
+.Ql Va .ERROR_CMD
+to the commands of the failed target,
+and in "meta" mode, it also sets
+.Ql Va .ERROR_CWD
+to the
+.Xr getcwd 3 ,
+and
+.Ql Va .ERROR_META_FILE
+to the path of the meta file (if any) describing the failed target.
+It then prints its name and the value of
.Ql Va .CURDIR
as well as the value of any variables named in
.Ql Va MAKE_PRINT_VAR_ON_ERROR .
diff --git a/bmake.cat1 b/bmake.cat1
index 51e02f4b6509..5e5622c0d9cb 100644
--- a/bmake.cat1
+++ b/bmake.cat1
@@ -604,6 +604,10 @@ VVAARRIIAABBLLEE AASSSSIIGGNNMMEENNTTSS
Provides a list of patterns to match against pathnames.
Ignore any that match.
+ _._M_A_K_E_._M_E_T_A_._I_G_N_O_R_E___F_I_L_T_E_R
+ Provides a list of variable modifiers to apply to each
+ pathname. Ignore if the expansion is an empty string.
+
_._M_A_K_E_._M_E_T_A_._P_R_E_F_I_X
Defines the message printed for each meta file updated in
"meta verbose" mode. The default value is:
@@ -635,9 +639,14 @@ VVAARRIIAABBLLEE AASSSSIIGGNNMMEENNTTSS
becomes `$' per normal evaluation rules.
_M_A_K_E___P_R_I_N_T___V_A_R___O_N___E_R_R_O_R
- When bbmmaakkee stops due to an error, it prints its name and
- the value of `_._C_U_R_D_I_R' as well as the value of any vari-
- ables named in `_M_A_K_E___P_R_I_N_T___V_A_R___O_N___E_R_R_O_R'.
+ When bbmmaakkee stops due to an error, it sets `_._E_R_R_O_R___T_A_R_G_E_T'
+ to the name of the target that failed, `_._E_R_R_O_R___C_M_D' to
+ the commands of the failed target, and in "meta" mode, it
+ also sets `_._E_R_R_O_R___C_W_D' to the getcwd(3), and
+ `_._E_R_R_O_R___M_E_T_A___F_I_L_E' to the path of the meta file (if any)
+ describing the failed target. It then prints its name
+ and the value of `_._C_U_R_D_I_R' as well as the value of any
+ variables named in `_M_A_K_E___P_R_I_N_T___V_A_R___O_N___E_R_R_O_R'.
_._n_e_w_l_i_n_e This variable is simply assigned a newline character as
its value. This allows expansions using the ::@@ modifier
@@ -1489,4 +1498,4 @@ BBUUGGSS
There is no way of escaping a space character in a filename.
-NetBSD 5.1 June 2, 2016 NetBSD 5.1
+NetBSD 5.1 August 15, 2016 NetBSD 5.1
diff --git a/main.c b/main.c
index 20aa9c94d6fa..ff786fbcff05 100644
--- a/main.c
+++ b/main.c
@@ -1,4 +1,4 @@
-/* $NetBSD: main.c,v 1.247 2016/06/05 01:39:17 christos Exp $ */
+/* $NetBSD: main.c,v 1.250 2016/08/11 19:53:17 sjg Exp $ */
/*
* Copyright (c) 1988, 1989, 1990, 1993
@@ -69,7 +69,7 @@
*/
#ifndef MAKE_NATIVE
-static char rcsid[] = "$NetBSD: main.c,v 1.247 2016/06/05 01:39:17 christos Exp $";
+static char rcsid[] = "$NetBSD: main.c,v 1.250 2016/08/11 19:53:17 sjg Exp $";
#else
#include <sys/cdefs.h>
#ifndef lint
@@ -81,7 +81,7 @@ __COPYRIGHT("@(#) Copyright (c) 1988, 1989, 1990, 1993\
#if 0
static char sccsid[] = "@(#)main.c 8.3 (Berkeley) 3/19/94";
#else
-__RCSID("$NetBSD: main.c,v 1.247 2016/06/05 01:39:17 christos Exp $");
+__RCSID("$NetBSD: main.c,v 1.250 2016/08/11 19:53:17 sjg Exp $");
#endif
#endif /* not lint */
#endif
@@ -1903,11 +1903,10 @@ cached_realpath(const char *pathname, char *resolved)
#endif
}
- rp = Var_Value(pathname, cache, &cp);
- if (rp) {
+ if ((rp = Var_Value(pathname, cache, &cp)) != NULL) {
/* a hit */
strlcpy(resolved, rp, MAXPATHLEN);
- } else if ((rp = realpath(pathname, resolved))) {
+ } else if ((rp = realpath(pathname, resolved)) != NULL) {
Var_Set(pathname, rp, cache, 0);
}
free(cp);
@@ -1922,6 +1921,14 @@ PrintAddr(void *a, void *b)
}
+static int
+addErrorCMD(void *cmdp, void *gnp)
+{
+ if (cmdp == NULL)
+ return 1; /* stop */
+ Var_Append(".ERROR_CMD", cmdp, VAR_GLOBAL);
+ return 0;
+}
void
PrintOnError(GNode *gn, const char *s)
@@ -1942,6 +1949,8 @@ PrintOnError(GNode *gn, const char *s)
* We can print this even if there is no .ERROR target.
*/
Var_Set(".ERROR_TARGET", gn->name, VAR_GLOBAL, 0);
+ Var_Delete(".ERROR_CMD", VAR_GLOBAL);
+ Lst_ForEach(gn->commands, addErrorCMD, gn);
}
strncpy(tmp, "${MAKE_PRINT_VAR_ON_ERROR:@v@$v='${$v}'\n@}",
sizeof(tmp) - 1);
diff --git a/make.1 b/make.1
index bdfdcda2fb30..fb3333c4f837 100644
--- a/make.1
+++ b/make.1
@@ -1,4 +1,4 @@
-.\" $NetBSD: make.1,v 1.259 2016/06/03 07:07:37 wiz Exp $
+.\" $NetBSD: make.1,v 1.262 2016/08/18 19:23:20 wiz 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 June 2, 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:
@@ -974,7 +977,19 @@ per normal evaluation rules.
.It Va MAKE_PRINT_VAR_ON_ERROR
When
.Nm
-stops due to an error, it prints its name and the value of
+stops due to an error, it sets
+.Ql Va .ERROR_TARGET
+to the name of the target that failed,
+.Ql Va .ERROR_CMD
+to the commands of the failed target,
+and in "meta" mode, it also sets
+.Ql Va .ERROR_CWD
+to the
+.Xr getcwd 3 ,
+and
+.Ql Va .ERROR_META_FILE
+to the path of the meta file (if any) describing the failed target.
+It then prints its name and the value of
.Ql Va .CURDIR
as well as the value of any variables named in
.Ql Va MAKE_PRINT_VAR_ON_ERROR .
diff --git a/meta.c b/meta.c
index dcd396d0d2dd..0ea41f643f3a 100644
--- a/meta.c
+++ b/meta.c
@@ -1,4 +1,4 @@
-/* $NetBSD: meta.c,v 1.61 2016/06/07 00:40:00 sjg Exp $ */
+/* $NetBSD: meta.c,v 1.67 2016/08/17 15:52:42 sjg Exp $ */
/*
* Implement 'meta' mode.
@@ -69,6 +69,9 @@ static char *metaIgnorePathsStr; /* string storage for the list */
#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;
@@ -79,6 +82,7 @@ static Boolean metaEnv = FALSE; /* don't save env unless asked */
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 */
@@ -645,6 +649,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);
+ }
}
/*
@@ -869,6 +878,7 @@ fgetLine(char **bufp, size_t *szp, int o, FILE *fp)
return 0;
}
+/* Lst_ForEach wants 1 to stop search */
static int
prefix_match(void *p, void *q)
{
@@ -879,6 +889,32 @@ prefix_match(void *p, void *q)
return (0 == strncmp(path, prefix, n));
}
+/*
+ * looking for exact or prefix/ match to
+ * Lst_Find wants 0 to stop search
+ */
+static int
+path_match(const void *p, const void *q)
+{
+ const char *prefix = q;
+ const char *path = p;
+ size_t n = strlen(prefix);
+ int rc;
+
+ if ((rc = strncmp(path, prefix, n)) == 0) {
+ switch (path[n]) {
+ case '\0':
+ case '/':
+ break;
+ default:
+ rc = 1;
+ break;
+ }
+ }
+ return rc;
+}
+
+/* Lst_Find wants 0 to stop search */
static int
string_match(const void *p, const void *q)
{
@@ -889,6 +925,67 @@ string_match(const void *p, const void *q)
}
+static int
+meta_ignore(GNode *gn, const char *p)
+{
+ char fname[MAXPATHLEN];
+
+ if (p == NULL)
+ return TRUE;
+
+ if (*p == '/') {
+ cached_realpath(p, fname); /* clean it up */
+ if (Lst_ForEach(metaIgnorePaths, prefix_match, fname)) {
+#ifdef DEBUG_META_MODE
+ if (DEBUG(META))
+ fprintf(debug_file, "meta_oodate: ignoring path: %s\n",
+ p);
+#endif
+ return TRUE;
+ }
+ }
+
+ if (metaIgnorePatterns) {
+ char *pm;
+
+ snprintf(fname, sizeof(fname),
+ "${%s:@m@${%s:L:M$m}@}",
+ MAKE_META_IGNORE_PATTERNS, p);
+ pm = Var_Subst(NULL, fname, gn, VARF_WANTRES);
+ if (*pm) {
+#ifdef DEBUG_META_MODE
+ if (DEBUG(META))
+ fprintf(debug_file, "meta_oodate: ignoring pattern: %s\n",
+ p);
+#endif
+ free(pm);
+ return TRUE;
+ }
+ free(pm);
+ }
+
+ if (metaIgnoreFilter) {
+ char *fm;
+
+ /* skip if filter result is empty */
+ snprintf(fname, sizeof(fname),
+ "${%s:L:${%s:ts:}}",
+ p, MAKE_META_IGNORE_FILTER);
+ fm = Var_Subst(NULL, fname, 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);
+ return TRUE;
+ }
+ free(fm);
+ }
+ return FALSE;
+}
+
/*
* When running with 'meta' functionality, a target can be out-of-date
* if any of the references in its meta data file is more recent.
@@ -1170,12 +1267,19 @@ meta_oodate(GNode *gn, Boolean oodate)
/* FALLTHROUGH */
case 'D': /* unlink */
if (*p == '/' && !Lst_IsEmpty(missingFiles)) {
- /* remove p from the missingFiles list if present */
- if ((ln = Lst_Find(missingFiles, p, string_match)) != NULL) {
- char *tp = Lst_Datum(ln);
- Lst_Remove(missingFiles, ln);
- free(tp);
- ln = NULL; /* we're done with it */
+ /* remove any missingFiles entries that match p */
+ if ((ln = Lst_Find(missingFiles, p,
+ path_match)) != NULL) {
+ LstNode nln;
+ char *tp;
+
+ do {
+ nln = Lst_FindFrom(missingFiles, Lst_Succ(ln),
+ p, path_match);
+ tp = Lst_Datum(ln);
+ Lst_Remove(missingFiles, ln);
+ free(tp);
+ } while ((ln = nln) != NULL);
}
}
if (buf[0] == 'M') {
@@ -1240,8 +1344,10 @@ meta_oodate(GNode *gn, Boolean oodate)
if ((link_src != NULL && cached_lstat(p, &fs) < 0) ||
(link_src == NULL && cached_stat(p, &fs) < 0)) {
- if (Lst_Find(missingFiles, p, string_match) == NULL)
+ if (!meta_ignore(gn, p)) {
+ if (Lst_Find(missingFiles, p, string_match) == NULL)
Lst_AtEnd(missingFiles, bmake_strdup(p));
+ }
}
break;
check_link_src:
@@ -1259,37 +1365,9 @@ meta_oodate(GNode *gn, Boolean oodate)
* be part of the dependencies because
* they are _expected_ to change.
*/
- if (*p == '/') {
- cached_realpath(p, fname1); /* clean it up */
- if (Lst_ForEach(metaIgnorePaths, prefix_match, fname1)) {
-#ifdef DEBUG_META_MODE
- if (DEBUG(META))
- fprintf(debug_file, "meta_oodate: ignoring path: %s\n",
- p);
-#endif
- break;
- }
- }
-
- if (metaIgnorePatterns) {
- char *pm;
-
- snprintf(fname1, sizeof(fname1),
- "${%s:@m@${%s:L:M$m}@}",
- MAKE_META_IGNORE_PATTERNS, p);
- pm = Var_Subst(NULL, fname1, gn, VARF_WANTRES);
- if (*pm) {
-#ifdef DEBUG_META_MODE
- if (DEBUG(META))
- fprintf(debug_file, "meta_oodate: ignoring pattern: %s\n",
- p);
-#endif
- free(pm);
- break;
- }
- free(pm);
- }
-
+ if (meta_ignore(gn, p))
+ break;
+
/*
* The rest of the record is the file name.
* Check if it's not an absolute path.
@@ -1474,6 +1552,7 @@ meta_oodate(GNode *gn, Boolean oodate)
if (DEBUG(META))
fprintf(debug_file, "%s: required but missing\n", fname);
oodate = TRUE;
+ needOODATE = TRUE; /* assume the worst */
}
}
}
@@ -1546,6 +1625,7 @@ meta_compat_parent(void)
while (fgets(buf, sizeof(buf), fp)) {
meta_job_output(NULL, buf, "");
printf("%s", buf);
+ fflush(stdout);
}
fclose(fp);
}
diff --git a/mk/ChangeLog b/mk/ChangeLog
index de94df7d9aec..483928dc345b 100644
--- a/mk/ChangeLog
+++ b/mk/ChangeLog
@@ -1,3 +1,34 @@
+2016-08-15 Simon J. Gerraty <sjg@bad.crufty.net>
+
+ * install-mk (MK_VERSION): 20160815
+
+ * dirdeps.mk (.MAKE.META.IGNORE_FILTER): set filter to only
+ consider Makefile.depend* when checking if DIRDEPS_CACHE is up-to-date.
+
+2016-08-13 Simon J. Gerraty <sjg@bad.crufty.net>
+
+ * meta.sys.mk (.MAKE.META.IGNORE_PATHS):
+ in meta mode we can ignore the mtime of makefiles
+
+2016-08-02 Simon J. Gerraty <sjg@bad.crufty.net>
+
+ * install-mk (MK_VERSION): 20160802
+
+ * lib.mk (libinstall): depends on beforinstall
+
+ * prog.mk (proginstall): depends on beforinstall
+ patch from Lauri Tirkkonen
+
+ * dirdeps.mk (bootstrap): When bootstrapping; creat
+ .MAKE.DEPENDFILE_DEFAULT and allow additional filtering via
+ .MAKE.DEPENDFILE_BOOTSTRAP_SED
+
+ * dirdeps.mk: move some comments to where they make sense.
+
+2016-07-27 Simon J. Gerraty <sjg@bad.crufty.net>
+
+ * dirdeps.mk (DIRDEPS_CACHE): no dirname.
+
2016-06-02 Simon J. Gerraty <sjg@bad.crufty.net>
* install-mk (MK_VERSION): 20160602
diff --git a/mk/dirdeps.mk b/mk/dirdeps.mk
index 0e5784183fa1..5b0de3d5657a 100644
--- a/mk/dirdeps.mk
+++ b/mk/dirdeps.mk
@@ -1,4 +1,4 @@
-# $Id: dirdeps.mk,v 1.67 2016/04/18 21:50:47 sjg Exp $
+# $Id: dirdeps.mk,v 1.73 2016/08/15 19:28:13 sjg Exp $
# Copyright (c) 2010-2013, Juniper Networks, Inc.
# All rights reserved.
@@ -116,12 +116,17 @@ _DIRDEP_USE_LEVEL?= 0
.if ${.MAKE.LEVEL} == ${_DIRDEP_USE_LEVEL}
# only the first instance is interested in all this
-# First off, we want to know what ${MACHINE} to build for.
-# This can be complicated if we are using a mixture of ${MACHINE} specific
-# and non-specific Makefile.depend*
-
.if !target(_DIRDEP_USE)
+# do some setup we only need once
+_CURDIR ?= ${.CURDIR}
+_OBJDIR ?= ${.OBJDIR}
+
+now_utc = ${%s:L:gmtime}
+.if !defined(start_utc)
+start_utc := ${now_utc}
+.endif
+
.if ${MAKEFILE:T} == ${.PARSEFILE} && empty(DIRDEPS) && ${.TARGETS:Uall:M*/*} != ""
# This little trick let's us do
#
@@ -144,15 +149,6 @@ MK_DIRDEPS_CACHE = no
# make sure we get the behavior we expect
.MAKE.SAVE_DOLLARS = no
-# do some setup we only need once
-_CURDIR ?= ${.CURDIR}
-_OBJDIR ?= ${.OBJDIR}
-
-now_utc = ${%s:L:gmtime}
-.if !defined(start_utc)
-start_utc := ${now_utc}
-.endif
-
# make sure these are empty to start with
_DEP_TARGET_SPEC =
@@ -223,6 +219,10 @@ N_notmachine := ${.MAKE.DEPENDFILE_PREFERENCE:E:N*${MACHINE}*:${M_ListToSkip}}
.endif # !target(_DIRDEP_USE)
+# First off, we want to know what ${MACHINE} to build for.
+# This can be complicated if we are using a mixture of ${MACHINE} specific
+# and non-specific Makefile.depend*
+
# if we were included recursively _DEP_TARGET_SPEC should be valid.
.if empty(_DEP_TARGET_SPEC)
# we may or may not have included a dependfile yet
@@ -385,7 +385,7 @@ BUILD_DIRDEPS ?= yes
.if !defined(NO_DIRDEPS) && !defined(NO_DIRDEPS_BELOW)
.if ${MK_DIRDEPS_CACHE} == "yes"
# this is where we will cache all our work
-DIRDEPS_CACHE?= ${_OBJDIR}/dirdeps.cache${.TARGETS:Nall:O:u:ts-:S,/,_,g:S,^,.,:N.}
+DIRDEPS_CACHE?= ${_OBJDIR:tA}/dirdeps.cache${.TARGETS:Nall:O:u:ts-:S,/,_,g:S,^,.,:N.}
# just ensure this exists
build-dirdeps:
@@ -397,6 +397,9 @@ M_oneperline = @x@\\${.newline} $$x@
# we do this via sub-make
BUILD_DIRDEPS = no
+# ignore anything but these
+.MAKE.META.IGNORE_FILTER = M*/${.MAKE.DEPENDFILE_PREFIX}*
+
dirdeps: dirdeps-cached
dirdeps-cached: ${DIRDEPS_CACHE} .MAKE
@echo "${TRACER}Using ${DIRDEPS_CACHE}"
@@ -669,7 +672,10 @@ _DEP_RELDIR := ${RELDIR}
make(bootstrap-recurse) || \
make(bootstrap-empty))
-.if exists(${.CURDIR}/${.MAKE.DEPENDFILE:T})
+# if we are bootstrapping create the default
+_want = ${.CURDIR}/${.MAKE.DEPENDFILE_DEFAULT:T}
+
+.if exists(${_want})
# stop here
${.TARGETS:Mboot*}:
.elif !make(bootstrap-empty)
@@ -679,12 +685,19 @@ _src != cd ${.CURDIR} && for m in ${.MAKE.DEPENDFILE_PREFERENCE:T:S,${MACHINE},*
.error cannot find any of ${.MAKE.DEPENDFILE_PREFERENCE:T}${.newline}Use: bootstrap-empty
.endif
-_src?= ${.MAKE.DEPENDFILE:T}
+_src?= ${.MAKE.DEPENDFILE}
+
+.MAKE.DEPENDFILE_BOOTSTRAP_SED+= -e 's,${_src:E},${MACHINE},g'
# just create Makefile.depend* for this dir
bootstrap-this: .NOTMAIN
- @echo Bootstrapping ${RELDIR}/${.MAKE.DEPENDFILE:T} from ${_src:T}
- (cd ${.CURDIR} && sed 's,${_src:E},${MACHINE},g' ${_src} > ${.MAKE.DEPENDFILE:T})
+ @echo Bootstrapping ${RELDIR}/${_want:T} from ${_src:T}; \
+ echo You need to build ${RELDIR} to correctly populate it.
+.if ${_src:T} != ${.MAKE.DEPENDFILE_PREFIX:T}
+ (cd ${.CURDIR} && sed ${.MAKE.DEPENDFILE_BOOTSTRAP_SED} ${_src} > ${_want})
+.else
+ cp ${.CURDIR}/${_src} ${_want}
+.endif
# create Makefile.depend* for this dir and its dependencies
bootstrap: bootstrap-recurse
@@ -704,8 +717,8 @@ bootstrap-recurse: .NOTMAIN .MAKE
# create an empty Makefile.depend* to get the ball rolling.
bootstrap-empty: .NOTMAIN .NOMETA
- @echo Creating empty ${RELDIR}/${.MAKE.DEPENDFILE:T}; \
+ @echo Creating empty ${RELDIR}/${_want:T}; \
echo You need to build ${RELDIR} to correctly populate it.
- @{ echo DIRDEPS=; echo ".include <dirdeps.mk>"; } > ${.CURDIR}/${.MAKE.DEPENDFILE:T}
+ @{ echo DIRDEPS=; echo ".include <dirdeps.mk>"; } > ${_want}
.endif
diff --git a/mk/install-mk b/mk/install-mk
index 74b09394941c..79b35e8b6592 100644
--- a/mk/install-mk
+++ b/mk/install-mk
@@ -55,7 +55,7 @@
# Simon J. Gerraty <sjg@crufty.net>
# RCSid:
-# $Id: install-mk,v 1.128 2016/06/03 17:22:32 sjg Exp $
+# $Id: install-mk,v 1.130 2016/08/15 19:28:13 sjg Exp $
#
# @(#) Copyright (c) 1994 Simon J. Gerraty
#
@@ -70,7 +70,7 @@
# sjg@crufty.net
#
-MK_VERSION=20160602
+MK_VERSION=20160815
OWNER=
GROUP=
MODE=444
diff --git a/mk/lib.mk b/mk/lib.mk
index 23612665359f..6c25937fa9f0 100644
--- a/mk/lib.mk
+++ b/mk/lib.mk
@@ -1,4 +1,4 @@
-# $Id: lib.mk,v 1.53 2016/03/22 20:45:14 sjg Exp $
+# $Id: lib.mk,v 1.54 2016/08/02 20:52:17 sjg Exp $
.if !target(__${.PARSEFILE}__)
__${.PARSEFILE}__:
@@ -564,6 +564,7 @@ libinstall:
install: maninstall _SUBDIRUSE
maninstall: afterinstall
afterinstall: realinstall
+libinstall: beforeinstall
realinstall: beforeinstall
.endif
diff --git a/mk/meta.sys.mk b/mk/meta.sys.mk
index dde2c48575a1..47cd8f5bdcc7 100644
--- a/mk/meta.sys.mk
+++ b/mk/meta.sys.mk
@@ -1,4 +1,4 @@
-# $Id: meta.sys.mk,v 1.28 2016/04/05 15:58:37 sjg Exp $
+# $Id: meta.sys.mk,v 1.29 2016/08/13 17:51:45 sjg Exp $
#
# @(#) Copyright (c) 2010, Simon J. Gerraty
@@ -25,6 +25,10 @@
# absoulte path to what we are reading.
_PARSEDIR = ${.PARSEDIR:tA}
+.if !defined(SYS_MK_DIR)
+SYS_MK_DIR := ${_PARSEDIR}
+.endif
+
META_MODE += meta verbose
.MAKE.MODE ?= ${META_MODE}
@@ -119,6 +123,15 @@ MKDEP_MK = meta.autodep.mk
# re-running needlessly
META_COOKIE_TOUCH= touch ${COOKIE.${.TARGET}:U${.OBJDIR}/${.TARGET}}
META_NOPHONY=
+
+# some targets involve old pre-built targets
+# ignore mtime of shell
+# and mtime of makefiles does not matter in meta mode
+.MAKE.META.IGNORE_PATHS += \
+ ${MAKEFILE} \
+ ${SHELL} \
+ ${SYS_MK_DIR}
+
.if ${UPDATE_DEPENDFILE:Uyes:tl} != "no"
.if ${.MAKEFLAGS:Uno:M-k} != ""
# make this more obvious
diff --git a/mk/prog.mk b/mk/prog.mk
index db77da298066..2a4160af1422 100644
--- a/mk/prog.mk
+++ b/mk/prog.mk
@@ -1,4 +1,4 @@
-# $Id: prog.mk,v 1.26 2016/03/22 20:45:14 sjg Exp $
+# $Id: prog.mk,v 1.27 2016/08/02 20:52:17 sjg Exp $
.if !target(__${.PARSEFILE}__)
__${.PARSEFILE}__:
@@ -191,6 +191,7 @@ install_links:
maninstall: afterinstall
afterinstall: realinstall
+proginstall: beforeinstall
realinstall: beforeinstall
.endif
diff --git a/os.sh b/os.sh
index 1dd394f3837f..aba9bbdd8a80 100755
--- a/os.sh
+++ b/os.sh
@@ -17,7 +17,7 @@
# Simon J. Gerraty <sjg@crufty.net>
# RCSid:
-# $Id: os.sh,v 1.50 2015/12/17 17:06:29 sjg Exp $
+# $Id: os.sh,v 1.52 2016/06/17 05:15:14 sjg Exp $
#
# @(#) Copyright (c) 1994 Simon J. Gerraty
#
@@ -139,7 +139,7 @@ SunOS)
case $OS in
NetBSD)
HOST_ARCH=$MACHINE
- SHARE_ARCH=$OS/$HOST
+ SHARE_ARCH=$OS/$HOST_ARCH
;;
OpenBSD)
arch=`Which arch /usr/bin:/usr/ucb:$PATH`
@@ -208,7 +208,8 @@ TMP_DIRS=${TMP_DIRS:-"/tmp /var/tmp"}
MACHINE_ARCH=${MACHINE_ARCH:-$MACHINE}
HOST_ARCH=${HOST_ARCH:-$MACHINE_ARCH}
# we mount server:/share/arch/$SHARE_ARCH as /usr/local
-SHARE_ARCH=${SHARE_ARCH:-$OS/$OSMAJOR.X/$HOST_ARCH}
+SHARE_ARCH_DEFAULT=$OS/$OSMAJOR.X/$HOST_ARCH
+SHARE_ARCH=${SHARE_ARCH:-$SHARE_ARCH_DEFAULT}
LN=${LN:-ln}
TR=${TR:-tr}
diff --git a/suff.c b/suff.c
index 97f745b07e47..eb9b818d3a8c 100644
--- a/suff.c
+++ b/suff.c
@@ -1,4 +1,4 @@
-/* $NetBSD: suff.c,v 1.81 2016/03/15 18:30:14 matthias Exp $ */
+/* $NetBSD: suff.c,v 1.84 2016/06/30 05:34:04 dholland Exp $ */
/*
* Copyright (c) 1988, 1989, 1990, 1993
@@ -69,14 +69,14 @@
*/
#ifndef MAKE_NATIVE
-static char rcsid[] = "$NetBSD: suff.c,v 1.81 2016/03/15 18:30:14 matthias Exp $";
+static char rcsid[] = "$NetBSD: suff.c,v 1.84 2016/06/30 05:34:04 dholland Exp $";
#else
#include <sys/cdefs.h>
#ifndef lint
#if 0
static char sccsid[] = "@(#)suff.c 8.4 (Berkeley) 3/21/94";
#else
-__RCSID("$NetBSD: suff.c,v 1.81 2016/03/15 18:30:14 matthias Exp $");
+__RCSID("$NetBSD: suff.c,v 1.84 2016/06/30 05:34:04 dholland Exp $");
#endif
#endif /* not lint */
#endif
@@ -766,6 +766,8 @@ Suff_EndTransform(void *gnp, void *dummy)
{
GNode *gn = (GNode *)gnp;
+ (void)dummy;
+
if ((gn->type & OP_DOUBLEDEP) && !Lst_IsEmpty (gn->cohorts))
gn = (GNode *)Lst_Datum(Lst_Last(gn->cohorts));
if ((gn->type & OP_TRANSFORM) && Lst_IsEmpty(gn->commands) &&
@@ -809,7 +811,7 @@ Suff_EndTransform(void *gnp, void *dummy)
fprintf(debug_file, "transformation %s complete\n", gn->name);
}
- return(dummy ? 0 : 0);
+ return 0;
}
/*-
@@ -1215,7 +1217,7 @@ SuffAddSrc(void *sp, void *lsp)
#ifdef DEBUG_SRC
s2->cp = Lst_Init(FALSE);
Lst_AtEnd(targ->cp, s2);
- fprintf(debug_file, "1 add %x %x to %x:", targ, s2, ls->l);
+ fprintf(debug_file, "1 add %p %p to %p:", targ, s2, ls->l);
Lst_ForEach(ls->l, PrintAddr, NULL);
fprintf(debug_file, "\n");
#endif
@@ -1233,7 +1235,7 @@ SuffAddSrc(void *sp, void *lsp)
#ifdef DEBUG_SRC
s2->cp = Lst_Init(FALSE);
Lst_AtEnd(targ->cp, s2);
- fprintf(debug_file, "2 add %x %x to %x:", targ, s2, ls->l);
+ fprintf(debug_file, "2 add %p %p to %p:", targ, s2, ls->l);
Lst_ForEach(ls->l, PrintAddr, NULL);
fprintf(debug_file, "\n");
#endif
@@ -1305,14 +1307,14 @@ SuffRemoveSrc(Lst l)
free(s->pref);
else {
#ifdef DEBUG_SRC
- LstNode ln = Lst_Member(s->parent->cp, s);
- if (ln != NULL)
- Lst_Remove(s->parent->cp, ln);
+ LstNode ln2 = Lst_Member(s->parent->cp, s);
+ if (ln2 != NULL)
+ Lst_Remove(s->parent->cp, ln2);
#endif
--s->parent->children;
}
#ifdef DEBUG_SRC
- fprintf(debug_file, "free: [l=%x] p=%x %d\n", l, s, s->children);
+ fprintf(debug_file, "free: [l=%p] p=%p %d\n", l, s, s->children);
Lst_Destroy(s->cp, NULL);
#endif
Lst_Remove(l, ln);
@@ -1323,7 +1325,7 @@ SuffRemoveSrc(Lst l)
}
#ifdef DEBUG_SRC
else {
- fprintf(debug_file, "keep: [l=%x] p=%x %d: ", l, s, s->children);
+ fprintf(debug_file, "keep: [l=%p] p=%p %d: ", l, s, s->children);
Lst_ForEach(s->cp, PrintAddr, NULL);
fprintf(debug_file, "\n");
}
@@ -1372,7 +1374,7 @@ SuffFindThem(Lst srcs, Lst slst)
*/
if (Targ_FindNode(s->file, TARG_NOCREATE) != NULL) {
#ifdef DEBUG_SRC
- fprintf(debug_file, "remove %x from %x\n", s, srcs);
+ fprintf(debug_file, "remove %p from %p\n", s, srcs);
#endif
rs = s;
break;
@@ -1381,7 +1383,7 @@ SuffFindThem(Lst srcs, Lst slst)
if ((ptr = Dir_FindFile(s->file, s->suff->searchPath)) != NULL) {
rs = s;
#ifdef DEBUG_SRC
- fprintf(debug_file, "remove %x from %x\n", s, srcs);
+ fprintf(debug_file, "remove %p from %p\n", s, srcs);
#endif
free(ptr);
break;
@@ -1497,7 +1499,7 @@ SuffFindCmds(Src *targ, Lst slst)
targ->children += 1;
#ifdef DEBUG_SRC
ret->cp = Lst_Init(FALSE);
- fprintf(debug_file, "3 add %x %x\n", targ, ret);
+ fprintf(debug_file, "3 add %p %p\n", targ, ret);
Lst_AtEnd(targ->cp, ret);
#endif
Lst_AtEnd(slst, ret);
@@ -1616,7 +1618,7 @@ SuffExpandChildren(LstNode cln, GNode *pgn)
}
free(freeIt);
- } else if (*cp == '\\' && *cp != '\0') {
+ } else if (*cp == '\\' && cp[1] != '\0') {
/*
* Escaped something -- skip over it
*/
@@ -2597,8 +2599,10 @@ Suff_End(void)
static int SuffPrintName(void *s, void *dummy)
{
+ (void)dummy;
+
fprintf(debug_file, "%s ", ((Suff *)s)->name);
- return (dummy ? 0 : 0);
+ return 0;
}
static int
@@ -2608,6 +2612,8 @@ SuffPrintSuff(void *sp, void *dummy)
int flags;
int flag;
+ (void)dummy;
+
fprintf(debug_file, "# `%s' [%d] ", s->name, s->refCount);
flags = s->flags;
@@ -2640,7 +2646,7 @@ SuffPrintSuff(void *sp, void *dummy)
fprintf(debug_file, "#\tSearch Path: ");
Dir_PrintPath(s->searchPath);
fputc('\n', debug_file);
- return (dummy ? 0 : 0);
+ return 0;
}
static int
@@ -2648,12 +2654,14 @@ SuffPrintTrans(void *tp, void *dummy)
{
GNode *t = (GNode *)tp;
+ (void)dummy;
+
fprintf(debug_file, "%-16s: ", t->name);
Targ_PrintType(t->type);
fputc('\n', debug_file);
Lst_ForEach(t->commands, Targ_PrintCmd, NULL);
fputc('\n', debug_file);
- return(dummy ? 0 : 0);
+ return 0;
}
void