aboutsummaryrefslogtreecommitdiff
path: root/build2/dist/rule.cxx
diff options
context:
space:
mode:
authorKaren Arutyunov <karen@codesynthesis.com>2019-07-04 19:12:15 +0300
committerKaren Arutyunov <karen@codesynthesis.com>2019-07-05 14:24:43 +0300
commit57b10c06925d0bdf6ffb38488ee908f085109e95 (patch)
treef2103684d319650c3302aef9d7a70dd64ff2a347 /build2/dist/rule.cxx
parent30b4eda196e090aa820d312e6a9435a4ae84c303 (diff)
Move config, dist, test, and install modules into library
Diffstat (limited to 'build2/dist/rule.cxx')
-rw-r--r--build2/dist/rule.cxx88
1 files changed, 0 insertions, 88 deletions
diff --git a/build2/dist/rule.cxx b/build2/dist/rule.cxx
deleted file mode 100644
index c877abc..0000000
--- a/build2/dist/rule.cxx
+++ /dev/null
@@ -1,88 +0,0 @@
-// file : build2/dist/rule.cxx -*- C++ -*-
-// copyright : Copyright (c) 2014-2019 Code Synthesis Ltd
-// license : MIT; see accompanying LICENSE file
-
-#include <build2/dist/rule.hxx>
-
-#include <libbuild2/scope.hxx>
-#include <libbuild2/target.hxx>
-#include <libbuild2/algorithm.hxx>
-#include <libbuild2/diagnostics.hxx>
-
-using namespace std;
-
-namespace build2
-{
- namespace dist
- {
- bool rule::
- match (action, target&, const string&) const
- {
- return true; // We always match.
- }
-
- recipe rule::
- apply (action a, target& t) const
- {
- const dir_path& out_root (t.root_scope ().out_path ());
-
- // If we can, go inside see-through groups.
- //
- for (prerequisite_member p:
- group_prerequisite_members (a, t, members_mode::maybe))
- {
- // Note: no exclusion tests, we want all of them (and see also the
- // dist_include() override).
-
- // Skip prerequisites imported from other projects.
- //
- if (p.proj ())
- continue;
-
- // We used to always search and match but that resulted in the
- // undesirable behavior in case one of the "source" files is
- // missing. In this case we would enter a target as "output", this
- // rule would match it, and then dist_execute() would ignore it by
- // default.
- //
- // So now if this is a file target (we still want to always "see
- // through" other targets like aliases), we will only match it if (1)
- // it exists in src or (2) it exists as a target. It feels like we
- // don't need the stronger "... and not implied" condition since if it
- // is mentioned as a target, then it is in out (we don't do the same
- // target in both src/out).
- //
- // @@ Note that this is still an issue in a custom dist rule.
- //
- const target* pt (nullptr);
- if (p.is_a<file> ())
- {
- pt = p.load ();
-
- if (pt == nullptr)
- {
- // Search for an existing target or existing file in src.
- //
- const prerequisite_key& k (p.key ());
- pt = k.tk.type->search (t, k);
-
- if (pt == nullptr)
- fail << "prerequisite " << k << " is not existing source file "
- << "nor known output target" << endf;
-
- search_custom (p.prerequisite, *pt); // Cache.
- }
- }
- else
- pt = &p.search (t);
-
- // Don't match targets that are outside of our project.
- //
- if (pt->dir.sub (out_root))
- build2::match (a, *pt);
- }
-
- return noop_recipe; // We will never be executed.
- }
- }
-}