]> git.tdb.fi Git - builder.git/commitdiff
Tool names are no longer retrieved from Architecture
authorMikko Rasa <tdb@tdb.fi>
Fri, 4 May 2012 18:14:29 +0000 (21:14 +0300)
committerMikko Rasa <tdb@tdb.fi>
Sun, 8 Jul 2012 21:08:50 +0000 (00:08 +0300)
source/architecture.cpp
source/architecture.h
source/virtualfilesystem.cpp
source/virtualfilesystem.h

index 8e618deb4ae9de2c78e3d1ec8e169f829652c8c3..a416551f23312b74febc418f2c4e41b7f9a5049e 100644 (file)
@@ -122,39 +122,11 @@ Architecture::Architecture(Builder &b, const string &spec):
        }
 }
 
-void Architecture::set_tool(const string &t, const string &p)
-{
-       tools[t] = p;
-}
-
 void Architecture::set_cross_prefix(const string &p)
 {
        cross_prefix = p;
 }
 
-std::string Architecture::get_tool(const string &t) const
-{
-       StringMap::const_iterator i = tools.find(t);
-       if(i!=tools.end())
-       {
-               if(i->second[0]=='-')
-                       return cross_prefix+i->second;
-               else
-                       return i->second;
-       }
-
-       const Architecture &native_arch = builder.get_native_arch();
-       if(this!=&native_arch)
-       {
-               if(!cross_prefix.empty())
-                       return cross_prefix+"-"+native_arch.get_tool(t);
-               else
-                       return native_arch.get_tool(t);
-       }
-       else
-               throw invalid_argument("Unknown tool");
-}
-
 bool Architecture::match_name(const string &pattern) const
 {
        vector<string> parts = split(pattern, "-");
@@ -230,10 +202,4 @@ Architecture::Loader::Loader(Architecture &a):
        arch(a)
 {
        add("prefix", &Architecture::cross_prefix);
-       add("tool",   &Loader::tool);
-}
-
-void Architecture::Loader::tool(const string &t, const string &p)
-{
-       arch.tools[t] = p;
 }
index 3ea13a06b0a67d2806140c48276590ecb8f04ad9..c07297a8940153fa7551e6a62c1c956c66852f33 100644 (file)
@@ -3,7 +3,6 @@
 
 #include <msp/datafile/loader.h>
 #include "buildinfo.h"
-#include "misc.h"
 #include "pattern.h"
 
 class Builder;
@@ -20,8 +19,6 @@ public:
        public:
                Loader(Architecture &);
                Architecture &get_object() { return arch; }
-       private:
-               void tool(const std::string &t, const std::string &p);
        };
 
        typedef std::list<Pattern> PatternList;
@@ -35,7 +32,6 @@ private:
        std::string name;
        bool native;
        std::string cross_prefix;
-       StringMap tools;
        PatternList sharedlib_patterns;
        PatternList staticlib_patterns;
        PatternList executable_patterns;
@@ -50,9 +46,7 @@ public:
        bool match_name(const std::string &) const;
        bool is_native() const { return native; }
 
-       void set_tool(const std::string &t, const std::string &p);
        void set_cross_prefix(const std::string &);
-       std::string get_tool(const std::string &t) const;
        const std::string &get_cross_prefix() const { return cross_prefix; }
 
        const PatternList &get_shared_library_patterns() const { return sharedlib_patterns; }
index ef7605b14b929fc8cbb4eea0f87a66ab48f89201..7febdb62b78c58d3e3ca0813ea526d12284e6798 100644 (file)
@@ -158,45 +158,44 @@ FileTarget *VirtualFileSystem::get_header(const FS::Path &fn)
 
 FileTarget *VirtualFileSystem::get_library(const string &lib, const FS::Path &path, LibMode mode)
 {
-       // Populate a list of candidate filenames
-       StringList candidates;
-
        const Architecture &arch = builder.get_current_arch();
-       if(mode!=ALL_STATIC)
-               fill_candidates(candidates, arch.get_shared_library_patterns(), lib);
-
-       /* Static libraries are always considered, since sometimes shared versions
-       may not be available */
-       fill_candidates(candidates, arch.get_static_library_patterns(), lib);
 
-       for(StringList::iterator i=candidates.begin(); i!=candidates.end(); ++i)
+       /* Try dynamic libraries only if library mode permits it */
+       if(mode!=ALL_STATIC)
        {
-               FS::Path full = path/ *i;
-               FileTarget *tgt = get_target(full);
-
-               if(tgt)
+               FS::Path fn = try_patterns(path, arch.get_shared_library_patterns(), lib);
+               if(!fn.empty())
                {
-                       Target *real_tgt = tgt->get_real_target();
-
-                       /* Ignore dynamic libraries from local packages unless library mode is
-                       DYNAMIC */
-                       if(dynamic_cast<SharedLibrary *>(real_tgt) && mode!=DYNAMIC)
-                               continue;
-                       else if(tgt)
+                       FileTarget *tgt = get_target(fn);
+                       if(!tgt)
+                               return new SystemLibrary(builder, fn.str());
+                       else if(mode==DYNAMIC || !tgt->get_package())
                                return tgt;
                }
-               else if(FS::is_reg(full))
-               {
-                       tgt = new SystemLibrary(builder, full.str());
+       }
+
+       /* Static libraries are always considered, since sometimes shared versions
+       may not be available */
+       FS::Path fn = try_patterns(path, arch.get_static_library_patterns(), lib);
+       if(!fn.empty())
+       {
+               if(FileTarget *tgt = get_target(fn))
                        return tgt;
-               }
+               else
+                       return new SystemLibrary(builder, fn.str());
        }
 
        return 0;
 }
 
-void VirtualFileSystem::fill_candidates(StringList &candidates, const list<Pattern> &patterns, const string &base)
+FS::Path VirtualFileSystem::try_patterns(const FS::Path &dir, 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));
+       {
+               FS::Path full = dir/i->apply(base);
+               if(get_target(full) || FS::is_reg(full))
+                       return full;
+       }
+
+       return FS::Path();
 }
index 5ecc04b414f04f15ea059c48af19470312dfc4a8..09a4bf798d5c9a12bb3483fb0e0fd1957ceb3214 100644 (file)
@@ -52,7 +52,7 @@ private:
 
        FileTarget *get_library(const std::string &, const Msp::FS::Path &, LibMode);
 
-       void fill_candidates(std::list<std::string> &, const std::list<Pattern> &, const std::string &);
+       Msp::FS::Path try_patterns(const Msp::FS::Path &, const std::list<Pattern> &, const std::string &);
 };
 
 #endif