aboutsummaryrefslogtreecommitdiff
path: root/contrib/bmake/job.h
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/bmake/job.h')
-rw-r--r--contrib/bmake/job.h126
1 files changed, 17 insertions, 109 deletions
diff --git a/contrib/bmake/job.h b/contrib/bmake/job.h
index 574c12ed16a0..2b4b5e59c37e 100644
--- a/contrib/bmake/job.h
+++ b/contrib/bmake/job.h
@@ -1,4 +1,4 @@
-/* $NetBSD: job.h,v 1.77 2021/12/15 12:58:01 rillig Exp $ */
+/* $NetBSD: job.h,v 1.85 2025/07/06 07:11:31 rillig Exp $ */
/*
* Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -73,115 +73,14 @@
* from: @(#)job.h 8.1 (Berkeley) 6/6/93
*/
-/*
- * Running of jobs in parallel mode.
- */
+/* Run jobs in parallel mode. */
#ifndef MAKE_JOB_H
#define MAKE_JOB_H
-#define TMPPAT "makeXXXXXX" /* relative to tmpdir */
-
-#ifdef USE_SELECT
-/*
- * Emulate poll() in terms of select(). This is not a complete
- * emulation but it is sufficient for make's purposes.
- */
-
-#define poll emul_poll
-#define pollfd emul_pollfd
+typedef struct Job Job;
-struct emul_pollfd {
- int fd;
- short events;
- short revents;
-};
-
-#define POLLIN 0x0001
-#define POLLOUT 0x0004
-
-int emul_poll(struct pollfd *, int, int);
-#endif
-
-/*
- * The POLL_MSEC constant determines the maximum number of milliseconds spent
- * in poll before coming out to see if a child has finished.
- */
-#define POLL_MSEC 5000
-
-struct pollfd;
-
-
-#ifdef USE_META
-# include "meta.h"
-#endif
-
-typedef enum JobStatus {
- JOB_ST_FREE = 0, /* Job is available */
- JOB_ST_SET_UP = 1, /* Job is allocated but otherwise invalid */
- /* XXX: What about the 2? */
- JOB_ST_RUNNING = 3, /* Job is running, pid valid */
- JOB_ST_FINISHED = 4 /* Job is done (ie after SIGCHILD) */
-} JobStatus;
-
-/*
- * A Job manages the shell commands that are run to create a single target.
- * Each job is run in a separate subprocess by a shell. Several jobs can run
- * in parallel.
- *
- * The shell commands for the target are written to a temporary file,
- * then the shell is run with the temporary file as stdin, and the output
- * of that shell is captured via a pipe.
- *
- * When a job is finished, Make_Update updates all parents of the node
- * that was just remade, marking them as ready to be made next if all
- * other dependencies are finished as well.
- */
-typedef struct Job {
- /* The process ID of the shell running the commands */
- int pid;
-
- /* The target the child is making */
- GNode *node;
-
- /*
- * If one of the shell commands is "...", all following commands are
- * delayed until the .END node is made. This list node points to the
- * first of these commands, if any.
- */
- StringListNode *tailCmds;
-
- /* This is where the shell commands go. */
- FILE *cmdFILE;
-
- int exit_status; /* from wait4() in signal handler */
-
- JobStatus status;
-
- bool suspended;
-
- /* Ignore non-zero exits */
- bool ignerr;
- /* Output the command before or instead of running it. */
- bool echo;
- /* Target is a special one. */
- bool special;
-
- int inPipe; /* Pipe for reading output from job */
- int outPipe; /* Pipe for writing control commands */
- struct pollfd *inPollfd; /* pollfd associated with inPipe */
-
-#define JOB_BUFSIZE 1024
- /* Buffer for storing the output of the job, line by line. */
- char outBuf[JOB_BUFSIZE + 1];
- size_t curPos; /* Current position in outBuf. */
-
-#ifdef USE_META
- struct BuildMon bm;
-#endif
-} Job;
-
-extern const char *shellPath;
+extern char *shellPath;
extern const char *shellName;
extern char *shellErrFlag;
@@ -189,6 +88,11 @@ extern int jobTokensRunning; /* tokens currently "out" */
void Shell_Init(void);
const char *Shell_GetNewline(void) MAKE_ATTR_USE;
+
+void TokenPool_Init(int, int, int);
+bool TokenPool_Take(void) MAKE_ATTR_USE;
+void TokenPool_Return(void);
+
void Job_Touch(GNode *, bool);
bool Job_CheckCommands(GNode *, void (*abortProc)(const char *, ...))
MAKE_ATTR_USE;
@@ -197,16 +101,20 @@ void Job_CatchOutput(void);
void Job_Make(GNode *);
void Job_Init(void);
bool Job_ParseShell(char *) MAKE_ATTR_USE;
-int Job_Finish(void);
+int Job_MakeDotEnd(void);
+#ifdef CLEANUP
void Job_End(void);
+#endif
void Job_Wait(void);
void Job_AbortAll(void);
-void Job_TokenReturn(void);
-bool Job_TokenWithdraw(void) MAKE_ATTR_USE;
-void Job_ServerStart(int, int, int);
void Job_SetPrefix(void);
bool Job_RunTarget(const char *, const char *);
void Job_FlagsToString(const Job *, char *, size_t);
int Job_TempFile(const char *, char *, size_t) MAKE_ATTR_USE;
+#ifdef USE_META
+struct BuildMon *Job_BuildMon(Job *) MAKE_ATTR_USE;
+#endif
+GNode *Job_Node(Job *) MAKE_ATTR_USE;
+int Job_Pid(Job *) MAKE_ATTR_USE;
#endif