summaryrefslogtreecommitdiffstats
path: root/usr.bin
diff options
context:
space:
mode:
authorharti <harti@FreeBSD.org>2005-04-29 14:37:44 +0000
committerharti <harti@FreeBSD.org>2005-04-29 14:37:44 +0000
commit0dc78c5fd6526b3f2a71681dd5108eda768eb7a9 (patch)
tree59d4e7054572274f51ee7f8df8fcc8d3bdf73937 /usr.bin
parent3a568cbe4a3fb67af9a46789a00206482e9c8207 (diff)
downloadFreeBSD-src-0dc78c5fd6526b3f2a71681dd5108eda768eb7a9.zip
FreeBSD-src-0dc78c5fd6526b3f2a71681dd5108eda768eb7a9.tar.gz
Implement a pseudo-target .WARN that allows toggeling the warning flags
for the current make. This does not override flags specified on the command line and these settings are not passed to sub-makes.
Diffstat (limited to 'usr.bin')
-rw-r--r--usr.bin/make/cond.c4
-rw-r--r--usr.bin/make/directive_hash.c48
-rw-r--r--usr.bin/make/globals.h4
-rw-r--r--usr.bin/make/main.c60
-rw-r--r--usr.bin/make/nonints.h2
-rw-r--r--usr.bin/make/parse.c23
6 files changed, 109 insertions, 32 deletions
diff --git a/usr.bin/make/cond.c b/usr.bin/make/cond.c
index 792fe75..fb2978a 100644
--- a/usr.bin/make/cond.c
+++ b/usr.bin/make/cond.c
@@ -1123,7 +1123,7 @@ Cond_Else(char *line __unused, int code __unused, int lineno __unused)
while (isspace((u_char)*line))
line++;
- if (*line != '\0' && (warnflags & WARN_DIRSYNTAX)) {
+ if (*line != '\0' && (warn_flags & WARN_DIRSYNTAX)) {
Parse_Error(PARSE_WARNING, "junk after .else ignored '%s'",
line);
}
@@ -1164,7 +1164,7 @@ Cond_Endif(char *line __unused, int code __unused, int lineno __unused)
while (isspace((u_char)*line))
line++;
- if (*line != '\0' && (warnflags & WARN_DIRSYNTAX)) {
+ if (*line != '\0' && (warn_flags & WARN_DIRSYNTAX)) {
Parse_Error(PARSE_WARNING, "junk after .endif ignored '%s'",
line);
}
diff --git a/usr.bin/make/directive_hash.c b/usr.bin/make/directive_hash.c
index 3478bc5..bb43a18 100644
--- a/usr.bin/make/directive_hash.c
+++ b/usr.bin/make/directive_hash.c
@@ -1,7 +1,7 @@
/*
* DO NOT EDIT
* $FreeBSD$
- * auto-generated from FreeBSD: src/usr.bin/make/parse.c,v 1.97 2005/04/28 07:55:55 harti Exp
+ * auto-generated from FreeBSD: src/usr.bin/make/parse.c,v 1.98 2005/04/28 12:05:43 harti Exp
* DO NOT EDIT
*/
#include <sys/types.h>
@@ -66,8 +66,8 @@ directive_hash(const u_char *key, size_t len)
}
/*
* d=2
- * n=67
- * m=32
+ * n=69
+ * m=33
* c=2.09
* maxlen=1
* minklen=4
@@ -75,34 +75,34 @@ directive_hash(const u_char *key, size_t len)
* minchar=46
* maxchar=95
* loop=0
- * numiter=2
+ * numiter=8
* seed=
*/
static const signed char keyword_g[] = {
- 17, -1, 18, 13, 26, 0, 0, 29, -1, 0,
- 7, -1, -1, 23, 13, 27, -1, 0, 14, 24,
- -1, -1, 0, 24, -1, 0, -1, 27, 19, 12,
- 3, -1, -1, 3, 19, 28, 10, 17, -1, 8,
- -1, -1, -1, 0, 5, 8, -1, 0, -1, -1,
- 0, 27, 4, -1, -1, 25, -1, 30, -1, 8,
- 16, -1, 0, -1, 0, 26, 14,
+ -1, 17, 16, 0, -1, -1, -1, -1, 25, 18,
+ 2, -1, -1, 27, 28, 1, 0, 15, 16, -1,
+ -1, 14, 19, 1, -1, 13, -1, 0, 1, -1,
+ 11, 15, 0, 8, 14, 18, 31, -1, -1, 22,
+ -1, 27, -1, 0, -1, 9, -1, -1, -1, 21,
+ 3, 25, 0, 0, 0, -1, -1, 6, 0, 19,
+ -1, -1, -1, 23, -1, 17, -1, 0, 0,
};
static const u_char keyword_T0[] = {
- 17, 32, 43, 6, 64, 15, 20, 26, 30, 64,
- 54, 31, 6, 61, 4, 49, 62, 37, 23, 50,
- 6, 58, 29, 19, 32, 50, 56, 8, 18, 40,
- 51, 36, 6, 27, 42, 3, 59, 12, 46, 23,
- 9, 50, 4, 16, 44, 25, 15, 40, 62, 55,
+ 8, 30, 55, 61, 14, 13, 48, 1, 18, 12,
+ 0, 52, 1, 40, 44, 52, 33, 58, 29, 29,
+ 3, 30, 26, 42, 1, 49, 10, 26, 5, 45,
+ 65, 13, 6, 22, 45, 61, 7, 25, 62, 65,
+ 8, 34, 48, 50, 5, 63, 33, 38, 52, 33,
};
static const u_char keyword_T1[] = {
- 24, 38, 31, 14, 65, 31, 23, 17, 27, 45,
- 32, 44, 19, 45, 18, 31, 28, 43, 0, 21,
- 29, 27, 42, 55, 21, 31, 14, 13, 66, 17,
- 39, 40, 5, 4, 5, 4, 52, 28, 21, 12,
- 7, 54, 6, 43, 49, 24, 7, 27, 0, 24,
+ 44, 18, 49, 61, 56, 13, 1, 54, 1, 47,
+ 46, 17, 22, 36, 25, 66, 14, 36, 58, 51,
+ 60, 22, 61, 19, 43, 37, 5, 18, 50, 58,
+ 32, 65, 47, 12, 28, 34, 65, 29, 59, 67,
+ 48, 36, 15, 41, 44, 11, 39, 29, 18, 68,
};
@@ -122,8 +122,8 @@ keyword_hash(const u_char *key, size_t len)
f1 += keyword_T1[-46 + *kp];
}
- f0 %= 67;
- f1 %= 67;
+ f0 %= 69;
+ f1 %= 69;
- return (keyword_g[f0] + keyword_g[f1]) % 32;
+ return (keyword_g[f0] + keyword_g[f1]) % 33;
}
diff --git a/usr.bin/make/globals.h b/usr.bin/make/globals.h
index 9528272..fa6c260 100644
--- a/usr.bin/make/globals.h
+++ b/usr.bin/make/globals.h
@@ -121,6 +121,8 @@ extern Boolean oldVars; /* Do old-style variable substitution */
extern int debug;
/* warning flags */
-extern uint32_t warnflags;
+extern uint32_t warn_cmd; /* positive warning flags on command line */
+extern uint32_t warn_nocmd; /* negative warning flags on command line */
+extern uint32_t warn_flags; /* current warning flags */
#endif /* globals_h_1c1edb96 */
diff --git a/usr.bin/make/main.c b/usr.bin/make/main.c
index 1588f3c..8bb8897 100644
--- a/usr.bin/make/main.c
+++ b/usr.bin/make/main.c
@@ -107,7 +107,9 @@ Lst create = Lst_Initializer(create);
time_t now; /* Time at start of make */
struct GNode *DEFAULT; /* .DEFAULT node */
Boolean allPrecious; /* .PRECIOUS given on line by itself */
-uint32_t warnflags;
+uint32_t warn_flags; /* actual warning flags */
+uint32_t warn_cmd; /* command line warning flags */
+uint32_t warn_nocmd; /* command line no-warning flags */
static Boolean noBuiltins; /* -r flag */
@@ -171,6 +173,58 @@ MFLAGS_append(const char *flag, char *arg)
}
/**
+ * Main_ParseWarn
+ *
+ * Handle argument to warning option.
+ */
+int
+Main_ParseWarn(const char *arg, int iscmd)
+{
+ int i, neg;
+
+ static const struct {
+ const char *option;
+ uint32_t flag;
+ } options[] = {
+ { "dirsyntax", WARN_DIRSYNTAX },
+ { NULL, 0 }
+ };
+
+ neg = 0;
+ if (arg[0] == 'n' && arg[1] == 'o') {
+ neg = 1;
+ arg += 2;
+ }
+
+ for (i = 0; options[i].option != NULL; i++)
+ if (strcmp(arg, options[i].option) == 0)
+ break;
+
+ if (options[i].option == NULL)
+ /* unknown option */
+ return (-1);
+
+ if (iscmd) {
+ if (!neg) {
+ warn_cmd |= options[i].flag;
+ warn_nocmd &= ~options[i].flag;
+ warn_flags |= options[i].flag;
+ } else {
+ warn_nocmd |= options[i].flag;
+ warn_cmd &= ~options[i].flag;
+ warn_flags &= ~options[i].flag;
+ }
+ } else {
+ if (!neg) {
+ warn_flags |= (options[i].flag & ~warn_nocmd);
+ } else {
+ warn_flags &= ~(options[i].flag | warn_cmd);
+ }
+ }
+ return (0);
+}
+
+/**
* MainParseArgs
* Parse a given argument vector. Called from main() and from
* Main_ParseArgLine() when the .MAKEFLAGS target is used.
@@ -347,10 +401,8 @@ rearg:
MFLAGS_append("-v", NULL);
break;
case 'x':
- if (strncmp(optarg, "dirsyntax", strlen(optarg)) == 0) {
+ if (Main_ParseWarn(optarg, 1) != -1)
MFLAGS_append("-x", optarg);
- warnflags |= WARN_DIRSYNTAX;
- }
break;
default:
diff --git a/usr.bin/make/nonints.h b/usr.bin/make/nonints.h
index 3bef7ce..a1ce141 100644
--- a/usr.bin/make/nonints.h
+++ b/usr.bin/make/nonints.h
@@ -45,7 +45,7 @@
struct Buffer;
void Main_ParseArgLine(char *, int);
+int Main_ParseWarn(const char *, int);
Buffer *Cmd_Exec(char *, const char **);
-
#endif /* nonints_h_33c5dafb */
diff --git a/usr.bin/make/parse.c b/usr.bin/make/parse.c
index 8274aa4..f53cf8b 100644
--- a/usr.bin/make/parse.c
+++ b/usr.bin/make/parse.c
@@ -174,6 +174,7 @@ typedef enum {
SingleShell, /* .SINGLESHELL */
Suffixes, /* .SUFFIXES */
Wait, /* .WAIT */
+ Warn, /* .WARN */
Attribute /* Generic attribute */
} ParseSpecial;
@@ -231,6 +232,7 @@ static const struct keyword {
{ ".SUFFIXES", Suffixes, 0 },
{ ".USE", Attribute, OP_USE },
{ ".WAIT", Wait, 0 },
+ { ".WARN", Warn, 0 },
/* KEYWORD-END-TAG */
};
#define NKEYWORDS (sizeof(parseKeywords) / sizeof(parseKeywords[0]))
@@ -396,6 +398,23 @@ ParsePopInput(void)
return (TAILQ_EMPTY(&includes) ? DONE : CONTINUE);
}
+/**
+ * parse_warn
+ * Parse the .WARN pseudo-target.
+ */
+static void
+parse_warn(char *line)
+{
+ char **argv;
+ int argc;
+ int i;
+
+ argv = brk_string(line, &argc, TRUE);
+
+ for (i = 1; i < argc; i++)
+ Main_ParseWarn(argv[i], 0);
+}
+
/*-
*---------------------------------------------------------------------
* ParseLinkSrc --
@@ -1065,6 +1084,10 @@ ParseDoDependency(char *line)
Main_ParseArgLine(line, 0);
*line = '\0';
+ } else if (specType == Warn) {
+ parse_warn(line);
+ *line = '\0';
+
} else if (specType == ExShell) {
if (Job_ParseShell(line) != SUCCESS) {
Parse_Error(PARSE_FATAL,
OpenPOWER on IntegriCloud