X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=gold%2Fdirsearch.h;h=533da7cc40aa37f8b77bcc3081b0bee78e86d18f;hb=0f977b7715ee9aa8959e08c00b6d2c47a40e6504;hp=3beb1436c5a29aa6e543fbd3ae5fbeea4c320efb;hpb=bae7f79e03d6405f5ceec0e3e24671e6b30f29ed;p=binutils-gdb.git diff --git a/gold/dirsearch.h b/gold/dirsearch.h index 3beb1436c5a..533da7cc40a 100644 --- a/gold/dirsearch.h +++ b/gold/dirsearch.h @@ -1,5 +1,25 @@ // dirsearch.h -- directory searching for gold -*- C++ -*- +// Copyright (C) 2006-2021 Free Software Foundation, Inc. +// Written by Ian Lance Taylor . + +// 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 @@ -7,38 +27,52 @@ #include #include "options.h" -#include "workqueue.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(); - - // Add a directory to the search path. - void - add(Workqueue*, const char*); + Dirsearch() + : directories_(NULL), token_(true) + { } - // Add a list of directories to the search path. + // Set the list of directories to search. void - add(Workqueue*, const General_options::Dir_list&); + 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. + // 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::string&, const std::string& n2 = std::string()) const; + find(const std::vector& 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_; } - // Return a reference to the blocker token which controls access. - const Task_token& - token() const - { 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. @@ -46,7 +80,7 @@ class Dirsearch Dirsearch& operator=(const Dirsearch&); // Directories to search. - std::list directories_; + const General_options::Dir_list* directories_; // Blocker token to control access from tasks. Task_token token_; };