diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2016-01-05 11:55:15 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2016-01-05 11:55:15 +0200 |
commit | 9fb791e9fad6c63fc1dac49f4d05ae63b8a3db9b (patch) | |
tree | d60322d4382ca5f97b676c5abe2e39524f35eab4 /build/dist | |
parent | f159b1dac68c8714f7ba71ca168e3b695891aad9 (diff) |
Rename build directory/namespace to build2
Diffstat (limited to 'build/dist')
-rw-r--r-- | build/dist/module | 26 | ||||
-rw-r--r-- | build/dist/module.cxx | 142 | ||||
-rw-r--r-- | build/dist/operation | 18 | ||||
-rw-r--r-- | build/dist/operation.cxx | 459 | ||||
-rw-r--r-- | build/dist/rule | 29 | ||||
-rw-r--r-- | build/dist/rule.cxx | 55 |
6 files changed, 0 insertions, 729 deletions
diff --git a/build/dist/module b/build/dist/module deleted file mode 100644 index f2e024a..0000000 --- a/build/dist/module +++ /dev/null @@ -1,26 +0,0 @@ -// file : build/dist/module -*- C++ -*- -// copyright : Copyright (c) 2014-2015 Code Synthesis Ltd -// license : MIT; see accompanying LICENSE file - -#ifndef BUILD_DIST_MODULE -#define BUILD_DIST_MODULE - -#include <build/types> -#include <build/utility> - -#include <build/module> - -namespace build -{ - namespace dist - { - extern "C" void - dist_boot (scope&, const location&, unique_ptr<module>&); - - extern "C" bool - dist_init ( - scope&, scope&, const location&, unique_ptr<module>&, bool, bool); - } -} - -#endif // BUILD_DIST_MODULE diff --git a/build/dist/module.cxx b/build/dist/module.cxx deleted file mode 100644 index f39ef18..0000000 --- a/build/dist/module.cxx +++ /dev/null @@ -1,142 +0,0 @@ -// file : build/dist/module.cxx -*- C++ -*- -// copyright : Copyright (c) 2014-2015 Code Synthesis Ltd -// license : MIT; see accompanying LICENSE file - -#include <build/dist/module> - -#include <build/scope> -#include <build/file> -#include <build/diagnostics> - -#include <build/config/utility> - -#include <build/dist/rule> -#include <build/dist/operation> - -using namespace std; -using namespace butl; - -namespace build -{ - namespace dist - { - static rule rule_; - - extern "C" void - dist_boot (scope& r, const location&, unique_ptr<module>&) - { - tracer trace ("dist::boot"); - - level5 ([&]{trace << "for " << r.out_path ();}); - - // Register meta-operation. - // - r.meta_operations.insert (dist_id, dist); - } - - extern "C" bool - dist_init (scope& r, - scope&, - const location& l, - unique_ptr<module>&, - bool first, - bool) - { - tracer trace ("dist::init"); - - if (!first) - { - warn (l) << "multiple dist module initializations"; - return true; - } - - const dir_path& out_root (r.out_path ()); - level5 ([&]{trace << "for " << out_root;}); - - // Enter module variables. - // - if (first) - { - auto& v (var_pool); - - v.find ("dist", bool_type); - - v.find ("dist.package", string_type); - - v.find ("dist.root", dir_path_type); - v.find ("config.dist.root", dir_path_type); - - //@@ VAR type - // - v.find ("dist.cmd", string_type); - v.find ("config.dist.cmd", string_type); - - v.find ("dist.archives", strings_type); - v.find ("config.dist.archives", strings_type); - } - - // Register our wildcard rule. Do it explicitly for the alias - // to prevent something like insert<target>(dist_id, test_id) - // taking precedence. - // - r.rules.insert<target> (dist_id, 0, "dist", rule_); - r.rules.insert<alias> (dist_id, 0, "dist.alias", rule_); - - // Configuration. - // - // Note that we don't use any defaults for root -- the location - // must be explicitly specified or we will complain if and when - // we try to dist. - // - using namespace config; - - bool s (specified (r, "config.dist")); - - // dist.root - // - { - value& v (r.assign ("dist.root")); - - if (s) - { - const value& cv (optional_absolute (r, "config.dist.root")); - - if (cv && !cv.empty ()) - v = cv; - } - } - - // dist.cmd - // - { - value& v (r.assign ("dist.cmd")); - - if (s) - { - const value& cv (required (r, "config.dist.cmd", "install").first); - - if (cv && !cv.empty ()) - v = cv; - } - else - v = "install"; - } - - // dist.archives - // - { - value& v (r.assign ("dist.archives")); - - if (s) - { - const value& cv (optional (r, "config.dist.archives")); - - if (cv && !cv.empty ()) - v = cv; - } - } - - return true; - } - } -} diff --git a/build/dist/operation b/build/dist/operation deleted file mode 100644 index c7aa014..0000000 --- a/build/dist/operation +++ /dev/null @@ -1,18 +0,0 @@ -// file : build/dist/operation -*- C++ -*- -// copyright : Copyright (c) 2014-2015 Code Synthesis Ltd -// license : MIT; see accompanying LICENSE file - -#ifndef BUILD_DIST_OPERATION -#define BUILD_DIST_OPERATION - -#include <build/operation> - -namespace build -{ - namespace dist - { - extern meta_operation_info dist; - } -} - -#endif // BUILD_DIST_OPERATION diff --git a/build/dist/operation.cxx b/build/dist/operation.cxx deleted file mode 100644 index 28a64fa..0000000 --- a/build/dist/operation.cxx +++ /dev/null @@ -1,459 +0,0 @@ -// file : build/dist/operation.cxx -*- C++ -*- -// copyright : Copyright (c) 2014-2015 Code Synthesis Ltd -// license : MIT; see accompanying LICENSE file - -#include <build/dist/operation> - -#include <cassert> - -#include <butl/process> -#include <butl/filesystem> - -#include <build/file> -#include <build/dump> -#include <build/scope> -#include <build/target> -#include <build/context> -#include <build/algorithm> -#include <build/diagnostics> - -using namespace std; -using namespace butl; - -namespace build -{ - namespace dist - { - static void - dist_meta_operation_pre () - { - // Reset the dependency state so that we don't end up with stray - // files from previous batches. - // - // @@ This is called too late, after we have bootstrapped the - // project. - // - //reset (); - } - - static operation_id - dist_operation_pre (operation_id o) - { - if (o != default_id) - fail << "explicit operation specified for dist meta-operation"; - - return o; - } - - static void - dist_match (action, action_targets&) - { - // Don't match anything -- see execute (). - } - - // install -d <dir> - // - static void - install (const string& cmd, const dir_path&); - - // install <file> <dir> - // - static void - install (const string& cmd, file&, const dir_path&); - - // cd <root> && tar|zip ... <pkg>.<ext> <pkg> - // - static void - archive (const dir_path& root, const string& pkg, const string& ext); - - static void - dist_execute (action, const action_targets& ts, bool) - { - tracer trace ("dist_execute"); - - // For now we assume all the targets are from the same project. - // - target& t (*static_cast<target*> (ts[0])); - scope* rs (t.base_scope ().root_scope ()); - - if (rs == nullptr) - fail << "out of project target " << t; - - const dir_path& out_root (rs->out_path ()); - const dir_path& src_root (rs->src_path ()); - - if (out_root == src_root) - fail << "in-tree distribution of target " << t << - info << "distribution requires out-of-tree build"; - - // Make sure we have the necessary configuration before - // we get down to business. - // - auto l (rs->vars["dist.root"]); - - if (!l || l->empty ()) - fail << "unknown root distribution directory" << - info << "did you forget to specify config.dist.root?"; - - const dir_path& dist_root (as<dir_path> (*l)); - - if (!dir_exists (dist_root)) - fail << "root distribution directory " << dist_root - << " does not exist"; - - l = rs->vars["dist.package"]; - - if (!l || l->empty ()) - fail << "unknown distribution package name" << - info << "did you forget to set dist.package?"; - - const string& dist_package (as<string> (*l)); - const string& dist_cmd (as<string> (*rs->vars["dist.cmd"])); - - // Get the list of operations supported by this project. Skip - // default_id. - // - for (operations::size_type id (default_id + 1); - id < rs->operations.size (); - ++id) - { - const operation_info* oi (rs->operations[id]); - if (oi == nullptr) - continue; - - // Note that we are not calling operation_pre/post() callbacks - // here since the meta operation is dist and we know what we - // are doing. - // - current_inner_oif = oi; - current_outer_oif = nullptr; - current_mode = oi->mode; - dependency_count = 0; - - action a (dist_id, id); - - if (verb >= 6) - dump (a); - - for (void* v: ts) - { - target& t (*static_cast<target*> (v)); - - if (rs != t.base_scope ().root_scope ()) - fail << "out of project target " << t; - - level5 ([&]{trace << diag_doing (a, t);}); - - match (a, t); - } - - if (verb >= 6) - dump (a); - } - - // Add buildfiles that are not normally loaded as part of the - // project, for example, the export stub. They will still be - // ignored on the next step if the user explicitly marked them - // nodist. - // - auto add_adhoc = [&src_root, &trace] (const dir_path& d, const char* f) - { - path p (d / path (f)); - if (file_exists (p)) - { - const char* e (p.extension ()); - targets.insert<buildfile> ( - p.directory (), - p.leaf ().base ().string (), - &extension_pool.find (e == nullptr ? "" : e), // Specified. - trace); - } - }; - - add_adhoc (src_root, "build/export.build"); - - // The same for subprojects that have been loaded. - // - if (auto l = rs->vars["subprojects"]) - { - for (auto p: as<subprojects> (*l)) - { - const dir_path& pd (p.second); - dir_path out_nroot (out_root / pd); - scope& nrs (scopes.find (out_nroot)); - - if (nrs.out_path () != out_nroot) // This subproject not loaded. - continue; - - const dir_path& src_nroot (nrs.src_path ()); - - if (!src_nroot.sub (src_root)) // Not a strong amalgamation. - continue; - - add_adhoc (src_nroot, "build/export.build"); - } - } - - // Collect the files. We want to take the snapshot of targets - // since updating some of them may result in more targets being - // entered. - // - action_targets files; - const variable& dist_var (var_pool.find ("dist")); - - for (const auto& pt: targets) - { - file* ft (pt->is_a<file> ()); - - if (ft == nullptr) // Not a file. - continue; - - if (ft->dir.sub (src_root)) - { - // Include unless explicitly excluded. - // - auto l ((*ft)[dist_var]); - - if (l && !as<bool> (*l)) - level5 ([&]{trace << "excluding " << *ft;}); - else - files.push_back (ft); - - continue; - } - - if (ft->dir.sub (out_root)) - { - // Exclude unless explicitly included. - // - auto l ((*ft)[dist_var]); - - if (l && as<bool> (*l)) - { - level5 ([&]{trace << "including " << *ft;}); - files.push_back (ft); - } - - continue; - } - } - - // Make sure what we need to distribute is up to date. - // - { - if (perform.meta_operation_pre != nullptr) - perform.meta_operation_pre (); - - current_mif = &perform; - - if (perform.operation_pre != nullptr) - perform.operation_pre (update_id); - - current_inner_oif = &update; - current_outer_oif = nullptr; - current_mode = update.mode; - dependency_count = 0; - - action a (perform_id, update_id); - - perform.match (a, files); - perform.execute (a, files, true); // Run quiet. - - if (perform.operation_post != nullptr) - perform.operation_post (update_id); - - if (perform.meta_operation_post != nullptr) - perform.meta_operation_post (); - } - - dir_path td (dist_root / dir_path (dist_package)); - - // Clean up the target directory. - // - // @@ Not for incremental dist? - // - if (build::rmdir_r (td) == rmdir_status::not_empty) - fail << "unable to clean target directory " << td; - - install (dist_cmd, td); - - // Copy over all the files. - // - for (void* v: files) - { - file& t (*static_cast<file*> (v)); - - // Figure out where this file is inside the target directory. - // - dir_path d (td); - d /= t.dir.sub (src_root) - ? t.dir.leaf (src_root) - : t.dir.leaf (out_root); - - if (!dir_exists (d)) - install (dist_cmd, d); - - install (dist_cmd, t, d); - } - - // Archive if requested. - // - if (auto l = rs->vars["dist.archives"]) - { - for (const string& e: as<strings> (*l)) - archive (dist_root, dist_package, e); - } - } - - // install -d <dir> - // - static void - install (const string& cmd, const dir_path& d) - { - path reld (relative (d)); - - cstrings args {cmd.c_str (), "-d"}; - - args.push_back ("-m"); - args.push_back ("755"); - args.push_back (reld.string ().c_str ()); - args.push_back (nullptr); - - if (verb >= 2) - print_process (args); - else if (verb) - text << "dist -d " << d; - - try - { - process pr (args.data ()); - - if (!pr.wait ()) - throw failed (); - } - catch (const process_error& e) - { - error << "unable to execute " << args[0] << ": " << e.what (); - - if (e.child ()) - exit (1); - - throw failed (); - } - } - - // install <file> <dir> - // - static void - install (const string& cmd, file& t, const dir_path& d) - { - path reld (relative (d)); - path relf (relative (t.path ())); - - cstrings args {cmd.c_str ()}; - - // Preserve timestamps. This could becomes important if, for - // example, we have pre-generated sources. Note that the - // install-sh script doesn't support this option, while both - // Linux and BSD install's do. - // - args.push_back ("-p"); - - // Assume the file is executable if the owner has execute - // permission, in which case we make it executable for - // everyone. - // - args.push_back ("-m"); - args.push_back ( - (path_permissions (t.path ()) & permissions::xu) == permissions::xu - ? "755" - : "644"); - - args.push_back (relf.string ().c_str ()); - args.push_back (reld.string ().c_str ()); - args.push_back (nullptr); - - if (verb >= 2) - print_process (args); - else if (verb) - text << "dist " << t; - - try - { - process pr (args.data ()); - - if (!pr.wait ()) - throw failed (); - } - catch (const process_error& e) - { - error << "unable to execute " << args[0] << ": " << e.what (); - - if (e.child ()) - exit (1); - - throw failed (); - } - } - - static void - archive (const dir_path& root, const string& pkg, const string& e) - { - string a (pkg + '.' + e); - - // Delete old archive for good measure. - // - path ap (root / path (a)); - if (file_exists (ap)) - rmfile (ap); - - // Use zip for .zip archives. Everything else goes to tar in the - // auto-compress mode (-a). - // - cstrings args; - if (e == "zip") - args = {"zip", "-rq", a.c_str (), pkg.c_str (), nullptr}; - else - args = {"tar", "-a", "-cf", a.c_str (), pkg.c_str (), nullptr}; - - if (verb >= 2) - print_process (args); - else if (verb) - text << args[0] << " " << ap; - - try - { - // Change child's working directory to dist_root. - // - process pr (root.string ().c_str (), args.data ()); - - if (!pr.wait ()) - throw failed (); - } - catch (const process_error& e) - { - error << "unable to execute " << args[0] << ": " << e.what (); - - if (e.child ()) - exit (1); - - throw failed (); - } - } - - meta_operation_info dist { - "dist", - "distribute", - "distributing", - "has nothing to distribute", // We cannot "be distributed". - &dist_meta_operation_pre, - &dist_operation_pre, - &load, // normal load - &search, // normal search - &dist_match, - &dist_execute, - nullptr, // operation post - nullptr // meta-operation post - }; - } -} diff --git a/build/dist/rule b/build/dist/rule deleted file mode 100644 index ffb2227..0000000 --- a/build/dist/rule +++ /dev/null @@ -1,29 +0,0 @@ -// file : build/dist/rule -*- C++ -*- -// copyright : Copyright (c) 2014-2015 Code Synthesis Ltd -// license : MIT; see accompanying LICENSE file - -#ifndef BUILD_DIST_RULE -#define BUILD_DIST_RULE - -#include <build/rule> -#include <build/types> -#include <build/target> -#include <build/operation> - -namespace build -{ - namespace dist - { - class rule: public build::rule - { - public: - virtual match_result - match (action, target&, const std::string&) const; - - virtual recipe - apply (action, target&, const match_result&) const; - }; - } -} - -#endif // BUILD_DIST_RULE diff --git a/build/dist/rule.cxx b/build/dist/rule.cxx deleted file mode 100644 index 80e7b05..0000000 --- a/build/dist/rule.cxx +++ /dev/null @@ -1,55 +0,0 @@ -// file : build/dist/rule.cxx -*- C++ -*- -// copyright : Copyright (c) 2014-2015 Code Synthesis Ltd -// license : MIT; see accompanying LICENSE file - -#include <build/dist/rule> - -#include <build/scope> -#include <build/target> -#include <build/algorithm> -#include <build/diagnostics> - -using namespace std; - -namespace build -{ - namespace dist - { - match_result rule:: - match (action, target& t, const std::string&) const - { - return t; // We always match. - } - - recipe rule:: - apply (action a, target& t, const match_result&) const - { - const dir_path& out_root (t.root_scope ().out_path ()); - - auto r (group_prerequisite_members (a, t, false)); - for (auto i (r.begin ()); i != r.end (); ++i) - { - prerequisite_member p (*i); - - // Skip prerequisites imported from other projects. - // - if (p.proj () != nullptr) - continue; - - // If we can, go inside see-through groups. - // - if (p.type ().see_through && i.enter_group ()) - continue; - - target& pt (p.search ()); - - // Don't match targets that are outside of our project. - // - if (pt.dir.sub (out_root)) - build::match (a, pt); - } - - return noop_recipe; // We will never be executed. - } - } -} |