(root)/
binutils-2.41/
gold/
dirsearch.h
       1  // dirsearch.h -- directory searching for gold  -*- C++ -*-
       2  
       3  // Copyright (C) 2006-2023 Free Software Foundation, Inc.
       4  // Written by Ian Lance Taylor <iant@google.com>.
       5  
       6  // This file is part of gold.
       7  
       8  // This program is free software; you can redistribute it and/or modify
       9  // it under the terms of the GNU General Public License as published by
      10  // the Free Software Foundation; either version 3 of the License, or
      11  // (at your option) any later version.
      12  
      13  // This program is distributed in the hope that it will be useful,
      14  // but WITHOUT ANY WARRANTY; without even the implied warranty of
      15  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      16  // GNU General Public License for more details.
      17  
      18  // You should have received a copy of the GNU General Public License
      19  // along with this program; if not, write to the Free Software
      20  // Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
      21  // MA 02110-1301, USA.
      22  
      23  #ifndef GOLD_DIRSEARCH_H
      24  #define GOLD_DIRSEARCH_H
      25  
      26  #include <string>
      27  #include <list>
      28  
      29  #include "options.h"
      30  #include "token.h"
      31  
      32  namespace gold
      33  {
      34  
      35  class General_options;
      36  class Workqueue;
      37  
      38  // A simple interface to manage directories to be searched for
      39  // libraries.
      40  
      41  class Dirsearch
      42  {
      43   public:
      44    Dirsearch()
      45      : directories_(NULL), token_(true)
      46    { }
      47  
      48    // Set the list of directories to search.
      49    void
      50    initialize(Workqueue*, const General_options::Dir_list*);
      51  
      52    // Search for a file, giving one or two names to search for (the
      53    // second one may be empty).  Return a full path name for the file,
      54    // or the empty string if it could not be found.  This may only be
      55    // called if the token is not blocked.  Set *IS_IN_SYSROOT if the
      56    // file was found in a directory which is in the sysroot.  *PINDEX
      57    // should be set to zero the first time this is called; it will be
      58    // updated with the index of the directory where the file is found,
      59    // and that value plus one may be used to find the next file with
      60    // the same name(s).
      61    std::string
      62    find(const std::vector<std::string>& names, bool* is_in_sysroot,
      63         int* pindex, std::string *found_name) const;
      64  
      65    // Return the blocker token which controls access.
      66    Task_token*
      67    token()
      68    { return &this->token_; }
      69  
      70    // Search for a file in a directory list.  This is a low-level function and
      71    // therefore can be used before options and parameters are set.
      72    static std::string
      73    find_file_in_dir_list(const std::string& name,
      74                          const General_options::Dir_list& directories,
      75                          const std::string& extra_search_dir);
      76  
      77   private:
      78    // We can not copy this class.
      79    Dirsearch(const Dirsearch&);
      80    Dirsearch& operator=(const Dirsearch&);
      81  
      82    // Directories to search.
      83    const General_options::Dir_list* directories_;
      84    // Blocker token to control access from tasks.
      85    Task_token token_;
      86  };
      87  
      88  } // End namespace gold.
      89  
      90  #endif // !defined(GOLD_DIRSEARCH_H)