]> git.tdb.fi Git - builder.git/blobdiff - source/csourcefile.cpp
Implement PackageManager::get_package
[builder.git] / source / csourcefile.cpp
index e2b029a0d1f7080d29a409f7962356db6799c966..ca061d2b19e581ccdc1f6f308c2848533f8135c9 100644 (file)
@@ -22,17 +22,16 @@ CSourceFile::CSourceFile(Builder &b, const Component &c, const FS::Path &p):
                install_location = FS::Path("include")/package->get_name();
 }
 
-void CSourceFile::find_depends()
+void CSourceFile::find_dependencies()
 {
        if(!component || !mtime)
                return;
 
        const SourcePackage &spkg = component->get_package();
-       string relname = FS::relative(path, spkg.get_source()).str();
 
-       DependencyCache &deps_cache = spkg.get_deps_cache();
-       if(mtime<deps_cache.get_mtime() && deps_cache.has_deps(relname))
-               includes = deps_cache.get_deps(relname);
+       Cache &cache = spkg.get_cache();
+       if(mtime<cache.get_mtime() && cache.has_key(this, "includes"))
+               includes = cache.get_values(this, "includes");
        else
        {
                IO::BufferedFile in(path.str());
@@ -46,17 +45,24 @@ void CSourceFile::find_depends()
                        if(RegMatch match = r_include.match(line))
                                includes.push_back(match[1].str);
 
-               deps_cache.set_deps(relname, includes);
+               cache.set_values(this, "includes", includes);
        }
 
        const BuildInfo::PathList &incpath = component->get_build_info().incpath;
        BuildInfo::PathList local_incpath = incpath;
        local_incpath.push_front(FS::dirname(path).str());
 
-       for(list<string>::iterator i=includes.begin(); i!=includes.end(); ++i)
+       for(IncludeList::iterator i=includes.begin(); i!=includes.end(); ++i)
        {
                Target *hdr = builder.get_vfs().find_header(i->substr(1), ((*i)[0]=='"' ? local_incpath : incpath));
                if(hdr)
-                       add_depend(hdr);
+                       add_dependency(*hdr);
        }
 }
+
+void CSourceFile::modified()
+{
+       includes.clear();
+       depends.clear();
+       find_dependencies();
+}