]> git.tdb.fi Git - builder.git/blobdiff - source/csourcefile.cpp
Give import libraries their own class
[builder.git] / source / csourcefile.cpp
index dee807b2306027aa1a503e261f241dfbe4b4a0d7..ca061d2b19e581ccdc1f6f308c2848533f8135c9 100644 (file)
@@ -11,34 +11,32 @@ using namespace std;
 using namespace Msp;
 
 CSourceFile::CSourceFile(Builder &b, const FS::Path &p):
-       SourceFile(b, 0, p)
+       SourceFile(b, p)
 { }
 
 CSourceFile::CSourceFile(Builder &b, const Component &c, const FS::Path &p):
-       SourceFile(b, &c, p)
+       SourceFile(b, c, p)
 {
        string ext = FS::extpart(FS::basename(path));
        if(ext==".h" || ext==".H" || ext==".hpp")
-               install_location = "include/"+comp->get_name();
+               install_location = FS::Path("include")/package->get_name();
 }
 
-void CSourceFile::find_depends()
+void CSourceFile::find_dependencies()
 {
-       if(!comp || !mtime)
+       if(!component || !mtime)
                return;
 
-       const SourcePackage &spkg = comp->get_package();
-       string relname = FS::relative(path, spkg.get_source()).str();
+       const SourcePackage &spkg = component->get_package();
 
-       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());
 
-               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]+([\"<].*)[\">]");
 
@@ -47,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 StringList &incpath = comp->get_build_info().incpath;
-       StringList local_incpath = incpath;
+       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();
+}