]> git.tdb.fi Git - builder.git/blobdiff - source/virtualfilesystem.cpp
Have Architecture provide pattern lists for library and executable filenames
[builder.git] / source / virtualfilesystem.cpp
index be646cdbb9c494afab313bd46ef56fb5add140d3..ef7605b14b929fc8cbb4eea0f87a66ab48f89201 100644 (file)
@@ -163,22 +163,11 @@ FileTarget *VirtualFileSystem::get_library(const string &lib, const FS::Path &pa
 
        const Architecture &arch = builder.get_current_arch();
        if(mode!=ALL_STATIC)
-       {
-               // XXX Should probably let the Architecture populate the list
-               if(arch.get_system()=="windows")
-               {
-                       candidates.push_back("lib"+lib+".dll");
-                       candidates.push_back(lib+".dll");
-               }
-               else
-                       candidates.push_back("lib"+lib+".so");
-       }
+               fill_candidates(candidates, arch.get_shared_library_patterns(), lib);
 
        /* Static libraries are always considered, since sometimes shared versions
        may not be available */
-       candidates.push_back("lib"+lib+".a");
-       if(arch.get_system()=="windows")
-               candidates.push_back("lib"+lib+".dll.a");
+       fill_candidates(candidates, arch.get_static_library_patterns(), lib);
 
        for(StringList::iterator i=candidates.begin(); i!=candidates.end(); ++i)
        {
@@ -205,3 +194,9 @@ FileTarget *VirtualFileSystem::get_library(const string &lib, const FS::Path &pa
 
        return 0;
 }
+
+void VirtualFileSystem::fill_candidates(StringList &candidates, const list<Pattern> &patterns, const string &base)
+{
+       for(list<Pattern>::const_iterator i=patterns.begin(); i!=patterns.end(); ++i)
+               candidates.push_back(i->apply(base));
+}