Fixed #7298 (reduce doesn't support --library= and --std= on the command line)
This commit is contained in:
parent
b54613a942
commit
0ddb2f1ce1
|
@ -634,6 +634,50 @@ static bool cleanupStatements(const ReduceSettings &settings, std::vector<std::s
|
||||||
return changed;
|
return changed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool tryLoadLibrary(Library& destination, const char* basepath, const char* filename)
|
||||||
|
{
|
||||||
|
const Library::Error err = destination.load(basepath, filename);
|
||||||
|
|
||||||
|
if (err.errorcode == Library::UNKNOWN_ELEMENT)
|
||||||
|
std::cout << "reduce: Found unknown elements in configuration file '" << filename << "': " << err.reason << std::endl;
|
||||||
|
else if (err.errorcode != Library::OK) {
|
||||||
|
std::string errmsg;
|
||||||
|
switch (err.errorcode) {
|
||||||
|
case Library::OK:
|
||||||
|
break;
|
||||||
|
case Library::FILE_NOT_FOUND:
|
||||||
|
errmsg = "File not found";
|
||||||
|
break;
|
||||||
|
case Library::BAD_XML:
|
||||||
|
errmsg = "Bad XML";
|
||||||
|
break;
|
||||||
|
case Library::UNKNOWN_ELEMENT:
|
||||||
|
errmsg = "Unexpected element";
|
||||||
|
break;
|
||||||
|
case Library::MISSING_ATTRIBUTE:
|
||||||
|
errmsg = "Missing attribute";
|
||||||
|
break;
|
||||||
|
case Library::BAD_ATTRIBUTE_VALUE:
|
||||||
|
errmsg = "Bad attribute value";
|
||||||
|
break;
|
||||||
|
case Library::UNSUPPORTED_FORMAT:
|
||||||
|
errmsg = "File is of unsupported format version";
|
||||||
|
break;
|
||||||
|
case Library::DUPLICATE_PLATFORM_TYPE:
|
||||||
|
errmsg = "Duplicate platform type";
|
||||||
|
break;
|
||||||
|
case Library::PLATFORM_TYPE_REDEFINED:
|
||||||
|
errmsg = "Platform type redefined";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (!err.reason.empty())
|
||||||
|
errmsg += " '" + err.reason + "'";
|
||||||
|
std::cout << "reduce: Failed to load library configuration file '" << filename << "'. " << errmsg << std::endl;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
|
@ -733,6 +777,21 @@ int main(int argc, char *argv[])
|
||||||
}
|
}
|
||||||
|
|
||||||
maxconfigs = true;
|
maxconfigs = true;
|
||||||
|
} else if (std::strncmp(argv[i], "--library=", 10) == 0) {
|
||||||
|
if (!tryLoadLibrary(settings.library, argv[0], argv[i]+10))
|
||||||
|
return false;
|
||||||
|
} else if (std::strcmp(argv[i], "--std=posix") == 0) {
|
||||||
|
settings.standards.posix = true;
|
||||||
|
} else if (std::strcmp(argv[i], "--std=c89") == 0) {
|
||||||
|
settings.standards.c = Standards::C89;
|
||||||
|
} else if (std::strcmp(argv[i], "--std=c99") == 0) {
|
||||||
|
settings.standards.c = Standards::C99;
|
||||||
|
} else if (std::strcmp(argv[i], "--std=c11") == 0) {
|
||||||
|
settings.standards.c = Standards::C11;
|
||||||
|
} else if (std::strcmp(argv[i], "--std=c++03") == 0) {
|
||||||
|
settings.standards.cpp = Standards::CPP03;
|
||||||
|
} else if (std::strcmp(argv[i], "--std=c++11") == 0) {
|
||||||
|
settings.standards.cpp = Standards::CPP11;
|
||||||
} else if (settings.filename==nullptr && strchr(argv[i],'.'))
|
} else if (settings.filename==nullptr && strchr(argv[i],'.'))
|
||||||
settings.filename = argv[i];
|
settings.filename = argv[i];
|
||||||
else if (settings.linenr == 0U && MathLib::isInt(argv[i]))
|
else if (settings.linenr == 0U && MathLib::isInt(argv[i]))
|
||||||
|
@ -751,7 +810,7 @@ int main(int argc, char *argv[])
|
||||||
|
|
||||||
if ((!settings.hang && settings.linenr == 0U) || settings.filename == nullptr) {
|
if ((!settings.hang && settings.linenr == 0U) || settings.filename == nullptr) {
|
||||||
std::cerr << "Syntax:" << std::endl
|
std::cerr << "Syntax:" << std::endl
|
||||||
<< argv[0] << " [--stdout] [--cfg=X] [--hang] [--maxtime=60] [-D define] [-I includepath] [--force] [--enable=<id>] [--inconclusive] [--debug-warnings] [--max-configs=<limit>] filename [linenr]" << std::endl;
|
<< argv[0] << " [--stdout] [--cfg=X] [--hang] [--maxtime=60] [-D define] [-I includepath] [--force] [--enable=<id>] [--inconclusive] [--debug-warnings] [--max-configs=<limit>] [--platform=<type>] [--library=<cfg>] [--std=<id>] filename [linenr]" << std::endl;
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue