]> git.tdb.fi Git - builder.git/blobdiff - source/virtualfilesystem.h
Convert all list containers to vectors
[builder.git] / source / virtualfilesystem.h
index 362d5db8674f836c2ff01a4bfc9a176251dd095d..4aa20d4b158d1ac8985a46b0383d6c00938b2276 100644 (file)
@@ -1,13 +1,16 @@
 #ifndef VIRTUALFILESYSTEM_H_
 #define VIRTUALFILESYSTEM_H_
 
-#include <list>
 #include <map>
+#include <set>
+#include <vector>
 #include <msp/fs/path.h>
+#include "buildinfo.h"
 
 class Builder;
 class FileTarget;
 class Pattern;
+class Tool;
 
 /**
 Provides access to the filesystem in a way that takes known targets into
@@ -17,18 +20,19 @@ possible to build them.
 class VirtualFileSystem
 {
 public:
-       typedef std::list<Msp::FS::Path> SearchPath;
+       using SearchPath = std::vector<Msp::FS::Path>;
 
 private:
-       typedef std::map<Msp::FS::Path, FileTarget *> TargetMap;
-
        Builder &builder;
-       TargetMap targets;
+       std::map<Msp::FS::Path, FileTarget *> targets;
        std::set<Msp::FS::Path> nonexistent;
+       SearchPath sys_bin_path;
 
 public:
        VirtualFileSystem(Builder &);
 
+       /** Gets an existing target associated with a path.  If no target has claimed
+       that path, 0 is returned. */
        FileTarget *get_target(const Msp::FS::Path &) const;
 
        /** Registers a target with the VFS.  A target may be registered at multiple
@@ -36,14 +40,21 @@ public:
        void register_path(const Msp::FS::Path &, FileTarget *);
 
        /** Locates a source file.  If a file is found but no target is associated
-       with it, a new package-less target is created with the appropriate tool. */
-       FileTarget *find_header(const std::string &, const SearchPath &);
+       with it, a new package-less target is created with the appropriate tool.  If
+       use_syspath is true, the system path reported by the tool is also searched. */
+       FileTarget *find_header(const std::string &, Tool *, const SearchPath &, bool use_syspath = true);
 
        /** Locates a library.  The library name should be the same as what would be
        used in linking with the library.  If a file is found but no target is
        associated with it, a new package-less target of appropriate type is
-       created. */
-       FileTarget *find_library(const std::string &, const SearchPath &, LibMode);
+       created.  If use_syspath is true, the system path reported by the LINK tool
+       is also searched. */
+       FileTarget *find_library(const std::string &, const SearchPath &, BuildInfo::LibraryMode, bool use_syspath = true);
+
+       /** Locates a binary.  The normal search path for binaries is used (usually
+       this means the PATH environment variable).  If a file is found but no target
+       is associated with it, a new package-less Executable target is created. */
+       FileTarget *find_binary(const std::string &);
 
 private:
        bool file_exists(const Msp::FS::Path &);