X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fgnucompiler.cpp;h=8d0bca7c6470cc229ee02874ab9ec04f4620c2ce;hb=a5fd0f039fa3d067d641595e4043dd5e8e3c0820;hp=ea04fbeacfb79ca92f444b8b374b68f592477271;hpb=a4f02f02d4682c7f504e46ff2ce8f93035fd36dd;p=builder.git diff --git a/source/gnucompiler.cpp b/source/gnucompiler.cpp index ea04fbe..8d0bca7 100644 --- a/source/gnucompiler.cpp +++ b/source/gnucompiler.cpp @@ -1,6 +1,4 @@ #include -#include -#include #include #include #include @@ -54,14 +52,7 @@ GnuCompiler::GnuCompiler(Builder &b, const Architecture &a, const string &t, con set_command((tag=="CXX" ? "g++" : "gcc"), true); if(!sysroot.empty()) - { build_info.sysroot = sysroot; - system_path.push_back(sysroot/"usr/include"); - } - else if(architecture->is_native()) - system_path.push_back("/usr/include"); - else - system_path.push_back("/usr/"+architecture->get_cross_prefix()+"/include"); } Target *GnuCompiler::create_source(const Component &comp, const FS::Path &path) const @@ -116,24 +107,42 @@ void GnuCompiler::do_prepare() { ExternalTask::Arguments argv; argv.push_back(executable->get_path().str()); - argv.push_back("-dumpversion"); + argv.push_back("-Wp,-v"); + argv.push_back("-E"); + if(tag=="CXX") + argv.push_back("-xc++"); + const FS::Path &sysroot = build_info.sysroot; + if(!sysroot.empty()) + argv.push_back("--sysroot="+sysroot.str()); + argv.push_back("-"); + string prog = FS::basename(executable->get_path()); builder.get_logger().log("auxcommands", format("Running %s", join(argv.begin(), argv.end()))); try { - version = strip(ExternalTask::run_and_capture_output(argv)); - builder.get_logger().log("tools", format("%s version is %s", FS::basename(executable->get_path()), version)); - - if(tag=="CXX") + string output = ExternalTask::run_and_capture_output(argv, FS::Path(), true); + string::size_type start = 0; + bool record_path = false; + while(start search starts here:")) + record_path = true; + else if(!output.compare(start, 19, "End of search list.")) + record_path = false; + else if(record_path) + { + FS::Path path = strip(output.substr(start, newline-start)); + builder.get_logger().log("tools", format("Got %s (%s) system path: %s", prog, tag, path)); + system_path.push_back(path); + } + start = newline+1; } } - catch(const runtime_error &) - { } + catch(const runtime_error &e) + { + problems.push_back("Unable to determine system path"); + } } }