]> git.tdb.fi Git - builder.git/blobdiff - source/installedfile.cpp
Refactor transitive dependencies to work on all targets
[builder.git] / source / installedfile.cpp
diff --git a/source/installedfile.cpp b/source/installedfile.cpp
deleted file mode 100644 (file)
index 2a96066..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-#include <msp/fs/utils.h>
-#include "builder.h"
-#include "copy.h"
-#include "executable.h"
-#include "datafile.h"
-#include "header.h"
-#include "installedfile.h"
-#include "package.h"
-#include "pkgconfig.h"
-#include "sharedlibrary.h"
-#include "staticlibrary.h"
-
-using namespace std;
-using namespace Msp;
-
-InstalledFile::InstalledFile(Builder &b, const SourcePackage &p, FileTarget &s, const std::string &loc):
-       FileTarget(b, &p, generate_target_path(s, loc)),
-       source(s)
-{
-       buildable = true;
-       add_depend(&source);
-
-       if(const SharedLibrary *shlib = dynamic_cast<const SharedLibrary *>(&source))
-               if(!shlib->get_soname().empty())
-                       link = FS::dirname(path)/FS::basename(shlib->get_path());
-
-       if(!link.empty())
-               builder.get_vfs().register_path(link, this);
-}
-
-Target *InstalledFile::get_real_target()
-{
-       return source.get_real_target();
-}
-
-void InstalledFile::check_rebuild()
-{
-       if(!mtime)
-               mark_rebuild("Does not exist");
-       else if(source.get_mtime()>mtime || source.get_size()!=size)
-               mark_rebuild(source.get_name()+" has changed");
-       else if(source.get_rebuild())
-               mark_rebuild(source.get_name()+" needs rebuilding");
-}
-
-FS::Path InstalledFile::generate_target_path(const FileTarget &tgt, const std::string &loc)
-{
-       if(!tgt.get_package())
-               throw invalid_argument("Can't install package-less targets");
-
-       FS::Path base = tgt.get_package()->get_builder().get_prefix();
-       string tgtname = FS::basename(tgt.get_path());
-
-       string mid;
-       if(!loc.empty())
-               mid = loc;
-       else if(const Header *hdr = dynamic_cast<const Header *>(&tgt))
-       {
-               if(hdr->get_component()->get_type()!=Component::HEADERS)
-                       throw logic_error("Header install from non-header component?");
-               mid = "include/"+hdr->get_component()->get_name();
-       }
-       else if(dynamic_cast<const Executable *>(&tgt))
-               mid = "bin";
-       else if(const SharedLibrary *shlib = dynamic_cast<const SharedLibrary *>(&tgt))
-       {
-               const Component &comp = shlib->get_component();
-               if(comp.get_type()==Component::LIBRARY)
-               {
-                       mid = "lib";
-                       if(!shlib->get_soname().empty())
-                               tgtname = shlib->get_soname();
-               }
-               else if(comp.get_type()==Component::MODULE)
-                       mid = "lib/"+tgt.get_package()->get_name();
-       }
-       else if(dynamic_cast<const StaticLibrary *>(&tgt))
-               mid = "lib";
-       else if(dynamic_cast<const PkgConfig *>(&tgt))
-               mid = "lib/pkgconfig";
-       else if(dynamic_cast<const ::DataFile *>(&tgt))
-               mid = "share/"+tgt.get_package()->get_name();
-
-       if(mid.empty())
-               throw invalid_argument("Don't know where to install "+tgtname);
-
-       return base/mid/tgtname;
-}