blob: b2eabf238a059cd9e25c1f7f305938ca6bca9c37 [file] [log] [blame] [edit]
/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
file LICENSE.rst or https://cmake.org/licensing for details. */
#pragma once
#include "cmConfigure.h" // IWYU pragma: keep
#include <map>
#include <string>
#include <utility>
#include <cm/optional>
#include <cm/string_view>
struct cmObjectLocation
{
public:
cmObjectLocation() = default;
cmObjectLocation(std::string path)
: Path(std::move(path))
{
}
void Update(std::string path);
// Get the path to the object under the common directory for the target's
// objects.
std::string const& GetPath() const;
// Get the directory of the object file under the common directory.
cm::string_view GetDirectory() const;
// Get the name of the object file.
cm::string_view GetName() const;
private:
std::string Path;
};
struct cmObjectLocations
{
cmObjectLocations() = default;
cm::optional<cmObjectLocation> ShortLoc;
cmObjectLocation LongLoc;
std::map<std::string, cmObjectLocation> InstallLongLoc;
enum class UseShortPath
{
Yes,
No,
};
cmObjectLocation const& GetLocation(UseShortPath use) const;
std::string const& GetPath(UseShortPath use) const;
cmObjectLocation const& GetInstallLocation(UseShortPath use,
std::string const& config) const;
std::string const& GetInstallPath(UseShortPath use,
std::string const& config) const;
};