using namespace std;
using namespace Msp;
-ObjectFile::ObjectFile(Builder &b, const Component &c, SourceFile &src):
- Target(b, &c.get_package(), generate_target_name(c, src.get_name())),
- comp(c)
+ObjectFile::ObjectFile(Builder &b, const Component &c, SourceFile &s):
+ FileTarget(b, &c.get_package(), generate_target_path(c, FS::basename(s.get_path()))),
+ comp(c),
+ source(s)
{
buildable=true;
- add_depend(&src);
+ add_depend(&source);
}
void ObjectFile::find_depends()
void ObjectFile::find_depends(Target *tgt)
{
- const string &tname=tgt->get_name();
- string path=tname.substr(0, tname.rfind('/'));
-
SourceFile *src=dynamic_cast<SourceFile *>(tgt);
if(!src)
{
- Install *inst=dynamic_cast<Install *>(tgt);
- if(inst)
- src=dynamic_cast<SourceFile *>(inst->get_depends().front());
+ if(Install *inst=dynamic_cast<Install *>(tgt))
+ src=dynamic_cast<SourceFile *>(&inst->get_source());
}
if(!src)
return;
+ FS::Path spath=src->get_path();
const StringList &incpath=comp.get_build_info().incpath;
const list<string> &includes=src->get_includes();
for(list<string>::const_iterator i=includes.begin(); i!=includes.end(); ++i)
{
- Target *hdr2=builder.get_header(*i, path, incpath);
+ Target *hdr2=builder.get_header(*i, spath, incpath);
if(hdr2 && find(depends.begin(), depends.end(), hdr2)==depends.end())
add_depend(hdr2);
}
return new Compile(builder, *this);
}
-string ObjectFile::generate_target_name(const Component &comp, const string &src)
+FS::Path ObjectFile::generate_target_path(const Component &comp, const string &src)
{
const SourcePackage &pkg=comp.get_package();
- return (pkg.get_temp_dir()/comp.get_name()/(FS::basepart(FS::basename(src))+".o")).str();
+ return pkg.get_temp_dir()/comp.get_name()/(FS::basepart(src)+".o");
}