summaryrefslogtreecommitdiff
path: root/usr.bin/make
diff options
context:
space:
mode:
authorsjg <sjg@NetBSD.org>2017-08-10 21:07:48 +0000
committersjg <sjg@NetBSD.org>2017-08-10 21:07:48 +0000
commit024cc42bf1909a5868fbf4aa86d3ed2e045739f9 (patch)
treef8b2fdcae10cafff69c38710c05e329c49e22247 /usr.bin/make
parente2e1887fdd71aa90fa6f6f24298d16b95e30437d (diff)
Avoid full path meta file names for subdir of .OBJDIR
Diffstat (limited to 'usr.bin/make')
-rw-r--r--usr.bin/make/meta.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/usr.bin/make/meta.c b/usr.bin/make/meta.c
index af717d019a2..05cdc7a0f7d 100644
--- a/usr.bin/make/meta.c
+++ b/usr.bin/make/meta.c
@@ -1,4 +1,4 @@
-/* $NetBSD: meta.c,v 1.68 2017/07/09 04:54:00 sjg Exp $ */
+/* $NetBSD: meta.c,v 1.69 2017/08/10 21:07:48 sjg Exp $ */
/*
* Implement 'meta' mode.
@@ -246,6 +246,8 @@ meta_name(struct GNode *gn, char *mname, size_t mnamelen,
char *rp;
char *cp;
char *tp;
+ char *dtp;
+ size_t ldname;
/*
* Weed out relative paths from the target file name.
@@ -282,10 +284,15 @@ meta_name(struct GNode *gn, char *mname, size_t mnamelen,
}
/* on some systems dirname may modify its arg */
tp = bmake_strdup(tname);
- if (strcmp(dname, dirname(tp)) == 0)
+ dtp = dirname(tp);
+ if (strcmp(dname, dtp) == 0)
snprintf(mname, mnamelen, "%s.meta", tname);
else {
- snprintf(mname, mnamelen, "%s/%s.meta", dname, tname);
+ ldname = strlen(dname);
+ if (strncmp(dname, dtp, ldname) == 0 && dtp[ldname] == '/')
+ snprintf(mname, mnamelen, "%s/%s.meta", dname, &tname[ldname+1]);
+ else
+ snprintf(mname, mnamelen, "%s/%s.meta", dname, tname);
/*
* Replace path separators in the file name after the