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 SEARCHDIRS_H
10#define SEARCHDIRS_H
11#ifdef ENABLE_UNITTEST
12#include <gtest.h>
13#endif
14#include <llvm/ADT/StringRef.h>
15#include "mcld/ADT/Uncopyable.h"
16#include "mcld/MC/MCLDInput.h"
17
18namespace mcld
19{
20
21class MCLDFile;
22class MCLDDirectory;
23
24namespace sys {
25namespace fs {
26class Path;
27} // namespace of fs
28} // namespace of sys
29
30/** \class SearchDirs
31 *  \brief SearchDirs contains the list of paths that MCLinker will search for
32 *  archive libraries and control scripts.
33 *
34 *  SearchDirs is customized for linking. It handles -L on the command line
35 *  and SEARCH_DIR macro in the link script.
36 *
37 *  @see MCLDDirectory.
38 */
39class SearchDirs : private Uncopyable
40{
41public:
42  typedef std::vector<MCLDDirectory*> DirList;
43  typedef DirList::iterator iterator;
44  typedef DirList::const_iterator const_iterator;
45
46public:
47  SearchDirs();
48  ~SearchDirs();
49
50  // find - give a namespec, return a real path of the shared object.
51  //
52  sys::fs::Path* find(const std::string& pNamespec, mcld::Input::Type pPreferType);
53
54  // -----  iterators  ----- //
55  iterator begin()
56  { return m_DirList.begin(); }
57
58  iterator end()
59  { return m_DirList.end(); }
60
61  const_iterator begin() const
62  { return m_DirList.begin(); }
63
64  const_iterator end() const
65  { return m_DirList.end(); }
66
67  // -----  modifiers  ----- //
68  void add(const MCLDDirectory& pDirectory);
69
70private:
71  DirList m_DirList;
72};
73
74} // namespace of mcld
75
76#endif
77
78