Scripts are nothing more than lists of build steps.
§1. Build scripts. Suppose the incremental build algorithm has decided it wants to build node
V in the graph: it does so by calling BuildScripts::execute on the script
attached to V. This is only a list of steps:
classdef build_script {
struct linked_list *steps; /* of build_step */
}
build_script *BuildScripts::new(void) {
build_script *BS = CREATE(build_script);
BS->steps = NEW_LINKED_LIST(build_step);
return BS;
}
void BuildScripts::add_step(build_script *BS, build_step *S) {
ADD_TO_LINKED_LIST(S, build_step, BS->steps);
}
int BuildScripts::script_length(build_script *BS) {
if (BS == NULL) return 0;
return LinkedLists::len(BS->steps);
}
- The structure build_script is private to this section.
§2. We execute the steps in sequence, of course. As soon as any step fails,
returning FALSE, the script halts and returns FALSE. An empty script
always succeeds and returns TRUE.
int BuildScripts::execute(build_vertex *V, build_script *BS, build_methodology *BM, linked_list *search_list) { int rv = TRUE; build_step *S; LOOP_OVER_LINKED_LIST(S, build_step, BS->steps) if (rv) rv = BuildSteps::execute(V, S, BM, search_list); return rv; }