/
githubmirror
/
carbon-lang
Обзор
Документация
Войти
/
githubmirror
/
carbon-lang
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
trunk
common/version.tmpl.cpp
51 строка
2 KB
Chandler Carruth
Introduce version and build info stamping. (#4054)
18 июн 2024, 03:33
Не верифицирован
18 июн 2024, 03:33
b51dc7f
Код
Авторство
О чём код?
// Part of the Carbon Language project, under the Apache License v2.0 with LLVM // Exceptions. See /LICENSE for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception #include "common/version.h" #include <string_view> namespace Carbon { // A simplistic string-to-integer routine that is consteval for compile-time // extracting specific components of the version from the string form. We use // `std::string_view` for its broader `constexpr` API. static consteval auto ToInt(std::string_view str) -> int { int result = 0; while (true) { result += str.front() - '0'; str.remove_prefix(1); if (str.empty()) { break; } result *= 10; } return result; } static consteval auto MajorVersion(std::string_view str) -> int { return ToInt(str.substr(0, str.find('.'))); } static consteval auto MinorVersion(std::string_view str) -> int { str.remove_prefix(str.find('.') + 1); return ToInt(str.substr(0, str.find('.'))); } static consteval auto PatchVersion(std::string_view str) -> int { str.remove_prefix(str.find('.') + 1); str.remove_prefix(str.find('.') + 1); // Note that searching for `-` may find the end of the string if there is no // pre-release component, but that produces the correct result here. return ToInt(str.substr(0, str.find('-'))); } // The major, minor, and patch versions are always provided and stable. They // don't depend on build stamping or introduce caching issues. Provide normal // strong definitions. constexpr int Version::Major = MajorVersion("$VERSION"); constexpr int Version::Minor = MinorVersion("$VERSION"); constexpr int Version::Patch = PatchVersion("$VERSION"); } // namespace Carbon