|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#include "jam.h" |
|
#include "command.h" |
|
|
|
#include "lists.h" |
|
#include "rules.h" |
|
|
|
#include <assert.h> |
|
|
|
|
|
|
|
|
|
|
|
|
|
CMD * cmd_new( RULE * rule, LIST * targets, LIST * sources, LIST * shell ) |
|
{ |
|
CMD * cmd = (CMD *)BJAM_MALLOC( sizeof( CMD ) ); |
|
FRAME frame[ 1 ]; |
|
|
|
assert( cmd ); |
|
cmd->rule = rule; |
|
cmd->shell = shell; |
|
cmd->next = 0; |
|
cmd->noop = 0; |
|
|
|
lol_init( &cmd->args ); |
|
lol_add( &cmd->args, targets ); |
|
lol_add( &cmd->args, sources ); |
|
string_new( cmd->buf ); |
|
|
|
frame_init( frame ); |
|
frame->module = rule->module; |
|
lol_init( frame->args ); |
|
lol_add( frame->args, list_copy( targets ) ); |
|
lol_add( frame->args, list_copy( sources ) ); |
|
function_run_actions( rule->actions->command, frame, stack_global(), |
|
cmd->buf ); |
|
frame_free( frame ); |
|
|
|
return cmd; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
void cmd_free( CMD * cmd ) |
|
{ |
|
lol_free( &cmd->args ); |
|
list_free( cmd->shell ); |
|
string_free( cmd->buf ); |
|
BJAM_FREE( (void *)cmd ); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void cmd_release_targets_and_shell( CMD * cmd ) |
|
{ |
|
cmd->args.list[ 0 ] = L0; |
|
cmd->shell = L0; |
|
} |
|
|