Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/usr.bin/make make: backport to C90



details:   https://anonhg.NetBSD.org/src/rev/7b5d0aff12ec
branches:  trunk
changeset: 1020207:7b5d0aff12ec
user:      rillig <rillig%NetBSD.org@localhost>
date:      Sat Apr 03 14:39:02 2021 +0000

description:
make: backport to C90

In the past few months I had accidentally used C99 features in the make
code.  According to tools/README, tools that are used in the build
system should restrict themselves to C90.

This allows make to build with GCC's options "-pedantic
-Wno-system-headers -Dinline= -Wno-error=cast-qual".

I didn't notice anyone actively complaining though, I just wanted to see
how much work this backporting would be.  The identifier __func__ is
still used, as in other tools.

No functional change.

diffstat:

 usr.bin/make/hash.c    |    6 +-
 usr.bin/make/job.c     |   13 ++++-
 usr.bin/make/make.h    |    6 +-
 usr.bin/make/nonints.h |   59 ++++++++++++++++++++++++----
 usr.bin/make/str.c     |   22 ++++++++-
 usr.bin/make/var.c     |  102 +++++++++++++++++++++++++++++++++++-------------
 6 files changed, 157 insertions(+), 51 deletions(-)

diffs (truncated from 455 to 300 lines):

diff -r 7058bde9b68d -r 7b5d0aff12ec usr.bin/make/hash.c
--- a/usr.bin/make/hash.c       Sat Apr 03 14:31:44 2021 +0000
+++ b/usr.bin/make/hash.c       Sat Apr 03 14:39:02 2021 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: hash.c,v 1.62 2021/04/03 11:08:40 rillig Exp $ */
+/*     $NetBSD: hash.c,v 1.63 2021/04/03 14:39:02 rillig Exp $ */
 
 /*
  * Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -74,7 +74,7 @@
 #include "make.h"
 
 /*     "@(#)hash.c     8.1 (Berkeley) 6/6/93"  */
-MAKE_RCSID("$NetBSD: hash.c,v 1.62 2021/04/03 11:08:40 rillig Exp $");
+MAKE_RCSID("$NetBSD: hash.c,v 1.63 2021/04/03 14:39:02 rillig Exp $");
 
 /*
  * The ratio of # entries to # buckets at which we rebuild the table to
@@ -227,7 +227,7 @@
        t->bucketsMask = newMask;
        t->buckets = newBuckets;
        DEBUG5(HASH, "%s: %p size=%d entries=%d maxchain=%d\n",
-              __func__, t, t->bucketsSize, t->numEntries, t->maxchain);
+           __func__, (void *)t, t->bucketsSize, t->numEntries, t->maxchain);
        t->maxchain = 0;
 }
 
diff -r 7058bde9b68d -r 7b5d0aff12ec usr.bin/make/job.c
--- a/usr.bin/make/job.c        Sat Apr 03 14:31:44 2021 +0000
+++ b/usr.bin/make/job.c        Sat Apr 03 14:39:02 2021 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: job.c,v 1.421 2021/04/03 11:08:40 rillig Exp $ */
+/*     $NetBSD: job.c,v 1.422 2021/04/03 14:39:02 rillig Exp $ */
 
 /*
  * Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -142,7 +142,7 @@
 #include "trace.h"
 
 /*     "@(#)job.c      8.2 (Berkeley) 3/19/94" */
