| /* |
| * 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 - an action, ready to be formatted into a buffer and executed. |
| */ |
| |
| typedef struct _cmd CMD; |
| |
| struct _cmd |
| { |
| CMD * next; |
| CMD * tail; /* valid on in head */ |
| RULE * rule; /* rule->actions contains shell script */ |
| LIST * shell; /* $(SHELL) value */ |
| LOL args; /* LISTs for $(<), $(>) */ |
| char * buf; /* actual commands */ |
| }; |
| |
| CMD * cmd_new |
| ( |
| RULE * rule, /* rule (referenced) */ |
| LIST * targets, /* $(<) (freed) */ |
| LIST * sources, /* $(>) (freed) */ |
| LIST * shell /* $(SHELL) (freed) */ |
| ); |
| |
| void cmd_free( CMD * ); |
| |
| #define cmd_next( c ) ( ( c )->next ) |