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])
 

Reply via email to