33 for(std::size_t i = 0; i <
options.size(); i++)
36 if(std::string(
options[i], 0, 2) ==
"--")
68 std::vector<std::string>
options;
71 for(
int i = 1; i < argc; i++)
77 static std::istream &
my_wgetline(std::istream &in, std::wstring &dest)
106 dest += wchar_t(ch1 + (ch2 << 8));
115 std::ifstream infile(
file);
119 std::cerr <<
"failed to open response file `" <<
file <<
"'\n";
125 getline(infile, line);
127 line.size() >= 2 && line[0] ==
static_cast<char>(0xff) &&
128 line[1] == static_cast<char>(0xfe))
135 std::ifstream infile2(
file, std::ios::binary);
144 std::wifstream infile2(
file, std::ios::binary);
147 while(std::getline(infile2, wline))
153 line.size() >= 3 && line[0] ==
static_cast<char>(0xef) &&
154 line[1] == static_cast<char>(0xbb) && line[2] ==
static_cast<char>(0xbf))
160 while(getline(infile, line))
167 while(getline(infile, line))
185 std::vector<std::string>
options;
187 bool in_quotes =
false;
188 for(std::size_t i = 0; i < line.size(); i++)
192 if(ch ==
' ' && !in_quotes)
200 in_quotes = !in_quotes;
222 std::cout <<
"Warning: uninterpreted non-LINK option `" << s <<
"'\n";
231 "ASSEMBLYLINKRESOURCE",
236 "CLRLOADEROPTIMIZATION",
237 "CLRSUPPORTLASTERROR",
238 "CLRTHREADATTRIBUTE",
239 "CLRUNMANAGEDCODECHECK",
276 "MANIFESTDEPENDENCY",
321 std::string result = s;
322 transform(result.begin(), result.end(), result.begin(), toupper);
331 if(s[0] !=
'/' && s[0] !=
'-')
341 to_upper_string(std::string(s, 1, std::string::npos)) == ms_link_option ||
342 to_upper_string(std::string(s, 1, ms_link_option.size() + 1)) == ms_link_option +
':')
346 if(!optnr.has_value())
358 if(s.size() > ms_link_option.size() + 1)
359 options[*optnr].values.push_back(
360 std::string(s, ms_link_option.size() + 2, std::string::npos));
367 std::cout <<
"Warning: uninterpreted LINK option `" << s <<
"'\n";
std::string narrow(const wchar_t *s)
void process_response_file(const std::string &file)
void process_link_option(const std::string &s)
virtual bool parse(int, const char **)
parses the command line options into a cmdlinet
static std::istream & my_wgetline(std::istream &in, std::wstring &dest)
nonstd::optional< T > optionalt
A special command line object for LINK options.
static std::string to_upper_string(const std::string &s)
void process_non_link_option(const std::string &s)
const char * non_ms_link_options[]
parses the command line options into a cmdlinet
optionalt< std::size_t > getoptnr(char option) const
std::vector< optiont > options
void process_response_file_line(const std::string &line)
const char * ms_link_options[]