// Protocol Buffers - Google's data interchange format // Copyright 2008 Google Inc. All rights reserved. // // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file or at // https://developers.google.com/open-source/licenses/bsd #include "google/protobuf/compiler/versions.h" #include #include #include "absl/log/absl_check.h" #include "absl/strings/str_cat.h" #include "absl/strings/str_split.h" #include "absl/strings/string_view.h" #include "google/protobuf/compiler/plugin.pb.h" // Must be included last. #include "google/protobuf/port_def.inc" namespace google { namespace protobuf { namespace compiler { namespace internal { Version ParseProtobufVersion(absl::string_view version) { ABSL_CHECK(!version.empty()) << "version cannot be empty."; Version result; std::vector parts = absl::StrSplit(version, '-'); ABSL_CHECK(parts.size() <= 2) << "version cannot have more than one suffix annotated by \"-\"."; if (parts.size() == 2) result.set_suffix(absl::StrCat("-", parts[1])); parts = absl::StrSplit(parts[0], '.'); ABSL_CHECK(parts.size() == 3) << "version string must provide major, minor and micro numbers."; result.set_major(std::stoi(parts[0])); result.set_minor(std::stoi(parts[1])); result.set_patch(std::stoi(parts[2])); return result; } } // namespace internal const Version& GetProtobufCPPVersion(bool oss_runtime) { absl::string_view version = PROTOBUF_CPP_VERSION_STRING; // Heap-allocated versions to avoid re-parsing version strings static const Version* cpp_version = new Version(internal::ParseProtobufVersion(version)); return *cpp_version; } const Version& GetProtobufJavaVersion(bool oss_runtime) { absl::string_view version = PROTOBUF_JAVA_VERSION_STRING; static const Version* java_version = new Version(internal::ParseProtobufVersion(version)); return *java_version; } const Version& GetProtobufPythonVersion(bool oss_runtime) { absl::string_view version = PROTOBUF_PYTHON_VERSION_STRING; static const Version* python_version = new Version(internal::ParseProtobufVersion(version)); return *python_version; } } // namespace compiler } // namespace protobuf } // namespace google #include "google/protobuf/port_undef.inc"