12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- // dirsearch.h -- directory searching for gold -*- C++ -*-
- // Copyright (C) 2006-2015 Free Software Foundation, Inc.
- // Written by Ian Lance Taylor <iant@google.com>.
- // This file is part of gold.
- // This program is free software; you can redistribute it and/or modify
- // it under the terms of the GNU General Public License as published by
- // the Free Software Foundation; either version 3 of the License, or
- // (at your option) any later version.
- // This program is distributed in the hope that it will be useful,
- // but WITHOUT ANY WARRANTY; without even the implied warranty of
- // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- // GNU General Public License for more details.
- // You should have received a copy of the GNU General Public License
- // along with this program; if not, write to the Free Software
- // Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
- // MA 02110-1301, USA.
- #ifndef GOLD_DIRSEARCH_H
- #define GOLD_DIRSEARCH_H
- #include <string>
- #include <list>
- #include "options.h"
- #include "token.h"
- namespace gold
- {
- class General_options;
- class Workqueue;
- // A simple interface to manage directories to be searched for
- // libraries.
- class Dirsearch
- {
- public:
- Dirsearch()
- : directories_(NULL), token_(true)
- { }
- // Set the list of directories to search.
- void
- initialize(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. Set *IS_IN_SYSROOT if the
- // file was found in a directory which is in the sysroot. *PINDEX
- // should be set to zero the first time this is called; it will be
- // updated with the index of the directory where the file is found,
- // and that value plus one may be used to find the next file with
- // the same name(s).
- std::string
- find(const std::vector<std::string>& names, bool* is_in_sysroot,
- int* pindex, std::string *found_name) const;
- // Return the blocker token which controls access.
- Task_token*
- token()
- { return &this->token_; }
- // Search for a file in a directory list. This is a low-level function and
- // therefore can be used before options and parameters are set.
- static std::string
- find_file_in_dir_list(const std::string& name,
- const General_options::Dir_list& directories,
- const std::string& extra_search_dir);
- private:
- // We can not copy this class.
- Dirsearch(const Dirsearch&);
- Dirsearch& operator=(const Dirsearch&);
- // Directories to search.
- const General_options::Dir_list* directories_;
- // Blocker token to control access from tasks.
- Task_token token_;
- };
- } // End namespace gold.
- #endif // !defined(GOLD_DIRSEARCH_H)
|