X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Finstallmap.cpp;h=8f1995bc905c3a4a6d38dfea113958570191712e;hb=74ea8208bb1aa1d9afc9657a4cdfac6714241887;hp=942b932b98c29babf1fd0d59eb090d53cb1cda30;hpb=c51e8844f19c31b2809ba459a1659d3b94a86f89;p=builder.git diff --git a/source/installmap.cpp b/source/installmap.cpp index 942b932..8f1995b 100644 --- a/source/installmap.cpp +++ b/source/installmap.cpp @@ -2,6 +2,8 @@ #include "component.h" #include "filetarget.h" #include "installmap.h" +#include "sourcepackage.h" +#include "templatefile.h" using namespace std; using namespace Msp; @@ -20,6 +22,7 @@ FS::Path InstallMap::get_install_location(const FileTarget &target) const unsigned overlay_depth = 0; if(comp && !comp->get_overlays().empty()) { + // Check if the target resides in an overlay directory const Component::OverlayList &overlays = comp->get_overlays(); string last_dir = FS::basename(FS::dirname(target.get_path())); for(Component::OverlayList::const_iterator i=overlays.begin(); i!=overlays.end(); ++i) @@ -27,7 +30,28 @@ FS::Path InstallMap::get_install_location(const FileTarget &target) const overlay_depth = 1; } - const FS::Path &source = target.get_path(); + FS::Path source = target.get_path(); + if(comp) + { + /* Check if the target is a generated source file, residing in the + temporary directory */ + const SourcePackage &pkg = comp->get_package(); + int temp_depth = FS::descendant_depth(source, pkg.get_temp_directory()); + if(temp_depth>0) + { + // If it is, use the generating template's directory instead + const Target::Dependencies &deps = target.get_dependencies(); + for(Target::Dependencies::const_iterator i=deps.begin(); i!=deps.end(); ++i) + if(const TemplateFile *tmpl = dynamic_cast(*i)) + { + source = FS::dirname(tmpl->get_path())/FS::basename(source); + break; + } + } + } + + /* Look for a mapping entry matching both the target's original location + and default install location */ FS::Path install = target.get_install_location(); for(list::const_iterator i=entries.begin(); i!=entries.end(); ++i) {