}
if (Util::starts_with(args[i], "-specs=")
- || Util::starts_with(args[i], "--specs=")) {
- std::string path = args[i].substr(args[i].find('=') + 1);
+ || Util::starts_with(args[i], "--specs=")
+ || (args[i] == "-specs" || args[i] == "--specs")) {
+ std::string path;
+ size_t eq_pos = args[i].find('=');
+ if (eq_pos == std::string::npos) {
+ if (i + 1 >= args.size()) {
+ LOG("missing argument for \"{}\"", args[i]);
+ throw Failure(Statistic::bad_compiler_arguments);
+ }
+ path = args[i + 1];
+ i++;
+ } else {
+ path = args[i].substr(eq_pos + 1);
+ }
auto st = Stat::stat(path, Stat::OnError::log);
if (st) {
// If given an explicit specs file, then hash that file, but don't
{"--save-temps=cwd", TOO_HARD},
{"--save-temps=obj", TOO_HARD},
{"--serialize-diagnostics", TAKES_ARG | TAKES_PATH},
+ {"--specs", TAKES_ARG},
{"-A", TAKES_ARG},
{"-B", TAKES_ARG | TAKES_CONCAT_ARG | TAKES_PATH},
{"-D", AFFECTS_CPP | TAKES_ARG | TAKES_CONCAT_ARG},
{"-save-temps", TOO_HARD},
{"-save-temps=cwd", TOO_HARD},
{"-save-temps=obj", TOO_HARD},
+ {"-specs", TAKES_ARG},
{"-stdlib=", AFFECTS_CPP | TAKES_CONCAT_ARG},
{"-trigraphs", AFFECTS_CPP},
{"-u", TAKES_ARG | TAKES_CONCAT_ARG},