-MAKE_RCSID("$NetBSD: job.c,v 1.421 2021/04/03 11:08:40 rillig Exp $");
+MAKE_RCSID("$NetBSD: job.c,v 1.422 2021/04/03 14:39:02 rillig Exp $");
 
 /*
  * A shell defines how the commands are run.  All commands for a target are
@@ -1000,7 +1000,10 @@
 {
        StringListNode *ln;
        bool seen = false;
-       ShellWriter wr = { job->cmdFILE, false };
+       ShellWriter wr;
+
+       wr.f = job->cmdFILE;
+       wr.xtraced = false;
 
        for (ln = job->node->commands.first; ln != NULL; ln = ln->next) {
                const char *cmd = ln->datum;
@@ -1216,10 +1219,12 @@
 TouchRegular(GNode *gn)
 {
        const char *file = GNode_Path(gn);
-       struct utimbuf times = { now, now };
+       struct utimbuf times;
        int fd;
        char c;
 
+       times.actime = now;
+       times.modtime = now;
        if (utime(file, &times) >= 0)
                return;
 
diff -r 7058bde9b68d -r 7b5d0aff12ec usr.bin/make/make.h
--- a/usr.bin/make/make.h       Sat Apr 03 14:31:44 2021 +0000
+++ b/usr.bin/make/make.h       Sat Apr 03 14:39:02 2021 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: make.h,v 1.257 2021/04/03 11:08:40 rillig Exp $        */
+/*     $NetBSD: make.h,v 1.258 2021/04/03 14:39:02 rillig Exp $        */
 
 /*
  * Copyright (c) 1988, 1989, 1990, 1993
@@ -101,7 +101,7 @@
 #define FD_CLOEXEC 1
 #endif
 
-#if defined(__GNUC__)
+#if defined(__GNUC__) && __STDC_VERSION__ >= 199901L
 #define MAKE_GNUC_PREREQ(x, y)                                         \
        ((__GNUC__ == (x) && __GNUC_MINOR__ >= (y)) ||                  \
         (__GNUC__ > (x)))
@@ -738,7 +738,7 @@
 MAKE_INLINE const char *
 GNode_VarMember(GNode *gn) { return GNode_ValueDirect(gn, MEMBER); }
 
-#ifdef __GNUC__
+#if defined(__GNUC__) && __STDC_VERSION__ >= 199901L
 #define UNCONST(ptr)   ({              \
     union __unconst {                  \
        const void *__cp;               \
diff -r 7058bde9b68d -r 7b5d0aff12ec usr.bin/make/nonints.h
--- a/usr.bin/make/nonints.h    Sat Apr 03 14:31:44 2021 +0000
+++ b/usr.bin/make/nonints.h    Sat Apr 03 14:39:02 2021 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: nonints.h,v 1.207 2021/04/03 11:08:40 rillig Exp $     */
+/*     $NetBSD: nonints.h,v 1.208 2021/04/03 14:39:02 rillig Exp $     */
 
 /*
  * Copyright (c) 1988, 1989, 1990, 1993
@@ -186,18 +186,31 @@
        void *freeIt;
 } Words;
 
+#if __STDC_VERSION__ >= 199901L
+#  define FStr_Literal(str, freeIt) (FStr) { str, freeIt }
+#else
+MAKE_INLINE FStr
+FStr_Literal(const char *str, void *freeIt)
+{
+       FStr fstr;
+       fstr.str = str;
+       fstr.freeIt = freeIt;
+       return fstr;
+}
+#endif
+
 /* Return a string that is the sole owner of str. */
 MAKE_INLINE FStr
 FStr_InitOwn(char *str)
 {
-       return (FStr){ str, str };
+       return FStr_Literal(str, str);
 }
 
 /* Return a string that refers to the shared str. */
 MAKE_INLINE FStr
 FStr_InitRefer(const char *str)
 {
-       return (FStr){ str, NULL };
+       return FStr_Literal(str, NULL);
 }
 
 MAKE_INLINE void
@@ -210,18 +223,31 @@
 #endif
 }
 
+#if __STDC_VERSION__ >= 199901L
+#  define MFStr_Literal(str, freeIt) (MFStr) { str, freeIt }
+#else
+MAKE_INLINE MFStr
+MFStr_Literal(char *str, void *freeIt)
+{
+       MFStr mfstr;
+       mfstr.str = str;
+       mfstr.freeIt = freeIt;
+       return mfstr;
+}
+#endif
+
 /* Return a string that is the sole owner of str. */
 MAKE_INLINE MFStr
 MFStr_InitOwn(char *str)
 {
-       return (MFStr){ str, str };
+       return MFStr_Literal(str, str);
 }
 
 /* Return a string that refers to the shared str. */
 MAKE_INLINE MFStr
 MFStr_InitRefer(char *str)
 {
-       return (MFStr){ str, NULL };
+       return MFStr_Literal(str, NULL);
 }
 
 MAKE_INLINE void
@@ -344,10 +370,25 @@
        bool : 0;
 } VarEvalFlags;
 
