remake  4.3+dbg-1.5
job.h
Go to the documentation of this file.
1 /* Definitions for managing subprocesses in GNU Make.
2 Copyright (C) 1992-2020 Free Software Foundation, Inc.
3 This file is part of GNU Make.
4 
5 GNU Make is free software; you can redistribute it and/or modify it under the
6 terms of the GNU General Public License as published by the Free Software
7 Foundation; either version 3 of the License, or (at your option) any later
8 version.
9 
10 GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
11 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
12 A PARTICULAR PURPOSE. See the GNU General Public License for more details.
13 
14 You should have received a copy of the GNU General Public License along with
15 this program. If not, see <http://www.gnu.org/licenses/>. */
16 
17 #ifndef _REMAKE_JOB_H_
18 #define _REMAKE_JOB_H_
19 
20 #include "output.h"
21 #include "trace.h"
22 
23 /* Structure describing a running or dead child process. */
24 
25 #ifdef VMS
26 #define VMSCHILD \
27  char *comname; /* Temporary command file name */ \
28  int efn; /* Completion event flag number */ \
29  int cstatus; /* Completion status */ \
30  int vms_launch_status; /* non-zero if lib$spawn, etc failed */
31 #else
32 #define VMSCHILD
33 #endif
34 
35 #define CHILDBASE \
36  char *cmd_name; /* Alloced copy of command run. */ \
37  char **environment; /* Environment for commands. */ \
38  VMSCHILD \
39  struct output output /* Output for this child. */
40 
41 
42 struct childbase
43  {
45  };
46 
47 struct child
48  {
50 
51  struct child *next; /* Link in the chain. */
52 
53  struct file *file; /* File being remade. */
54 
55  char *sh_batch_file; /* Script file for shell commands */
56  char **command_lines; /* Array of variable-expanded cmd lines. */
57  char *command_ptr; /* Ptr into command_lines[command_line]. */
58 
59  unsigned int command_line; /* Index into command_lines. */
60 
61  pid_t pid; /* Child process's ID number. */
62 
63  unsigned int remote:1; /* Nonzero if executing remotely. */
64  unsigned int noerror:1; /* Nonzero if commands contained a '-'. */
65  unsigned int good_stdin:1; /* Nonzero if this child has a good stdin. */
66  unsigned int deleted:1; /* Nonzero if targets have been deleted. */
67  unsigned int recursive:1; /* Nonzero for recursive command ('+' etc.) */
68  unsigned int jobslot:1; /* Nonzero if it's reserved a job slot. */
69  unsigned int dontcare:1; /* Saved dontcare flag. */
70  };
71 
72 extern struct child *children;
73 
74 /* A signal handler for SIGCHLD, if needed. */
75 RETSIGTYPE child_handler (int sig);
76 int is_bourne_compatible_shell(const char *path);
77 extern void new_job (file_t *file, target_stack_node_t *p_call_stack);
78 extern void reap_children (int block, int err,
79  target_stack_node_t *p_call_stack);
80 extern void start_waiting_jobs (target_stack_node_t *p_call_stack);
81 
82 char **construct_command_argv (char *line, char **restp, struct file *file,
83  int cmd_flags, char** batch_file);
84 
85 pid_t child_execute_job (struct childbase *child, int good_stdin, char **argv);
86 
87 // void exec_command (char **argv, char **envp) NORETURN;
88 void exec_command (char **argv, char **envp);
89 
90 void unblock_all_sigs (void);
91 
92 extern unsigned int job_slots_used;
93 extern unsigned int jobserver_tokens;
94 
95 #endif /* _REMAKE_JOB_H_ */
RETSIGTYPE child_handler(int sig)
void new_job(file_t *file, target_stack_node_t *p_call_stack)
void reap_children(int block, int err, target_stack_node_t *p_call_stack)
unsigned int command_line
Definition: job.h:59
Header for routines related to tracing and debugging support.
unsigned int job_slots_used
unsigned int good_stdin
Definition: job.h:65
char * command_ptr
Definition: job.h:57
unsigned int jobserver_tokens
unsigned int remote
Definition: job.h:63
unsigned int recursive
Definition: job.h:67
int is_bourne_compatible_shell(const char *path)
char ** command_lines
Definition: job.h:56
unsigned int deleted
Definition: job.h:66
struct file * file
Definition: job.h:53
pid_t child_execute_job(struct childbase *child, int good_stdin, char **argv)
struct child * next
Definition: job.h:51
unsigned int jobslot
Definition: job.h:68
void start_waiting_jobs(target_stack_node_t *p_call_stack)
Node for an item in the target call stack.
Definition: trace.h:79
void unblock_all_sigs(void)
char ** construct_command_argv(char *line, char **restp, struct file *file, int cmd_flags, char **batch_file)
CHILDBASE
Definition: job.h:49
Definition: job.h:42
struct child * children
unsigned int noerror
Definition: job.h:64
void exec_command(char **argv, char **envp)
Definition: job.h:47
unsigned int dontcare
Definition: job.h:69
pid_t pid
Definition: job.h:61
#define RETSIGTYPE
Definition: config.h:713
CHILDBASE
Definition: job.h:44
char * sh_batch_file
Definition: job.h:55
Definition: filedef.h:34