-#include <fstream>
-#include <msp/regex++/regex++.h>
-#include "builder.h"
#include "component.h"
#include "sourcefile.h"
+#include "sourcepackage.h"
-using namespace std;
-using namespace Msp;
-
-SourceFile::SourceFile(Builder &b, const Component *c, const string &n):
- Target(b, c?&c->get_package():0, n),
- comp(c)
-{ }
-
-void SourceFile::find_depends()
-{
- ifstream in(name.c_str());
- if(!in) return;
-
- Regex r_include("^[ \t]*#include[ \t]+([\"<].*)[\">]");
-
- string line;
- while(getline(in, line))
- if(RegMatch match=r_include.match(line))
- includes.push_back(match[1].str());
-
- string path=name.substr(0, name.rfind('/'));
- for(list<string>::iterator i=includes.begin(); i!=includes.end(); ++i)
- {
- Target *hdr=builder.get_header(*i, path, comp->get_build_info().incpath);
- if(hdr)
- add_depend(hdr);
- }
-}
-
-void SourceFile::check_rebuild()
+SourceFile::SourceFile(Builder &b, const Component *c, const Msp::FS::Path &p):
+ FileTarget(b, (c ? &c->get_package() : 0), p)
{
- for(list<Target *>::iterator i=depends.begin(); i!=depends.end(); ++i)
- vmtime=max(vmtime, (*i)->get_virtual_mtime());
+ component = c;
}