#include <msp/fs/utils.h>
+#include "component.h"
#include "filetarget.h"
#include "installmap.h"
FS::Path InstallMap::get_install_location(const FileTarget &target) const
{
+ const Component *comp = target.get_component();
+ unsigned overlay_depth = 0;
+ if(comp && !comp->get_overlays().empty())
+ {
+ 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)
+ if(last_dir==*i)
+ overlay_depth = 1;
+ }
+
const FS::Path &source = target.get_path();
FS::Path install = target.get_install_location();
for(list<Entry>::const_iterator i=entries.begin(); i!=entries.end(); ++i)
FS::Path install_base = FS::common_ancestor(install, i->install);
if(install_base.size()>1)
{
- install = i->install/FS::dirname(source).subpath(i->source.size());
+ install = i->install/source.subpath(i->source.size(), source_depth-1-overlay_depth);
break;
}
}