/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying file Copyright.txt or https://cmake.org/licensing for details. */ #ifndef cmFilePathChecksum_h #define cmFilePathChecksum_h #include "cmConfigure.h" // IWYU pragma: keep #include #include #include #include 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 Initilizes the parent directories manually cmFilePathChecksum(std::string const& currentSrcDir, std::string const& currentBinDir, std::string const& projectSrcDir, std::string const& projectBinDir); /// @brief Initilizes 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, 4> parentDirs; }; #endif