From 2699974e7e20f8f832ac275dc37ecc8baacbced0 Mon Sep 17 00:00:00 2001 From: obrien Date: Tue, 9 Oct 2012 05:06:30 +0000 Subject: [PATCH] MF9: r237100: MFC r236338, r236339, r236346, r236347, r236365, & r236977 * Deprecate the FreeBSD 10's make's ":U" (to-upper case) and ":L" (to-lower case) modifiers for ":tu" and ":tl". * make it easier to test newly-built make. * Add "-V '${VAR}'" variable expansion from Portable Berkeley Make. * regression test for '-V' command line option and the :t[lu] modifiers. MF9: r241364: Update MAKE_VERSION for r237100. MFC: r201225: add missing `void' keyword. git-svn-id: svn://svn.freebsd.org/base/stable/8@241368 ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f --- tools/regression/usr.bin/make/all.sh | 0 tools/regression/usr.bin/make/common.sh | 0 tools/regression/usr.bin/make/test-new.mk | 9 ++++++ .../make/variables/modifier_t/Makefile | 15 ++++++++++ .../variables/modifier_t/expected.status.1 | 1 + .../variables/modifier_t/expected.status.2 | 1 + .../variables/modifier_t/expected.status.3 | 1 + .../variables/modifier_t/expected.stderr.1 | 0 .../variables/modifier_t/expected.stderr.2 | 0 .../variables/modifier_t/expected.stderr.3 | 0 .../variables/modifier_t/expected.stdout.1 | 1 + .../variables/modifier_t/expected.stdout.2 | 1 + .../variables/modifier_t/expected.stdout.3 | 1 + .../usr.bin/make/variables/modifier_t/test.t | 14 +++++++++ .../usr.bin/make/variables/opt_V/Makefile | 15 ++++++++++ .../make/variables/opt_V/expected.status.1 | 1 + .../make/variables/opt_V/expected.status.2 | 1 + .../make/variables/opt_V/expected.stderr.1 | 0 .../make/variables/opt_V/expected.stderr.2 | 0 .../make/variables/opt_V/expected.stdout.1 | 2 ++ .../make/variables/opt_V/expected.stdout.2 | 2 ++ .../usr.bin/make/variables/opt_V/test.t | 14 +++++++++ usr.bin/make/Makefile | 4 ++- usr.bin/make/job.c | 2 +- usr.bin/make/make.1 | 26 ++++++++++++++++- usr.bin/make/var.c | 29 +++++++++++++++---- 26 files changed, 132 insertions(+), 8 deletions(-) mode change 100644 => 100755 tools/regression/usr.bin/make/all.sh mode change 100644 => 100755 tools/regression/usr.bin/make/common.sh create mode 100644 tools/regression/usr.bin/make/test-new.mk create mode 100644 tools/regression/usr.bin/make/variables/modifier_t/Makefile create mode 100644 tools/regression/usr.bin/make/variables/modifier_t/expected.status.1 create mode 100644 tools/regression/usr.bin/make/variables/modifier_t/expected.status.2 create mode 100644 tools/regression/usr.bin/make/variables/modifier_t/expected.status.3 create mode 100644 tools/regression/usr.bin/make/variables/modifier_t/expected.stderr.1 create mode 100644 tools/regression/usr.bin/make/variables/modifier_t/expected.stderr.2 create mode 100644 tools/regression/usr.bin/make/variables/modifier_t/expected.stderr.3 create mode 100644 tools/regression/usr.bin/make/variables/modifier_t/expected.stdout.1 create mode 100644 tools/regression/usr.bin/make/variables/modifier_t/expected.stdout.2 create mode 100644 tools/regression/usr.bin/make/variables/modifier_t/expected.stdout.3 create mode 100644 tools/regression/usr.bin/make/variables/modifier_t/test.t create mode 100644 tools/regression/usr.bin/make/variables/opt_V/Makefile create mode 100644 tools/regression/usr.bin/make/variables/opt_V/expected.status.1 create mode 100644 tools/regression/usr.bin/make/variables/opt_V/expected.status.2 create mode 100644 tools/regression/usr.bin/make/variables/opt_V/expected.stderr.1 create mode 100644 tools/regression/usr.bin/make/variables/opt_V/expected.stderr.2 create mode 100644 tools/regression/usr.bin/make/variables/opt_V/expected.stdout.1 create mode 100644 tools/regression/usr.bin/make/variables/opt_V/expected.stdout.2 create mode 100644 tools/regression/usr.bin/make/variables/opt_V/test.t diff --git a/tools/regression/usr.bin/make/all.sh b/tools/regression/usr.bin/make/all.sh old mode 100644 new mode 100755 diff --git a/tools/regression/usr.bin/make/common.sh b/tools/regression/usr.bin/make/common.sh old mode 100644 new mode 100755 diff --git a/tools/regression/usr.bin/make/test-new.mk b/tools/regression/usr.bin/make/test-new.mk new file mode 100644 index 000000000..f200833f8 --- /dev/null +++ b/tools/regression/usr.bin/make/test-new.mk @@ -0,0 +1,9 @@ +# $FreeBSD$ + +NEW_DIR!= make -C ${.CURDIR}/../../../../usr.bin/make -V .OBJDIR + +all: + rm -rf /tmp/${USER}.make.test + env MAKE_PROG=${NEW_DIR}/make ${.SHELL} ./all.sh + +.include diff --git a/tools/regression/usr.bin/make/variables/modifier_t/Makefile b/tools/regression/usr.bin/make/variables/modifier_t/Makefile new file mode 100644 index 000000000..53844eecf --- /dev/null +++ b/tools/regression/usr.bin/make/variables/modifier_t/Makefile @@ -0,0 +1,15 @@ +# $FreeBSD$ +# +# Test the t modifier. +# +# below is missing ' +ASCII= !"\#$$%&()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ + +test1: + @echo '${ASCII}' + +test2: + @echo '${ASCII:tl}' + +test3: + @echo '${ASCII:tu}' diff --git a/tools/regression/usr.bin/make/variables/modifier_t/expected.status.1 b/tools/regression/usr.bin/make/variables/modifier_t/expected.status.1 new file mode 100644 index 000000000..573541ac9 --- /dev/null +++ b/tools/regression/usr.bin/make/variables/modifier_t/expected.status.1 @@ -0,0 +1 @@ +0 diff --git a/tools/regression/usr.bin/make/variables/modifier_t/expected.status.2 b/tools/regression/usr.bin/make/variables/modifier_t/expected.status.2 new file mode 100644 index 000000000..573541ac9 --- /dev/null +++ b/tools/regression/usr.bin/make/variables/modifier_t/expected.status.2 @@ -0,0 +1 @@ +0 diff --git a/tools/regression/usr.bin/make/variables/modifier_t/expected.status.3 b/tools/regression/usr.bin/make/variables/modifier_t/expected.status.3 new file mode 100644 index 000000000..573541ac9 --- /dev/null +++ b/tools/regression/usr.bin/make/variables/modifier_t/expected.status.3 @@ -0,0 +1 @@ +0 diff --git a/tools/regression/usr.bin/make/variables/modifier_t/expected.stderr.1 b/tools/regression/usr.bin/make/variables/modifier_t/expected.stderr.1 new file mode 100644 index 000000000..e69de29bb diff --git a/tools/regression/usr.bin/make/variables/modifier_t/expected.stderr.2 b/tools/regression/usr.bin/make/variables/modifier_t/expected.stderr.2 new file mode 100644 index 000000000..e69de29bb diff --git a/tools/regression/usr.bin/make/variables/modifier_t/expected.stderr.3 b/tools/regression/usr.bin/make/variables/modifier_t/expected.stderr.3 new file mode 100644 index 000000000..e69de29bb diff --git a/tools/regression/usr.bin/make/variables/modifier_t/expected.stdout.1 b/tools/regression/usr.bin/make/variables/modifier_t/expected.stdout.1 new file mode 100644 index 000000000..dff38fdd0 --- /dev/null +++ b/tools/regression/usr.bin/make/variables/modifier_t/expected.stdout.1 @@ -0,0 +1 @@ +!"#$%&()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ diff --git a/tools/regression/usr.bin/make/variables/modifier_t/expected.stdout.2 b/tools/regression/usr.bin/make/variables/modifier_t/expected.stdout.2 new file mode 100644 index 000000000..71a0f6077 --- /dev/null +++ b/tools/regression/usr.bin/make/variables/modifier_t/expected.stdout.2 @@ -0,0 +1 @@ +!"#$%&()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ diff --git a/tools/regression/usr.bin/make/variables/modifier_t/expected.stdout.3 b/tools/regression/usr.bin/make/variables/modifier_t/expected.stdout.3 new file mode 100644 index 000000000..6434c7ba7 --- /dev/null +++ b/tools/regression/usr.bin/make/variables/modifier_t/expected.stdout.3 @@ -0,0 +1 @@ +!"#$%&()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~ diff --git a/tools/regression/usr.bin/make/variables/modifier_t/test.t b/tools/regression/usr.bin/make/variables/modifier_t/test.t new file mode 100644 index 000000000..f564f6ea9 --- /dev/null +++ b/tools/regression/usr.bin/make/variables/modifier_t/test.t @@ -0,0 +1,14 @@ +#!/bin/sh + +# $FreeBSD$ + +cd `dirname $0` +. ../../common.sh + +# Description +DESC="Variable expansion with t modifiers" + +# Run +TEST_N=3 + +eval_cmd $* diff --git a/tools/regression/usr.bin/make/variables/opt_V/Makefile b/tools/regression/usr.bin/make/variables/opt_V/Makefile new file mode 100644 index 000000000..128e5118b --- /dev/null +++ b/tools/regression/usr.bin/make/variables/opt_V/Makefile @@ -0,0 +1,15 @@ +# $FreeBSD$ +# +# Test the -V option +# + +FOO= foo +FOOBAR= ${FOO}bar + +test1: + @echo "-V FOOBAR" + @${MAKE} -V FOOBAR + +test2: + @echo '-V "$${FOOBAR}"' + @${MAKE} -V '$${FOOBAR}' diff --git a/tools/regression/usr.bin/make/variables/opt_V/expected.status.1 b/tools/regression/usr.bin/make/variables/opt_V/expected.status.1 new file mode 100644 index 000000000..573541ac9 --- /dev/null +++ b/tools/regression/usr.bin/make/variables/opt_V/expected.status.1 @@ -0,0 +1 @@ +0 diff --git a/tools/regression/usr.bin/make/variables/opt_V/expected.status.2 b/tools/regression/usr.bin/make/variables/opt_V/expected.status.2 new file mode 100644 index 000000000..573541ac9 --- /dev/null +++ b/tools/regression/usr.bin/make/variables/opt_V/expected.status.2 @@ -0,0 +1 @@ +0 diff --git a/tools/regression/usr.bin/make/variables/opt_V/expected.stderr.1 b/tools/regression/usr.bin/make/variables/opt_V/expected.stderr.1 new file mode 100644 index 000000000..e69de29bb diff --git a/tools/regression/usr.bin/make/variables/opt_V/expected.stderr.2 b/tools/regression/usr.bin/make/variables/opt_V/expected.stderr.2 new file mode 100644 index 000000000..e69de29bb diff --git a/tools/regression/usr.bin/make/variables/opt_V/expected.stdout.1 b/tools/regression/usr.bin/make/variables/opt_V/expected.stdout.1 new file mode 100644 index 000000000..050db40ee --- /dev/null +++ b/tools/regression/usr.bin/make/variables/opt_V/expected.stdout.1 @@ -0,0 +1,2 @@ +-V FOOBAR +foobar diff --git a/tools/regression/usr.bin/make/variables/opt_V/expected.stdout.2 b/tools/regression/usr.bin/make/variables/opt_V/expected.stdout.2 new file mode 100644 index 000000000..4da2aeffa --- /dev/null +++ b/tools/regression/usr.bin/make/variables/opt_V/expected.stdout.2 @@ -0,0 +1,2 @@ +-V "${FOOBAR}" +foobar diff --git a/tools/regression/usr.bin/make/variables/opt_V/test.t b/tools/regression/usr.bin/make/variables/opt_V/test.t new file mode 100644 index 000000000..32a74b6c4 --- /dev/null +++ b/tools/regression/usr.bin/make/variables/opt_V/test.t @@ -0,0 +1,14 @@ +#!/bin/sh + +# $FreeBSD$ + +cd `dirname $0` +. ../../common.sh + +# Description +DESC="Variable expansion using command line '-V'" + +# Run +TEST_N=2 + +eval_cmd $* diff --git a/usr.bin/make/Makefile b/usr.bin/make/Makefile index deb076f90..acc449676 100644 --- a/usr.bin/make/Makefile +++ b/usr.bin/make/Makefile @@ -11,7 +11,9 @@ SRCS= arch.c buf.c cond.c dir.c for.c hash.c hash_tables.c job.c \ WARNS?= 6 NO_SHARED?= YES -CFLAGS+=-DMAKE_VERSION=\"5200408120\" +# Version has the RYYYYMMDDX format, where R is from RELENG_ +CFLAGS+=-DMAKE_VERSION=\"8201210080\" + # There is no obvious performance improvement currently. # CFLAGS+=-DUSE_KQUEUE diff --git a/usr.bin/make/job.c b/usr.bin/make/job.c index e37c62c62..527925a62 100644 --- a/usr.bin/make/job.c +++ b/usr.bin/make/job.c @@ -485,7 +485,7 @@ catch_child(int sig __unused) /** */ void -Proc_Init() +Proc_Init(void) { /* * Catch SIGCHLD so that we get kicked out of select() when we diff --git a/usr.bin/make/make.1 b/usr.bin/make/make.1 index 863c337d3..8294af5c7 100644 --- a/usr.bin/make/make.1 +++ b/usr.bin/make/make.1 @@ -32,7 +32,7 @@ .\" @(#)make.1 8.8 (Berkeley) 6/13/95 .\" $FreeBSD$ .\" -.Dd November 5, 2011 +.Dd May 30, 2012 .Dt MAKE 1 .Os .Sh NAME @@ -290,6 +290,11 @@ Do not build any targets. Multiple instances of this option may be specified; the variables will be printed one per line, with a blank line for each null or undefined variable. +If +.Ar variable +contains a +.Sq Ic $ +then the value will be expanded before printing. .It Fl v Be extra verbose. Print any extra information. @@ -873,6 +878,7 @@ Replaces each word in the variable with everything but the last component. .It Cm L Converts variable to lower-case letters. .It Cm M Ns Ar pattern +(deprecated) Select only those words that match the rest of the modifier. The standard shell wildcard characters .Pf ( Ql * , @@ -963,8 +969,13 @@ to be replaced in .Ar new_string . .It Cm T Replaces each word in the variable with its last component. +.It Cm tl +Converts variable to lower-case letters. +.It Cm tu +Converts variable to upper-case letters. .It Cm U Converts variable to upper-case letters. +(deprecated) .It Cm u Remove adjacent duplicate words (like .Xr uniq 1 ) . @@ -1711,6 +1722,19 @@ is set to the same value as .Va .MAKE ; support for this may be removed in the future. .Pp +The use of the +.Cm :L +and +.Cm :U +modifiers will be deprecated +in +.Fx 10.0 +and the more portable (among Pmake decedents) +.Cm :tl +and +.Cm :tu +should be used instead. +.Pp Most of the more esoteric features of .Nm should probably be avoided for greater compatibility. diff --git a/usr.bin/make/var.c b/usr.bin/make/var.c index 983bb2ae7..671295794 100644 --- a/usr.bin/make/var.c +++ b/usr.bin/make/var.c @@ -1748,6 +1748,19 @@ ParseModifier(VarParser *vp, char startc, Var *v, Boolean *freeResult) case 'C': newStr = modifier_C(vp, value, v); break; + case 't': + /* :tl :tu for OSF ODE & NetBSD make compatibility */ + switch (vp->ptr[1]) { + case 'l': + vp->ptr++; + goto mod_lower; + break; + case 'u': + vp->ptr++; + goto mod_upper; + break; + } + /* FALLTHROUGH */ default: if (vp->ptr[1] != endc && vp->ptr[1] != ':') { #ifdef SUNSHCMD @@ -1776,6 +1789,7 @@ ParseModifier(VarParser *vp, char startc, Var *v, Boolean *freeResult) switch (vp->ptr[0]) { case 'L': + mod_lower: { const char *cp; Buffer *buf; @@ -1801,6 +1815,7 @@ ParseModifier(VarParser *vp, char startc, Var *v, Boolean *freeResult) vp->ptr++; break; case 'U': + mod_upper: { const char *cp; Buffer *buf; @@ -2580,7 +2595,7 @@ void Var_Print(Lst *vlist, Boolean expandVars) { LstNode *n; - const char *name; + char *name; LST_FOREACH(n, vlist) { name = Lst_Datum(n); @@ -2588,13 +2603,17 @@ Var_Print(Lst *vlist, Boolean expandVars) char *value; char *v; - v = emalloc(strlen(name) + 1 + 3); - sprintf(v, "${%s}", name); - + if (*name == '$') { + v = name; + } else { + v = emalloc(strlen(name) + 1 + 3); + sprintf(v, "${%s}", name); + } value = Buf_Peel(Var_Subst(v, VAR_GLOBAL, FALSE)); printf("%s\n", value); - free(v); + if (v != name) + free(v); free(value); } else { const char *value = Var_Value(name, VAR_GLOBAL); -- 2.45.0