diff options
author | harti <harti@FreeBSD.org> | 2005-01-26 18:19:39 +0000 |
---|---|---|
committer | harti <harti@FreeBSD.org> | 2005-01-26 18:19:39 +0000 |
commit | 17159f0f8beae09feea301a55dff93895b79399b (patch) | |
tree | c321afb0d87aa82ef737eee5faca7f2adc43af9e /usr.bin/make/main.c | |
parent | 2898737c63ae261843285bb83cce473fc8bf7948 (diff) | |
download | FreeBSD-src-17159f0f8beae09feea301a55dff93895b79399b.zip FreeBSD-src-17159f0f8beae09feea301a55dff93895b79399b.tar.gz |
Fix quoting of the MAKEFLAGS environment variable by only quoting spaces
and tabs. This is still not correct for command line variable values
ending in a backslash because this would require a larger effort.
Document this limitation in the BUGS section of the man page. The
quoting is mostly compatible with that of gmake and smake.
Tested by: Max Okumoto and Joerg Sonnenberger from DragonFly BSD
Reviewed by: ru (man page, partly)
Diffstat (limited to 'usr.bin/make/main.c')
-rw-r--r-- | usr.bin/make/main.c | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/usr.bin/make/main.c b/usr.bin/make/main.c index 2c3ba65..e29df4a 100644 --- a/usr.bin/make/main.c +++ b/usr.bin/make/main.c @@ -144,14 +144,21 @@ static char *objdir; /* where we chdir'ed to */ static void MFLAGS_append(char *flag, char *arg) { + char *str; Var_Append(MAKEFLAGS, flag, VAR_GLOBAL); - if (arg != NULL) - Var_Append(MAKEFLAGS, arg, VAR_GLOBAL); + if (arg != NULL) { + str = MAKEFLAGS_quote(arg); + Var_Append(MAKEFLAGS, str, VAR_GLOBAL); + free(str); + } Var_Append("MFLAGS", flag, VAR_GLOBAL); - if (arg != NULL) - Var_Append("MFLAGS", arg, VAR_GLOBAL); + if (arg != NULL) { + str = MAKEFLAGS_quote(arg); + Var_Append("MFLAGS", str, VAR_GLOBAL); + free(str); + } } /*- @@ -340,7 +347,7 @@ rearg: while((c = getopt(argc, argv, OPTFLAGS)) != -1) { */ for (argv += optind, argc -= optind; *argv; ++argv, --argc) if (Parse_IsVar(*argv)) { - char *ptr = Var_Quote(*argv); + char *ptr = MAKEFLAGS_quote(*argv); Var_Append(MAKEFLAGS, ptr, VAR_GLOBAL); free(ptr); @@ -376,7 +383,7 @@ rearg: while((c = getopt(argc, argv, OPTFLAGS)) != -1) { * Only those that come from the various arguments. */ void -Main_ParseArgLine(char *line) +Main_ParseArgLine(char *line, int mflags) { char **argv; /* Manufactured argument vector */ int argc; /* Number of arguments in argv */ @@ -388,7 +395,11 @@ Main_ParseArgLine(char *line) if (!*line) return; - argv = brk_string(line, &argc, TRUE); + if (mflags) + argv = MAKEFLAGS_break(line, &argc); + else + argv = brk_string(line, &argc, TRUE); + MainParseArgs(argc, argv); } @@ -622,7 +633,7 @@ main(int argc, char **argv) * (Note this is *not* MAKEFLAGS since /bin/make uses that and it's * in a different format). */ - Main_ParseArgLine(getenv("MAKEFLAGS")); + Main_ParseArgLine(getenv("MAKEFLAGS"), 1); MainParseArgs(argc, argv); |