| /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying |
| file Copyright.txt or https://cmake.org/licensing for details. */ |
| #pragma once |
| |
| #include "cmConfigure.h" // IWYU pragma: keep |
| |
| #include <array> |
| #include <cstddef> |
| #include <string> |
| #include <utility> |
| |
| class cmMakefile; |
| |
| /** \class cmFilePathChecksum |
| * @brief Generates a checksum for the parent directory of a file |
| * |
| * The checksum is calculated from the relative file path to the |
| * closest known project directory. This guarantees reproducibility |
| * when source and build directory differ e.g. for different project |
| * build directories. |
| */ |
| class cmFilePathChecksum |
| { |
| public: |
| /// Maximum number of characters to use from the path checksum |
| static const size_t partLengthDefault = 10; |
| |
| /// @brief Parent directories are empty |
| cmFilePathChecksum(); |
| |
| /// @brief Initializes the parent directories manually |
| cmFilePathChecksum(std::string const& currentSrcDir, |
| std::string const& currentBinDir, |
| std::string const& projectSrcDir, |
| std::string const& projectBinDir); |
| |
| /// @brief Initializes the parent directories from a makefile |
| cmFilePathChecksum(cmMakefile* makefile); |
| |
| /// @brief Allows parent directories setup after construction |
| /// |
| void setupParentDirs(std::string const& currentSrcDir, |
| std::string const& currentBinDir, |
| std::string const& projectSrcDir, |
| std::string const& projectBinDir); |
| |
| /* @brief Calculates the path checksum for the parent directory of a file |
| * |
| */ |
| std::string get(std::string const& filePath) const; |
| |
| /* @brief Same as get() but returns only the first length characters |
| * |
| */ |
| std::string getPart(std::string const& filePath, |
| size_t length = partLengthDefault) const; |
| |
| private: |
| /// List of (directory name, seed name) pairs |
| std::array<std::pair<std::string, std::string>, 4> parentDirs; |
| }; |