]> git.tdb.fi Git - builder.git/blobdiff - source/csourcefile.cpp
Don't store component locally in object and source files
[builder.git] / source / csourcefile.cpp
index 2162cf0873ee1f7b9fd9a43a82649c2b47a4ba05..7a26bb5ff4c503b0072eb9ed5bde9e3e25d15bdb 100644 (file)
@@ -19,68 +19,44 @@ CSourceFile::CSourceFile(Builder &b, const Component &c, const FS::Path &p):
 {
        string ext = FS::extpart(FS::basename(path));
        if(ext==".h" || ext==".H" || ext==".hpp")
-               install_location = "include/"+comp->get_name();
+               install_location = "include/"+component->get_name();
 }
 
 void CSourceFile::find_depends()
 {
-       if(!comp)
-       {
-               deps_ready = true;
+       if(!component || !mtime)
                return;
-       }
 
-       const SourcePackage &spkg = comp->get_package();
+       const SourcePackage &spkg = component->get_package();
        string relname = FS::relative(path, spkg.get_source()).str();
-       DependencyCache &deps_cache = spkg.get_deps_cache();
-       bool deps_found = false;
-       if(mtime<deps_cache.get_mtime())
-       {
-               try
-               {
-                       includes = deps_cache.get_deps(relname);
-                       deps_found = true;
-               }
-               catch(const key_error &)
-               { }
-       }
 
-       if(!deps_found)
+       DependencyCache &deps_cache = spkg.get_deps_cache();
+       if(mtime<deps_cache.get_mtime() && deps_cache.has_deps(relname))
+               includes = deps_cache.get_deps(relname);
+       else
        {
-               try
-               {
-                       IO::BufferedFile in(path.str());
+               IO::BufferedFile in(path.str());
 
-                       if(builder.get_verbose()>=4)
-                               IO::print("Reading includes from %s\n", path.str());
+               builder.get_logger().log("files", format("Reading includes from %s", path.str()));
 
-                       Regex r_include("^[ \t]*#include[ \t]+([\"<].*)[\">]");
+               Regex r_include("^[ \t]*#include[ \t]+([\"<].*)[\">]");
 
-                       string line;
-                       while(in.getline(line))
-                               if(RegMatch match = r_include.match(line))
-                                       includes.push_back(match[1].str);
+               string line;
+               while(in.getline(line))
+                       if(RegMatch match = r_include.match(line))
+                               includes.push_back(match[1].str);
 
-                       deps_cache.set_deps(relname, includes);
-               }
-               catch(const IO::file_not_found &)
-               {
-                       if(builder.get_verbose()>=4)
-                               IO::print("Failed to read includes from %s\n", path.str());
-                       deps_ready = true;
-                       return;
-               }
+               deps_cache.set_deps(relname, includes);
        }
 
-       const StringList &incpath = comp->get_build_info().incpath;
+       const BuildInfo::PathList &incpath = component->get_build_info().incpath;
+       BuildInfo::PathList local_incpath = incpath;
+       local_incpath.push_front(FS::dirname(path).str());
 
-       FS::Path dir = FS::dirname(path);
        for(list<string>::iterator i=includes.begin(); i!=includes.end(); ++i)
        {
-               Target *hdr = builder.get_vfs().find_header(*i, dir, incpath);
+               Target *hdr = builder.get_vfs().find_header(i->substr(1), ((*i)[0]=='"' ? local_incpath : incpath));
                if(hdr)
                        add_depend(hdr);
        }
-
-       deps_ready = true;
 }