-#define VARE_PARSE_ONLY        (VarEvalFlags) { false, false, false, false }
-#define VARE_WANTRES   (VarEvalFlags) { true, false, false, false }
-#define VARE_UNDEFERR  (VarEvalFlags) { true, true, false, false }
-#define VARE_KEEP_DOLLAR_UNDEF (VarEvalFlags) { true, false, true, true }
+#if __STDC_VERSION__ >= 199901L
+#define VarEvalFlagsLiteral(wantRes, undefErr, keep) \
+       (VarEvalFlags) { wantRes, undefErr, keep, keep }
+#else
+MAKE_INLINE VarEvalFlags
+VarEvalFlagsLiteral(bool wantRes, bool undefErr, bool keep)
+{
+       VarEvalFlags eflags;
+       eflags.wantRes = wantRes;
+       eflags.undefErr = undefErr;
+       eflags.keepDollar = keep;
+       eflags.keepUndef = keep;
+       return eflags;
+}
+#endif
+#define VARE_PARSE_ONLY                VarEvalFlagsLiteral(false, false, false)
+#define VARE_WANTRES           VarEvalFlagsLiteral(true, false, false)
+#define VARE_UNDEFERR          VarEvalFlagsLiteral(true, true, false)
+#define VARE_KEEP_DOLLAR_UNDEF VarEvalFlagsLiteral(true, false, true)
 
 typedef enum VarSetFlags {
        VAR_SET_NONE            = 0,
diff -r 7058bde9b68d -r 7b5d0aff12ec usr.bin/make/str.c
--- a/usr.bin/make/str.c        Sat Apr 03 14:31:44 2021 +0000
+++ b/usr.bin/make/str.c        Sat Apr 03 14:39:02 2021 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: str.c,v 1.82 2021/04/03 11:08:40 rillig Exp $  */
+/*     $NetBSD: str.c,v 1.83 2021/04/03 14:39:02 rillig Exp $  */
 
 /*
  * Copyright (c) 1988, 1989, 1990, 1993
@@ -71,7 +71,7 @@
 #include "make.h"
 
 /*     "@(#)str.c      5.8 (Berkeley) 6/1/90"  */
-MAKE_RCSID("$NetBSD: str.c,v 1.82 2021/04/03 11:08:40 rillig Exp $");
+MAKE_RCSID("$NetBSD: str.c,v 1.83 2021/04/03 14:39:02 rillig Exp $");
 
 /* Return the concatenation of s1 and s2, freshly allocated. */
 char *
@@ -213,9 +213,15 @@
                        word_start = NULL;
                        if (ch == '\n' || ch == '\0') {
                                if (expand && inquote != '\0') {
+                                       Words res;
+
                                        free(words);
                                        free(words_buf);
-                                       return (Words){ NULL, 0, NULL };
+
+                                       res.words = NULL;
+                                       res.len = 0;
+                                       res.freeIt = NULL;
+                                       return res;
                                }
                                goto done;
                        }
@@ -263,7 +269,15 @@
        }
 done:
        words[words_len] = NULL;        /* useful for argv */
-       return (Words){ words, words_len, words_buf };
+
+       {
+               Words result;
+
+               result.words = words;
+               result.len = words_len;
+               result.freeIt = words_buf;
+               return result;
+       }
 }
 
 /*
diff -r 7058bde9b68d -r 7b5d0aff12ec usr.bin/make/var.c
--- a/usr.bin/make/var.c        Sat Apr 03 14:31:44 2021 +0000
+++ b/usr.bin/make/var.c        Sat Apr 03 14:39:02 2021 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: var.c,v 1.896 2021/04/03 14:31:44 rillig Exp $ */
+/*     $NetBSD: var.c,v 1.897 2021/04/03 14:39:02 rillig Exp $ */
 
 /*
  * Copyright (c) 1988, 1989, 1990, 1993
@@ -140,7 +140,7 @@
 #include "metachar.h"
 
 /*     "@(#)var.c      8.3 (Berkeley) 3/19/94" */
-MAKE_RCSID("$NetBSD: var.c,v 1.896 2021/04/03 14:31:44 rillig Exp $");
+MAKE_RCSID("$NetBSD: var.c,v 1.897 2021/04/03 14:39:02 rillig Exp $");
 
 typedef enum VarFlags {
        VFL_NONE        = 0,
@@ -2049,12 +2049,18 @@
        "defined"
 };
 
+#if __STDC_VERSION__ >= 199901L
+#define const_member const
+#else
+#define const_member /* no const possible */
+#endif
+
 /* A variable expression such as $@ or ${VAR:Mpattern:Q}. */
 typedef struct Expr {
        Var *var;
        FStr value;
-       VarEvalFlags const eflags;
-       GNode *const scope;
+       VarEvalFlags const_member eflags;
+       GNode *const_member scope;
        ExprDefined defined;
 } Expr;
 
@@ -2087,9 +2093,9 @@
 typedef struct ModChain {
        Expr *expr;
        /* '\0' or '{' or '(' */



Home | Main Index | Thread Index | Old Index