X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;ds=sidebyside;f=source%2Fobjectfile.cpp;h=cb42a8e78edfa6f7fbfe873245f748896c3f9b58;hb=43bd25ffcb0b4f7882773f4676b209a99cb73c04;hp=766188b5ad313bc73dd5e3db1660c36e637aa785;hpb=04c316da6d5d90e43cba262f54d90ca231f703bf;p=builder.git diff --git a/source/objectfile.cpp b/source/objectfile.cpp index 766188b..cb42a8e 100644 --- a/source/objectfile.cpp +++ b/source/objectfile.cpp @@ -1,10 +1,3 @@ -/* $Id$ - -This file is part of builder -Copyright © 2006-2009 Mikko Rasa, Mikkosoft Productions -Distributed under the LGPL -*/ - #include #include #include "builder.h" @@ -19,7 +12,7 @@ using namespace std; using namespace Msp; ObjectFile::ObjectFile(Builder &b, const Component &c, SourceFile &s): - FileTarget(b, &c.get_package(), generate_target_path(c, FS::basename(s.get_path()))), + FileTarget(b, &c.get_package(), generate_target_path(c, FS::relative(s.get_path(), c.get_package().get_source()).str())), comp(c), source(s) { @@ -47,17 +40,9 @@ void ObjectFile::find_depends() void ObjectFile::find_depends(Target *tgt) { - SourceFile *src = dynamic_cast(tgt); - FileTarget *file = src; - if(!src) - { - if(Install *inst = dynamic_cast(tgt)) - { - file = inst; - src = dynamic_cast(&inst->get_source()); - } - } - if(!src) + SourceFile *src = dynamic_cast(tgt->get_real_target()); + FileTarget *file = dynamic_cast(tgt); + if(!src || !file) return; FS::Path spath = FS::dirname(file->get_path()); @@ -66,9 +51,9 @@ void ObjectFile::find_depends(Target *tgt) const list &includes = src->get_includes(); for(list::const_iterator i=includes.begin(); i!=includes.end(); ++i) { - Target *hdr2 = builder.get_header(*i, spath, incpath); - if(hdr2 && find(depends.begin(), depends.end(), hdr2)==depends.end()) - add_depend(hdr2); + Target *hdr = builder.get_header(*i, spath, incpath); + if(hdr && find(depends.begin(), depends.end(), hdr)==depends.end()) + add_depend(hdr); } } @@ -86,5 +71,11 @@ Action *ObjectFile::create_action() 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(src)+".o"); + string fn = FS::basepart(src)+".o"; + if(!fn.compare(0, 2, "./")) + fn.erase(0, 2); + for(string::iterator i=fn.begin(); i!=fn.end(); ++i) + if(*i=='/') + *i = '_'; + return pkg.get_temp_dir()/comp.get_name()/fn; }