Home | History | Annotate | Download | only in MC
      1 //===- SearchDirs.h -------------------------------------------------------===//
      2 //
      3 //                     The MCLinker Project
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 #ifndef MCLD_MC_SEARCHDIRS_H_
     10 #define MCLD_MC_SEARCHDIRS_H_
     11 
     12 #include "mcld/MC/Input.h"
     13 #include "mcld/Support/Path.h"
     14 #include "mcld/Support/Compiler.h"
     15 
     16 #include <llvm/ADT/StringRef.h>
     17 
     18 #include <string>
     19 #include <vector>
     20 
     21 namespace mcld {
     22 
     23 class MCLDDirectory;
     24 class MCLDFile;
     25 
     26 /** \class SearchDirs
     27  *  \brief SearchDirs contains the list of paths that MCLinker will search for
     28  *  archive libraries and control scripts.
     29  *
     30  *  SearchDirs is customized for linking. It handles -L on the command line
     31  *  and SEARCH_DIR macro in the link script.
     32  *
     33  *  @see MCLDDirectory.
     34  */
     35 class SearchDirs {
     36  public:
     37   typedef std::vector<MCLDDirectory*> DirList;
     38   typedef DirList::iterator iterator;
     39   typedef DirList::const_iterator const_iterator;
     40 
     41  public:
     42   SearchDirs();
     43 
     44   explicit SearchDirs(const sys::fs::Path& pSysRoot);
     45 
     46   ~SearchDirs();
     47 
     48   // find - give a namespec, return a real path of the shared object.
     49   sys::fs::Path* find(const std::string& pNamespec,
     50                       mcld::Input::Type pPreferType);
     51 
     52   const sys::fs::Path* find(const std::string& pNamespec,
     53                             mcld::Input::Type pPreferType) const;
     54 
     55   void setSysRoot(const sys::fs::Path& pSysRoot) { m_SysRoot = pSysRoot; }
     56   const sys::fs::Path& sysroot() const { return m_SysRoot; }
     57 
     58   // -----  iterators  ----- //
     59   const_iterator begin() const { return m_DirList.begin(); }
     60   iterator begin() { return m_DirList.begin(); }
     61   const_iterator end() const { return m_DirList.end(); }
     62   iterator end() { return m_DirList.end(); }
     63 
     64   // -----  modifiers  ----- //
     65   bool insert(const char* pDirectory);
     66 
     67   bool insert(const std::string& pDirectory);
     68 
     69   bool insert(const sys::fs::Path& pDirectory);
     70 
     71  private:
     72   DirList m_DirList;
     73   sys::fs::Path m_SysRoot;
     74 
     75  private:
     76   DISALLOW_COPY_AND_ASSIGN(SearchDirs);
     77 };
     78 
     79 }  // namespace mcld
     80 
     81 #endif  // MCLD_MC_SEARCHDIRS_H_
     82