svn commit: r186559 - head/usr.bin/make

David E. O'Brien obrien at FreeBSD.org
Mon Dec 29 10:26:02 UTC 2008


Author: obrien
Date: Mon Dec 29 10:26:02 2008
New Revision: 186559
URL: http://svn.freebsd.org/changeset/base/186559

Log:
  1. Add the ability to tweak the token output before targets in job mode.
     E.g.,  .MAKE.JOB.PREFIX=${.newline}---[${.MAKE.PID}]
     would produce
  
     ---[1234] target ---
  
  2. Added ${.newline} as a simple means of being able to include '\n' in the
     assignment of .MAKE.JOB.PREFIX
  
  Obtained from:	NetBSD

Modified:
  head/usr.bin/make/job.c
  head/usr.bin/make/job.h
  head/usr.bin/make/main.c
  head/usr.bin/make/make.1
  head/usr.bin/make/make.h
  head/usr.bin/make/parse.c

Modified: head/usr.bin/make/job.c
==============================================================================
--- head/usr.bin/make/job.c	Mon Dec 29 08:05:49 2008	(r186558)
+++ head/usr.bin/make/job.c	Mon Dec 29 10:26:02 2008	(r186559)
@@ -321,10 +321,11 @@ static GNode	*lastNode;	/* The node for 
 static const char *targFmt;	/* Format string to use to head output from a
 				 * job when it's not the most-recent job heard
 				 * from */
+static char *targPrefix = NULL;	/* What we print at the start of targFmt */
 
-#define	TARG_FMT  "--- %s ---\n" /* Default format */
+#define TARG_FMT  "%s %s ---\n"	/* Default format */
 #define	MESSAGE(fp, gn) \
-	 fprintf(fp, targFmt, gn->name);
+	fprintf(fp, targFmt, targPrefix, gn->name);
 
 /*
  * When JobStart attempts to run a job but isn't allowed to
@@ -2283,6 +2284,18 @@ Job_Make(GNode *gn)
 	JobStart(gn, 0, NULL);
 }
 
+void
+Job_SetPrefix(void)
+{
+
+	if (targPrefix) {
+		free(targPrefix);
+	} else if (!Var_Exists(MAKE_JOB_PREFIX, VAR_GLOBAL)) {
+		Var_SetGlobal(MAKE_JOB_PREFIX, "---");
+	}
+	targPrefix = Var_Subst("${" MAKE_JOB_PREFIX "}", VAR_GLOBAL, 0)->buf;
+}
+
 /**
  * Job_Init
  *	Initialize the process module, given a maximum number of jobs.
@@ -2350,7 +2363,7 @@ Job_Init(int maxproc)
 
 	lastNode = NULL;
 
-	if ((maxJobs == 1 && fifoFd < 0) || beVerbose == 0) {
+	if (maxJobs == 1 && fifoFd < 0) {
 		/*
 		 * If only one job can run at a time, there's no need for a
 		 * banner, no is there?

Modified: head/usr.bin/make/job.h
==============================================================================
--- head/usr.bin/make/job.h	Mon Dec 29 08:05:49 2008	(r186558)
+++ head/usr.bin/make/job.h	Mon Dec 29 10:26:02 2008	(r186559)
@@ -67,6 +67,7 @@ Boolean Job_Empty(void);
 void Job_Finish(void);
 void Job_Wait(void);
 void Job_AbortAll(void);
+void Job_SetPrefix(void);
 
 void Proc_Init(void);
 

Modified: head/usr.bin/make/main.c
==============================================================================
--- head/usr.bin/make/main.c	Mon Dec 29 08:05:49 2008	(r186558)
+++ head/usr.bin/make/main.c	Mon Dec 29 10:26:02 2008	(r186559)
@@ -1029,6 +1029,16 @@ main(int argc, char **argv)
 #ifdef MAKE_VERSION
 	Var_SetGlobal("MAKE_VERSION", MAKE_VERSION);
 #endif
+	Var_SetGlobal(".newline", "\n");	/* handy for :@ loops */
+	{
+		char tmp[64];
+
+		snprintf(tmp, sizeof(tmp), "%u", getpid());
+		Var_SetGlobal(".MAKE.PID", tmp);
+		snprintf(tmp, sizeof(tmp), "%u", getppid());
+		Var_SetGlobal(".MAKE.PPID", tmp);
+	}
+	Job_SetPrefix();
 
 	/*
 	 * First snag things out of the MAKEFLAGS environment

Modified: head/usr.bin/make/make.1
==============================================================================
--- head/usr.bin/make/make.1	Mon Dec 29 08:05:49 2008	(r186558)
+++ head/usr.bin/make/make.1	Mon Dec 29 10:26:02 2008	(r186559)
@@ -32,7 +32,7 @@
 .\"	@(#)make.1	8.8 (Berkeley) 6/13/95
 .\" $FreeBSD$
 .\"
-.Dd December 26, 2008
+.Dd December 29, 2008
 .Dt MAKE 1
 .Os
 .Sh NAME
@@ -763,6 +763,31 @@ contains all the options from the
 environment variable plus any options specified on
 .Nm Ns 's
 command line.
+.It Va .MAKE.PID
+The process-id of
+.Nm .
+.It Va .MAKE.PPID
+The parent process-id of
+.Nm .
+.It Va .MAKE.JOB.PREFIX
+If
+.Nm
+is run with
+.Fl j Fl v
+then output for each target is prefixed with a token
+.Ql --- target ---
+the first part of which can be controlled via
+.Va .MAKE.JOB.PREFIX .
+.br
+For example:
+.Li .MAKE.JOB.PREFIX=${.newline}---${MAKE:T}[${.MAKE.PID}]
+would produce tokens like
+.Ql ---make[1234] target ---
+or
+.Li .MAKE.JOB.PREFIX=---pid[${.MAKE.PID}],ppid[${.MAKE.PPID}]
+would produce tokens like
+.Ql ---pid[56789],ppid[1234] target ---
+making it easier to track the degree of parallelism being achieved.
 .It Va .TARGETS
 List of targets
 .Nm

Modified: head/usr.bin/make/make.h
==============================================================================
--- head/usr.bin/make/make.h	Mon Dec 29 08:05:49 2008	(r186558)
+++ head/usr.bin/make/make.h	Mon Dec 29 10:26:02 2008	(r186559)
@@ -49,6 +49,8 @@
 
 #include "util.h"
 
+#define	MAKE_JOB_PREFIX	".MAKE.JOB.PREFIX"
+
 struct GNode;
 struct Lst;
 struct Buffer;

Modified: head/usr.bin/make/parse.c
==============================================================================
--- head/usr.bin/make/parse.c	Mon Dec 29 08:05:49 2008	(r186558)
+++ head/usr.bin/make/parse.c	Mon Dec 29 10:26:02 2008	(r186559)
@@ -1533,6 +1533,8 @@ Parse_DoVar(char *line, GNode *ctxt)
 		 */
 		Var_Set(line, cp, ctxt);
 	}
+	if (strcmp(line, MAKE_JOB_PREFIX) == 0)
+		Job_SetPrefix();
 }
 
 /*-


More information about the svn-src-all mailing list