Browse Source

read variables from argv

rebrand
Martin Dørum 3 years ago
parent
commit
2af615d3be
3 changed files with 26 additions and 6 deletions
  1. 12
    0
      src/BBParser.cc
  2. 1
    0
      src/BBParser.h
  3. 13
    6
      src/main.cc

+ 12
- 0
src/BBParser.cc View File

@@ -346,6 +346,18 @@ void BBParser::parse(BBVariables &vars) {
doAssignment();
}

void BBParser::parseList(const BBVariables &vars, std::vector<std::string> &values) {
while (true) {
skipWhitespace();
std::string value;
if (!parseString(vars, value)) {
break;
}

values.push_back(std::move(value));
}
}

void BBWriter::put(char ch) {
ch_ += 1;
stream_ << ch;

+ 1
- 0
src/BBParser.h View File

@@ -26,6 +26,7 @@ public:
flags_(flags), line_(line), ch_(ch), stream_(stream) {}

void parse(BBVariables &vars);
void parseList(const BBVariables &vars, std::vector<std::string> &values);

int peek() { return stream_.peek(); }
int peek2() { stream_.get(); int ch = peek(); stream_.unget(); return ch; }

+ 13
- 6
src/main.cc View File

@@ -1,8 +1,10 @@
//#bb ldlibs := -lpthread

#include <getopt.h>
#include <string.h>
#include <iostream>
#include <fstream>
#include <sstream>

#include "BBParser.h"
#include "parallel.h"
@@ -94,16 +96,21 @@ int main(int argc, char **argv) {
sys::chdir(workDir);
}

// Read everything related to the build configuration,
// finding all source files and reading their configs
// Read non-option arguments (variable definitions and args)
std::vector<std::string> args;
BBVariables vars;
while (optind < argc) {
args.push_back(argv[optind++]);
char *arg = argv[optind++];
char *eq = strchr(arg, '=');
if (eq == nullptr) {
args.push_back(arg);
} else {
std::stringstream ss(eq + 1);
BBParser parser(ss, BBParser::FLAG_NONE);
parser.parseList(vars, vars[std::string(arg, eq - arg)]);
}
}

// TODO: Parse variables from CLI
BBVariables vars;

std::unique_ptr<DepNode> root = buildDepTree(outDir, vars);
if (root == nullptr) {
logger::log("No source files.");

Loading…
Cancel
Save