diff options
Diffstat (limited to 'src/boost/tools/build/src/engine/execcmd.h')
-rw-r--r-- | src/boost/tools/build/src/engine/execcmd.h | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/src/boost/tools/build/src/engine/execcmd.h b/src/boost/tools/build/src/engine/execcmd.h new file mode 100644 index 000000000..b39e8ae2d --- /dev/null +++ b/src/boost/tools/build/src/engine/execcmd.h @@ -0,0 +1,115 @@ +/* + * Copyright 1993, 1995 Christopher Seiwald. + * + * This file is part of Jam - see jam.c for Copyright information. + */ + +/* + * execcmd.h - execute a shell script. + * + * Defines the interface to be implemented in platform specific implementation + * modules as well as different shared utility functions prepared in the + * execcmd.c module. + */ + +#ifndef EXECCMD_H +#define EXECCMD_H + +#include "config.h" +#include "lists.h" +#include "jam_strings.h" +#include "timestamp.h" + + +typedef struct timing_info +{ + double system; + double user; + timestamp start; + timestamp end; +} timing_info; + +typedef void (* ExecCmdCallback) +( + void * const closure, + int const status, + timing_info const * const, + char const * const cmd_stdout, + char const * const cmd_stderr, + int const cmd_exit_reason +); + +/* Global initialization. Must be called after setting + * globs.jobs. May be called multiple times. */ +void exec_init( void ); +/* Global cleanup */ +void exec_done( void ); + +/* Status codes passed to ExecCmdCallback routines. */ +#define EXEC_CMD_OK 0 +#define EXEC_CMD_FAIL 1 +#define EXEC_CMD_INTR 2 + +int exec_check +( + string const * command, + LIST * * pShell, + int * error_length, + int * error_max_length +); + +/* exec_check() return codes. */ +#define EXEC_CHECK_OK 101 +#define EXEC_CHECK_NOOP 102 +#define EXEC_CHECK_LINE_TOO_LONG 103 +#define EXEC_CHECK_TOO_LONG 104 + +/* Prevents action output from being written + * immediately to stdout/stderr. + */ +#define EXEC_CMD_QUIET 1 + +void exec_cmd +( + string const * command, + int flags, + ExecCmdCallback func, + void * closure, + LIST * shell +); + +void exec_wait(); + + +/****************************************************************************** + * * + * Utility functions defined in the execcmd.c module. * + * * + ******************************************************************************/ + +/* Constructs a list of command-line elements using the format specified by the + * given shell list. + */ +void argv_from_shell( char const * * argv, LIST * shell, char const * command, + int const slot ); + +/* Interrupt routine bumping the internal interrupt counter. Needs to be + * registered by platform specific exec*.c modules. + */ +void onintr( int disp ); + +/* Returns whether an interrupt has been detected so far. */ +int interrupted( void ); + +/* Checks whether the given shell list is actually a request to execute raw + * commands without an external shell. + */ +int is_raw_command_request( LIST * shell ); + +/* Utility worker for exec_check() checking whether all the given command lines + * are under the specified length limit. + */ +int check_cmd_for_too_long_lines( char const * command, size_t max, + int * const error_length, int * const error_max_length ); + +#endif |