/* | |
* Copyright 1994 Christopher Seiwald. | |
* | |
* This file is part of Jam - see jam.c for Copyright information. | |
*/ | |
/* | |
* command.h - the CMD structure and routines to manipulate them | |
* | |
* Both ACTION and CMD contain a rule, targets, and sources. An | |
* ACTION describes a rule to be applied to the given targets and | |
* sources; a CMD is what actually gets executed by the shell. The | |
* differences are due to: | |
* | |
* ACTIONS must be combined if 'actions together' is given. | |
* ACTIONS must be split if 'actions piecemeal' is given. | |
* ACTIONS must have current sources omitted for 'actions updated'. | |
* | |
* The CMD datatype holds a single command that is to be executed | |
* against a target, and they can chain together to represent the | |
* full collection of commands used to update a target. | |
* | |
* Structures: | |
* | |
* CMD - an action, ready to be formatted into a buffer and executed. | |
* | |
* External routines: | |
* | |
* cmd_new() - return a new CMD or 0 if too many args. | |
* cmd_free() - delete CMD and its parts. | |
* cmd_next() - walk the CMD chain. | |
* cmd_release_targets_and_shell() - CMD forgets about its targets & shell. | |
*/ | |
/* | |
* CMD - an action, ready to be formatted into a buffer and executed. | |
*/ | |
typedef struct _cmd CMD; | |
struct _cmd | |
{ | |
CMD * next; | |
RULE * rule; /* rule->actions contains shell script */ | |
LIST * shell; /* $(JAMSHELL) value */ | |
LOL args; /* LISTs for $(<), $(>) */ | |
string buf[ 1 ]; /* actual commands */ | |
int noop; /* no-op commands should be faked instead of executed */ | |
}; | |
CMD * cmd_new | |
( | |
RULE * rule, /* rule (referenced) */ | |
LIST * targets, /* $(<) (ownership transferred) */ | |
LIST * sources, /* $(>) (ownership transferred) */ | |
LIST * shell /* $(JAMSHELL) (ownership transferred) */ | |
); | |
void cmd_release_targets_and_shell( CMD * ); | |
void cmd_free( CMD * ); | |