Diff below implements the ${<D} and ${<F} variables for make, as
documented in the manual. These variables are equivalent to ${<:H} and
${<:T} repectively, however the former variants are more portable, as
they are also understood by GNU, FreeBSD and NetBSD make.
Absence of those variables reported by Dario Niedermann on bugs@.
Ok?
natano
Index: Makefile
===================================================================
RCS file: /cvs/src/usr.bin/make/Makefile,v
retrieving revision 1.60
diff -u -p -r1.60 Makefile
--- Makefile 14 Oct 2015 13:50:22 -0000 1.60
+++ Makefile 9 Oct 2016 20:06:23 -0000
@@ -29,7 +29,7 @@ CLEANFILES+= varhashconsts.h condhashcon
beforedepend: varhashconsts.h condhashconsts.h nodehashconsts.h
# may need tweaking if you add variable synonyms or change the hash function
-MAGICVARSLOTS=77
+MAGICVARSLOTS=82
MAGICCONDSLOTS=65
varhashconsts.h: generate
Index: generate.c
===================================================================
RCS file: /cvs/src/usr.bin/make/generate.c,v
retrieving revision 1.17
diff -u -p -r1.17 generate.c
--- generate.c 18 Apr 2015 18:28:37 -0000 1.17
+++ generate.c 9 Oct 2016 20:06:23 -0000
@@ -61,6 +61,8 @@ char *table_var[] = {
M(DARCHIVE),
M(FMEMBER),
M(DMEMBER),
+ M(FIMPSRC),
+ M(DIMPSRC),
NULL
};
Index: var.c
===================================================================
RCS file: /cvs/src/usr.bin/make/var.c,v
retrieving revision 1.99
diff -u -p -r1.99 var.c
--- var.c 27 Sep 2015 16:58:16 -0000 1.99
+++ var.c 9 Oct 2016 20:06:23 -0000
@@ -147,9 +147,9 @@ static char *varnames[] = {
PREFIX,
ARCHIVE,
MEMBER,
+ IMPSRC,
OODATE,
ALLSRC,
- IMPSRC,
FTARGET,
DTARGET,
FPREFIX,
@@ -157,7 +157,9 @@ static char *varnames[] = {
FARCHIVE,
DARCHIVE,
FMEMBER,
- DMEMBER
+ DMEMBER,
+ FIMPSRC,
+ DIMPSRC
};
static bool xtlist[] = {
@@ -166,9 +168,9 @@ static bool xtlist[] = {
false, /* $* */
false, /* $! */
true, /* $% */
+ true, /* $< */
false, /* $? */
false, /* $> */
- true, /* $< */
true, /* ${@F} */
true, /* ${@D} */
false, /* ${*F} */
@@ -177,6 +179,8 @@ static bool xtlist[] = {
false, /* ${!D} */
true, /* ${%F} */
true, /* ${%D} */
+ true, /* ${<F} */
+ true, /* ${<D} */
};
/* so that we can access tlist[-1] */
@@ -194,6 +198,8 @@ static bool *tlist = xtlist+1;
#define DARCHIVE_INDEX 12
#define FMEMBER_INDEX 13
#define DMEMBER_INDEX 14
+#define FIMPSRC_INDEX 15
+#define DIMPSRC_INDEX 16
#define GLOBAL_INDEX -1
@@ -365,7 +371,15 @@ classify_var(const char *name, const cha
break;
case K_DMEMBER % MAGICSLOTS1:
if (name[0] == DMEMBER[0] && name[1] == DMEMBER[1] && len == 2)
- return DMEMBER_INDEX;
+ return DMEMBER_INDEX;
+ break;
+ case K_FIMPSRC % MAGICSLOTS1:
+ if (name[0] == FIMPSRC[0] && name[1] == FIMPSRC[1] && len == 2)
+ return FIMPSRC_INDEX;
+ break;
+ case K_DIMPSRC % MAGICSLOTS1:
+ if (name[0] == DIMPSRC[0] && name[1] == DIMPSRC[1] && len == 2)
+ return DIMPSRC_INDEX;
break;
default:
break;
Index: var.h
===================================================================
RCS file: /cvs/src/usr.bin/make/var.h,v
retrieving revision 1.17
diff -u -p -r1.17 var.h
--- var.h 6 Jan 2014 12:08:18 -0000 1.17
+++ var.h 9 Oct 2016 20:06:23 -0000
@@ -64,9 +64,9 @@ extern void Var_Deletei(const char *, co
#define PREFIX_INDEX 1
#define ARCHIVE_INDEX 2
#define MEMBER_INDEX 3
-#define OODATE_INDEX 4
-#define ALLSRC_INDEX 5
-#define IMPSRC_INDEX 6
+#define IMPSRC_INDEX 4
+#define OODATE_INDEX 5
+#define ALLSRC_INDEX 6
#define Var(idx, gn) ((gn)->context.locals[idx])