27 "--show-symbol-table",
28 "--show-function-table",
33 "--string-abstraction",
52 for(std::size_t i=0; i<options.size(); i++)
55 if(std::string(options[i], 0, 2)==
"--")
59 if(options[i]==
"--verbosity" ||
60 options[i]==
"--function")
62 if(i<options.size()-1)
64 set(options[i], options[i+1]);
69 else if(!options[i].empty() && options[i][0]==
'@')
73 std::string(options[i], 1, std::string::npos));
75 else if(options[i]==
"/link" ||
81 else if(options[i].size()==2 &&
82 (options[i]==
"/D" || options[i]==
"-D") &&
86 std::string tmp=
"/D"+options[i+1];
104 const wchar_t *CL_env=_wgetenv(L
"CL");
111 const char *CL_env=getenv(
"CL");
126 std::vector<std::string>
options;
129 for(
int i=1; i<argc; i++)
130 options.push_back(argv[i]);
132 return parse(options);
135 static std::istream &
my_wgetline(std::istream &in, std::wstring &dest)
164 dest+=wchar_t(ch1+(ch2<<8));
173 std::ifstream infile(file);
177 std::cerr <<
"failed to open response file `" 184 getline(infile, line);
186 line[0]==
static_cast<char>(0xff) &&
187 line[1]==static_cast<char>(0xfe))
194 std::ifstream infile2(file, std::ios::binary);
203 std::wifstream infile2(file, std::ios::binary);
206 while(std::getline(infile2, wline))
211 else if(line.size()>=3 &&
212 line[0]==
static_cast<char>(0xef) &&
213 line[1]==static_cast<char>(0xbb) &&
214 line[2]==
static_cast<char>(0xbf))
220 while(getline(infile, line))
227 while(getline(infile, line))
245 std::vector<std::string>
options;
247 bool in_quotes=
false;
248 for(std::size_t i=0; i<line.size(); i++)
252 if(ch==
' ' && !in_quotes)
255 options.push_back(option);
260 in_quotes=!in_quotes;
267 options.push_back(option);
274 const std::string &s)
283 std::cout <<
"Warning: uninterpreted non-CL option `" 417 if(s[0]!=
'/' && s[0]!=
'-')
425 if(std::string(s, 1, std::string::npos)==
ms_cl_flags[j])
440 option.
optstring=std::string(s, 1, std::string::npos);
460 if(std::string(s, 1, ms_cl_prefix.size())==ms_cl_prefix)
466 if(ms_cl_prefix.size()==1)
470 option.
optchar=ms_cl_prefix[0];
488 options[optnr].values.push_back(
489 std::string(s, ms_cl_prefix.size()+1, std::string::npos));
496 std::cout <<
"Warning: uninterpreted CL option `" std::string narrow(const wchar_t *s)
void process_response_file_line(const std::string &line)
const char * ms_cl_prefixes[]
static std::istream & my_wgetline(std::istream &in, std::wstring &dest)
void process_non_cl_option(const std::string &s)
virtual bool parse(int, const char **)
parses the command line options into a cmdlinet
void process_response_file(const std::string &file)
const char * non_ms_cl_options[]
parses the command line options into a cmdlinet
A special command line object for the gcc-like options.
const char * ms_cl_flags[]
int getoptnr(char option) const
std::vector< optiont > options
void process_cl_option(const std::string &s)