]> git.tdb.fi Git - builder.git/blobdiff - source/virtualfilesystem.cpp
Store lookup failures separately from the package map
[builder.git] / source / virtualfilesystem.cpp
index 60867cf7a4feb3dda5638ee35c9b7a2a956e6d88..19bc8db6fe2e4cf0ef24255ccd02bef5b5d7fbca 100644 (file)
@@ -6,7 +6,6 @@
 #include "builder.h"
 #include "csourcefile.h"
 #include "executable.h"
-#include "misc.h"
 #include "sharedlibrary.h"
 #include "staticlibrary.h"
 #include "tool.h"
@@ -35,16 +34,19 @@ void VirtualFileSystem::register_path(const FS::Path &path, FileTarget *t)
        builder.get_logger().log("vfs", format("Path %s registered to %s", path, t->get_name()));
 }
 
-FileTarget *VirtualFileSystem::find_header(const string &name, const SearchPath &path)
+FileTarget *VirtualFileSystem::find_header(const string &name, const SearchPath &path, bool use_syspath)
 {
        // XXX This will cause trouble with multiple architectures in a single build
        const Tool *tool = builder.get_toolchain().get_tool_for_suffix(FS::extpart(FS::basename(name)), true);
        if(!tool)
                return 0;
-       const Tool::SearchPath &syspath = tool->get_system_path();
 
        list<FS::Path> combined_path(path.begin(), path.end());
-       combined_path.insert(combined_path.end(), syspath.begin(), syspath.end());
+       if(use_syspath)
+       {
+               const Tool::SearchPath &syspath = tool->get_system_path();
+               combined_path.insert(combined_path.end(), syspath.begin(), syspath.end());
+       }
 
        for(list<FS::Path>::const_iterator i=combined_path.begin(); i!=combined_path.end(); ++i)
        {
@@ -66,31 +68,25 @@ FileTarget *VirtualFileSystem::find_header(const string &name, const SearchPath
        return 0;
 }
 
-FileTarget *VirtualFileSystem::find_library(const string &lib, const SearchPath &path, BuildInfo::LibraryMode mode)
+FileTarget *VirtualFileSystem::find_library(const string &lib, const SearchPath &path, BuildInfo::LibraryMode mode, bool use_syspath)
 {
-       const Tool &linker = builder.get_toolchain().get_tool("LINK");
-       const Tool::SearchPath &syspath = linker.get_system_path();
-
        list<FS::Path> combined_path(path.begin(), path.end());
-       combined_path.insert(combined_path.end(), syspath.begin(), syspath.end());
+       if(use_syspath)
+       {
+               const Tool &linker = builder.get_toolchain().get_tool("LINK");
+               const Tool::SearchPath &syspath = linker.get_system_path();
+               combined_path.insert(combined_path.end(), syspath.begin(), syspath.end());
+       }
 
        const Architecture &arch = builder.get_current_arch();
 
        list<string> shared_names;
        if(mode!=BuildInfo::FORCE_STATIC)
-       {
-               const list<Pattern> &shared_patterns = arch.get_shared_library_patterns();
-               for(list<Pattern>::const_iterator i=shared_patterns.begin(); i!=shared_patterns.end(); ++i)
-                       shared_names.push_back(i->apply(lib));
-       }
+               shared_names = Pattern::apply_list(arch.get_shared_library_patterns(), lib);
 
        list<string> static_names;
        if(mode!=BuildInfo::FORCE_DYNAMIC)
-       {
-               const list<Pattern> &static_patterns = arch.get_static_library_patterns();
-               for(list<Pattern>::const_iterator i=static_patterns.begin(); i!=static_patterns.end(); ++i)
-                       static_names.push_back(i->apply(lib));
-       }
+               static_names = Pattern::apply_list(arch.get_static_library_patterns(), lib);
 
        for(list<FS::Path>::const_iterator i=combined_path.begin(); i!=combined_path.end(); ++i)
        {