Просмотр исходного кода

read variables from argv

rebrand
Martin Dørum 5 лет назад
Родитель
Сommit
2af615d3be
3 измененных файлов: 26 добавлений и 6 удалений
  1. 12
    0
      src/BBParser.cc
  2. 1
    0
      src/BBParser.h
  3. 13
    6
      src/main.cc

+ 12
- 0
src/BBParser.cc Просмотреть файл

doAssignment(); 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) { void BBWriter::put(char ch) {
ch_ += 1; ch_ += 1;
stream_ << ch; stream_ << ch;

+ 1
- 0
src/BBParser.h Просмотреть файл

flags_(flags), line_(line), ch_(ch), stream_(stream) {} flags_(flags), line_(line), ch_(ch), stream_(stream) {}


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


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

+ 13
- 6
src/main.cc Просмотреть файл

//#bb ldlibs := -lpthread //#bb ldlibs := -lpthread


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


#include "BBParser.h" #include "BBParser.h"
#include "parallel.h" #include "parallel.h"
sys::chdir(workDir); 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; std::vector<std::string> args;
BBVariables vars;
while (optind < argc) { 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); std::unique_ptr<DepNode> root = buildDepTree(outDir, vars);
if (root == nullptr) { if (root == nullptr) {
logger::log("No source files."); logger::log("No source files.");

Загрузка…
Отмена
Сохранить