aboutsummaryrefslogtreecommitdiff
path: root/bbot/build-config.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'bbot/build-config.cxx')
-rw-r--r--bbot/build-config.cxx125
1 files changed, 0 insertions, 125 deletions
diff --git a/bbot/build-config.cxx b/bbot/build-config.cxx
deleted file mode 100644
index 0ee00e9..0000000
--- a/bbot/build-config.cxx
+++ /dev/null
@@ -1,125 +0,0 @@
-// file : bbot/build-config.cxx -*- C++ -*-
-// copyright : Copyright (c) 2014-2017 Code Synthesis Ltd
-// license : MIT; see accompanying LICENSE file
-
-#include <bbot/build-config>
-
-#include <string>
-#include <cstddef> // size_t
-#include <utility> // move()
-#include <stdexcept> // invalid_argument
-
-#include <butl/path>
-#include <butl/fdstream>
-#include <butl/tab-parser>
-
-#include <bbot/manifest> // task_manifest::check_config()
-
-using namespace std;
-using namespace butl;
-
-namespace bbot
-{
- LIBBBOT_EXPORT build_configs
- parse_buildtab (istream& is, const string& name)
- {
- build_configs r;
- tab_parser parser (is, name);
-
- tab_fields tl;
- while (!(tl = parser.next ()).empty ())
- {
- size_t n (tl.size ()); // Fields count.
- size_t i (0); // The field currently being processed.
-
- // Throw tab_parsing for the field currently being processed. If i == n
- // then we refer to the end-of-line column (presumably reporting a missed
- // field).
- //
- auto bad_line = [&name, &tl, &i, n] (const string& d)
- {
- // Offset beyond the end-of-line is meaningless.
- //
- assert (i <= n);
-
- throw tab_parsing (name,
- tl.line,
- i == n
- ? tl.end_column
- : tl[i].column,
- d);
- };
-
- build_config config;
- config.machine_pattern = move (tl[i++].value);
-
- // Configuration name field is a required one.
- //
- if (i == n)
- bad_line ("no configuration name found");
-
- config.name = move (tl[i].value);
-
- // Make sure the name is unique.
- //
- for (const auto& c: r)
- if (c.name == config.name)
- bad_line ("duplicate configuration name");
-
- // If there is no target nor configuration variables then save the
- // configuration and proceed with the next line.
- //
- if (++i == n)
- {
- r.emplace_back (move (config));
- continue;
- }
-
- // If the third field doesn't contain '=' character, then we will treat
- // it as a target.
- //
- if (tl[i].value.find ('=') == string::npos)
- {
- try
- {
- config.target = target_triplet (tl[i].value);
- }
- catch (const invalid_argument& e)
- {
- bad_line (e.what ());
- }
-
- ++i;
- }
-
- try
- {
- for (; i < n; ++i)
- {
- task_manifest::check_config (tl[i].value);
- config.vars.emplace_back (move (tl[i].value));
- }
- }
- catch (const invalid_argument& e)
- {
- bad_line (e.what ());
- }
-
- // Save the configuration.
- //
- r.emplace_back (move (config));
- }
-
- return r;
- }
-
- build_configs
- parse_buildtab (const path& p)
- {
- ifdstream ifs (p);
- build_configs r (parse_buildtab (ifs, p.string ()));
-
- ifs.close (); // Throws on failure.
- return r;
- }
-}