File size: 1,820 Bytes
158b61b |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
/*
* Copyright 1993, 1995 Christopher Seiwald.
*
* This file is part of Jam - see jam.c for Copyright information.
*/
/* This file is ALSO:
* Copyright 2001-2004 David Abrahams.
* 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)
*/
/*
* command.c - maintain lists of commands
*/
#include "jam.h"
#include "command.h"
#include "lists.h"
#include "rules.h"
#include <assert.h>
/*
* cmd_new() - return a new CMD.
*/
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;
}
/*
* cmd_free() - free a CMD
*/
void cmd_free( CMD * cmd )
{
lol_free( &cmd->args );
list_free( cmd->shell );
string_free( cmd->buf );
BJAM_FREE( (void *)cmd );
}
/*
* cmd_release_targets_and_shell()
*
* Makes the CMD release its hold on its targets & shell lists and forget
* about them. Useful in case caller still has references to those lists and
* wants to reuse them after freeing the CMD object.
*/
void cmd_release_targets_and_shell( CMD * cmd )
{
cmd->args.list[ 0 ] = L0; /* targets */
cmd->shell = L0; /* shell */
}
|