]> git.tdb.fi Git - builder.git/blobdiff - source/virtualfilesystem.h
Make VirtualFileSystem able to find binaries
[builder.git] / source / virtualfilesystem.h
index b19d10e8b45382ae9d18f89d77a7eb55546fe885..a2ce05c4dad880c7f1bfea7c790a4d72c67a3256 100644 (file)
@@ -17,19 +17,20 @@ possible to build them.
 class VirtualFileSystem
 {
 public:
-       typedef std::list<std::string> SearchPath;
+       typedef std::list<Msp::FS::Path> SearchPath;
 
 private:
-       typedef std::map<std::string, FileTarget *> TargetMap;
+       typedef std::map<Msp::FS::Path, FileTarget *> TargetMap;
 
        Builder &builder;
        TargetMap targets;
-       TargetMap include_cache;
-       TargetMap library_cache;
+       std::set<Msp::FS::Path> nonexistent;
 
 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
@@ -46,10 +47,13 @@ public:
        created. */
        FileTarget *find_library(const std::string &, const SearchPath &, LibMode);
 
+       /** 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:
-       FileTarget *get_header(const Msp::FS::Path &, const Tool &);
-       FileTarget *get_library(const std::string &, const Msp::FS::Path &, LibMode);
-       Msp::FS::Path try_patterns(const Msp::FS::Path &, const std::list<Pattern> &, const std::string &);
+       bool file_exists(const Msp::FS::Path &);
 };
 
 #endif