diff options
Diffstat (limited to 'bbot/build-config.cxx')
-rw-r--r-- | bbot/build-config.cxx | 125 |
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; - } -} |