diff options
Diffstat (limited to 'tools/build/src/engine/output.c')
-rw-r--r-- | tools/build/src/engine/output.c | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/tools/build/src/engine/output.c b/tools/build/src/engine/output.c new file mode 100644 index 0000000000..eaaee434bd --- /dev/null +++ b/tools/build/src/engine/output.c @@ -0,0 +1,98 @@ +/* + Copyright 2007 Rene Rivera + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) +*/ + +#include "jam.h" +#include "output.h" + +#include <stdio.h> + + +#define bjam_out (stdout) +#define bjam_err (stderr) + +static void out_( char const * data, FILE * const io ) +{ + while ( *data ) + { + size_t const len = strcspn( data, "\r" ); + data += fwrite( data, 1, len, io ); + if ( *data == '\r' ) ++data; + } +} + + +void out_action +( + char const * const action, + char const * const target, + char const * const command, + char const * const out_data, + char const * const err_data, + int const exit_reason +) +{ + /* Print out the action + target line, if the action is quiet the action + * should be null. + */ + if ( action ) + fprintf( bjam_out, "%s %s\n", action, target ); + + /* Print out the command executed if given -d+2. */ + if ( DEBUG_EXEC ) + { + fputs( command, bjam_out ); + fputc( '\n', bjam_out ); + } + + /* Print out the command executed to the command stream. */ + if ( globs.cmdout ) + fputs( command, globs.cmdout ); + + /* If the process expired, make user aware with an explicit message, but do + * this only for non-quiet actions. + */ + if ( exit_reason == EXIT_TIMEOUT && action ) + fprintf( bjam_out, "%ld second time limit exceeded\n", globs.timeout ); + + /* Print out the command output, if requested, or if the program failed, but + * only output for non-quiet actions. + */ + if ( action || exit_reason != EXIT_OK ) + { + if ( out_data && + ( ( globs.pipe_action & 1 /* STDOUT_FILENO */ ) || + ( globs.pipe_action == 0 ) ) ) + out_( out_data, bjam_out ); + if ( err_data && ( globs.pipe_action & 2 /* STDERR_FILENO */ ) ) + out_( err_data, bjam_err ); + } + + fflush( bjam_out ); + fflush( bjam_err ); + fflush( globs.cmdout ); +} + + +OBJECT * outf_int( int const value ) +{ + char buffer[ 50 ]; + sprintf( buffer, "%i", value ); + return object_new( buffer ); +} + + +OBJECT * outf_double( double const value ) +{ + char buffer[ 50 ]; + sprintf( buffer, "%f", value ); + return object_new( buffer ); +} + + +OBJECT * outf_time( timestamp const * const time ) +{ + return object_new( timestamp_str( time ) ); +} |