Module Name: src
Committed By: sjg
Date: Thu Feb 6 01:13:19 UTC 2020
Modified Files:
src/usr.bin/make: Makefile job.c meta.c
Log Message:
Fix meta_compat mode.
We need to call meta_job_output() from meta_compat_parent()
Also, the need for extra fds for meta mode only applies when
using filemon_ktrace.c.
Since we hope to see more interfaces like that, test for
USE_FILEMON_DEV being not defined.
Reviewed by: riastradh
To generate a diff of this commit:
cvs rdiff -u -r1.68 -r1.69 src/usr.bin/make/Makefile
cvs rdiff -u -r1.196 -r1.197 src/usr.bin/make/job.c
cvs rdiff -u -r1.77 -r1.78 src/usr.bin/make/meta.c
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/Makefile
diff -u src/usr.bin/make/Makefile:1.68 src/usr.bin/make/Makefile:1.69
--- src/usr.bin/make/Makefile:1.68 Sun Jan 19 19:50:54 2020
+++ src/usr.bin/make/Makefile Thu Feb 6 01:13:19 2020
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.68 2020/01/19 19:50:54 riastradh Exp $
+# $NetBSD: Makefile,v 1.69 2020/02/06 01:13:19 sjg Exp $
# @(#)Makefile 5.2 (Berkeley) 12/28/90
PROG= make
@@ -24,7 +24,7 @@ USE_FILEMON ?= ktrace
.PATH: ${.CURDIR}/filemon
SRCS+= filemon_${USE_FILEMON}.c
-CPPFLAGS+= -DUSE_FILEMON
+CPPFLAGS+= -DUSE_FILEMON -DUSE_FILEMON_${USE_FILEMON:tu}
.if ${USE_FILEMON} == "dev"
FILEMON_H ?= /usr/include/dev/filemon/filemon.h
@@ -67,5 +67,5 @@ COPTS.meta.c+= ${GCC_NO_FORMAT_TRUNCATIO
COPTS.parse.c+= ${GCC_NO_FORMAT_TRUNCATION}
# A simple unit-test driver to help catch regressions
-accept test:
+accept test: .MAKE
cd ${.CURDIR}/unit-tests && MAKEFLAGS= ${.MAKE} -r -m / TEST_MAKE=${TEST_MAKE:U${.OBJDIR}/${PROG:T}} ${.TARGET}
Index: src/usr.bin/make/job.c
diff -u src/usr.bin/make/job.c:1.196 src/usr.bin/make/job.c:1.197
--- src/usr.bin/make/job.c:1.196 Sun Jan 19 19:42:32 2020
+++ src/usr.bin/make/job.c Thu Feb 6 01:13:19 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: job.c,v 1.196 2020/01/19 19:42:32 riastradh Exp $ */
+/* $NetBSD: job.c,v 1.197 2020/02/06 01:13:19 sjg Exp $ */
/*
* Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -70,14 +70,14 @@
*/
#ifndef MAKE_NATIVE
-static char rcsid[] = "$NetBSD: job.c,v 1.196 2020/01/19 19:42:32 riastradh Exp $";
+static char rcsid[] = "$NetBSD: job.c,v 1.197 2020/02/06 01:13:19 sjg Exp $";
#else
#include <sys/cdefs.h>
#ifndef lint
#if 0
static char sccsid[] = "@(#)job.c 8.2 (Berkeley) 3/19/94";
#else
-__RCSID("$NetBSD: job.c,v 1.196 2020/01/19 19:42:32 riastradh Exp $");
+__RCSID("$NetBSD: job.c,v 1.197 2020/02/06 01:13:19 sjg Exp $");
#endif
#endif /* not lint */
#endif
@@ -362,7 +362,7 @@ const char *malloc_options="A";
static unsigned
nfds_per_job(void)
{
-#ifdef USE_META
+#if defined(USE_FILEMON) && !defined(USE_FILEMON_DEV)
if (useMeta)
return 2;
#endif
@@ -2145,7 +2145,7 @@ Job_CatchOutput(void)
job = jobfds[i];
if (job->job_state == JOB_ST_RUNNING)
JobDoOutput(job, FALSE);
-#ifdef USE_META
+#if defined(USE_FILEMON) && !defined(USE_FILEMON_DEV)
/*
* With meta mode, we may have activity on the job's filemon
* descriptor too, which at the moment is any pollfd other than
@@ -2824,7 +2824,7 @@ watchfd(Job *job)
jobfds[nfds] = job;
job->inPollfd = &fds[nfds];
nfds++;
-#ifdef USE_META
+#if defined(USE_FILEMON) && !defined(USE_FILEMON_DEV)
if (useMeta) {
fds[nfds].fd = meta_job_fd(job);
fds[nfds].events = fds[nfds].fd == -1 ? 0 : POLLIN;
@@ -2842,7 +2842,7 @@ clearfd(Job *job)
Punt("Unwatching unwatched job");
i = job->inPollfd - fds;
nfds--;
-#ifdef USE_META
+#if defined(USE_FILEMON) && !defined(USE_FILEMON_DEV)
if (useMeta) {
/*
* Sanity check: there should be two fds per job, so the job's
@@ -2861,7 +2861,7 @@ clearfd(Job *job)
fds[i] = fds[nfds];
jobfds[i] = jobfds[nfds];
jobfds[i]->inPollfd = &fds[i];
-#ifdef USE_META
+#if defined(USE_FILEMON) && !defined(USE_FILEMON_DEV)
if (useMeta) {
fds[i + 1] = fds[nfds + 1];
jobfds[i + 1] = jobfds[nfds + 1];
Index: src/usr.bin/make/meta.c
diff -u src/usr.bin/make/meta.c:1.77 src/usr.bin/make/meta.c:1.78
--- src/usr.bin/make/meta.c:1.77 Wed Jan 22 21:04:29 2020
+++ src/usr.bin/make/meta.c Thu Feb 6 01:13:19 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: meta.c,v 1.77 2020/01/22 21:04:29 sjg Exp $ */
+/* $NetBSD: meta.c,v 1.78 2020/02/06 01:13:19 sjg Exp $ */
/*
* Implement 'meta' mode.
@@ -716,7 +716,7 @@ meta_job_child(Job *job)
void
meta_job_parent(Job *job, pid_t pid)
{
-#ifdef USE_FILEMON
+#if defined(USE_FILEMON) && !defined(USE_FILEMON_DEV)
BuildMon *pbm;
if (job != NULL) {
@@ -733,7 +733,7 @@ meta_job_parent(Job *job, pid_t pid)
int
meta_job_fd(Job *job)
{
-#ifdef USE_FILEMON
+#if defined(USE_FILEMON) && !defined(USE_FILEMON_DEV)
BuildMon *pbm;
if (job != NULL) {
@@ -751,7 +751,7 @@ meta_job_fd(Job *job)
int
meta_job_event(Job *job)
{
-#ifdef USE_FILEMON
+#if defined(USE_FILEMON) && !defined(USE_FILEMON_DEV)
BuildMon *pbm;
if (job != NULL) {
@@ -1680,16 +1680,13 @@ void
meta_compat_parent(pid_t child)
{
int outfd, metafd, maxfd, nfds;
- char buf[BUFSIZ];
+ char buf[BUFSIZ+1];
fd_set readfds;
meta_job_parent(NULL, child);
close(childPipe[1]); /* child side */
outfd = childPipe[0];
- if (!Mybm.filemon) /* no meta */
- return;
- metafd = filemon_readfd(Mybm.filemon);
-
+ metafd = Mybm.filemon ? filemon_readfd(Mybm.filemon) : -1;
maxfd = -1;
if (outfd > maxfd)
maxfd = outfd;
@@ -1713,7 +1710,7 @@ meta_compat_parent(pid_t child)
if (outfd != -1 && FD_ISSET(outfd, &readfds)) do {
/* XXX this is not line-buffered */
- ssize_t nread = read(outfd, buf, sizeof buf);
+ ssize_t nread = read(outfd, buf, sizeof(buf) - 1);
if (nread == -1)
err(1, "read");
if (nread == 0) {
@@ -1723,6 +1720,8 @@ meta_compat_parent(pid_t child)
}
fwrite(buf, 1, (size_t)nread, stdout);
fflush(stdout);
+ buf[nread] = '\0';
+ meta_job_output(NULL, buf, "");
} while (0);
if (metafd != -1 && FD_ISSET(metafd, &readfds)) {
if (meta_job_event(NULL) <= 0)