Import bmake-20170413

This commit is contained in:
Simon J. Gerraty 2017-04-15 00:51:18 +00:00
parent 60a7ffecc7
commit 85813b0c12
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/vendor/NetBSD/bmake/dist/; revision=316947
svn path=/vendor/NetBSD/bmake/20170413/; revision=316948; tag=vendor/NetBSD/bmake/20170413
14 changed files with 153 additions and 51 deletions

View File

@ -1,8 +1,35 @@
2017-04-13 Simon J. Gerraty <sjg@bad.crufty.net>
* Makefile (_MAKE_VERSION): 20170413
Merge with NetBSD make, pick up
o main.c: when setting .OBJDIR ignore '$' in paths.
* job.c: use MALLOC_OPTIONS to set malloc_options.
2017-04-11 Simon J. Gerraty <sjg@bad.crufty.net>
* Makefile (_MAKE_VERSION): 20170411
Merge with NetBSD make, pick up
o str.c: Str_Match: allow [^a-z] to behave as expected.
2017-03-26 Simon J. Gerraty <sjg@bad.crufty.net>
* Makefile (_MAKE_VERSION): 20170326
Merge with NetBSD make, pick up
o main.c: purge relative paths from realpath cache when .OBJDIR
is changed.
2017-03-11 Simon J. Gerraty <sjg@bad.crufty.net>
* Makefile (_MAKE_VERSION): 20170311
Merge with NetBSD make, pick up
o main.c: only use -C arg "as is" if it starts with '/'.
2017-03-01 Simon J. Gerraty <sjg@bad.crufty.net>
* Makefile (_MAKE_VERSION): 20170301
Merge with NetBSD make, pick up
o main.c: use -C arg as is rather than getcwd()
o main.c: use -C arg "as is" rather than getcwd()
if they identify the same directory.
o parse.c: ensure loadfile buffer is \n terminated in non-mmap case

View File

@ -1,7 +1,7 @@
# $Id: Makefile,v 1.81 2017/03/01 17:01:23 sjg Exp $
# $Id: Makefile,v 1.85 2017/04/13 16:29:40 sjg Exp $
# Base version on src date
_MAKE_VERSION= 20170301
_MAKE_VERSION= 20170413
PROG= bmake

5
job.c
View File

@ -373,7 +373,10 @@ static void JobSigLock(sigset_t *);
static void JobSigUnlock(sigset_t *);
static void JobSigReset(void);
const char *malloc_options="A";
#if !defined(MALLOC_OPTIONS)
# define MALLOC_OPTIONS "A"
#endif
const char *malloc_options= MALLOC_OPTIONS;
static void
job_table_dump(const char *where)

58
main.c
View File

