]> git.tdb.fi Git - builder.git/blobdiff - source/lib/installedfile.cpp
Use a covariant return type for get_real_target in FileTarget
[builder.git] / source / lib / installedfile.cpp
index 6e45ad27efc66ac65d8e9643b1763c75a4811a17..78a7c3a1575100a063d56451abc22f8c94349640 100644 (file)
@@ -26,27 +26,23 @@ FS::Path InstalledFile::generate_target_path(const FS::Path &global_prefix, cons
                if(!tgt.get_package())
                        throw invalid_argument("No private install location for "+tgt.get_name());
 
-               prefix = tgt.get_package()->get_temp_directory();
+               prefix = tgt.get_package()->get_staging_directory();
                mid = loc.substr(2);
        }
        else
        {
                prefix = global_prefix;
+               mid = loc;
+       }
 
-               if(!loc.empty())
-                       mid = loc;
-               else if(const Component *comp = tgt.get_component())
+       if(mid.empty())
+               if(const Component *comp = tgt.get_component())
                        mid = comp->get_install_map().get_install_location(tgt);
-       }
 
        if(mid.empty())
                mid = tgt.get_install_location();
 
-       string fn = tgt.get_install_filename();
-       if(fn.empty())
-               fn = FS::basename(tgt.get_path());
-
-       return prefix/mid/fn;
+       return prefix/mid/FS::basename(tgt.get_path());
 }
 
 void InstalledFile::set_symlink(const FS::Path &l)
@@ -58,7 +54,7 @@ void InstalledFile::set_symlink(const FS::Path &l)
        builder.get_vfs().register_path(link, this);
 }
 
-Target *InstalledFile::get_real_target()
+FileTarget *InstalledFile::get_real_target()
 {
        return source.get_real_target();
 }