[tensorflow] update to 2.6 (#20015)

* Revert "incorporate changes from microsoft:master"

* Revert "Revert "incorporate changes from microsoft:master""

* WIP: update to tensorflow 2.6

* update patch

* update more patches

* fix patch again

* fix new Windows compile/linkage errors

* fix patch

* fix patch again

* temporarily revert Windows build option fix to test whether upstream fix doesn't work

* check if constexpr is sufficient (is_same_v requires C++17)

* try patch for build parameters

* remove fastbuild patch and improve constexpr patch (no C++17 requirement)
(fastbuild patch didn't work because bazel overrides it with /DEBUG:FULL)

* x-add-version

* add C++17 preprocessor switch for "if constexpr"

* x-add-version

* remove pre-processor switch (doesn't work without)

* x-add-version

* work-around toolchain issues on macOS

* x-add-version

* fix Windows build options (must be string, not list)

* x-add-version

* temporarily add code to debug CI

* temporarily add more debug output as build doesn't even start on macOS CI

* remove debug code, add switch for linker parameters on macOS and re-introduce old behaviour (some platforms still use old behaviour)

* x-add-version

* fix broken string termination

* x-add-version

* fix function name

* x-add-version

Co-authored-by: jgehw <Joachim_Gehweiler@McAfee.com>
Co-authored-by: Billy Robert O'Neal III <bion@microsoft.com>
This commit is contained in:
Joachim Gehweiler 2021-09-30 05:43:32 +02:00 committed by GitHub
parent dd991ef5b8
commit 8ad33ead90
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
18 changed files with 229 additions and 96 deletions

View File

@ -1,7 +1,6 @@
{
"name": "tensorflow-cc",
"version-semver": "2.4.1",
"port-version": 1,
"version-semver": "2.6.0",
"description": "Library for computation using data flow graphs for scalable machine learning (C++ API version)",
"homepage": "https://github.com/tensorflow/tensorflow",
"supports": "!(x86 | arm | uwp)",

View File

@ -1,11 +1,10 @@
diff --git a/configure.py b/configure.py
index e5428a6..9324d7b 100644
--- a/configure.py
+++ b/configure.py
@@ -47,7 +47,7 @@ _TF_WORKSPACE_ROOT = ''
@@ -50,7 +50,7 @@
_TF_BAZELRC = ''
_TF_CURRENT_BAZEL_VERSION = None
_TF_MIN_BAZEL_VERSION = '3.1.0'
_TF_MIN_BAZEL_VERSION = '3.7.2'
-_TF_MAX_BAZEL_VERSION = '3.99.0'
+_TF_MAX_BAZEL_VERSION = '4.1.0'

View File

@ -103,7 +103,7 @@ diff --git a/tensorflow/c/c_api_macros.h b/tensorflow/c/c_api_macros.h
diff --git a/tensorflow/c/kernels.h b/tensorflow/c/kernels.h
--- a/tensorflow/c/kernels.h
+++ b/tensorflow/c/kernels.h
@@ -23,24 +23,7 @@
@@ -24,24 +24,7 @@
#include "tensorflow/c/tf_status.h"
#include "tensorflow/c/tf_tensor.h"
@ -129,6 +129,35 @@ diff --git a/tensorflow/c/kernels.h b/tensorflow/c/kernels.h
#ifdef __cplusplus
extern "C" {
diff --git a/tensorflow/c/kernels_experimental.h b/tensorflow/c/kernels_experimental.h
--- a/tensorflow/c/kernels_experimental.h
+++ b/tensorflow/c/kernels_experimental.h
@@ -25,24 +25,7 @@
// The API here is subject to changes in the future.
// --------------------------------------------------------------------------
-// Macro to control visibility of exported symbols in the shared library (.so,
-// .dylib, .dll).
-// This duplicates the TF_EXPORT macro definition in
-// tensorflow/core/platform/macros.h in order to keep this .h file independent
-// of any other includes.
-#ifdef SWIG
#define TF_CAPI_EXPORT
-#else
-#if defined(_WIN32)
-#ifdef TF_COMPILE_LIBRARY
-#define TF_CAPI_EXPORT __declspec(dllexport)
-#else
-#define TF_CAPI_EXPORT __declspec(dllimport)
-#endif // TF_COMPILE_LIBRARY
-#else
-#define TF_CAPI_EXPORT __attribute__((visibility("default")))
-#endif // _WIN32
-#endif // SWIG
#ifdef __cplusplus
extern "C" {
diff --git a/tensorflow/c/ops.h b/tensorflow/c/ops.h
--- a/tensorflow/c/ops.h
+++ b/tensorflow/c/ops.h
@ -212,7 +241,7 @@ diff --git a/tensorflow/c/tf_tensor.h b/tensorflow/c/tf_tensor.h
@@ -23,24 +23,7 @@
#include "tensorflow/c/tf_datatype.h"
#include "tensorflow/c/tf_status.h"
-// Macro to control visibility of exported symbols in the shared library (.so,
-// .dylib, .dll).
-// This duplicates the TF_EXPORT macro definition in
@ -231,7 +260,31 @@ diff --git a/tensorflow/c/tf_tensor.h b/tensorflow/c/tf_tensor.h
-#define TF_CAPI_EXPORT __attribute__((visibility("default")))
-#endif // _WIN32
-#endif // SWIG
#ifdef __cplusplus
extern "C" {
diff --git a/tensorflow/c/tf_tstring.h b/tensorflow/c/tf_tstring.h
--- a/tensorflow/c/tf_tstring.h
+++ b/tensorflow/c/tf_tstring.h
@@ -18,19 +18,7 @@
#include "tensorflow/c/tf_tensor.h"
#include "tensorflow/core/platform/ctstring.h"
-#ifdef SWIG
#define TF_CAPI_EXPORT
-#else
-#if defined(_WIN32)
-#ifdef TF_COMPILE_LIBRARY
-#define TF_CAPI_EXPORT __declspec(dllexport)
-#else
-#define TF_CAPI_EXPORT __declspec(dllimport)
-#endif // TF_COMPILE_LIBRARY
-#else
-#define TF_CAPI_EXPORT __attribute__((visibility("default")))
-#endif // _WIN32
-#endif // SWIG
#ifdef __cplusplus
extern "C" {

View File

@ -1,18 +1,20 @@
import os.path
import sys
version = sys.argv[1]
lib_suffix = "" if len(sys.argv) < 3 else sys.argv[2]
with open(f"libtensorflow{lib_suffix}.{version}.a-2.params", "w") as f_out:
parts = []
with open(f"libtensorflow_framework.{version}.dylib-2.params", "r") as f_in:
for line in f_in:
if line.startswith("-Wl,-force_load,"):
f_out.write(line[16:])
parts.append(line[16:])
parts = set(parts)
with open(f"libtensorflow{lib_suffix}.{version}.dylib-2.params", "r") as f_in:
for line in f_in:
if line.startswith("-Wl,-force_load,"):
if line[16:] not in parts:
if os.path.isfile(f"libtensorflow_framework.{version}.dylib-2.params"):
with open(f"libtensorflow{lib_suffix}.{version}.a-2.params", "w") as f_out:
parts = []
with open(f"libtensorflow_framework.{version}.dylib-2.params", "r") as f_in:
for line in f_in:
if line.startswith("-Wl,-force_load,"):
f_out.write(line[16:])
parts.append(line[16:])
parts = set(parts)
with open(f"libtensorflow{lib_suffix}.{version}.dylib-2.params", "r") as f_in:
for line in f_in:
if line.startswith("-Wl,-force_load,"):
if line[16:] not in parts:
f_out.write(line[16:])

View File

@ -1,8 +1,7 @@
diff --git a/tensorflow/core/platform/default/logging.h b/tensorflow/core/platform/default/logging.h
index 99dd6de..3cbe8ed 100644
--- a/tensorflow/core/platform/default/logging.h
+++ b/tensorflow/core/platform/default/logging.h
@@ -82,13 +82,13 @@ class LogMessageFatal : public LogMessage {
@@ -104,13 +104,13 @@ class LogMessageFatal : public LogMessage {
};
#define _TF_LOG_INFO \

View File

@ -1,25 +0,0 @@
diff --git a/tensorflow/core/kernels/data/experimental/snapshot_dataset_op.cc b/tensorflow/core/kernels/data/experimental/snapshot_dataset_op.cc
--- a/tensorflow/core/kernels/data/experimental/snapshot_dataset_op.cc
+++ b/tensorflow/core/kernels/data/experimental/snapshot_dataset_op.cc
@@ -72,6 +72,8 @@
SnapshotDatasetV2Op::kReaderFuncTarguments;
/* static */ constexpr const char* const
SnapshotDatasetV2Op::kShardFuncTarguments;
+/* static */ constexpr const char* const SnapshotDatasetV2Op::kReaderPrefix;
+/* static */ constexpr const char* const SnapshotDatasetV2Op::kWriterPrefix;
/* static */ constexpr const int SnapshotDatasetV2Op::kFileFormatVersion;
// ==== Snapshot Implementation ====
diff --git a/tensorflow/core/kernels/data/experimental/data_service_dataset_op.cc b/tensorflow/core/kernels/data/experimental/data_service_dataset_op.cc
--- a/tensorflow/core/kernels/data/experimental/data_service_dataset_op.cc
+++ b/tensorflow/core/kernels/data/experimental/data_service_dataset_op.cc
@@ -53,6 +53,8 @@
/* static */ constexpr const char* const
DataServiceDatasetOp::kMaxOutstandingRequests;
/* static */ constexpr const char* const
+ DataServiceDatasetOp::kTaskRefreshIntervalHintMs;
+/* static */ constexpr const char* const
DataServiceDatasetOp::kIterationCounter;
/* static */ constexpr const char* const DataServiceDatasetOp::kOutputTypes;
/* static */ constexpr const char* const DataServiceDatasetOp::kOutputShapes;

View File

@ -1,12 +1,57 @@
diff --git a/core/platform/default/logging.h b/core/platform/default/logging.h
--- a/tensorflow/core/platform/default/logging.h
+++ b/tensorflow/core/platform/default/logging.h
@@ -13,6 +13,8 @@
limitations under the License.
==============================================================================*/
+#pragma warning(disable:4716)
+
#ifndef TENSORFLOW_CORE_PLATFORM_DEFAULT_LOGGING_H_
#define TENSORFLOW_CORE_PLATFORM_DEFAULT_LOGGING_H_
diff --git a/tensorflow/core/kernels/depthtospace_op.cc b/tensorflow/core/kernels/depthtospace_op.cc
--- a/tensorflow/core/kernels/depthtospace_op.cc
+++ b/tensorflow/core/kernels/depthtospace_op.cc
@@ -112,7 +112,7 @@
auto Tinput = input.tensor<T, kDims>();
auto Toutput = outputs_tensor->tensor<T, kDims>();
- if (std::is_same<Device, GPUDevice>::value) {
+ if constexpr (std::is_same<Device, GPUDevice>::value) {
if (is_int8x4) {
// NCHW_VECT_C with 4 x qint8 can be treated as NCHW int32.
auto Tinput_v = input.template reinterpret_last_dimension<int32, 4>();
@@ -173,15 +173,6 @@
}
};
-#ifdef WIN32
-template <typename T>
-struct DepthToSpaceOpFunctor<CPUDevice, T, FORMAT_NCHW> {
- void operator()(const CPUDevice& d, typename TTypes<T, 4>::ConstTensor input,
- int block_size, typename TTypes<T, 4>::Tensor output) {
- LOG(FATAL) << "Trivial implementation to make debug build compile.";
- }
-};
-#endif
} // namespace functor
#define REGISTER(type) \
diff --git a/tensorflow/core/kernels/spacetodepth_op.cc b/tensorflow/core/kernels/spacetodepth_op.cc
--- a/tensorflow/core/kernels/spacetodepth_op.cc
+++ b/tensorflow/core/kernels/spacetodepth_op.cc
@@ -126,7 +126,7 @@
output_width, output_depth),
&outputs_tensor));
- if (std::is_same<Device, GPUDevice>::value) {
+ if constexpr (std::is_same<Device, GPUDevice>::value) {
using RT = typename RawType<T>::type;
if (data_format_ == FORMAT_NCHW_VECT_C) {
// NCHW_VECT_C with 4 x qint8 can be treated as NCHW int32.
@@ -189,15 +189,6 @@
}
};
-#ifdef WIN32
-template <typename T>
-struct SpaceToDepthOpFunctor<CPUDevice, T, FORMAT_NCHW> {
- void operator()(const CPUDevice& d, typename TTypes<T, 4>::ConstTensor input,
- int block_size, typename TTypes<T, 4>::Tensor output) {
- LOG(FATAL) << "Trivial implementation to make debug build compile.";
- }
-};
-#endif
} // namespace functor
#define REGISTER(type) \

View File

@ -1,7 +1,9 @@
import re
import sys
lib_suffix = "" if len(sys.argv) < 3 else sys.argv[2]
version = sys.argv[2]
lib_suffix = "" if len(sys.argv) < 4 else sys.argv[3]
with open(sys.argv[1], "r") as f_in:
with open("static_link.sh", "w") as f_out:
p_cd = re.compile(r"^\((cd .*) && \\$")

View File

@ -1,23 +1,70 @@
import os.path
import re
import sys
lib_suffix = "" if len(sys.argv) < 3 else sys.argv[2]
version = sys.argv[2]
lib_suffix = "" if len(sys.argv) < 4 else sys.argv[3]
with open(sys.argv[1], "r") as f_in:
with open("static_link.sh", "w") as f_out:
p_cd = re.compile(r"^\((cd .*) && \\$")
p_linker = re.compile(fr"^\s*.+cc_wrapper.sh.+(@bazel-out\S+libtensorflow{lib_suffix}\.\d\.\d\.\d\.dylib-2\.params).*")
f_out.write("#!/bin/bash\n# note: ar/binutils version 2.27 required to support output files > 4GB\n")
env = []
for line in f_in:
if line.startswith("(cd"):
# new command, reset
env = [line]
else:
m1 = p_linker.match(line)
if m1:
m2 = p_cd.match(env[0])
f_out.write(m2.group(1) + "\n")
line = f'"/usr/bin/libtool" -static -o {m1.group(1)[1:-9].replace(".dylib", ".a")} {m1.group(1).replace(".dylib", ".a")}\n'
f_out.write(line)
if os.path.isfile(f"libtensorflow_framework.{version}.dylib-2.params"):
p_cd = re.compile(r"^\((cd .*) && \\$")
p_linker = re.compile(fr"^\s*.+cc_wrapper.sh.+(@bazel-out\S+libtensorflow{lib_suffix}\.\d\.\d\.\d\.dylib-2\.params).*")
f_out.write("#!/bin/bash\n# note: ar/binutils version 2.27 required to support output files > 4GB\n")
env = []
for line in f_in:
if line.startswith("(cd"):
# new command, reset
env = [line]
else:
env.append(line)
m1 = p_linker.match(line)
if m1:
m2 = p_cd.match(env[0])
f_out.write(m2.group(1) + "\n")
line = f'"/usr/bin/libtool" -static -o {m1.group(1)[1:-9].replace(".dylib", ".a")} {m1.group(1).replace(".dylib", ".a")}\n'
f_out.write(line)
else:
env.append(line)
else:
# old behaviour (still on some platforms): inline all parameters instead of using -2.params file
p_cd = re.compile(r"^\((cd .*) && \\$")
p_linker1 = re.compile(fr"^.*cc_wrapper.sh.+-shared.+-o (bazel-out\S+libtensorflow{lib_suffix}\.\d\.\d\.\d\.dylib)")
p_linker2 = re.compile("^.*cc_wrapper.sh.+-shared.+-o (bazel-out\\S+libtensorflow_framework\\.\\d\\.\\d\\.\\d\\.dylib)")
f_out.write("#!/bin/bash\n# note: ar/binutils version 2.27 required to support output files > 4GB\n")
env = []
parts = None
for line in f_in:
if line.startswith("(cd"):
# new command, reset
env = [line]
else:
m1 = p_linker1.match(line)
m2 = p_linker2.match(line)
if m1:
tokens = line.split()
if parts is None:
parts = [t[16:] for t in tokens if t.startswith("-Wl,-force_load,")]
else:
m = p_cd.match(env[0])
f_out.write(m.group(1) + "\n")
tmp = [t[16:] for t in tokens if t.startswith("-Wl,-force_load,")]
old = set(parts)
parts += [t for t in tmp if t not in old]
line = f"libtool -static -o {m1.group(1).replace('.dylib', '.a')} {' '.join(parts)}\n"
f_out.write(line)
break
elif m2 and len(env) > 6:
tokens = line.split()
if parts is None:
parts = [t[16:] for t in tokens if t.startswith("-Wl,-force_load,")]
else:
m = p_cd.match(env[0])
f_out.write(m.group(1) + "\n")
tmp = [t[16:] for t in tokens if t.startswith("-Wl,-force_load,")]
old = set(parts)
parts += [t for t in tmp if t not in old]
line = f"libtool -static -o {m2.group(1).replace('_framework', lib_suffix).replace('.dylib', '.a')} {' '.join(parts)}\n"
f_out.write(line)
break
else:
env.append(line)

View File

@ -2,7 +2,9 @@ import os.path
import re
import sys
lib_suffix = "" if len(sys.argv) < 3 else sys.argv[2]
version = sys.argv[2]
lib_suffix = "" if len(sys.argv) < 4 else sys.argv[3]
with open(sys.argv[1], "r") as f_in:
with open("static_link.bat", "w") as f_out:
p_setenv = re.compile(r"^\s*(SET .+=.*)$")

View File

@ -6,7 +6,6 @@ set(TENSORFLOW_FILES
"${CMAKE_CURRENT_LIST_DIR}/convert_lib_params_macos.py"
"${CMAKE_CURRENT_LIST_DIR}/convert_lib_params_windows.py"
"${CMAKE_CURRENT_LIST_DIR}/fix-build-error.patch"
"${CMAKE_CURRENT_LIST_DIR}/fix-linux-build.patch"
"${CMAKE_CURRENT_LIST_DIR}/fix-windows-build.patch"
"${CMAKE_CURRENT_LIST_DIR}/generate_static_link_cmd_linux.py"
"${CMAKE_CURRENT_LIST_DIR}/generate_static_link_cmd_macos.py"

View File

@ -1,5 +1,5 @@
set(TF_VERSION 2.4.1)
set(TF_VERSION_SHORT 2.4)
set(TF_VERSION 2.6.0)
set(TF_VERSION_SHORT 2.6)
vcpkg_find_acquire_program(BAZEL)
get_filename_component(BAZEL_DIR "${BAZEL}" DIRECTORY)
@ -129,28 +129,23 @@ foreach(BUILD_TYPE dbg rel)
# prefer repeated source extraction here for each build type over extracting once above the loop and copying because users reported issues with copying symlinks
set(STATIC_ONLY_PATCHES)
set(WINDOWS_ONLY_PATCHES)
set(LINUX_ONLY_PATCHES)
if(VCPKG_LIBRARY_LINKAGE STREQUAL static)
set(STATIC_ONLY_PATCHES "${CMAKE_CURRENT_LIST_DIR}/change-macros-for-static-lib.patch") # there is no static build option - change macros via patch and link library manually at the end
endif()
if(VCPKG_TARGET_IS_WINDOWS)
set(WINDOWS_ONLY_PATCHES "${CMAKE_CURRENT_LIST_DIR}/fix-windows-build.patch")
endif()
if(VCPKG_TARGET_IS_LINUX)
set(LINUX_ONLY_PATCHES "${CMAKE_CURRENT_LIST_DIR}/fix-linux-build.patch")
endif()
vcpkg_from_github(
OUT_SOURCE_PATH SOURCE_PATH
REPO tensorflow/tensorflow
REF "v${TF_VERSION}"
SHA512 be8273f464c1c1c392f3ab0190dbba36d56a0edcc7991c1a86f16604c859056d3188737d11c3b41ec7918e1cf46d13814c50c00be8f459dde9f0fb618740ee3c
SHA512 d052da4b324f1b5ac9c904ac3cca270cefbf916be6e5968a6835ef3f8ea8c703a0b90be577ac5205edf248e8e6c7ee8817b6a1b383018bb77c381717c6205e05
HEAD_REF master
PATCHES
"${CMAKE_CURRENT_LIST_DIR}/fix-build-error.patch" # Fix namespace error
"${CMAKE_CURRENT_LIST_DIR}/Update-bazel-max-version.patch"
${STATIC_ONLY_PATCHES}
${WINDOWS_ONLY_PATCHES}
${LINUX_ONLY_PATCHES}
)
message(STATUS "Configuring TensorFlow (${BUILD_TYPE})")
@ -192,8 +187,10 @@ foreach(BUILD_TYPE dbg rel)
if(BUILD_TYPE STREQUAL dbg)
if(VCPKG_TARGET_IS_WINDOWS)
set(BUILD_OPTS "--compilation_mode=dbg --features=fastbuild") # link with /DEBUG:FASTLINK instead of /DEBUG:FULL to avoid .pdb >4GB error
elseif(VCPKG_TARGET_IS_OSX)
set(BUILD_OPTS --compilation_mode=fastbuild) # debug build on macOS currently broken
else()
set(BUILD_OPTS "--compilation_mode=dbg")
set(BUILD_OPTS --compilation_mode=dbg)
endif()
separate_arguments(VCPKG_C_FLAGS ${PLATFORM_COMMAND} ${VCPKG_C_FLAGS})
@ -212,7 +209,7 @@ foreach(BUILD_TYPE dbg rel)
list(APPEND LINKOPTS "--linkopt='${OPT}'")
endforeach()
else()
set(BUILD_OPTS "--compilation_mode=opt")
set(BUILD_OPTS --compilation_mode=opt)
separate_arguments(VCPKG_C_FLAGS ${PLATFORM_COMMAND} ${VCPKG_C_FLAGS})
separate_arguments(VCPKG_C_FLAGS_RELEASE ${PLATFORM_COMMAND} ${VCPKG_C_FLAGS_RELEASE})
@ -289,7 +286,7 @@ foreach(BUILD_TYPE dbg rel)
endif()
# for some reason stdout of bazel ends up in stderr, so use err log file in the following command
vcpkg_execute_build_process(
COMMAND ${PYTHON3} "${CMAKE_CURRENT_LIST_DIR}/generate_static_link_cmd_${PLATFORM_SUFFIX}.py" "${CURRENT_BUILDTREES_DIR}/build-${TARGET_TRIPLET}-${BUILD_TYPE}-err.log" ${TF_LIB_SUFFIX}
COMMAND ${PYTHON3} "${CMAKE_CURRENT_LIST_DIR}/generate_static_link_cmd_${PLATFORM_SUFFIX}.py" "${CURRENT_BUILDTREES_DIR}/build-${TARGET_TRIPLET}-${BUILD_TYPE}-err.log" ${TF_VERSION} ${TF_LIB_SUFFIX}
WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${BUILD_TYPE}/bazel-${TARGET_TRIPLET}-${BUILD_TYPE}
LOGNAME postbuild2-${TARGET_TRIPLET}-${BUILD_TYPE}
)

View File

@ -1,7 +1,6 @@
{
"name": "tensorflow-common",
"version-semver": "2.4.1",
"port-version": 5,
"version-semver": "2.6.0",
"description": "This meta package holds common files for the C [tensorflow] and the C++ [tensorflow-cc] API version of TensorFlow but is not installable on its own.",
"homepage": "https://github.com/tensorflow/tensorflow"
}

View File

@ -1,6 +1,6 @@
{
"name": "tensorflow",
"version-semver": "2.4.1",
"version-semver": "2.6.0",
"description": "Library for computation using data flow graphs for scalable machine learning (C API version)",
"homepage": "https://github.com/tensorflow/tensorflow",
"supports": "!(x86 | arm | uwp)",

View File

@ -6457,16 +6457,16 @@
"port-version": 1
},
"tensorflow": {
"baseline": "2.4.1",
"baseline": "2.6.0",
"port-version": 0
},
"tensorflow-cc": {
"baseline": "2.4.1",
"port-version": 1
"baseline": "2.6.0",
"port-version": 0
},
"tensorflow-common": {
"baseline": "2.4.1",
"port-version": 5
"baseline": "2.6.0",
"port-version": 0
},
"tensorpipe": {
"baseline": "2021-04-26",

View File

@ -1,5 +1,10 @@
{
"versions": [
{
"git-tree": "b9e9f840127f8da0c67cadf0369023753c90686b",
"version-semver": "2.6.0",
"port-version": 0
},
{
"git-tree": "77875da04a151fb36abe52cce80491a9a7f16c55",
"version-semver": "2.4.1",

View File

@ -1,5 +1,10 @@
{
"versions": [
{
"git-tree": "84662f791eb9d38350a4ffe99cd80d49f562b10f",
"version-semver": "2.6.0",
"port-version": 0
},
{
"git-tree": "2160d070413af839dbe9da331350e34c91352e11",
"version-semver": "2.4.1",

View File

@ -1,5 +1,10 @@
{
"versions": [
{
"git-tree": "8692b5026a3b7666e73dcaf7432e525dc103f8c5",
"version-semver": "2.6.0",
"port-version": 0
},
{
"git-tree": "bd9bf99a10fe9a9769f26dedb282f3c1954fc9bb",
"version-semver": "2.4.1",