VirtualBox

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

Last change on this file since 2657 was 2591, checked in by bird, 13 years ago

kmk: Merged in changes from GNU make 3.82. Previous GNU make base version was gnumake-2008-10-28-CVS.

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