private static int RunBuild(string[] args, DateTime start, Action<string> stdout, Action<string> stderr)
{
Logging.Emit("client mode = {0}", Settings.ServiceMode);
try
{
if (!Settings.Disabled)
{
string compiler = Compiler.Find();
if (compiler == null)
throw new System.IO.FileNotFoundException("cant find real cl compiler");
var cachedir = Settings.CacheDirectory;
Logging.Emit("compiler: {0}", compiler);
ICompiler comp;
using (ICompilerCache cc =
CompilerCacheFactory.Get(Settings.DirectMode, cachedir, compiler, Environment.CurrentDirectory, Compiler.GetEnvironmentDictionary(), out comp))
{
if (comp != null) spawnServer = true;
cc.SetCaptureCallback(comp, stdout, stderr);
return cc.CompileOrCache(comp, args);
}
}
else
{
Logging.Emit("disabled by environment");
}
}
catch (CClashWarningException e)
{
Logging.Warning(e.Message);
}
catch (Exception e)
{
Logging.Emit("{0} after {1} ms", e.GetType().Name, DateTime.Now.Subtract(start).TotalMilliseconds);
Logging.Emit("{0} {1}", e.GetType().Name + " message: " + e.Message);
#if DEBUG
Logging.Error("Exception from cacher {0}!!!", e);
#endif
}
int rv = -1;
try
{
var c = new Compiler()
{
CompilerExe = Compiler.Find(),
};
c.SetEnvironment(Compiler.GetEnvironmentDictionary());
c.SetWorkingDirectory(Environment.CurrentDirectory);
rv = c.InvokeCompiler(args, stderr, stdout, false, null);
Logging.Emit("exit {0} after {1} ms", rv, DateTime.Now.Subtract(start).TotalMilliseconds);
}
catch (CClashErrorException e)
{
Logging.Error(e.Message);
throw;
}
catch (CClashWarningException e)
{
Logging.Warning(e.Message);
}
return rv;
}
}