Module Name:    src
Committed By:   sjg
Date:           Sun Nov 10 02:39:14 UTC 2024

Modified Files:
        src/usr.bin/make: main.c make.1

Log Message:
make: allow -f .../Makefile

If the arg to -f or an entry in .MAKE.MAKEFILE_PREFERENCE
starts with ".../" look for the rest of the path in .CURDIR
and above.

Reviewed by: rillig


To generate a diff of this commit:
cvs rdiff -u -r1.634 -r1.635 src/usr.bin/make/main.c
cvs rdiff -u -r1.379 -r1.380 src/usr.bin/make/make.1

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/usr.bin/make/main.c
diff -u src/usr.bin/make/main.c:1.634 src/usr.bin/make/main.c:1.635
--- src/usr.bin/make/main.c:1.634	Tue Aug 27 04:52:14 2024
+++ src/usr.bin/make/main.c	Sun Nov 10 02:39:14 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: main.c,v 1.634 2024/08/27 04:52:14 rillig Exp $	*/
+/*	$NetBSD: main.c,v 1.635 2024/11/10 02:39:14 sjg Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990, 1993
@@ -111,7 +111,7 @@
 #include "trace.h"
 
 /*	"@(#)main.c	8.3 (Berkeley) 3/19/94"	*/
-MAKE_RCSID("$NetBSD: main.c,v 1.634 2024/08/27 04:52:14 rillig Exp $");
+MAKE_RCSID("$NetBSD: main.c,v 1.635 2024/11/10 02:39:14 sjg Exp $");
 #if defined(MAKE_NATIVE)
 __COPYRIGHT("@(#) Copyright (c) 1988, 1989, 1990, 1993 "
 	    "The Regents of the University of California.  "
@@ -1636,6 +1636,20 @@ ReadMakefile(const char *fname)
 		Parse_File("(stdin)", -1);
 		Var_Set(SCOPE_INTERNAL, "MAKEFILE", "");
 	} else {
+		if (strncmp(fname, ".../", 4) == 0) {
+			name = Dir_FindHereOrAbove(curdir, fname + 4);
+			if (name != NULL) {
+				/* Dir_FindHereOrAbove returns dirname */
+				path = str_concat3(name, "/",
+				    str_basename(fname));
+				free(name);
+				fd = open(path, O_RDONLY);
+				if (fd != -1) {
+					fname = path;
+					goto found;
+				}
+			}
+		}
 		/* if we've chdir'd, rebuild the path name */
 		if (strcmp(curdir, objdir) != 0 && *fname != '/') {
 			path = str_concat3(curdir, "/", fname);

Index: src/usr.bin/make/make.1
diff -u src/usr.bin/make/make.1:1.379 src/usr.bin/make/make.1:1.380
--- src/usr.bin/make/make.1:1.379	Sat Sep 21 23:42:53 2024
+++ src/usr.bin/make/make.1	Sun Nov 10 02:39:14 2024
@@ -1,4 +1,4 @@
-.\"	$NetBSD: make.1,v 1.379 2024/09/21 23:42:53 sjg Exp $
+.\"	$NetBSD: make.1,v 1.380 2024/11/10 02:39:14 sjg Exp $
 .\"
 .\" Copyright (c) 1990, 1993
 .\"	The Regents of the University of California.  All rights reserved.
@@ -29,7 +29,7 @@
 .\"
 .\"	from: @(#)make.1	8.4 (Berkeley) 3/19/94
 .\"
-.Dd September 21, 2024
+.Dd November 10, 2024
 .Dt MAKE 1
 .Os
 .Sh NAME
@@ -60,10 +60,11 @@ If no
 .Fl f Ar makefile
 option is given,
 .Nm
-tries to open
-.Sq Pa makefile
-then
-.Sq Pa Makefile
+looks for the makefiles listed in
+.Va .MAKE.MAKEFILE_PREFERENCE
+(default
+.Sq Pa makefile ,
+.Sq Pa Makefile )
 in order to find the specifications.
 If the file
 .Sq Pa .depend
@@ -240,6 +241,13 @@ If
 is
 .Ql \&- ,
 standard input is read.
+If
+.Ar makefile
+starts with the string
+.Ql \&.../ ,
+.Nm
+searches for the specified path in the rest of the argument
+in the current directory and its parents.
 Multiple makefiles may be specified, and are read in the order specified.
 .It Fl I Ar directory
 Specify a directory in which to search for makefiles and included makefiles.

Reply via email to