aboutsummaryrefslogtreecommitdiff
path: root/gold/dirsearch.h
diff options
context:
space:
mode:
Diffstat (limited to 'gold/dirsearch.h')
-rw-r--r--gold/dirsearch.h56
1 files changed, 56 insertions, 0 deletions
diff --git a/gold/dirsearch.h b/gold/dirsearch.h
new file mode 100644
index 0000000..3beb143
--- /dev/null
+++ b/gold/dirsearch.h
@@ -0,0 +1,56 @@
+// dirsearch.h -- directory searching for gold -*- C++ -*-
+
+#ifndef GOLD_DIRSEARCH_H
+#define GOLD_DIRSEARCH_H
+
+#include <string>
+#include <list>
+
+#include "options.h"
+#include "workqueue.h"
+
+namespace gold
+{
+
+// A simple interface to manage directories to be searched for
+// libraries.
+
+class Dirsearch
+{
+ public:
+ Dirsearch();
+
+ // Add a directory to the search path.
+ void
+ add(Workqueue*, const char*);
+
+ // Add a list of directories to the search path.
+ void
+ add(Workqueue*, const General_options::Dir_list&);
+
+ // Search for a file, giving one or two names to search for (the
+ // second one may be empty). Return a full path name for the file,
+ // or the empty string if it could not be found. This may only be
+ // called if the token is not blocked.
+ std::string
+ find(const std::string&, const std::string& n2 = std::string()) const;
+
+ // Return a reference to the blocker token which controls access.
+ const Task_token&
+ token() const
+ { return this->token_; }
+
+ private:
+ // We can not copy this class.
+ Dirsearch(const Dirsearch&);
+ Dirsearch& operator=(const Dirsearch&);
+
+ // Directories to search.
+ std::list<const char*> directories_;
+ // Blocker token to control access from tasks.
+ Task_token token_;
+};
+
+} // End namespace gold.
+
+#endif // !defined(GOLD_DIRSEARCH_H)