- FileTarget *tgt = 0;
- for(SearchPath::const_iterator j=path.begin(); (!tgt && j!=path.end()); ++j)
- tgt = get_library(lib, *j, mode);
- for(Tool::SearchPath::const_iterator j=syspath.begin(); (!tgt && j!=syspath.end()); ++j)
- tgt = get_library(lib, *j, mode);
+ for(list<FS::Path>::const_iterator i=combined_path.begin(); i!=combined_path.end(); ++i)
+ {
+ const list<string> *cur_names = (mode>=BuildInfo::DYNAMIC ? &shared_names : &static_names);
+ for(list<string>::const_iterator j=cur_names->begin(); j!=cur_names->end(); )
+ {
+ FS::Path filename = *i / *j;
+ if(FileTarget *tgt = get_target(filename))
+ {
+ if(cur_names!=&shared_names || mode==BuildInfo::DYNAMIC)
+ {
+ builder.get_logger().log("vfs", format("Library %s (%s) found in %s as existing %s", lib, *j, i->str(), tgt->get_type()));
+ return tgt;
+ }
+ }
+ else if(file_exists(filename))
+ {
+ builder.get_logger().log("vfs", format("Library %s (%s) found in %s", lib, *j, i->str()));
+ if(cur_names==&shared_names)
+ return new SharedLibrary(builder, filename);
+ else
+ return new StaticLibrary(builder, filename);
+ }
+
+ if(++j==cur_names->end())
+ {
+ if(mode==BuildInfo::DYNAMIC && cur_names==&shared_names)
+ cur_names = &static_names;
+ else if(mode==BuildInfo::STATIC && cur_names==&static_names)
+ cur_names = &shared_names;
+ else
+ break;
+ j = cur_names->begin();
+ }
+ }