+ 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))
+ {
+ 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)
+ {
+ /* XXX Hack: create ImportLibraries here; they should be handled
+ separately, but I need a more generic way of handling all these
+ filename patterns */
+ if(FS::extpart(*j)==".a")
+ return new ImportLibrary(builder, filename);
+ 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();
+ }
+ }
+
+ builder.get_logger().log("vfs", format("Library %s not found in %s", lib, i->str()));