Module Name: src
Committed By: sjg
Date: Tue Jan 24 00:24:02 UTC 2023
Modified Files:
src/usr.bin/make: dir.c dir.h main.c make.1 parse.c
src/usr.bin/make/unit-tests: Makefile dir.mk opt-debug-graph1.exp
opt-debug-graph2.exp opt-debug-graph3.exp suff-main-several.exp
suff-transform-debug.exp
Log Message:
make: .SYSPATH: to add dirs to sysIncPath
.SYSPATH: with no sources will clear sysIncPath
otherwise sources are added
Reviewed by: rillig
To generate a diff of this commit:
cvs rdiff -u -r1.279 -r1.280 src/usr.bin/make/dir.c
cvs rdiff -u -r1.46 -r1.47 src/usr.bin/make/dir.h
cvs rdiff -u -r1.587 -r1.588 src/usr.bin/make/main.c
cvs rdiff -u -r1.358 -r1.359 src/usr.bin/make/make.1
cvs rdiff -u -r1.691 -r1.692 src/usr.bin/make/parse.c
cvs rdiff -u -r1.330 -r1.331 src/usr.bin/make/unit-tests/Makefile
cvs rdiff -u -r1.9 -r1.10 src/usr.bin/make/unit-tests/dir.mk
cvs rdiff -u -r1.10 -r1.11 src/usr.bin/make/unit-tests/opt-debug-graph1.exp
cvs rdiff -u -r1.5 -r1.6 src/usr.bin/make/unit-tests/opt-debug-graph2.exp \
src/usr.bin/make/unit-tests/opt-debug-graph3.exp \
src/usr.bin/make/unit-tests/suff-transform-debug.exp
cvs rdiff -u -r1.8 -r1.9 src/usr.bin/make/unit-tests/suff-main-several.exp
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/dir.c
diff -u src/usr.bin/make/dir.c:1.279 src/usr.bin/make/dir.c:1.280
--- src/usr.bin/make/dir.c:1.279 Sat May 7 21:19:43 2022
+++ src/usr.bin/make/dir.c Tue Jan 24 00:24:02 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: dir.c,v 1.279 2022/05/07 21:19:43 rillig Exp $ */
+/* $NetBSD: dir.c,v 1.280 2023/01/24 00:24:02 sjg Exp $ */
/*
* Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -138,7 +138,7 @@
#include "job.h"
/* "@(#)dir.c 8.2 (Berkeley) 1/2/94" */
-MAKE_RCSID("$NetBSD: dir.c,v 1.279 2022/05/07 21:19:43 rillig Exp $");
+MAKE_RCSID("$NetBSD: dir.c,v 1.280 2023/01/24 00:24:02 sjg Exp $");
/*
* A search path is a list of CachedDir structures. A CachedDir has in it the
@@ -577,6 +577,21 @@ Dir_SetPATH(void)
}
}
+
+void
+Dir_SetSYSPATH(void)
+{
+ CachedDirListNode *ln;
+
+ Var_ReadOnly(".SYSPATH", false);
+ Global_Delete(".SYSPATH");
+ for (ln = sysIncPath->dirs.first; ln != NULL; ln = ln->next) {
+ CachedDir *dir = ln->datum;
+ Global_Append(".SYSPATH", dir->name);
+ }
+ Var_ReadOnly(".SYSPATH", true);
+}
+
/*
* See if the given name has any wildcard characters in it and all braces and
* brackets are properly balanced.
Index: src/usr.bin/make/dir.h
diff -u src/usr.bin/make/dir.h:1.46 src/usr.bin/make/dir.h:1.47
--- src/usr.bin/make/dir.h:1.46 Wed Dec 15 12:08:25 2021
+++ src/usr.bin/make/dir.h Tue Jan 24 00:24:02 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: dir.h,v 1.46 2021/12/15 12:08:25 rillig Exp $ */
+/* $NetBSD: dir.h,v 1.47 2023/01/24 00:24:02 sjg Exp $ */
/*
* Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -82,6 +82,7 @@ void Dir_InitCur(const char *);
void Dir_InitDot(void);
void Dir_End(void);
void Dir_SetPATH(void);
+void Dir_SetSYSPATH(void);
bool Dir_HasWildcards(const char *) MAKE_ATTR_USE;
void SearchPath_Expand(SearchPath *, const char *, StringList *);
char *Dir_FindFile(const char *, SearchPath *) MAKE_ATTR_USE;
Index: src/usr.bin/make/main.c
diff -u src/usr.bin/make/main.c:1.587 src/usr.bin/make/main.c:1.588
--- src/usr.bin/make/main.c:1.587 Thu Jan 19 21:33:06 2023
+++ src/usr.bin/make/main.c Tue Jan 24 00:24:02 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: main.c,v 1.587 2023/01/19 21:33:06 rillig Exp $ */
+/* $NetBSD: main.c,v 1.588 2023/01/24 00:24:02 sjg Exp $ */
/*
* Copyright (c) 1988, 1989, 1990, 1993
@@ -111,7 +111,7 @@
#include "trace.h"
/* "@(#)main.c 8.3 (Berkeley) 3/19/94" */
-MAKE_RCSID("$NetBSD: main.c,v 1.587 2023/01/19 21:33:06 rillig Exp $");
+MAKE_RCSID("$NetBSD: main.c,v 1.588 2023/01/24 00:24:02 sjg Exp $");
#if defined(MAKE_NATIVE) && !defined(lint)
__COPYRIGHT("@(#) Copyright (c) 1988, 1989, 1990, 1993 "
"The Regents of the University of California. "
@@ -428,6 +428,7 @@ MainParseArgSysInc(const char *argvalue)
}
Global_Append(MAKEFLAGS, "-m");
Global_Append(MAKEFLAGS, argvalue);
+ Dir_SetSYSPATH();
}
static bool
@@ -1477,6 +1478,10 @@ static void
main_ReadFiles(void)
{
+ if (Lst_IsEmpty(&sysIncPath->dirs))
+ SearchPath_AddAll(sysIncPath, defSysIncPath);
+
+ Dir_SetSYSPATH();
if (!opts.noBuiltins)
ReadBuiltinRules();
Index: src/usr.bin/make/make.1
diff -u src/usr.bin/make/make.1:1.358 src/usr.bin/make/make.1:1.359
--- src/usr.bin/make/make.1:1.358 Mon Jan 23 23:01:52 2023
+++ src/usr.bin/make/make.1 Tue Jan 24 00:24:02 2023
@@ -1,4 +1,4 @@
-.\" $NetBSD: make.1,v 1.358 2023/01/23 23:01:52 sjg Exp $
+.\" $NetBSD: make.1,v 1.359 2023/01/24 00:24:02 sjg Exp $
.\"
.\" Copyright (c) 1990, 1993
.\" The Regents of the University of California. All rights reserved.
@@ -299,6 +299,8 @@ Furthermore, the system include path is
include statements (see the
.Fl I
option).
+The system include path can be referenced via the read-only variable
+.Va .SYSPATH .
.Pp
If a directory name in the
.Fl m
@@ -1326,6 +1328,13 @@ It is read-only.
.It Va .SUFFIXES
The list of known suffixes.
It is read-only.
+.It Va .SYSPATH
+The space-separated list of directories that
+.Nm
+searches for makefiles, referred to as the system include path.
+To update this search list, use the special target
+.Sq Ic .SYSPATH
+rather than modifying the variable which is read-only.
.It Va .TARGETS
The list of targets explicitly specified on the command line, if any.
.It Va VPATH
@@ -2534,6 +2543,14 @@ Example:
\&.c.o:
cc \-o ${.TARGET} \-c ${.IMPSRC}
.Ed
+.It Ic .SYSPATH
+The sources are directories which are to be added to the system
+include path which
+.Nm
+searches for makefiles.
+If no sources are specified,
+any previously specified directories are removed from the system
+include path.
.El
.Sh ENVIRONMENT
.Nm
Index: src/usr.bin/make/parse.c
diff -u src/usr.bin/make/parse.c:1.691 src/usr.bin/make/parse.c:1.692
--- src/usr.bin/make/parse.c:1.691 Mon Jan 23 23:01:52 2023
+++ src/usr.bin/make/parse.c Tue Jan 24 00:24:02 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: parse.c,v 1.691 2023/01/23 23:01:52 sjg Exp $ */
+/* $NetBSD: parse.c,v 1.692 2023/01/24 00:24:02 sjg Exp $ */
/*
* Copyright (c) 1988, 1989, 1990, 1993
@@ -105,7 +105,7 @@
#include "pathnames.h"
/* "@(#)parse.c 8.3 (Berkeley) 3/19/94" */
-MAKE_RCSID("$NetBSD: parse.c,v 1.691 2023/01/23 23:01:52 sjg Exp $");
+MAKE_RCSID("$NetBSD: parse.c,v 1.692 2023/01/24 00:24:02 sjg Exp $");
/*
* A file being read.
@@ -168,6 +168,7 @@ typedef enum ParseSpecial {
SP_SINGLESHELL, /* .SINGLESHELL; not mentioned in the manual page */
SP_STALE, /* .STALE */
SP_SUFFIXES, /* .SUFFIXES */
+ SP_SYSPATH, /* .SYSPATH */
SP_WAIT /* .WAIT */
} ParseSpecial;
@@ -293,6 +294,7 @@ static const struct {
{ ".SINGLESHELL", SP_SINGLESHELL, OP_NONE },
{ ".STALE", SP_STALE, OP_NONE },
{ ".SUFFIXES", SP_SUFFIXES, OP_NONE },
+ { ".SYSPATH", SP_SYSPATH, OP_NONE },
{ ".USE", SP_ATTRIBUTE, OP_USE },
{ ".USEBEFORE", SP_ATTRIBUTE, OP_USEBEFORE },
{ ".WAIT", SP_WAIT, OP_NONE },
@@ -923,6 +925,11 @@ HandleDependencyTargetSpecial(const char
*inout_paths = Lst_New();
Lst_Append(*inout_paths, &dirSearchPath);
break;
+ case SP_SYSPATH:
+ if (*inout_paths == NULL)
+ *inout_paths = Lst_New();
+ Lst_Append(*inout_paths, sysIncPath);
+ break;
case SP_MAIN:
/*
* Allow targets from the command line to override the
@@ -1129,15 +1136,17 @@ ParseDependencyOp(char **pp)
}
static void
-ClearPaths(SearchPathList *paths)
+ClearPaths(ParseSpecial special, SearchPathList *paths)
{
if (paths != NULL) {
SearchPathListNode *ln;
for (ln = paths->first; ln != NULL; ln = ln->next)
SearchPath_Clear(ln->datum);
}
-
- Dir_SetPATH();
+ if (special == SP_SYSPATH)
+ Dir_SetSYSPATH();
+ else
+ Dir_SetPATH();
}
static char *
@@ -1258,7 +1267,8 @@ HandleDependencySourcesEmpty(ParseSpecia
opts.silent = true;
break;
case SP_PATH:
- ClearPaths(paths);
+ case SP_SYSPATH:
+ ClearPaths(special, paths);
break;
#ifdef POSIX
case SP_POSIX:
@@ -1322,6 +1332,9 @@ ParseDependencySourceSpecial(ParseSpecia
case SP_READONLY:
Var_ReadOnly(word, true);
break;
+ case SP_SYSPATH:
+ AddToPaths(word, paths);
+ break;
default:
break;
}
@@ -1543,6 +1556,7 @@ ParseDependencySources(char *p, GNodeTyp
case SP_PATH:
case SP_READONLY:
case SP_SUFFIXES:
+ case SP_SYSPATH:
ParseDependencySourcesSpecial(p, special, *inout_paths);
if (*inout_paths != NULL) {
Lst_Free(*inout_paths);
@@ -1550,6 +1564,8 @@ ParseDependencySources(char *p, GNodeTyp
}
if (special == SP_PATH)
Dir_SetPATH();
+ if (special == SP_SYSPATH)
+ Dir_SetSYSPATH();
break;
default:
assert(*inout_paths == NULL);
Index: src/usr.bin/make/unit-tests/Makefile
diff -u src/usr.bin/make/unit-tests/Makefile:1.330 src/usr.bin/make/unit-tests/Makefile:1.331
--- src/usr.bin/make/unit-tests/Makefile:1.330 Mon Jan 23 23:01:52 2023
+++ src/usr.bin/make/unit-tests/Makefile Tue Jan 24 00:24:02 2023
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.330 2023/01/23 23:01:52 sjg Exp $
+# $NetBSD: Makefile,v 1.331 2023/01/24 00:24:02 sjg Exp $
#
# Unit tests for make(1)
#
@@ -538,7 +538,7 @@ SED_CMDS.varname-dot-parsefile= -e '/in
SED_CMDS.varname-dot-shell= -e 's, = /[^ ]*, = (details omitted),g'
SED_CMDS.varname-dot-shell+= -e 's,"/[^" ]*","(details omitted)",g'
SED_CMDS.varname-dot-shell+= -e 's,\[/[^] ]*\],[(details omitted)],g'
-SED_CMDS.varname-empty= ${.OBJDIR .PARSEDIR .PATH .SHELL:L:@v@-e '/\\$v/d'@}
+SED_CMDS.varname-empty= ${.OBJDIR .PARSEDIR .PATH .SHELL .SYSPATH:L:@v@-e '/\\$v/d'@}
# Some tests need an additional round of postprocessing.
POSTPROC.depsrc-wait= sed -e '/^---/d' -e 's,^\(: Making 3[abc]\)[123]$$,\1,'
@@ -568,6 +568,7 @@ STD_SED_CMDS.dg1+= -e 's,^\(\.MAKE\.[A-Z
STD_SED_CMDS.dg1+= -e 's,^\(MACHINE[_ARCH]* *=\) .*,\1 <details omitted>,'
STD_SED_CMDS.dg1+= -e 's,^\(MAKE *=\) .*,\1 <details omitted>,'
STD_SED_CMDS.dg1+= -e 's,^\(\.SHELL *=\) .*,\1 <details omitted>,'
+STD_SED_CMDS.dg1+= -e '/\.SYSPATH/d'
STD_SED_CMDS.dg2= ${STD_SED_CMDS.dg1}
STD_SED_CMDS.dg2+= -e 's,\(last modified\) ..:..:.. ... ..\, ....,\1 <timestamp>,'
Index: src/usr.bin/make/unit-tests/dir.mk
diff -u src/usr.bin/make/unit-tests/dir.mk:1.9 src/usr.bin/make/unit-tests/dir.mk:1.10
--- src/usr.bin/make/unit-tests/dir.mk:1.9 Sat Jan 23 10:48:49 2021
+++ src/usr.bin/make/unit-tests/dir.mk Tue Jan 24 00:24:02 2023
@@ -1,8 +1,10 @@
-# $NetBSD: dir.mk,v 1.9 2021/01/23 10:48:49 rillig Exp $
+# $NetBSD: dir.mk,v 1.10 2023/01/24 00:24:02 sjg Exp $
#
# Tests for dir.c.
-.MAKEFLAGS: -m / # hide /usr/share/mk from the debug log
+# hide /usr/share/mk from the debug log
+.SYSPATH:
+.SYSPATH: /
# Dependency lines may use braces for expansion.
# See DirExpandCurly for the implementation.
Index: src/usr.bin/make/unit-tests/opt-debug-graph1.exp
diff -u src/usr.bin/make/unit-tests/opt-debug-graph1.exp:1.10 src/usr.bin/make/unit-tests/opt-debug-graph1.exp:1.11
--- src/usr.bin/make/unit-tests/opt-debug-graph1.exp:1.10 Sat Mar 26 14:34:07 2022
+++ src/usr.bin/make/unit-tests/opt-debug-graph1.exp Tue Jan 24 00:24:02 2023
@@ -48,7 +48,7 @@ MFLAGS = -r -k -d g1
# refs hits directory
# 1 0 <curdir>
# 1 0 .
-# 1 0 <defsyspath>
+# 2 0 <defsyspath>
#*** Suffixes:
#*** Transformations:
Index: src/usr.bin/make/unit-tests/opt-debug-graph2.exp
diff -u src/usr.bin/make/unit-tests/opt-debug-graph2.exp:1.5 src/usr.bin/make/unit-tests/opt-debug-graph2.exp:1.6
--- src/usr.bin/make/unit-tests/opt-debug-graph2.exp:1.5 Sat Mar 26 14:34:07 2022
+++ src/usr.bin/make/unit-tests/opt-debug-graph2.exp Tue Jan 24 00:24:02 2023
@@ -83,7 +83,7 @@ MFLAGS = -r -k -d g2
# refs hits directory
# 1 0 <curdir>
# 1 0 .
-# 1 0 <defsyspath>
+# 2 0 <defsyspath>
#*** Suffixes:
#*** Transformations:
Index: src/usr.bin/make/unit-tests/opt-debug-graph3.exp
diff -u src/usr.bin/make/unit-tests/opt-debug-graph3.exp:1.5 src/usr.bin/make/unit-tests/opt-debug-graph3.exp:1.6
--- src/usr.bin/make/unit-tests/opt-debug-graph3.exp:1.5 Sat Mar 26 14:34:07 2022
+++ src/usr.bin/make/unit-tests/opt-debug-graph3.exp Tue Jan 24 00:24:02 2023
@@ -83,7 +83,7 @@ MFLAGS = -r -k -d g3
# refs hits directory
# 1 0 <curdir>
# 1 0 .
-# 1 0 <defsyspath>
+# 2 0 <defsyspath>
#*** Suffixes:
#*** Transformations:
Index: src/usr.bin/make/unit-tests/suff-transform-debug.exp
diff -u src/usr.bin/make/unit-tests/suff-transform-debug.exp:1.5 src/usr.bin/make/unit-tests/suff-transform-debug.exp:1.6
--- src/usr.bin/make/unit-tests/suff-transform-debug.exp:1.5 Sat Mar 26 14:34:07 2022
+++ src/usr.bin/make/unit-tests/suff-transform-debug.exp Tue Jan 24 00:24:02 2023
@@ -39,7 +39,7 @@ MFLAGS = -r -k -d g1
# refs hits directory
# 1 0 <curdir>
# 1 0 .
-# 1 0 <defsyspath>
+# 2 0 <defsyspath>
#*** Suffixes:
# ".a" (num 1, ref 2)
Index: src/usr.bin/make/unit-tests/suff-main-several.exp
diff -u src/usr.bin/make/unit-tests/suff-main-several.exp:1.8 src/usr.bin/make/unit-tests/suff-main-several.exp:1.9
--- src/usr.bin/make/unit-tests/suff-main-several.exp:1.8 Sat Mar 26 14:34:07 2022
+++ src/usr.bin/make/unit-tests/suff-main-several.exp Tue Jan 24 00:24:02 2023
@@ -113,7 +113,7 @@ MFLAGS = -r -k -d mps -d 0 -
# refs hits directory
# 1 0 <curdir>
# 1 0 .
-# 1 0 <defsyspath>
+# 2 0 <defsyspath>
#*** Suffixes:
# ".4" (num 1, ref 1)