From fd689eb883655dcb29e505b041cd02fac01f0bac Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Thu, 27 Aug 2015 15:11:40 +0200 Subject: Dist module/meta-operation initial implementation --- build/context.cxx | 40 +++++++++++++++++++++++++++++++--------- 1 file changed, 31 insertions(+), 9 deletions(-) (limited to 'build/context.cxx') diff --git a/build/context.cxx b/build/context.cxx index 3e3d0c3..aaeb426 100644 --- a/build/context.cxx +++ b/build/context.cxx @@ -47,6 +47,7 @@ namespace build meta_operation_table.insert ("perform"); meta_operation_table.insert ("configure"); meta_operation_table.insert ("disfigure"); + meta_operation_table.insert ("dist"); operation_table.clear (); operation_table.insert ("default"); @@ -100,17 +101,13 @@ namespace build { rule_map& rs (global_scope->rules); - rs.insert (default_id, "alias", alias_rule::instance); - rs.insert (update_id, "alias", alias_rule::instance); - rs.insert (clean_id, "alias", alias_rule::instance); + rs.insert (perform_id, 0, "alias", alias_rule::instance); - rs.insert (default_id, "fsdir", fsdir_rule::instance); - rs.insert (update_id, "fsdir", fsdir_rule::instance); - rs.insert (clean_id, "fsdir", fsdir_rule::instance); + rs.insert (perform_id, update_id, "fsdir", fsdir_rule::instance); + rs.insert (perform_id, clean_id, "fsdir", fsdir_rule::instance); - rs.insert (default_id, "file", file_rule::instance); - rs.insert (update_id, "file", file_rule::instance); - rs.insert (clean_id, "file", file_rule::instance); + rs.insert (perform_id, update_id, "file", file_rule::instance); + rs.insert (perform_id, clean_id, "file", file_rule::instance); } } @@ -162,6 +159,31 @@ namespace build return ms; } + fs_status + rmdir_r (const dir_path& d) + { + using namespace butl; + + if (work.sub (d)) // Don't try to remove working directory. + return rmdir_status::not_empty; + + if (!dir_exists (d)) + return rmdir_status::not_exist; + + text << "rmdir -r " << d; + + try + { + butl::rmdir_r (d); + } + catch (const std::system_error& e) + { + fail << "unable to remove directory " << d << ": " << e.what (); + } + + return rmdir_status::success; + } + dir_path src_out (const dir_path& out, scope& s) { -- cgit v1.1