/* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
   file LICENSE.rst or https://cmake.org/licensing for details.  */

#pragma once

#include <string>
#include <vector>

#include "cmBinUtilsLinuxELFGetRuntimeDependenciesTool.h"

class cmRuntimeDependencyArchive;

class cmBinUtilsLinuxELFObjdumpGetRuntimeDependenciesTool
  : public cmBinUtilsLinuxELFGetRuntimeDependenciesTool
{
public:
  cmBinUtilsLinuxELFObjdumpGetRuntimeDependenciesTool(
    cmRuntimeDependencyArchive* archive);

  bool GetFileInfo(std::string const& file, std::vector<std::string>& needed,
                   std::vector<std::string>& rpaths,
                   std::vector<std::string>& runpaths) override;
};
