]> git.tdb.fi Git - builder.git/blobdiff - source/installmap.cpp
Don't treat using deprecated declarations as errors
[builder.git] / source / installmap.cpp
index 942b932b98c29babf1fd0d59eb090d53cb1cda30..8f1995bc905c3a4a6d38dfea113958570191712e 100644 (file)
@@ -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<const TemplateFile *>(*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<Entry>::const_iterator i=entries.begin(); i!=entries.end(); ++i)
        {