X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fgnucompiler.cpp;h=6335aaf3cc4f51ce513b06ad3735de751e05db56;hb=f41742cb2b21241634c123561b71ee1667cb1ff4;hp=8d0bca7c6470cc229ee02874ab9ec04f4620c2ce;hpb=a5fd0f039fa3d067d641595e4043dd5e8e3c0820;p=builder.git diff --git a/source/gnucompiler.cpp b/source/gnucompiler.cpp index 8d0bca7..6335aaf 100644 --- a/source/gnucompiler.cpp +++ b/source/gnucompiler.cpp @@ -27,7 +27,7 @@ const char *cpus[] = } -GnuCompiler::GnuCompiler(Builder &b, const Architecture &a, const string &t, const FS::Path &sysroot): +GnuCompiler::GnuCompiler(Builder &b, const Architecture &a, const string &t): Tool(b, a, t) { if(tag=="CC") @@ -50,9 +50,6 @@ GnuCompiler::GnuCompiler(Builder &b, const Architecture &a, const string &t, con throw invalid_argument("GnuCompiler::GnuCompiler"); set_command((tag=="CXX" ? "g++" : "gcc"), true); - - if(!sysroot.empty()) - build_info.sysroot = sysroot; } Target *GnuCompiler::create_source(const Component &comp, const FS::Path &path) const @@ -102,6 +99,9 @@ string GnuCompiler::create_build_signature(const BuildInfo &binfo) const void GnuCompiler::do_prepare() { + bool path_found = false; + const FS::Path &sysroot = build_info.sysroot; + executable = builder.get_vfs().find_binary(command); if(executable) { @@ -111,12 +111,10 @@ void GnuCompiler::do_prepare() 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 { @@ -127,22 +125,34 @@ void GnuCompiler::do_prepare() { string::size_type newline = output.find('\n', start); if(!output.compare(start, 34, "#include <...> search starts here:")) + { record_path = true; + path_found = 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)); + builder.get_logger().log("tools", format("Got %s system path: %s", tag, path)); system_path.push_back(path); } start = newline+1; } } catch(const runtime_error &e) - { - problems.push_back("Unable to determine system path"); - } + { } + } + + if(!path_found) + { + builder.get_logger().log("tools", format("No %s system path found, using defaults", tag)); + if(!sysroot.empty()) + 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"); } }