Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/usr.bin/make make(1): extract HandlePWD from main
details: https://anonhg.NetBSD.org/src/rev/cafe88fbf867
branches: trunk
changeset: 941458:cafe88fbf867
user: rillig <rillig%NetBSD.org@localhost>
date: Thu Oct 22 06:38:52 2020 +0000
description:
make(1): extract HandlePWD from main
diffstat:
usr.bin/make/main.c | 74 ++++++++++++++++++++++++++++++----------------------
1 files changed, 42 insertions(+), 32 deletions(-)
diffs (117 lines):
diff -r 708072815af7 -r cafe88fbf867 usr.bin/make/main.c
--- a/usr.bin/make/main.c Thu Oct 22 05:50:02 2020 +0000
+++ b/usr.bin/make/main.c Thu Oct 22 06:38:52 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: main.c,v 1.380 2020/10/22 05:50:02 rillig Exp $ */
+/* $NetBSD: main.c,v 1.381 2020/10/22 06:38:52 rillig Exp $ */
/*
* Copyright (c) 1988, 1989, 1990, 1993
@@ -118,7 +118,7 @@
#include "trace.h"
/* "@(#)main.c 8.3 (Berkeley) 3/19/94" */
-MAKE_RCSID("$NetBSD: main.c,v 1.380 2020/10/22 05:50:02 rillig Exp $");
+MAKE_RCSID("$NetBSD: main.c,v 1.381 2020/10/22 06:38:52 rillig Exp $");
#if defined(MAKE_NATIVE) && !defined(lint)
__COPYRIGHT("@(#) Copyright (c) 1988, 1989, 1990, 1993 "
"The Regents of the University of California. "
@@ -1022,6 +1022,43 @@
#endif
}
+#ifndef NO_PWD_OVERRIDE
+/*
+ * All this code is so that we know where we are when we start up
+ * on a different machine with pmake.
+ * Overriding getcwd() with $PWD totally breaks MAKEOBJDIRPREFIX
+ * since the value of curdir can vary depending on how we got
+ * here. Ie sitting at a shell prompt (shell that provides $PWD)
+ * or via subdir.mk in which case its likely a shell which does
+ * not provide it.
+ * So, to stop it breaking this case only, we ignore PWD if
+ * MAKEOBJDIRPREFIX is set or MAKEOBJDIR contains a transform.
+ */
+static void
+HandlePWD(const struct stat *sa)
+{
+ char *pwd, *ptmp1 = NULL, *ptmp2 = NULL;
+ struct stat sb;
+
+ if (ignorePWD || (pwd = getenv("PWD")) == NULL)
+ return;
+
+ if (Var_Value("MAKEOBJDIRPREFIX", VAR_CMD, &ptmp1) == NULL) {
+ const char *makeobjdir = Var_Value("MAKEOBJDIR",
+ VAR_CMD, &ptmp2);
+
+ if (makeobjdir == NULL || !strchr(makeobjdir, '$')) {
+ if (stat(pwd, &sb) == 0 &&
+ sa->st_ino == sb.st_ino &&
+ sa->st_dev == sb.st_dev)
+ (void)strncpy(curdir, pwd, MAXPATHLEN);
+ }
+ }
+ bmake_free(ptmp1);
+ bmake_free(ptmp2);
+}
+#endif
+
/*-
* main --
* The main function, for obvious reasons. Initializes variables
@@ -1043,7 +1080,7 @@
main(int argc, char **argv)
{
Boolean outOfDate; /* FALSE if all targets up to date */
- struct stat sb, sa;
+ struct stat sa;
char *p1, *path;
char mdpath[MAXPATHLEN];
const char *machine;
@@ -1172,6 +1209,7 @@
*/
p1 = argv[0];
} else {
+ struct stat sb;
/*
* A relative path, canonicalize it.
*/
@@ -1253,36 +1291,8 @@
exit(2);
}
- /*
- * All this code is so that we know where we are when we start up
- * on a different machine with pmake.
- * Overriding getcwd() with $PWD totally breaks MAKEOBJDIRPREFIX
- * since the value of curdir can vary depending on how we got
- * here. Ie sitting at a shell prompt (shell that provides $PWD)
- * or via subdir.mk in which case its likely a shell which does
- * not provide it.
- * So, to stop it breaking this case only, we ignore PWD if
- * MAKEOBJDIRPREFIX is set or MAKEOBJDIR contains a transform.
- */
#ifndef NO_PWD_OVERRIDE
- if (!ignorePWD) {
- char *pwd, *ptmp1 = NULL, *ptmp2 = NULL;
-
- if ((pwd = getenv("PWD")) != NULL &&
- Var_Value("MAKEOBJDIRPREFIX", VAR_CMD, &ptmp1) == NULL) {
- const char *makeobjdir = Var_Value("MAKEOBJDIR",
- VAR_CMD, &ptmp2);
-
- if (makeobjdir == NULL || !strchr(makeobjdir, '$')) {
- if (stat(pwd, &sb) == 0 &&
- sa.st_ino == sb.st_ino &&
- sa.st_dev == sb.st_dev)
- (void)strncpy(curdir, pwd, MAXPATHLEN);
- }
- }
- bmake_free(ptmp1);
- bmake_free(ptmp2);
- }
+ HandlePWD(&sa);
#endif
Var_Set(".CURDIR", curdir, VAR_GLOBAL);
Home |
Main Index |
Thread Index |
Old Index