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"
 


Reply via email to