On Thu, Aug 31, 2023 at 08:59:53AM +0200, Marc Espie wrote:
> A long time ago, I tried to host our fork of make, in the hope it would get
> picked up by other systems.
>
> Accordingly, some features were added to mimic netbsd's extensions, hidden
> behind FEATURES macros.
>
> Turns out that, for better or for worse, FreeBSD decided to go with NetBSD's
> fork of bmake, so this is just dead weight that makes stuff more complex.
>
> Accordingly, config.h is no longer really needed, as it shrinks to two
> little defines.
>
> (the only part worth looking at is varmodifiers... this survived a full build
> of base and xenocara without any issue, along with quite a few ports)
Slightly updated version. I hadn't bothered to actually remove config.h
and thus missed an include.
Also: all remaining modifiers are now strictly either word_apply or apply,
none does both, so I killed the extra code and added an assert just in case.
I could use some okays. Fairly safe.
Index: Makefile
===================================================================
RCS file: /cvs/src/usr.bin/make/Makefile,v
retrieving revision 1.64
diff -u -p -r1.64 Makefile
--- Makefile 13 Jan 2020 15:41:53 -0000 1.64
+++ Makefile 3 Sep 2023 16:44:43 -0000
@@ -6,8 +6,7 @@ HOSTCFLAGS+= -I${.OBJDIR} -I${.CURDIR}
CDIAGFLAGS=-Wall -W -Wno-char-subscripts -Wstrict-prototypes -pedantic \
-Wmissing-prototypes -Wdeclaration-after-statement -std=c99
-CDEFS+=-DHAS_PATHS_H
-CDEFS+=-DHAS_EXTENDED_GETCWD
+CDEFS+=-DMAKE_BSIZE=256 -DDEFMAXJOBS=4
#CDEFS+=-DHAS_STATS
DPADD += ${LIBUTIL}
Index: arch.c
===================================================================
RCS file: /cvs/src/usr.bin/make/arch.c,v
retrieving revision 1.93
diff -u -p -r1.93 arch.c
--- arch.c 17 Feb 2023 17:59:36 -0000 1.93
+++ arch.c 3 Sep 2023 16:44:43 -0000
@@ -82,7 +82,6 @@
#include <string.h>
#include <unistd.h>
#include <ohash.h>
-#include "config.h"
#include "defines.h"
#include "buf.h"
#include "dir.h"
Index: buf.c
===================================================================
RCS file: /cvs/src/usr.bin/make/buf.c,v
retrieving revision 1.29
diff -u -p -r1.29 buf.c
--- buf.c 13 Jan 2020 13:54:44 -0000 1.29
+++ buf.c 3 Sep 2023 16:44:43 -0000
@@ -75,7 +75,6 @@
#include <string.h>
#include <stdio.h>
#include <stdarg.h>
-#include "config.h"
#include "defines.h"
#include "buf.h"
#include "stats.h"
Index: cmd_exec.c
===================================================================
RCS file: /cvs/src/usr.bin/make/cmd_exec.c,v
retrieving revision 1.12
diff -u -p -r1.12 cmd_exec.c
--- cmd_exec.c 31 Aug 2023 06:53:28 -0000 1.12
+++ cmd_exec.c 3 Sep 2023 16:44:43 -0000
@@ -30,7 +30,6 @@
#include <stdio.h>
#include <string.h>
#include <unistd.h>
-#include "config.h"
#include "defines.h"
#include "cmd_exec.h"
#include "buf.h"
Index: compat.c
===================================================================
RCS file: /cvs/src/usr.bin/make/compat.c,v
retrieving revision 1.93
diff -u -p -r1.93 compat.c
--- compat.c 26 Jan 2020 12:41:21 -0000 1.93
+++ compat.c 3 Sep 2023 16:44:43 -0000
@@ -40,7 +40,6 @@
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
-#include "config.h"
#include "defines.h"
#include "dir.h"
#include "engine.h"
Index: cond.c
===================================================================
RCS file: /cvs/src/usr.bin/make/cond.c,v
retrieving revision 1.54
diff -u -p -r1.54 cond.c
--- cond.c 21 Dec 2019 15:29:25 -0000 1.54
+++ cond.c 3 Sep 2023 16:44:44 -0000
@@ -42,7 +42,6 @@
#include <stdlib.h>
#include <string.h>
#include <ohash.h>
-#include "config.h"
#include "defines.h"
#include "dir.h"
#include "buf.h"
Index: config.h
===================================================================
RCS file: config.h
diff -N config.h
--- config.h 5 Jan 2022 02:00:55 -0000 1.21
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,120 +0,0 @@
-#ifndef CONFIG_H
-#define CONFIG_H
-
-/* $OpenBSD: config.h,v 1.21 2022/01/05 02:00:55 jsg Exp $ */
-/* $NetBSD: config.h,v 1.7 1996/11/06 17:59:03 christos Exp $ */
-
-/*
- * Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
- * Copyright (c) 1988, 1989 by Adam de Boor
- * Copyright (c) 1989 by Berkeley Softworks
- * All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Adam de Boor.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * from: @(#)config.h 8.1 (Berkeley) 6/6/93
- */
-
-#define DEFSHELL 1 /* Bourne shell */
-
-/*
- * DEFMAXJOBS
- * This controls the default concurrency. On no occasion will more
- * than DEFMAXJOBS targets be created at once.
- */
-#define DEFMAXJOBS 4
-
-/*
- * SYSVINCLUDE
- * Recognize system V like include directives [include "filename"]
- * SYSVVARSUB
- * Recognize system V like ${VAR:x=y} variable substitutions
- */
-#define SYSVINCLUDE
-#define SYSVVARSUB
-
-/*
- * SUNSHCMD
- * Recognize SunOS and Solaris:
- * VAR :sh= CMD # Assign VAR to the command substitution of CMD
- * ${VAR:sh} # Return the command substitution of the value
- * # of ${VAR}
- */
-#define SUNSHCMD
-
-#ifdef HAS_EXTENDED_GETCWD
-#define dogetcwd() getcwd(NULL, 0)
-#else
-#define dogetcwd() getcwd(emalloc(PATH_MAX), PATH_MAX)
-#endif
-
-#ifdef SYSVINCLUDE
-#define DOFEATURE_SYSVINCLUDE FEATURE_SYSVINCLUDE
-#else
-#define DOFEATURE_SYSVINCLUDE 0
-#endif
-#ifdef SYSVVARSUB
-#define DOFEATURE_SYSVVARSUB FEATURE_SYSVVARSUB
-#else
-#define DOFEATURE_SYSVVARSUB 0
-#endif
-#ifdef SUNSHCMD
-#define DOFEATURE_SUNSHCMD FEATURE_SUNSHCMD
-#else
-#define DOFEATURE_SUNSHCMD 0
-#endif
-
-#ifndef DEFAULT_FEATURES
-#define DEFAULT_FEATURES (FEATURE_UPPERLOWER | DOFEATURE_SYSVVARSUB |
DOFEATURE_SYSVINCLUDE | DOFEATURE_SUNSHCMD | FEATURE_RECVARS |
FEATURE_CONDINCLUDE)
-#endif
-
-#define FEATURES(x) ((DEFAULT_FEATURES & (x)) != 0)
-#define FEATURE_ODE 1
-#define FEATURE_UNIQ 2
-#define FEATURE_SORT 4
-#define FEATURE_UPPERLOWER 8
-#define FEATURE_SYSVVARSUB 16
-#define FEATURE_SYSVINCLUDE 32
-#define FEATURE_SUNSHCMD 64
-#define FEATURE_RECVARS 128
-#define FEATURE_CONDINCLUDE 256
-#define FEATURE_ASSIGN 512
-#define FEATURE_EXECMOD 1024
-
-/*
- * There are several places where expandable buffers are used (parse.c and
- * var.c). This constant is merely the starting point for those buffers. If
- * lines tend to be much shorter than this, it would be best to reduce BSIZE.
- * If longer, it should be increased. Reducing it will cause more copying to
- * be done for longer lines, but will save space for shorter ones. In any
- * case, it ought to be a power of two simply because most storage allocation
- * schemes allocate in powers of two.
- */
-#define MAKE_BSIZE 256 /* starting size for expandable buffers
*/
-
-#endif
Index: dir.c
===================================================================
RCS file: /cvs/src/usr.bin/make/dir.c,v
retrieving revision 1.68
diff -u -p -r1.68 dir.c
--- dir.c 21 Oct 2016 16:12:38 -0000 1.68
+++ dir.c 3 Sep 2023 16:44:44 -0000
@@ -70,7 +70,6 @@
#include <stdlib.h>
#include <string.h>
#include <ohash.h>
-#include "config.h"
#include "defines.h"
#include "dir.h"
#include "lst.h"
Index: direxpand.c
===================================================================
RCS file: /cvs/src/usr.bin/make/direxpand.c,v
retrieving revision 1.8
diff -u -p -r1.8 direxpand.c
--- direxpand.c 21 Oct 2016 16:12:38 -0000 1.8
+++ direxpand.c 3 Sep 2023 16:44:44 -0000
@@ -62,7 +62,6 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-#include "config.h"
#include "defines.h"
#include "lst.h"
#include "dir.h"
Index: engine.c
===================================================================
RCS file: /cvs/src/usr.bin/make/engine.c,v
retrieving revision 1.72
diff -u -p -r1.72 engine.c
--- engine.c 31 Aug 2023 06:53:28 -0000 1.72
+++ engine.c 3 Sep 2023 16:44:44 -0000
@@ -73,7 +73,6 @@
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
-#include "config.h"
#include "defines.h"
#include "cmd_exec.h"
#include "dir.h"
Index: enginechoice.c
===================================================================
RCS file: /cvs/src/usr.bin/make/enginechoice.c,v
retrieving revision 1.3
diff -u -p -r1.3 enginechoice.c
--- enginechoice.c 4 Mar 2021 09:34:30 -0000 1.3
+++ enginechoice.c 3 Sep 2023 16:44:44 -0000
@@ -23,7 +23,6 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#include "config.h"
#include "defines.h"
#include "compat.h"
#include "make.h"
Index: error.c
===================================================================
RCS file: /cvs/src/usr.bin/make/error.c,v
retrieving revision 1.25
diff -u -p -r1.25 error.c
--- error.c 27 Sep 2015 16:58:16 -0000 1.25
+++ error.c 3 Sep 2023 16:44:44 -0000
@@ -31,7 +31,6 @@
#include <sys/types.h>
#include <unistd.h>
-#include "config.h"
#include "defines.h"
#include "error.h"
#include "job.h"
Index: expandchildren.c
===================================================================
RCS file: /cvs/src/usr.bin/make/expandchildren.c,v
retrieving revision 1.2
diff -u -p -r1.2 expandchildren.c
--- expandchildren.c 26 Jan 2020 12:41:21 -0000 1.2
+++ expandchildren.c 3 Sep 2023 16:44:44 -0000
@@ -44,7 +44,6 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-#include "config.h"
#include "defines.h"
#include "direxpand.h"
#include "engine.h"
Index: for.c
===================================================================
RCS file: /cvs/src/usr.bin/make/for.c,v
retrieving revision 1.47
diff -u -p -r1.47 for.c
--- for.c 5 Dec 2017 17:47:09 -0000 1.47
+++ for.c 3 Sep 2023 16:44:44 -0000
@@ -63,7 +63,6 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-#include "config.h"
#include "defines.h"
#include "buf.h"
#include "for.h"
Index: init.c
===================================================================
RCS file: /cvs/src/usr.bin/make/init.c,v
retrieving revision 1.9
diff -u -p -r1.9 init.c
--- init.c 31 Aug 2023 06:53:28 -0000 1.9
+++ init.c 3 Sep 2023 16:44:44 -0000
@@ -26,7 +26,6 @@
*/
#include <stdio.h>
#include "defines.h"
-#include "config.h"
#include "init.h"
#include "timestamp.h"
#include "stats.h"
Index: job.c
===================================================================
RCS file: /cvs/src/usr.bin/make/job.c,v
retrieving revision 1.164
diff -u -p -r1.164 job.c
--- job.c 8 Mar 2023 04:43:11 -0000 1.164
+++ job.c 3 Sep 2023 16:44:44 -0000
@@ -93,7 +93,6 @@
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
-#include "config.h"
#include "defines.h"
#include "job.h"
#include "engine.h"
Index: lowparse.c
===================================================================
RCS file: /cvs/src/usr.bin/make/lowparse.c,v
retrieving revision 1.35
diff -u -p -r1.35 lowparse.c
--- lowparse.c 21 Oct 2016 16:12:38 -0000 1.35
+++ lowparse.c 3 Sep 2023 16:44:44 -0000
@@ -35,7 +35,6 @@
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
-#include "config.h"
#include "defines.h"
#include "buf.h"
#include "lowparse.h"
Index: main.c
===================================================================
RCS file: /cvs/src/usr.bin/make/main.c,v
retrieving revision 1.131
diff -u -p -r1.131 main.c
--- main.c 8 Jul 2023 21:51:45 -0000 1.131
+++ main.c 3 Sep 2023 16:44:44 -0000
@@ -45,7 +45,6 @@
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
-#include "config.h"
#include "defines.h"
#include "var.h"
#include "lowparse.h"
@@ -517,7 +516,7 @@ figure_out_CURDIR()
struct stat sa, sb;
/* curdir is cwd... */
- cwd = dogetcwd();
+ cwd = getcwd(NULL, 0);
if (cwd == NULL)
err(2, "getcwd");
Index: make.c
===================================================================
RCS file: /cvs/src/usr.bin/make/make.c,v
retrieving revision 1.83
diff -u -p -r1.83 make.c
--- make.c 8 Jul 2023 18:42:27 -0000 1.83
+++ make.c 3 Sep 2023 16:44:44 -0000
@@ -64,7 +64,6 @@
#include <stdlib.h>
#include <string.h>
#include <ohash.h>
-#include "config.h"
#include "defines.h"
#include "dir.h"
#include "job.h"
Index: parse.c
===================================================================
RCS file: /cvs/src/usr.bin/make/parse.c,v
retrieving revision 1.135
diff -u -p -r1.135 parse.c
--- parse.c 30 May 2023 04:42:21 -0000 1.135
+++ parse.c 3 Sep 2023 16:44:44 -0000
@@ -68,7 +68,6 @@
#include <stdlib.h>
#include <string.h>
#include <ohash.h>
-#include "config.h"
#include "defines.h"
#include "dir.h"
#include "direxpand.h"
@@ -1555,23 +1554,20 @@ parse_as_special_line(Buffer buf, Buffer
{
if (*line == '.' && handle_bsd_command(buf, copy, line+1))
return true;
- if (FEATURES(FEATURE_SYSVINCLUDE) &&
- strncmp(line, "include", 7) == 0 &&
+ if (strncmp(line, "include", 7) == 0 &&
ISSPACE(line[7]) &&
strchr(line, ':') == NULL) {
/* It's an S3/S5-style "include". */
lookup_sysv_include(line + 7, "include");
return true;
}
- if (FEATURES(FEATURE_CONDINCLUDE) &&
- strncmp(line, "sinclude", 8) == 0 &&
+ if (strncmp(line, "sinclude", 8) == 0 &&
ISSPACE(line[8]) &&
strchr(line, ':') == NULL) {
lookup_conditional_include(line+8, "sinclude");
return true;
}
- if (FEATURES(FEATURE_CONDINCLUDE) &&
- strncmp(line, "-include", 8) == 0 &&
+ if (strncmp(line, "-include", 8) == 0 &&
ISSPACE(line[8]) &&
strchr(line, ':') == NULL) {
lookup_conditional_include(line+8, "-include");
Index: parsevar.c
===================================================================
RCS file: /cvs/src/usr.bin/make/parsevar.c,v
retrieving revision 1.16
diff -u -p -r1.16 parsevar.c
--- parsevar.c 23 Oct 2016 14:54:14 -0000 1.16
+++ parsevar.c 3 Sep 2023 16:44:44 -0000
@@ -30,7 +30,6 @@
#include <stddef.h>
#include <stdlib.h>
#include <string.h>
-#include "config.h"
#include "defines.h"
#include "var.h"
#include "varname.h"
@@ -84,8 +83,7 @@ parse_variable_assignment(const char *li
int type;
struct Name name;
- arg = VarName_Get(line, &name, NULL, true,
- FEATURES(FEATURE_SUNSHCMD) ? find_op1 : find_op2);
+ arg = VarName_Get(line, &name, NULL, true, find_op1);
while (ISSPACE(*arg))
arg++;
@@ -113,8 +111,7 @@ parse_variable_assignment(const char *li
break;
case ':':
- if (FEATURES(FEATURE_SUNSHCMD) &&
- strncmp(arg, "sh", 2) == 0) {
+ if (strncmp(arg, "sh", 2) == 0) {
type = VAR_SUNSHELL;
arg += 2;
while (*arg != '=' && *arg != '\0')
Index: stats.c
===================================================================
RCS file: /cvs/src/usr.bin/make/stats.c,v
retrieving revision 1.11
diff -u -p -r1.11 stats.c
--- stats.c 22 Apr 2014 12:21:17 -0000 1.11
+++ stats.c 3 Sep 2023 16:44:44 -0000
@@ -34,7 +34,6 @@
to allow for concurrent adjustment to variables.
*/
-#include "config.h"
#include "defines.h"
#include "stats.h"
Index: str.c
===================================================================
RCS file: /cvs/src/usr.bin/make/str.c,v
retrieving revision 1.32
diff -u -p -r1.32 str.c
--- str.c 21 May 2019 17:21:02 -0000 1.32
+++ str.c 3 Sep 2023 16:44:44 -0000
@@ -37,7 +37,6 @@
#include <ctype.h>
#include <string.h>
-#include "config.h"
#include "defines.h"
#include "str.h"
#include "memory.h"
Index: suff.c
===================================================================
RCS file: /cvs/src/usr.bin/make/suff.c,v
retrieving revision 1.102
diff -u -p -r1.102 suff.c
--- suff.c 13 Jan 2020 15:41:53 -0000 1.102
+++ suff.c 3 Sep 2023 16:44:45 -0000
@@ -48,7 +48,6 @@
#include <stdlib.h>
#include <string.h>
#include <ohash.h>
-#include "config.h"
#include "defines.h"
#include "dir.h"
#include "engine.h"
Index: targ.c
===================================================================
RCS file: /cvs/src/usr.bin/make/targ.c,v
retrieving revision 1.85
diff -u -p -r1.85 targ.c
--- targ.c 26 Jan 2020 12:41:21 -0000 1.85
+++ targ.c 3 Sep 2023 16:44:45 -0000
@@ -102,7 +102,6 @@
#include <stdlib.h>
#include <string.h>
#include <ohash.h>
-#include "config.h"
#include "defines.h"
#include "stats.h"
#include "suff.h"
Index: targequiv.c
===================================================================
RCS file: /cvs/src/usr.bin/make/targequiv.c,v
retrieving revision 1.9
diff -u -p -r1.9 targequiv.c
--- targequiv.c 21 Dec 2019 15:29:25 -0000 1.9
+++ targequiv.c 3 Sep 2023 16:44:45 -0000
@@ -37,7 +37,6 @@
#include <string.h>
#include <ohash.h>
#include <limits.h>
-#include "config.h"
#include "defines.h"
#include "memory.h"
#include "gnode.h"
Index: timestamp.c
===================================================================
RCS file: /cvs/src/usr.bin/make/timestamp.c,v
retrieving revision 1.10
diff -u -p -r1.10 timestamp.c
--- timestamp.c 22 May 2013 12:14:08 -0000 1.10
+++ timestamp.c 3 Sep 2023 16:44:45 -0000
@@ -27,7 +27,6 @@
#include <sys/time.h>
#include <stdio.h>
#include <string.h>
-#include "config.h"
#include "defines.h"
#include "timestamp.h"
Index: var.c
===================================================================
RCS file: /cvs/src/usr.bin/make/var.c,v
retrieving revision 1.105
diff -u -p -r1.105 var.c
--- var.c 10 Aug 2023 10:52:43 -0000 1.105
+++ var.c 3 Sep 2023 16:44:45 -0000
@@ -69,7 +69,6 @@
#include <string.h>
#include <ohash.h>
-#include "config.h"
#include "defines.h"
#include "buf.h"
#include "cmd_exec.h"
Index: varmodifiers.c
===================================================================
RCS file: /cvs/src/usr.bin/make/varmodifiers.c,v
retrieving revision 1.48
diff -u -p -r1.48 varmodifiers.c
--- varmodifiers.c 30 Aug 2020 12:16:04 -0000 1.48
+++ varmodifiers.c 3 Sep 2023 16:44:45 -0000
@@ -65,6 +65,7 @@
* is also called directly by Var_SubstVar. */
+#include <assert.h>
#include <ctype.h>
#include <sys/types.h>
#include <regex.h>
@@ -72,7 +73,6 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-#include "config.h"
#include "defines.h"
#include "buf.h"
#include "var.h"
@@ -100,7 +100,7 @@
#define VAR_BANG_EQUAL 0x100
typedef struct {
- char *lbuffer; /* left string to free */
+ char *lbuffer; /* Left string to free */
char *lhs; /* String to match */
size_t leftLen; /* Length of string */
char *rhs; /* Replacement string (w/ &'s removed) */
@@ -108,12 +108,6 @@ typedef struct {
int flags;
} VarPattern;
-struct LoopStuff {
- struct LoopVar *var;
- char *expand;
- bool err;
-};
-
static bool VarHead(struct Name *, bool, Buffer, void *);
static bool VarTail(struct Name *, bool, Buffer, void *);
static bool VarSuffix(struct Name *, bool, Buffer, void *);
@@ -121,8 +115,6 @@ static bool VarRoot(struct Name *, bool,
static bool VarMatch(struct Name *, bool, Buffer, void *);
static bool VarSYSVMatch(struct Name *, bool, Buffer, void *);
static bool VarNoMatch(struct Name *, bool, Buffer, void *);
-static bool VarUniq(struct Name *, bool, Buffer, void *);
-static bool VarLoop(struct Name *, bool, Buffer, void *);
static void VarREError(int, regex_t *, const char *);
@@ -149,62 +141,36 @@ static char *do_upper(const char *, cons
static char *do_lower(const char *, const struct Name *, void *);
static void *check_shcmd(const char **, SymTable *, bool, int);
static char *do_shcmd(const char *, const struct Name *, void *);
-static char *do_sort(const char *, const struct Name *, void *);
-static char *finish_loop(const char *, const struct Name *, void *);
-static int NameCompare(const void *, const void *);
-static char *do_label(const char *, const struct Name *, void *);
-static char *do_path(const char *, const struct Name *, void *);
-static char *do_def(const char *, const struct Name *, void *);
-static char *do_undef(const char *, const struct Name *, void *);
-static char *do_assign(const char *, const struct Name *, void *);
-static char *do_exec(const char *, const struct Name *, void *);
-
-static void *assign_get_value(const char **, SymTable *, bool, int);
-static void *get_cmd(const char **, SymTable *, bool, int);
-static void *get_value(const char **, SymTable *, bool, int);
static void *get_stringarg(const char **, SymTable *, bool, int);
static void free_stringarg(void *);
static void *get_patternarg(const char **, SymTable *, bool, int);
static void *get_spatternarg(const char **, SymTable *, bool, int);
static void *common_get_patternarg(const char **, SymTable *, bool, int, bool);
static void free_patternarg(void *);
-static void free_looparg(void *);
static void *get_sysvpattern(const char **, SymTable *, bool, int);
-static void *get_loop(const char **, SymTable *, bool, int);
-static char *LoopGrab(const char **);
static struct Name dummy;
static struct Name *dummy_arg = &dummy;
static struct modifier {
- bool atstart;
void * (*getarg)(const char **, SymTable *, bool, int);
char * (*apply)(const char *, const struct Name *, void *);
bool (*word_apply)(struct Name *, bool, Buffer, void *);
void (*freearg)(void *);
} *choose_mod[256],
- match_mod = {false, get_stringarg, NULL, VarMatch, free_stringarg},
- nomatch_mod = {false, get_stringarg, NULL, VarNoMatch, free_stringarg},
- subst_mod = {false, get_spatternarg, NULL, VarSubstitute,
free_patternarg},
- resubst_mod = {false, get_patternarg, do_regex, NULL, free_patternarg},
- quote_mod = {false, check_quote, VarQuote, NULL , free},
- tail_mod = {false, check_empty, NULL, VarTail, NULL},
- head_mod = {false, check_empty, NULL, VarHead, NULL},
- suffix_mod = {false, check_empty, NULL, VarSuffix, NULL},
- root_mod = {false, check_empty, NULL, VarRoot, NULL},
- upper_mod = {false, check_empty, do_upper, NULL, NULL},
- lower_mod = {false, check_empty, do_lower, NULL, NULL},
- shcmd_mod = {false, check_shcmd, do_shcmd, NULL, NULL},
- sysv_mod = {false, get_sysvpattern, NULL, VarSYSVMatch,
free_patternarg},
- uniq_mod = {false, check_empty, NULL, VarUniq, NULL},
- sort_mod = {false, check_empty, do_sort, NULL, NULL},
- loop_mod = {false, get_loop, finish_loop, VarLoop, free_looparg},
- undef_mod = {true, get_value, do_undef, NULL, NULL},
- def_mod = {true, get_value, do_def, NULL, NULL},
- label_mod = {true, check_empty, do_label, NULL, NULL},
- path_mod = {true, check_empty, do_path, NULL, NULL},
- assign_mod = {true, assign_get_value, do_assign, NULL, free_patternarg},
- exec_mod = {true, get_cmd, do_exec, NULL, free_patternarg}
+ match_mod = {get_stringarg, NULL, VarMatch, free_stringarg},
+ nomatch_mod = {get_stringarg, NULL, VarNoMatch, free_stringarg},
+ subst_mod = {get_spatternarg, NULL, VarSubstitute, free_patternarg},
+ resubst_mod = {get_patternarg, do_regex, NULL, free_patternarg},
+ quote_mod = {check_quote, VarQuote, NULL , free},
+ tail_mod = {check_empty, NULL, VarTail, NULL},
+ head_mod = {check_empty, NULL, VarHead, NULL},
+ suffix_mod = {check_empty, NULL, VarSuffix, NULL},
+ root_mod = {check_empty, NULL, VarRoot, NULL},
+ upper_mod = {check_empty, do_upper, NULL, NULL},
+ lower_mod = {check_empty, do_lower, NULL, NULL},
+ shcmd_mod = {check_shcmd, do_shcmd, NULL, NULL},
+ sysv_mod = {get_sysvpattern, NULL, VarSYSVMatch, free_patternarg}
;
void
@@ -219,27 +185,9 @@ VarModifiers_Init()
choose_mod['H'] = &head_mod;
choose_mod['E'] = &suffix_mod;
choose_mod['R'] = &root_mod;
- if (FEATURES(FEATURE_UPPERLOWER)) {
- choose_mod['U'] = &upper_mod;
- choose_mod['L'] = &lower_mod;
- }
- if (FEATURES(FEATURE_SUNSHCMD))
- choose_mod['s'] = &shcmd_mod;
- if (FEATURES(FEATURE_UNIQ))
- choose_mod['u'] = &uniq_mod;
- if (FEATURES(FEATURE_SORT))
- choose_mod['O'] = &sort_mod;
- if (FEATURES(FEATURE_ODE)) {
- choose_mod['@'] = &loop_mod;
- choose_mod['D'] = &def_mod;
- choose_mod['U'] = &undef_mod;
- choose_mod['L'] = &label_mod;
- choose_mod['P'] = &path_mod;
- }
- if (FEATURES(FEATURE_ASSIGN))
- choose_mod[':'] = &assign_mod;
- if (FEATURES(FEATURE_EXECMOD))
- choose_mod['!'] = &exec_mod;
+ choose_mod['U'] = &upper_mod;
+ choose_mod['L'] = &lower_mod;
+ choose_mod['s'] = &shcmd_mod;
}
/* All modifiers handle addSpace (need to add a space before placing the
@@ -345,8 +293,7 @@ VarRoot(struct Name *word, bool addSpace
*-----------------------------------------------------------------------
*/
static bool
-VarMatch(struct Name *word, bool addSpace, Buffer buf,
- void *pattern) /* Pattern the word must match */
+VarMatch(struct Name *word, bool addSpace, Buffer buf, void *pattern)
{
const char *pat = pattern;
@@ -366,8 +313,7 @@ VarMatch(struct Name *word, bool addSpac
*-----------------------------------------------------------------------
*/
static bool
-VarNoMatch(struct Name *word, bool addSpace, Buffer buf,
- void *pattern) /* Pattern the word must not match */
+VarNoMatch(struct Name *word, bool addSpace, Buffer buf, void *pattern)
{
const char *pat = pattern;
@@ -380,198 +326,6 @@ VarNoMatch(struct Name *word, bool addSp
return addSpace;
}
-static bool
-VarUniq(struct Name *word, bool addSpace, Buffer buf, void *lastp)
-{
- struct Name *last = lastp;
-
- /* does not match */
- if (last->s == NULL || last->e - last->s != word->e - word->s ||
- strncmp(word->s, last->s, word->e - word->s) != 0) {
- if (addSpace)
- Buf_AddSpace(buf);
- Buf_Addi(buf, word->s, word->e);
- addSpace = true;
- }
- last->s = word->s;
- last->e = word->e;
- return addSpace;
-}
-
-static bool
-VarLoop(struct Name *word, bool addSpace, Buffer buf, void *vp)
-{
- struct LoopStuff *v = vp;
-
- if (addSpace)
- Buf_AddSpace(buf);
- Var_SubstVar(buf, v->expand, v->var, word->s);
- return true;
-}
-
-static char *
-finish_loop(const char *s, const struct Name *n UNUSED , void *p)
-{
- struct LoopStuff *l = p;
-
- return Var_Subst(s, NULL, l->err);
-}
-
-static int
-NameCompare(const void *ap, const void *bp)
-{
- const struct Name *a, *b;
- size_t n, m;
- int c;
-
- a = ap;
- b = bp;
- n = a->e - a->s;
- m = b->e - b->s;
- if (n < m) {
- c = strncmp(a->s, b->s, n);
- if (c != 0)
- return c;
- else
- return -1;
- } else if (m < n) {
- c = strncmp(a->s, b->s, m);
- if (c != 0)
- return c;
- else
- return 1;
- } else
- return strncmp(a->s, b->s, n);
-}
-
-static char *
-do_sort(const char *s, const struct Name *dummy UNUSED, void *arg UNUSED)
-{
- struct Name *t;
- unsigned long n, i, j;
- const char *start, *end;
-
- n = 1024; /* start at 1024 words */
- t = ereallocarray(NULL, n, sizeof(struct Name));
- start = s;
- end = start;
-
- for (i = 0;; i++) {
- if (i == n) {
- n *= 2;
- t = ereallocarray(t, n, sizeof(struct Name));
- }
- start = iterate_words(&end);
- if (start == NULL)
- break;
- t[i].s = start;
- t[i].e = end;
- }
- if (i > 0) {
- BUFFER buf;
-
- Buf_Init(&buf, end - s);
- qsort(t, i, sizeof(struct Name), NameCompare);
- Buf_Addi(&buf, t[0].s, t[0].e);
- for (j = 1; j < i; j++) {
- Buf_AddSpace(&buf);
- Buf_Addi(&buf, t[j].s, t[j].e);
- }
- free(t);
- return Buf_Retrieve(&buf);
- } else {
- free(t);
- return "";
- }
-}
-
-static char *
-do_label(const char *s UNUSED, const struct Name *n, void *arg UNUSED)
-{
- return Str_dupi(n->s, n->e);
-}
-
-static char *
-do_path(const char *s UNUSED, const struct Name *n, void *arg UNUSED)
-{
- GNode *gn;
-
- gn = Targ_FindNodei(n->s, n->e, TARG_NOCREATE);
- if (gn == NULL)
- return Str_dupi(n->s, n->e);
- else
- return strdup(gn->path);
-}
-
-static char *
-do_def(const char *s, const struct Name *n UNUSED, void *arg)
-{
- VarPattern *v = arg;
- if (s == NULL) {
- free_patternarg(v);
- return NULL;
- } else
- return v->lbuffer;
-}
-
-static char *
-do_undef(const char *s, const struct Name *n UNUSED, void *arg)
-{
- VarPattern *v = arg;
- if (s != NULL) {
- free_patternarg(v);
- return NULL;
- } else
- return v->lbuffer;
-}
-
-static char *
-do_assign(const char *s, const struct Name *n, void *arg)
-{
- VarPattern *v = arg;
- char *msg;
- char *result;
-
- switch (v->flags) {
- case VAR_EQUAL:
- Var_Seti(n->s, n->e, v->lbuffer);
- break;
- case VAR_MAY_EQUAL:
- if (s == NULL)
- Var_Seti(n->s, n->e, v->lbuffer);
- break;
- case VAR_ADD_EQUAL:
- if (s == NULL)
- Var_Seti(n->s, n->e, v->lbuffer);
- else
- Var_Appendi(n->s, n->e, v->lbuffer);
- break;
- case VAR_BANG_EQUAL:
- result = Cmd_Exec(v->lbuffer, &msg);
- if (result != NULL) {
- Var_Seti(n->s, n->e, result);
- free(result);
- } else
- Error(msg, v->lbuffer);
- break;
-
- }
- return NULL;
-}
-
-static char *
-do_exec(const char *s UNUSED, const struct Name *n UNUSED, void *arg)
-{
- VarPattern *v = arg;
- char *msg;
- char *result;
-
- result = Cmd_Exec(v->lbuffer, &msg);
- if (result == NULL)
- Error(msg, v->lbuffer);
- return result;
-}
-
/*-
*-----------------------------------------------------------------------
* VarSYSVMatch --
@@ -958,7 +712,7 @@ VarRESubstitute(struct Name *word, bool
*-----------------------------------------------------------------------
* VarModify --
* Modify each of the words of the passed string using the given
- * function. Used to implement all modifiers.
+ * function. Used to implement most modifiers.
*
* Results:
* A string of all the words modified appropriately.
@@ -1218,56 +972,6 @@ get_spatternarg(const char **p, SymTable
return common_get_patternarg(p, ctxt, err, endc, true);
}
-static void
-free_looparg(void *arg)
-{
- struct LoopStuff *l = arg;
-
- Var_DeleteLoopVar(l->var);
- free(l->expand);
-}
-
-static char *
-LoopGrab(const char **s)
-{
- const char *p, *start;
-
- start = *s;
- for (p = start; *p != '@'; p++) {
- if (*p == '\\')
- p++;
- if (*p == 0)
- return NULL;
- }
- *s = p+1;
- return escape_dupi(start, p, "@\\");
-}
-
-static void *
-get_loop(const char **p, SymTable *ctxt UNUSED, bool err, int endc)
-{
- static struct LoopStuff loop;
- const char *s;
- const char *var;
-
- s = *p +1;
-
- loop.var = NULL;
- loop.expand = NULL;
- loop.err = err;
- var = LoopGrab(&s);
- if (var != NULL) {
- loop.expand = LoopGrab(&s);
- if (*s == endc || *s == ':') {
- *p = s;
- loop.var = Var_NewLoopVar(var, NULL);
- return &loop;
- }
- }
- free_looparg(&loop);
- return NULL;
-}
-
static void *
common_get_patternarg(const char **p, SymTable *ctxt, bool err, int endc,
bool dosubst)
@@ -1328,71 +1032,6 @@ common_get_patternarg(const char **p, Sy
return NULL;
}
-static void *
-assign_get_value(const char **p, SymTable *ctxt, bool err, int endc)
-{
- const char *s;
- int flags;
- VarPattern *arg;
-
- s = *p + 1;
- if (s[0] == '=')
- flags = VAR_EQUAL;
- else if (s[0] == '?' && s[1] == '=')
- flags = VAR_MAY_EQUAL;
- else if (s[0] == '+' && s[1] == '=')
- flags = VAR_ADD_EQUAL;
- else if (s[0] == '!' && s[1] == '=')
- flags = VAR_BANG_EQUAL;
- else
- return NULL;
-
- arg = get_value(&s, ctxt, err, endc);
- if (arg != NULL) {
- *p = s;
- arg->flags = flags;
- }
- return arg;
-}
-
-static void *
-get_value(const char **p, SymTable *ctxt, bool err, int endc)
-{
- VarPattern *pattern;
- const char *s;
-
- pattern = emalloc(sizeof(VarPattern));
- s = *p + 1;
- pattern->rhs = NULL;
- pattern->lbuffer = VarGetPattern(ctxt, err, &s, ':', endc,
- &pattern->leftLen, NULL);
- if (s[-1] == endc || s[-1] == ':') {
- *p = s-1;
- return pattern;
- }
- free_patternarg(pattern);
- return NULL;
-}
-
-static void *
-get_cmd(const char **p, SymTable *ctxt, bool err, int endc UNUSED)
-{
- VarPattern *pattern;
- const char *s;
-
- pattern = emalloc(sizeof(VarPattern));
- s = *p + 1;
- pattern->rhs = NULL;
- pattern->lbuffer = VarGetPattern(ctxt, err, &s, '!', '!',
- &pattern->leftLen, NULL);
- if (s[-1] == '!') {
- *p = s-1;
- return pattern;
- }
- free_patternarg(pattern);
- return NULL;
-}
-
static void
free_patternarg(void *p)
{
@@ -1435,7 +1074,6 @@ VarModifiers_Apply(char *str, const stru
bool err, bool *freePtr, const char **pscan, int paren)
{
const char *tstr;
- bool atstart; /* Some ODE modifiers only make sense at start */
char endc = paren == '(' ? ')' : '}';
const char *start = *pscan;
@@ -1462,7 +1100,6 @@ VarModifiers_Apply(char *str, const stru
* the invocation.
*/
- atstart = true;
while (*tstr != endc && *tstr != '\0') {
struct modifier *mod;
void *arg;
@@ -1479,26 +1116,18 @@ VarModifiers_Apply(char *str, const stru
mod = choose_mod[(unsigned char)*tstr];
arg = NULL;
- if (mod != NULL && (!mod->atstart || atstart))
+ if (mod != NULL)
arg = mod->getarg(&tstr, ctxt, err, endc);
- if (FEATURES(FEATURE_SYSVVARSUB) && arg == NULL) {
+ if (arg == NULL) {
mod = &sysv_mod;
arg = mod->getarg(&tstr, ctxt, err, endc);
}
- atstart = false;
if (arg != NULL) {
- if (str != NULL || (mod->atstart && name != NULL)) {
+ if (str != NULL) {
if (mod->word_apply != NULL) {
newStr = VarModify(str,
mod->word_apply, arg);
- if (mod->apply != NULL) {
- char *newStr2;
-
- newStr2 = mod->apply(newStr,
- name, arg);
- free(newStr);
- newStr = newStr2;
- }
+ assert(mod->apply == NULL);
} else
newStr = mod->apply(str, name, arg);
if (*freePtr)
Index: varname.c
===================================================================
RCS file: /cvs/src/usr.bin/make/varname.c,v
retrieving revision 1.6
diff -u -p -r1.6 varname.c
--- varname.c 25 Aug 2012 08:12:56 -0000 1.6
+++ varname.c 3 Sep 2023 16:44:45 -0000
@@ -25,7 +25,6 @@
*/
#include <stdlib.h>
-#include "config.h"
#include "defines.h"
#include "var.h"
#include "buf.h"
@@ -39,11 +38,6 @@ VarName_Get(const char *start, struct Na
size_t len;
p = cont(start);
- /* If we don't want recursive variables, we skip over '$' */
- if (!FEATURES(FEATURE_RECVARS)) {
- while (*p == '$')
- p = cont(p+1);
- }
if (*p != '$') {
name->s = start;
name->e = p;
Index: lst.lib/lstInt.h
===================================================================
RCS file: /cvs/src/usr.bin/make/lst.lib/lstInt.h,v
retrieving revision 1.15
diff -u -p -r1.15 lstInt.h
--- lst.lib/lstInt.h 19 Jul 2010 19:46:44 -0000 1.15
+++ lst.lib/lstInt.h 3 Sep 2023 16:44:45 -0000
@@ -42,7 +42,6 @@
#ifndef _LSTINT_H_
#define _LSTINT_H_
-#include "config.h"
#include "defines.h"
#include "lst.h"