diff options
Diffstat (limited to 'solenv/gcc-wrappers/wrapper.cxx')
-rw-r--r-- | solenv/gcc-wrappers/wrapper.cxx | 56 |
1 files changed, 51 insertions, 5 deletions
diff --git a/solenv/gcc-wrappers/wrapper.cxx b/solenv/gcc-wrappers/wrapper.cxx index b156c89dc220..56936155fa47 100644 --- a/solenv/gcc-wrappers/wrapper.cxx +++ b/solenv/gcc-wrappers/wrapper.cxx @@ -82,7 +82,13 @@ void setupccenv() { } } -string processccargs(vector<string> rawargs) { +string processccargs(vector<string> rawargs, string &env_prefix, bool &verbose) +{ + // default env var prefix + env_prefix = "REAL_"; + verbose = false; + bool env_prefix_next_arg = false; + // suppress the msvc banner string args=" -nologo"; // TODO: should these options be enabled globally? @@ -101,6 +107,13 @@ string processccargs(vector<string> rawargs) { string linkargs(" -link -debug"); for(vector<string>::iterator i = rawargs.begin(); i != rawargs.end(); ++i) { + if (env_prefix_next_arg) + { + env_prefix = *i; + env_prefix_next_arg = false; + continue; + } + args.append(" "); if(*i == "-o") { // TODO: handle more than just exe output @@ -121,10 +134,15 @@ string processccargs(vector<string> rawargs) { linkargs.append(" -dll -out:"); linkargs.append(*i); } + else if (dot == string::npos) + { + args.append("-Fe"); + args.append(*i + ".exe"); + } else { cerr << "unknown -o argument - please adapt gcc-wrapper for \"" - << (*i) << "\""; + << (*i) << "\"" << endl; exit(1); } } @@ -159,14 +177,41 @@ string processccargs(vector<string> rawargs) { } else if(*i == "-Werror") args.append("-WX"); + else if (*i == "--wrapper-print-cmdline") + verbose = true; else - args.append(*i); + { + size_t pos = i->find("="); + if (0 == i->compare(0, pos, "--wrapper-env-prefix")) + { + if (pos == string::npos) + env_prefix_next_arg = true; + else if (pos + 1 == i->length()) + { + // bailout - missing arg + env_prefix_next_arg = true; + break; + } + else + env_prefix = i->substr(pos + 1); + } + else + args.append(*i); + } } + + if (env_prefix_next_arg) + { + cerr << "wrapper-env-prefix needs an argument!" << endl; + exit(1); + } + args.append(linkargs); return args; } -int startprocess(string command, string args) { +int startprocess(string command, string args, bool verbose) +{ STARTUPINFO si; PROCESS_INFORMATION pi; SECURITY_ATTRIBUTES sa; @@ -200,7 +245,8 @@ int startprocess(string command, string args) { auto cmdline = "\"" + command + "\" " + args; - //cerr << "CMD= " << command << " " << args << endl; + if (verbose) + cerr << "CMD= " << command << " " << args << endl; // Commandline may be modified by CreateProcess char* cmdlineBuf=_strdup(cmdline.c_str()); |