249 const argst &args_to_parse,
252 for(argst::const_iterator it = args_to_parse.begin();
253 it != args_to_parse.end();
256 const std::string &argv_i=*it;
261 std::ifstream opts_file(argv_i.substr(1));
262 std::ostringstream all_lines;
265 while(std::getline(opts_file, line))
266 all_lines <<
' ' << line;
268 line = all_lines.str();
270 line.erase(0, line.find_first_not_of(
"\t "));
288 argst::const_iterator next=it;
302 *o!=
nullptr && !found;
308 if(next != args_to_parse.end())
317 else if(
has_prefix(argv_i, std::string(*o)+
"="))
320 set(*o, argv_i.substr(strlen(*o)+1));
343 std::string value=argv_i.substr(4);
353 std::size_t equal_pos=argv_i.find(
'=');
355 if(equal_pos==std::string::npos)
358 set(argv_i.substr(0, equal_pos), argv_i.substr(equal_pos+1));
367 argst::const_iterator next=it;
374 *o!=
nullptr && !found;
380 if(next != args_to_parse.end())
391 else if(
has_prefix(argv_i, std::string(*o)+
"="))
394 set(*o, argv_i.substr(strlen(*o)+1));
400 *o!=
nullptr && !found;
406 if(next != args_to_parse.end())
419 set(*o, argv_i.substr(strlen(*o)));
425 *o!=
nullptr && !found;
431 set(*o, argv_i.substr(strlen(*o)));
438 std::cerr <<
"Warning: uninterpreted gcc option '" << argv_i
454 argst args_from_specs;
456 for(std::string::size_type arg_start=0, arg_end=0;
457 arg_end!=std::string::npos;
458 arg_start=line.find_first_not_of(
"\t ", arg_end))
460 arg_end=line.find_first_of(
"\t ", arg_start);
461 args_from_specs.push_back(line.substr(arg_start, arg_end - arg_start));
470 const std::string &specs_file_name=
get_value(
"specs");
471 if(specs_file_name.empty())
474 std::ifstream specs_file(specs_file_name);
478 while(std::getline(specs_file, line))
481 line.erase(0, line.find_first_not_of(
"\t "));
487 (line==
"*link_libgcc:" ||