Import 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.
This commit is contained in:
Simon J. Gerraty 2016-09-08 23:49:33 +00:00
parent e6b08231c8
commit cdfa59c89c
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/vendor/NetBSD/bmake/dist/; revision=305631
svn path=/vendor/NetBSD/bmake/20160818/; revision=305632; tag=vendor/NetBSD/bmake/20160818
15 changed files with 329 additions and 104 deletions

View File

@ -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

View File

@ -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

21
bmake.1
View File

@ -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 .

View File

@ -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

21
main.c
View File

@ -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);

21
make.1
View File

@ -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 .

158
meta.c
View File

@ -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);
}

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

7
os.sh
View File

@ -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}

44
suff.c
View File

@ -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