diff options
Diffstat (limited to 'jam-files/engine/output.c')
-rw-r--r-- | jam-files/engine/output.c | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/jam-files/engine/output.c b/jam-files/engine/output.c new file mode 100644 index 000000000..483c6ca9e --- /dev/null +++ b/jam-files/engine/output.c @@ -0,0 +1,125 @@ +/* + 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 "newstr.h" +#include <stdio.h> + +#define bjam_out (stdout) +#define bjam_err (stderr) + +static void out_ +( + char const * data, + FILE * io +) +{ + while ( *data ) + { + size_t len = strcspn(data,"\r"); + data += fwrite(data,1,len,io); + if ( *data == '\r' ) ++data; + } +} + + +void out_action +( + char const * action, + char const * target, + char const * command, + char const * out_data, + char const * err_data, + int exit_reason +) +{ + /* Print out the action+target line, if the action is quite 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 ); + } + + switch ( exit_reason ) + { + case EXIT_OK: + break; + case EXIT_FAIL: + break; + case EXIT_TIMEOUT: + { + /* Process expired, make user aware with explicit message. */ + if ( action ) + { + /* But only output for non-quietly actions. */ + fprintf( bjam_out, "%ld second time limit exceeded\n", globs.timeout ); + } + break; + } + default: + break; + } + + /* Print out the command output, if requested, or if the program failed. */ + if ( action || exit_reason != EXIT_OK) + { + /* But only output for non-quietly actions. */ + if ( ( 0 != out_data ) && + ( ( globs.pipe_action & 1 /* STDOUT_FILENO */ ) || + ( globs.pipe_action == 0 ) ) ) + { + out_( out_data, bjam_out ); + } + if ( ( 0 != err_data ) && + ( globs.pipe_action & 2 /* STDERR_FILENO */ ) ) + { + out_( err_data, bjam_err ); + } + } + + fflush( bjam_out ); + fflush( bjam_err ); + fflush( globs.cmdout ); +} + + +char * outf_int( int value ) +{ + char buffer[50]; + sprintf( buffer, "%i", value ); + return newstr( buffer ); +} + + +char * outf_double( double value ) +{ + char buffer[50]; + sprintf( buffer, "%f", value ); + return newstr( buffer ); +} + + +char * outf_time( time_t value ) +{ + char buffer[50]; + strftime( buffer, 49, "%Y-%m-%d %H:%M:%SZ", gmtime( &value ) ); + return newstr( buffer ); +} |