diff options
author | Sebastian Holtermann <sebholt@xwmw.org> | 2016-12-01 09:24:48 +0100 |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2016-12-07 08:24:00 -0500 |
commit | 057ac11bfbc5501c8037b173a73a55466163774d (patch) | |
tree | 07e14f4ea028ce67bb880da9ad1458cc7c2c55a1 /Source/cmFilePathChecksum.h | |
parent | d3afe4070b9c5ba08a11ce3b4b30d2c1ad4c591d (diff) | |
download | cmake-057ac11bfbc5501c8037b173a73a55466163774d.tar.gz |
QtAutogen: Use checksum based subdirectories to avoid name collisions
Diffstat (limited to 'Source/cmFilePathChecksum.h')
-rw-r--r-- | Source/cmFilePathChecksum.h | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/Source/cmFilePathChecksum.h b/Source/cmFilePathChecksum.h new file mode 100644 index 0000000000..df19053fbf --- /dev/null +++ b/Source/cmFilePathChecksum.h @@ -0,0 +1,65 @@ +/* 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 <stddef.h> +#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 Initilizes the parent directories manually + cmFilePathChecksum(const std::string& currentSrcDir, + const std::string& currentBinDir, + const std::string& projectSrcDir, + const std::string& projectBinDir); + + /// @brief Initilizes the parent directories from a makefile + cmFilePathChecksum(cmMakefile* makefile); + + /// @brief Allows parent directories setup after construction + /// + void setupParentDirs(const std::string& currentSrcDir, + const std::string& currentBinDir, + const std::string& projectSrcDir, + const std::string& projectBinDir); + + /* @brief Calculates the path checksum for the parent directory of a file + * + */ + std::string get(const std::string& filePath); + + /* @brief Same as get() but returns only the first length characters + * + */ + std::string getPart(const std::string& filePath, + size_t length = partLengthDefault); + +private: + /// Size of the parent directory list + static const size_t numParentDirs = 4; + /// List of (directory name, seed name) pairs + std::pair<std::string, std::string> parentDirs[numParentDirs]; +}; + +#endif |