// Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. #include #include "rocksdb/version.h" #include "rocksdb/utilities/object_registry.h" #include "util/string_util.h" // The build script may replace these values with real values based // on whether or not GIT is available and the platform settings static const std::string rocksdb_build_git_sha = "rocksdb_build_git_sha:@GIT_SHA@"; static const std::string rocksdb_build_git_tag = "rocksdb_build_git_tag:@GIT_TAG@"; #define HAS_GIT_CHANGES @GIT_MOD@ #if HAS_GIT_CHANGES == 0 // If HAS_GIT_CHANGES is 0, the GIT date is used. // Use the time the branch/tag was last modified static const std::string rocksdb_build_date = "rocksdb_build_date:@GIT_DATE@"; #else // If HAS_GIT_CHANGES is > 0, the branch/tag has modifications. // Use the time the build was created. static const std::string rocksdb_build_date = "rocksdb_build_date:@BUILD_DATE@"; #endif #ifndef ROCKSDB_LITE extern "C" { @ROCKSDB_PLUGIN_EXTERNS@ } // extern "C" std::unordered_map ROCKSDB_NAMESPACE::ObjectRegistry::builtins_ = { @ROCKSDB_PLUGIN_BUILTINS@ }; #endif //ROCKSDB_LITE namespace ROCKSDB_NAMESPACE { static void AddProperty(std::unordered_map *props, const std::string& name) { size_t colon = name.find(":"); if (colon != std::string::npos && colon > 0 && colon < name.length() - 1) { // If we found a "@:", then this property was a build-time substitution that failed. Skip it size_t at = name.find("@", colon); if (at != colon + 1) { // Everything before the colon is the name, after is the value (*props)[name.substr(0, colon)] = name.substr(colon + 1); } } } static std::unordered_map* LoadPropertiesSet() { auto * properties = new std::unordered_map(); AddProperty(properties, rocksdb_build_git_sha); AddProperty(properties, rocksdb_build_git_tag); AddProperty(properties, rocksdb_build_date); return properties; } const std::unordered_map& GetRocksBuildProperties() { static std::unique_ptr> props(LoadPropertiesSet()); return *props; } std::string GetRocksVersionAsString(bool with_patch) { std::string version = std::to_string(ROCKSDB_MAJOR) + "." + std::to_string(ROCKSDB_MINOR); if (with_patch) { return version + "." + std::to_string(ROCKSDB_PATCH); } else { return version; } } std::string GetRocksBuildInfoAsString(const std::string& program, bool verbose) { std::string info = program + " (RocksDB) " + GetRocksVersionAsString(true); if (verbose) { for (const auto& it : GetRocksBuildProperties()) { info.append("\n "); info.append(it.first); info.append(": "); info.append(it.second); } } return info; } } // namespace ROCKSDB_NAMESPACE