@ -1,4 +1,4 @@
/* $NetBSD: main.c,v 1.257 2017/02/08 17:47:36 christos Exp $ */
/* $NetBSD: main.c,v 1.260 2017/04/13 13:55:23 christos Exp $ */
/*
* Copyright (c) 1988, 1989, 1990, 1993
@ -69,7 +69,7 @@
*/
#ifndef MAKE_NATIVE
static char rcsid[] = "$NetBSD: main.c,v 1.257 2017/02/08 17:47:36 christos Exp $";
static char rcsid[] = "$NetBSD: main.c,v 1.260 2017/04/13 13:55:23 christos 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.257 2017/02/08 17:47:36 christos Exp $");
__RCSID("$NetBSD: main.c,v 1.260 2017/04/13 13:55:23 christos Exp $");
#endif
#endif /* not lint */
#endif
@ -458,7 +458,8 @@ MainParseArgs(int argc, char **argv)
(void)fprintf(stderr, "%s: %s.\n", progname, strerror(errno));
exit(2);
}
if (stat(argvalue, &sa) != -1 &&
if (argvalue[0] == '/' &&
stat(argvalue, &sa) != -1 &&
stat(curdir, &sb) != -1 &&
sa.st_ino == sb.st_ino &&
sa.st_dev == sb.st_dev)
@ -721,22 +722,15 @@ Boolean
Main_SetObjdir(const char *fmt, ...)
{
struct stat sb;
char *p, *path;
char buf[MAXPATHLEN + 1], pbuf[MAXPATHLEN + 1];
char *path;
char buf[MAXPATHLEN + 1];
Boolean rc = FALSE;
va_list ap;
va_start(ap, fmt);
vsnprintf(path = pbuf, MAXPATHLEN, fmt, ap);
vsnprintf(path = buf, MAXPATHLEN, fmt, ap);
va_end(ap);
/* expand variable substitutions */
if (strchr(path, '$') != 0) {
snprintf(buf, MAXPATHLEN, "%s", path);
path = p = Var_Subst(NULL, buf, VAR_GLOBAL, VARF_WANTRES);
} else
p = NULL;
if (path[0] != '/') {
snprintf(buf, MAXPATHLEN, "%s/%s", curdir, path);
path = buf;
@ -752,25 +746,35 @@ Main_SetObjdir(const char *fmt, ...)
Var_Set(".OBJDIR", objdir, VAR_GLOBAL, 0);
setenv("PWD", objdir, 1);
Dir_InitDot();
cached_realpath(".OBJDIR", NULL); /* purge */
rc = TRUE;
if (enterFlag && strcmp(objdir, curdir) != 0)
enterFlagObj = TRUE;
}
}
free(p);
return rc;
}
static Boolean
Main_SetVarObjdir(const char *var, const char *suffix)
{
char *p1, *path;
if ((path = Var_Value(var, VAR_CMD, &p1)) == NULL)
char *p, *path, *xpath;
if ((path = Var_Value(var, VAR_CMD, &p)) == NULL)
return FALSE;
(void)Main_SetObjdir("%s%s", path, suffix);
free(p1);
/* expand variable substitutions */
if (strchr(path, '$') != 0)
xpath = Var_Subst(NULL, path, VAR_GLOBAL, VARF_WANTRES);
else
xpath = path;
(void)Main_SetObjdir("%s%s", xpath, suffix);
if (xpath != path)
free(xpath);
free(p);
return TRUE;
}
@ -1922,7 +1926,23 @@ cached_realpath(const char *pathname, char *resolved)
cache->flags = INTERNAL;
#endif
}
if (resolved == NULL && strcmp(pathname, ".OBJDIR") == 0) {
/* purge any relative paths */
Hash_Entry *he, *nhe;
Hash_Search hs;
he = Hash_EnumFirst(&cache->context, &hs);
while (he) {
nhe = Hash_EnumNext(&hs);
if (he->name[0] != '/') {
if (DEBUG(DIR))
fprintf(stderr, "cached_realpath: purging %s\n", he->name);
Hash_DeleteEntry(&cache->context, he);
}
he = nhe;
}
return NULL;
}
if ((rp = Var_Value(pathname, cache, &cp)) != NULL) {
/* a hit */
strlcpy(resolved, rp, MAXPATHLEN);

View File

@ -1,3 +1,24 @@
2017-04-01 Simon J. Gerraty <sjg@bad.crufty.net>
* install-mk (MK_VERSION): 20170401
* meta2deps.py: add is_src so we can check if obj dependency
is also a src dependency.
2017-03-26 Simon J. Gerraty <sjg@bad.crufty.net>
* install-mk (MK_VERSION): 20170326
* meta.stage.mk: do nothing if NO_STAGING is defined.
2017-03-24 Simon J. Gerraty <sjg@bad.crufty.net>
* auto.obj.mk: handle the case of __objdir=obj or obj.${MACHINE} etc.
2017-03-18 Simon J. Gerraty <sjg@bad.crufty.net>
* mkopt.sh: treat WITH_*=NO like no; ie. WITHOUT_*
2017-03-01 Simon J. Gerraty <sjg@bad.crufty.net>
* install-mk (MK_VERSION): 20170301

View File

@ -1,4 +1,4 @@
# $Id: auto.obj.mk,v 1.12 2015/12/16 01:57:06 sjg Exp $
# $Id: auto.obj.mk,v 1.13 2017/03/24 20:53:22 sjg Exp $
#
# @(#) Copyright (c) 2004, Simon J. Gerraty
#
@ -57,7 +57,10 @@ __objdir_made != echo ${__objdir}/; umask ${OBJDIR_UMASK:U002}; \
# This causes make to use the specified directory as .OBJDIR
.OBJDIR: ${__objdir}
.if ${.OBJDIR:tA} != ${__objdir:tA} && ${__objdir_made:Uno:M${__objdir}/*} != ""
# watch out for __objdir being relative path
.if !(${__objdir:M/*} == "" && ${.OBJDIR:tA} == ${${.CURDIR}/${__objdir}:L:tA})
.error could not use ${__objdir}: .OBJDIR=${.OBJDIR}
.endif
.endif
.endif
.endif

View File

@ -1,4 +1,4 @@
# $Id: dirdeps.mk,v 1.86 2017/03/01 20:26:51 sjg Exp $
# $Id: dirdeps.mk,v 1.87 2017/03/07 01:49:03 sjg Exp $
# Copyright (c) 2010-2013, Juniper Networks, Inc.
# All rights reserved.
@ -57,7 +57,7 @@
# distinguish them from others.
#
# Before each Makefile.depend file is read, we set
# DEP_RELDIR to be the the RELDIR (path relative to SRCTOP) for
# DEP_RELDIR to be the RELDIR (path relative to SRCTOP) for
# its directory, and DEP_MACHINE etc according to the .<target_spec>
# represented by the suffix of the corresponding target.
#

View File

@ -55,7 +55,7 @@
# Simon J. Gerraty <sjg@crufty.net>
# RCSid:
# $Id: install-mk,v 1.138 2017/03/01 20:26:51 sjg Exp $
# $Id: install-mk,v 1.140 2017/04/03 21:04:09 sjg Exp $
#
# @(#) Copyright (c) 1994 Simon J. Gerraty
#
@ -70,7 +70,7 @@
# sjg@crufty.net
#
MK_VERSION=20170301
MK_VERSION=20170401
OWNER=
GROUP=
MODE=444

View File

@ -1,4 +1,4 @@
# $Id: meta.stage.mk,v 1.48 2017/03/01 22:48:07 sjg Exp $
# $Id: meta.stage.mk,v 1.49 2017/04/01 02:10:34 sjg Exp $
#
# @(#) Copyright (c) 2011-2017, Simon J. Gerraty
#
@ -13,6 +13,8 @@
# sjg@crufty.net
#
.ifndef NO_STAGING
.if !target(__${.PARSEFILE}__)
# the guard target is defined later
@ -324,3 +326,4 @@ stale_staged: staging .NOMETA
.endif
.endif
.endif
.endif

View File

@ -37,7 +37,7 @@
"""
RCSid:
$Id: meta2deps.py,v 1.24 2017/02/08 22:17:10 sjg Exp $
$Id: meta2deps.py,v 1.25 2017/04/03 21:04:09 sjg Exp $
Copyright (c) 2011-2013, Juniper Networks, Inc.
All rights reserved.
@ -491,6 +491,21 @@ def parse(self, name=None, file=None):
if not file:
f.close()
def is_src(self, base, dir, rdir):
"""is base in srctop"""
for dir in [dir,rdir]:
if not dir:
continue
path = '/'.join([dir,base])
srctop = self.find_top(path, self.srctops)
if srctop:
if self.dpdeps:
self.add(self.file_deps, path.replace(srctop,''), 'file')
self.add(self.src_deps, dir.replace(srctop,''), 'src')
self.seenit(dir)
return True
return False
def parse_path(self, path, cwd, op=None, w=[]):
"""look at a path for the op specified"""
@ -519,10 +534,9 @@ def parse_path(self, path, cwd, op=None, w=[]):
# to the src dir, we may need to add dependencies for each
rdir = dir
dir = abspath(dir, cwd, self.last_dir, self.debug, self.debug_out)
if rdir == dir or rdir.find('./') > 0:
rdir = None
if os.path.islink(dir):
rdir = os.path.realpath(dir)
if rdir == dir:
rdir = None
# now put path back together
path = '/'.join([dir,base])
if self.debug > 1:
@ -543,17 +557,9 @@ def parse_path(self, path, cwd, op=None, w=[]):
# finally, we get down to it
if dir == self.cwd or dir == self.curdir:
return
srctop = self.find_top(path, self.srctops)
if srctop:
if self.dpdeps:
self.add(self.file_deps, path.replace(srctop,''), 'file')
self.add(self.src_deps, dir.replace(srctop,''), 'src')
if self.is_src(base, dir, rdir):
self.seenit(w[2])
self.seenit(dir)
if rdir and not rdir.startswith(srctop):
dir = rdir # for below
rdir = None
else:
if not rdir:
return
objroot = None

View File

@ -1,5 +1,5 @@
:
# $Id: mkopt.sh,v 1.10 2015/06/07 17:29:08 sjg Exp $
# $Id: mkopt.sh,v 1.11 2017/03/18 21:36:42 sjg Exp $
#
# @(#) Copyright (c) 2014, Simon J. Gerraty
#
@ -40,7 +40,7 @@ _mk_opt() {
eval "_mov=\$$_mo _wov=\$$_wo _wiv=\$$_wi"
case "$_wiv" in
no) _wov=no;;
[Nn][Oo]) _wov=no;;
esac
_v=${_mov:-${_wov:+no}}
_v=${_v:-${_wiv:+yes}}

19
str.c
View File

@ -1,4 +1,4 @@
/* $NetBSD: str.c,v 1.36 2016/04/06 09:57:00 gson Exp $ */
/* $NetBSD: str.c,v 1.37 2017/04/11 17:30:13 sjg Exp $ */
/*-
* Copyright (c) 1988, 1989, 1990, 1993
@ -69,14 +69,14 @@
*/
#ifndef MAKE_NATIVE
static char rcsid[] = "$NetBSD: str.c,v 1.36 2016/04/06 09:57:00 gson Exp $";
static char rcsid[] = "$NetBSD: str.c,v 1.37 2017/04/11 17:30:13 sjg Exp $";
#else
#include <sys/cdefs.h>
#ifndef lint
#if 0
static char sccsid[] = "@(#)str.c 5.8 (Berkeley) 6/1/90";
#else
__RCSID("$NetBSD: str.c,v 1.36 2016/04/06 09:57:00 gson Exp $");
__RCSID("$NetBSD: str.c,v 1.37 2017/04/11 17:30:13 sjg Exp $");
#endif
#endif /* not lint */
#endif
@ -373,16 +373,23 @@ Str_Match(const char *string, const char *pattern)
* by a range (two characters separated by "-").
*/
if (*pattern == '[') {
int nomatch;
++pattern;
if (*pattern == '^') {
++pattern;
nomatch = 1;
} else
nomatch = 0;
for (;;) {
if ((*pattern == ']') || (*pattern == 0))
return(0);
return(nomatch);
if (*pattern == *string)
break;
if (pattern[1] == '-') {
c2 = pattern[2];
if (c2 == 0)
return(0);
return(nomatch);
if ((*pattern <= *string) &&
(c2 >= *string))
break;
@ -393,6 +400,8 @@ Str_Match(const char *string, const char *pattern)
}
++pattern;
}
if (nomatch)
return 0;
while ((*pattern != ']') && (*pattern != 0))
++pattern;
goto thisCharOK;

View File

@ -14,4 +14,6 @@ LIB=e X_LIBS:M${LIB${LIB:tu}} is "/tmp/libe.a"
LIB=e X_LIBS:M*/lib${LIB}.a is "/tmp/libe.a"
LIB=e X_LIBS:M*/lib${LIB}.a:tu is "/TMP/LIBE.A"
Mscanner=OK
Upper=One Two Three Four
Lower=five six seven
exit status 0

View File

@ -15,7 +15,9 @@ res = no
res = OK
.endif
all:
all: show-libs check-cclass
show-libs:
@for x in $X; do ${.MAKE} -f ${MAKEFILE} show LIB=$$x; done
@echo "Mscanner=${res}"
@ -23,3 +25,9 @@ show:
@echo 'LIB=${LIB} X_LIBS:M$${LIB$${LIB:tu}} is "${X_LIBS:M${LIB${LIB:tu}}}"'
@echo 'LIB=${LIB} X_LIBS:M*/lib$${LIB}.a is "${X_LIBS:M*/lib${LIB}.a}"'
@echo 'LIB=${LIB} X_LIBS:M*/lib$${LIB}.a:tu is "${X_LIBS:M*/lib${LIB}.a:tu}"'
LIST= One Two Three Four five six seven
check-cclass:
@echo Upper=${LIST:M[A-Z]*}
@echo Lower=${LIST:M[^A-Z]*}