unify rule add funcs

master
Daniel Kolesa 2015-10-07 11:47:06 +01:00
parent 2a84040028
commit 3c9e6ea404
1 changed files with 18 additions and 21 deletions

39
main.cc
View File

@ -307,6 +307,22 @@ static int ob_print_help(ConstCharRange a0, ostd::Stream &os, int v) {
static bool ignore_env = false;
static void rule_add(const char *tgt, const char *dep, ostd::Uint32 *body) {
auto targets = cscript::util::list_explode(tgt);
auto deps = dep ? cscript::util::list_explode(dep)
: ostd::Vector<ostd::String>();
for (auto &target: targets.iter()) {
Rule &r = rules.push();
r.target = target;
if (body) {
r.func = body;
cscript::bcode_ref(body);
}
for (auto &dep: deps.iter())
r.deps.push(dep);
}
};
int main(int argc, char **argv) {
ObState os;
ConstCharRange pn = argv[0];
@ -380,31 +396,12 @@ int main(int argc, char **argv) {
os.cs.add_command("rule", "sseN", [](cscript::CsState &, const char *tgt,
const char *dep, ostd::Uint32 *body,
int *numargs) {
auto targets = cscript::util::list_explode(tgt);
auto deps = cscript::util::list_explode(dep);
for (auto &target: targets.iter()) {
Rule &r = rules.push();
r.target = target;
if (*numargs > 2) {
r.func = body;
cscript::bcode_ref(body);
}
for (auto &dep: deps.iter())
r.deps.push(dep);
}
rule_add(tgt, dep, (*numargs > 2) ? body : nullptr);
});
os.cs.add_command("rule-", "seN", [](cscript::CsState &, const char *tgt,
ostd::Uint32 *body, int *numargs) {
auto targets = cscript::util::list_explode(tgt);
for (auto &target: targets.iter()) {
Rule &r = rules.push();
r.target = target;
if (*numargs > 1) {
r.func = body;
cscript::bcode_ref(body);
}
}
rule_add(tgt, nullptr, (*numargs > 1) ? body : nullptr);
});
os.cs.add_command("getenv", "s", [](cscript::CsState &cs,