VirtualBox

source: kBuild/trunk/src/kmk/job.h@ 2129

Last change on this file since 2129 was 2101, checked in by bird, 16 years ago

kmk: Implemented new switch --print-time. Fixes #65.

  • Property svn:eol-style set to native
File size: 3.4 KB
Line 
1/* Definitions for managing subprocesses in GNU Make.
2Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
32002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
4This file is part of GNU Make.
5
6GNU Make is free software; you can redistribute it and/or modify it under the
7terms of the GNU General Public License as published by the Free Software
8Foundation; either version 3 of the License, or (at your option) any later
9version.
10
11GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
12WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
13A PARTICULAR PURPOSE. See the GNU General Public License for more details.
14
15You should have received a copy of the GNU General Public License along with
16this program. If not, see <http://www.gnu.org/licenses/>. */
17
18#ifndef SEEN_JOB_H
19#define SEEN_JOB_H
20
21#ifdef HAVE_FCNTL_H
22# include <fcntl.h>
23#else
24# include <sys/file.h>
25#endif
26
27/* How to set close-on-exec for a file descriptor. */
28
29#if !defined F_SETFD
30# define CLOSE_ON_EXEC(_d)
31#else
32# ifndef FD_CLOEXEC
33# define FD_CLOEXEC 1
34# endif
35# define CLOSE_ON_EXEC(_d) (void) fcntl ((_d), F_SETFD, FD_CLOEXEC)
36#endif
37
38/* Structure describing a running or dead child process. */
39
40struct child
41 {
42 struct child *next; /* Link in the chain. */
43
44 struct file *file; /* File being remade. */
45
46 char **environment; /* Environment for commands. */
47
48 char **command_lines; /* Array of variable-expanded cmd lines. */
49 unsigned int command_line; /* Index into above. */
50 char *command_ptr; /* Ptr into command_lines[command_line]. */
51
52 pid_t pid; /* Child process's ID number. */
53#ifdef VMS
54 int efn; /* Completion event flag number */
55 int cstatus; /* Completion status */
56#endif
57 char *sh_batch_file; /* Script file for shell commands */
58#ifdef CONFIG_WITH_KMK_BUILTIN
59 int status; /* Status of the job. */
60 unsigned int has_status:1; /* Nonzero if status is available. */
61#endif
62 unsigned int remote:1; /* Nonzero if executing remotely. */
63
64 unsigned int noerror:1; /* Nonzero if commands contained a `-'. */
65
66 unsigned int good_stdin:1; /* Nonzero if this child has a good stdin. */
67 unsigned int deleted:1; /* Nonzero if targets have been deleted. */
68 unsigned int dontcare:1; /* Saved dontcare flag. */
69#ifdef CONFIG_WITH_PRINT_TIME_SWITCH
70 big_int start_ts; /* nano_timestamp of the first command. */
71#endif
72 };
73
74extern struct child *children;
75
76void new_job (struct file *file);
77void reap_children (int block, int err);
78void start_waiting_jobs (void);
79
80char **construct_command_argv (char *line, char **restp, struct file *file,
81 int cmd_flags, char** batch_file);
82#ifdef VMS
83int child_execute_job (char *argv, struct child *child);
84#elif defined(__EMX__)
85int child_execute_job (int stdin_fd, int stdout_fd, char **argv, char **envp);
86#else
87void child_execute_job (int stdin_fd, int stdout_fd, char **argv, char **envp);
88#endif
89#ifdef _AMIGA
90void exec_command (char **argv);
91#elif defined(__EMX__)
92int exec_command (char **argv, char **envp);
93#else
94void exec_command (char **argv, char **envp);
95#endif
96
97extern unsigned int job_slots_used;
98
99void block_sigs (void);
100#ifdef POSIX
101void unblock_sigs (void);
102#else
103#ifdef HAVE_SIGSETMASK
104extern int fatal_signal_mask;
105#define unblock_sigs() sigsetmask (0)
106#else
107#define unblock_sigs()
108#endif
109#endif
110
111extern unsigned int jobserver_tokens;
112
113#endif /* SEEN_JOB_H */
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette