+void GnuCompiler::prepare_version()
+{
+ if(!executable)
+ return;
+
+ prepare_version("-dumpversion");
+ if(version>=0x70000)
+ prepare_version("-dumpfullversion");
+ builder.get_logger().log("tools", format("%s version is %d.%d.%d", FS::basename(executable->get_path()), version>>16, (version>>8)&0xFF, version&0xFF));
+}
+
+void GnuCompiler::prepare_version(const string &arg)
+{
+ ExternalTask::Arguments argv;
+ argv.push_back(executable->get_path().str());
+ argv.push_back(arg);
+
+ builder.get_logger().log("auxcommands", format("Running %s", join(argv.begin(), argv.end())));
+ try
+ {
+ string version_str = strip(ExternalTask::run_and_capture_output(argv));
+
+ vector<string> version_parts = split(version_str, '.');
+ version = 0;
+ for(unsigned i=0; (i<3 && i<version_parts.size()); ++i)
+ version |= lexical_cast<unsigned>(version_parts[i])<<(16-8*i);
+ }
+ catch(const runtime_error &)
+ { }
+}
+