From 0ca4348de32ea3d74fce08ce1492a965859d5769 Mon Sep 17 00:00:00 2001 From: chausner <15180557+chausner@users.noreply.github.com> Date: Tue, 23 Nov 2021 00:26:45 +0100 Subject: [PATCH] [restbed] Update to 4.8 (#21475) * Update restbed to 4.8 * Update CI baseline * Tweaks * Update CI baseline Co-authored-by: chausner --- ports/restbed/asio-1-18-0-deprecations.patch | 112 ------------------- ports/restbed/fix-cmake.patch | 63 +++++++++++ ports/restbed/fix-ninja-duplicates.patch | 67 ----------- ports/restbed/portfile.cmake | 29 +++-- ports/restbed/use-FindOpenSSL-cmake.patch | 13 --- ports/restbed/vcpkg.json | 15 ++- versions/baseline.json | 2 +- versions/r-/restbed.json | 5 + 8 files changed, 95 insertions(+), 211 deletions(-) delete mode 100644 ports/restbed/asio-1-18-0-deprecations.patch create mode 100644 ports/restbed/fix-cmake.patch delete mode 100644 ports/restbed/fix-ninja-duplicates.patch delete mode 100644 ports/restbed/use-FindOpenSSL-cmake.patch diff --git a/ports/restbed/asio-1-18-0-deprecations.patch b/ports/restbed/asio-1-18-0-deprecations.patch deleted file mode 100644 index 7007775a2c..0000000000 --- a/ports/restbed/asio-1-18-0-deprecations.patch +++ /dev/null @@ -1,112 +0,0 @@ -diff --git a/source/corvusoft/restbed/detail/http_impl.cpp b/source/corvusoft/restbed/detail/http_impl.cpp -index 77f918a..08d2c9c 100644 ---- a/source/corvusoft/restbed/detail/http_impl.cpp -+++ b/source/corvusoft/restbed/detail/http_impl.cpp -@@ -153,7 +153,7 @@ namespace restbed - { - #endif - auto socket = make_shared< tcp::socket >( *request->m_pimpl->m_io_service ); -- request->m_pimpl->m_socket = make_shared< SocketImpl >( socket ); -+ request->m_pimpl->m_socket = make_shared< SocketImpl >( *request->m_pimpl->m_io_service, socket ); - #ifdef BUILD_SSL - } - -@@ -196,7 +196,7 @@ namespace restbed - } - - socket->set_verify_callback( asio::ssl::rfc2818_verification( request->get_host( ) ) ); -- request->m_pimpl->m_socket = make_shared< SocketImpl >( socket ); -+ request->m_pimpl->m_socket = make_shared< SocketImpl >( *request->m_pimpl->m_io_service, socket ); - } - #endif - void HttpImpl::request_handler( const error_code& error, const shared_ptr< Request >& request, const function< void ( const shared_ptr< Request >, const shared_ptr< Response > ) >& callback ) -diff --git a/source/corvusoft/restbed/detail/service_impl.cpp b/source/corvusoft/restbed/detail/service_impl.cpp -index 6772af1..87be1ce 100644 ---- a/source/corvusoft/restbed/detail/service_impl.cpp -+++ b/source/corvusoft/restbed/detail/service_impl.cpp -@@ -147,7 +147,7 @@ namespace restbed - - void ServiceImpl::http_listen( void ) const - { -- auto socket = make_shared< tcp::socket >( m_acceptor->get_io_service( ) ); -+ auto socket = make_shared< tcp::socket >( *m_io_service ); - m_acceptor->async_accept( *socket, bind( &ServiceImpl::create_session, this, socket, _1 ) ); - } - -@@ -273,7 +273,7 @@ namespace restbed - - void ServiceImpl::https_listen( void ) const - { -- auto socket = make_shared< asio::ssl::stream< tcp::socket > >( m_ssl_acceptor->get_io_service( ), *m_ssl_context ); -+ auto socket = make_shared< asio::ssl::stream< tcp::socket > >( *m_io_service, *m_ssl_context ); - m_ssl_acceptor->async_accept( socket->lowest_layer( ), bind( &ServiceImpl::create_ssl_session, this, socket, _1 ) ); - } - -@@ -289,7 +289,7 @@ namespace restbed - return; - } - -- auto connection = make_shared< SocketImpl >( socket, m_logger ); -+ auto connection = make_shared< SocketImpl >( *m_io_service, socket, m_logger ); - connection->set_timeout( m_settings->get_connection_timeout( ) ); - if (m_settings->get_keep_alive()) { - connection->set_keep_alive( m_settings->get_keep_alive_start(), -@@ -530,7 +530,7 @@ namespace restbed - { - if ( not error ) - { -- auto connection = make_shared< SocketImpl >( socket, m_logger ); -+ auto connection = make_shared< SocketImpl >( *m_io_service, socket, m_logger ); - connection->set_timeout( m_settings->get_connection_timeout( ) ); - if (m_settings->get_keep_alive()) { - connection->set_keep_alive( m_settings->get_keep_alive_start(), -diff --git a/source/corvusoft/restbed/detail/socket_impl.cpp b/source/corvusoft/restbed/detail/socket_impl.cpp -index fac0082..942eefa 100644 ---- a/source/corvusoft/restbed/detail/socket_impl.cpp -+++ b/source/corvusoft/restbed/detail/socket_impl.cpp -@@ -49,12 +49,12 @@ namespace restbed - { - namespace detail - { -- SocketImpl::SocketImpl( const shared_ptr< tcp::socket >& socket, const shared_ptr< Logger >& logger ) : m_error_handler( nullptr ), -+ SocketImpl::SocketImpl( asio::io_context& context, const shared_ptr< tcp::socket >& socket, const shared_ptr< Logger >& logger ) : m_error_handler( nullptr ), - m_is_open( socket->is_open( ) ), - m_pending_writes( ), - m_logger( logger ), - m_timeout( 0 ), -- m_io_service( socket->get_io_service( ) ), -+ m_io_service( context ), - m_timer( make_shared< asio::steady_timer >( m_io_service ) ), - m_strand( make_shared< io_service::strand > ( m_io_service ) ), - m_resolver( nullptr ), -@@ -66,12 +66,12 @@ namespace restbed - return; - } - #ifdef BUILD_SSL -- SocketImpl::SocketImpl( const shared_ptr< asio::ssl::stream< tcp::socket > >& socket, const shared_ptr< Logger >& logger ) : m_error_handler( nullptr ), -+ SocketImpl::SocketImpl( asio::io_context& context, const shared_ptr< asio::ssl::stream< tcp::socket > >& socket, const shared_ptr< Logger >& logger ) : m_error_handler( nullptr ), - m_is_open( socket->lowest_layer( ).is_open( ) ), - m_pending_writes( ), - m_logger( logger ), - m_timeout( 0 ), -- m_io_service( socket->get_io_service( ) ), -+ m_io_service( context ), - m_timer( make_shared< asio::steady_timer >( m_io_service ) ), - m_strand( make_shared< io_service::strand > ( m_io_service ) ), - m_resolver( nullptr ), -diff --git a/source/corvusoft/restbed/detail/socket_impl.hpp b/source/corvusoft/restbed/detail/socket_impl.hpp -index 41aec42..0977eba 100644 ---- a/source/corvusoft/restbed/detail/socket_impl.hpp -+++ b/source/corvusoft/restbed/detail/socket_impl.hpp -@@ -53,9 +53,9 @@ namespace restbed - //Definitions - - //Constructors -- SocketImpl( const std::shared_ptr< asio::ip::tcp::socket >& socket, const std::shared_ptr< Logger >& logger = nullptr ); -+ SocketImpl( asio::io_context& context, const std::shared_ptr< asio::ip::tcp::socket >& socket, const std::shared_ptr< Logger >& logger = nullptr ); - #ifdef BUILD_SSL -- SocketImpl( const std::shared_ptr< asio::ssl::stream< asio::ip::tcp::socket > >& socket, const std::shared_ptr< Logger >& logger = nullptr ); -+ SocketImpl( asio::io_context& context, const std::shared_ptr< asio::ssl::stream< asio::ip::tcp::socket > >& socket, const std::shared_ptr< Logger >& logger = nullptr ); - #endif - ~SocketImpl( void ) = default; - diff --git a/ports/restbed/fix-cmake.patch b/ports/restbed/fix-cmake.patch new file mode 100644 index 0000000000..9a86027786 --- /dev/null +++ b/ports/restbed/fix-cmake.patch @@ -0,0 +1,63 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -57,7 +57,11 @@ find_package( asio REQUIRED ) + + if ( BUILD_SSL ) + add_definitions( "-DBUILD_SSL" ) +- find_package( openssl REQUIRED ) ++ find_package( OpenSSL REQUIRED ) ++ set( ssl_LIBRARY_SHARED OpenSSL::SSL ) ++ set( crypto_LIBRARY_SHARED OpenSSL::Crypto ) ++ set( ssl_LIBRARY_STATIC OpenSSL::SSL ) ++ set( crypto_LIBRARY_STATIC OpenSSL::Crypto ) + endif ( ) + + include_directories( ${INCLUDE_DIR} SYSTEM ${asio_INCLUDE} ${ssl_INCLUDE} ) +@@ -76,12 +76,13 @@ endif ( ) + # + file( GLOB_RECURSE MANIFEST "${SOURCE_DIR}/*.cpp" ) + ++if ( NOT BUILD_SHARED_LIBS ) + set( STATIC_LIBRARY_NAME "${PROJECT_NAME}-static" ) + add_library( ${STATIC_LIBRARY_NAME} STATIC ${MANIFEST} ) + set_property( TARGET ${STATIC_LIBRARY_NAME} PROPERTY CXX_STANDARD 14 ) + set_property( TARGET ${STATIC_LIBRARY_NAME} PROPERTY CXX_STANDARD_REQUIRED ON ) + set_target_properties( ${STATIC_LIBRARY_NAME} PROPERTIES OUTPUT_NAME ${PROJECT_NAME} ) +- ++else ( ) + set( SHARED_LIBRARY_NAME "${PROJECT_NAME}-shared" ) + add_library( ${SHARED_LIBRARY_NAME} SHARED ${MANIFEST} ) + set_property( TARGET ${SHARED_LIBRARY_NAME} PROPERTY CXX_STANDARD 14 ) +@@ -93,13 +94,20 @@ else ( ) + set_target_properties( ${SHARED_LIBRARY_NAME} PROPERTIES OUTPUT_NAME ${PROJECT_NAME} ) + endif ( ) + set_target_properties( ${SHARED_LIBRARY_NAME} PROPERTIES SOVERSION ${PROJECT_VERSION_MAJOR} VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR} ) ++endif ( ) + + if ( BUILD_SSL ) ++if ( BUILD_SHARED_LIBS ) + target_link_libraries( ${SHARED_LIBRARY_NAME} LINK_PRIVATE ${ssl_LIBRARY_SHARED} ${crypto_LIBRARY_SHARED} ) ++else ( ) + target_link_libraries( ${STATIC_LIBRARY_NAME} LINK_PRIVATE ${ssl_LIBRARY_STATIC} ${crypto_LIBRARY_STATIC} ${CMAKE_DL_LIBS} ) ++endif ( ) + else ( ) ++if ( BUILD_SHARED_LIBS ) + target_link_libraries( ${SHARED_LIBRARY_NAME} ) ++else ( ) + target_link_libraries( ${STATIC_LIBRARY_NAME} ${CMAKE_DL_LIBS} ) ++endif ( ) + endif ( ) + + if ( BUILD_TESTS ) +@@ -119,5 +127,8 @@ file( GLOB ARTIFACTS "${SOURCE_DIR}/*.hpp" ) + + install( FILES "${INCLUDE_DIR}/${PROJECT_NAME}" DESTINATION "${CMAKE_INSTALL_PREFIX}/include" ) + install( FILES ${ARTIFACTS} DESTINATION "${CMAKE_INSTALL_PREFIX}/include/corvusoft/${PROJECT_NAME}" ) ++if ( NOT BUILD_SHARED_LIBS ) +-install( TARGETS ${STATIC_LIBRARY_NAME} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT library ) ++install( TARGETS ${STATIC_LIBRARY_NAME} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT library ) ++else ( ) +-install( TARGETS ${SHARED_LIBRARY_NAME} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT library ) ++install( TARGETS ${SHARED_LIBRARY_NAME} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT library ) ++endif ( ) diff --git a/ports/restbed/fix-ninja-duplicates.patch b/ports/restbed/fix-ninja-duplicates.patch deleted file mode 100644 index 9b10148cd1..0000000000 --- a/ports/restbed/fix-ninja-duplicates.patch +++ /dev/null @@ -1,67 +0,0 @@ -diff --git a/CMakeLists.txt b/CMakeLists.txt -index 2fb74b3..602e05d 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -64,26 +64,33 @@ include_directories( ${INCLUDE_DIR} SYSTEM ${asio_INCLUDE} ${ssl_INCLUDE} ) - # Build - # - file( GLOB_RECURSE MANIFEST "${SOURCE_DIR}/*.cpp" ) -- --set( STATIC_LIBRARY_NAME "${PROJECT_NAME}-static" ) --add_library( ${STATIC_LIBRARY_NAME} STATIC ${MANIFEST} ) --set_property( TARGET ${STATIC_LIBRARY_NAME} PROPERTY CXX_STANDARD 14 ) --set_property( TARGET ${STATIC_LIBRARY_NAME} PROPERTY CXX_STANDARD_REQUIRED ON ) --set_target_properties( ${STATIC_LIBRARY_NAME} PROPERTIES OUTPUT_NAME ${PROJECT_NAME} ) -- --set( SHARED_LIBRARY_NAME "${PROJECT_NAME}-shared" ) --add_library( ${SHARED_LIBRARY_NAME} SHARED ${MANIFEST} ) --set_property( TARGET ${SHARED_LIBRARY_NAME} PROPERTY CXX_STANDARD 14 ) --set_property( TARGET ${SHARED_LIBRARY_NAME} PROPERTY CXX_STANDARD_REQUIRED ON ) --set_target_properties( ${SHARED_LIBRARY_NAME} PROPERTIES OUTPUT_NAME ${PROJECT_NAME} ) --set_target_properties( ${SHARED_LIBRARY_NAME} PROPERTIES SOVERSION ${PROJECT_VERSION_MAJOR} VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR} ) -+if(NOT BUILD_SHARED_LIBS) -+ set( STATIC_LIBRARY_NAME "${PROJECT_NAME}-static" ) -+ add_library( ${STATIC_LIBRARY_NAME} STATIC ${MANIFEST} ) -+ set_property( TARGET ${STATIC_LIBRARY_NAME} PROPERTY CXX_STANDARD 14 ) -+ set_property( TARGET ${STATIC_LIBRARY_NAME} PROPERTY CXX_STANDARD_REQUIRED ON ) -+ set_target_properties( ${STATIC_LIBRARY_NAME} PROPERTIES OUTPUT_NAME ${PROJECT_NAME} ) -+else() -+ set( SHARED_LIBRARY_NAME "${PROJECT_NAME}-shared" ) -+ add_library( ${SHARED_LIBRARY_NAME} SHARED ${MANIFEST} ) -+ set_property( TARGET ${SHARED_LIBRARY_NAME} PROPERTY CXX_STANDARD 14 ) -+ set_property( TARGET ${SHARED_LIBRARY_NAME} PROPERTY CXX_STANDARD_REQUIRED ON ) -+ set_target_properties( ${SHARED_LIBRARY_NAME} PROPERTIES OUTPUT_NAME ${PROJECT_NAME} ) -+ set_target_properties( ${SHARED_LIBRARY_NAME} PROPERTIES SOVERSION ${PROJECT_VERSION_MAJOR} VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR} ) -+endif() - - if ( BUILD_SSL ) -- target_link_libraries( ${SHARED_LIBRARY_NAME} LINK_PRIVATE ${ssl_LIBRARY_SHARED} ${crypto_LIBRARY_SHARED} ) -- target_link_libraries( ${STATIC_LIBRARY_NAME} LINK_PRIVATE ${ssl_LIBRARY_STATIC} ${crypto_LIBRARY_STATIC} ${CMAKE_DL_LIBS} ) -+ if(BUILD_SHARED_LIBS) -+ target_link_libraries( ${SHARED_LIBRARY_NAME} LINK_PRIVATE ${ssl_LIBRARY_SHARED} ${crypto_LIBRARY_SHARED} ) -+ else() -+ target_link_libraries( ${STATIC_LIBRARY_NAME} LINK_PRIVATE ${ssl_LIBRARY_STATIC} ${crypto_LIBRARY_STATIC} ${CMAKE_DL_LIBS} ) -+ endif() - else ( ) -- target_link_libraries( ${SHARED_LIBRARY_NAME} ) -- target_link_libraries( ${STATIC_LIBRARY_NAME} ${CMAKE_DL_LIBS} ) -+ if(BUILD_SHARED_LIBS) -+ target_link_libraries( ${SHARED_LIBRARY_NAME} ) -+ else() -+ target_link_libraries( ${STATIC_LIBRARY_NAME} ${CMAKE_DL_LIBS} ) -+ endif() - endif ( ) - - if ( BUILD_TESTS ) -@@ -103,5 +110,8 @@ file( GLOB ARTIFACTS "${SOURCE_DIR}/*.hpp" ) - - install( FILES "${INCLUDE_DIR}/${PROJECT_NAME}" DESTINATION "${CMAKE_INSTALL_PREFIX}/include" ) - install( FILES ${ARTIFACTS} DESTINATION "${CMAKE_INSTALL_PREFIX}/include/corvusoft/${PROJECT_NAME}" ) --install( TARGETS ${STATIC_LIBRARY_NAME} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT library ) --install( TARGETS ${SHARED_LIBRARY_NAME} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT library ) -+if(NOT BUILD_SHARED_LIBS) -+ install( TARGETS ${STATIC_LIBRARY_NAME} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT library ) -+else() -+ install( TARGETS ${SHARED_LIBRARY_NAME} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT library ) -+endif() -\ No newline at end of file diff --git a/ports/restbed/portfile.cmake b/ports/restbed/portfile.cmake index dd9b4df45b..bd8e890a10 100644 --- a/ports/restbed/portfile.cmake +++ b/ports/restbed/portfile.cmake @@ -1,35 +1,32 @@ -vcpkg_check_linkage(ONLY_STATIC_LIBRARY) - vcpkg_check_features(OUT_FEATURE_OPTIONS FEATURE_OPTIONS - openssl BUILD_SSL + FEATURES + openssl BUILD_SSL ) vcpkg_from_github( OUT_SOURCE_PATH SOURCE_PATH REPO Corvusoft/restbed - REF 4.7 - SHA512 f8aaa89ae5c862253f9a480fefa8827927e3a6c13c51938bbcd6c28ac4e6d54496ecf51610343e9a3efe3e969314f643a487506c606a65f56125b51ab8478652 + REF 4.8 + SHA512 989027c926b97a9dd02951c881dc41819014783da4848cc9ee50776545ba206830d35c2e775abd8c0f705f7b0611d5cd335dd1eb305cdcbf2c86100abaf1623c HEAD_REF master PATCHES - use-FindOpenSSL-cmake.patch - asio-1-18-0-deprecations.patch #https://github.com/Corvusoft/restbed/pull/444/files - fix-ninja-duplicates.patch + fix-cmake.patch ) -file(REMOVE ${SOURCE_PATH}/cmake/Findopenssl.cmake) +file(REMOVE "${SOURCE_PATH}/cmake/Findopenssl.cmake") -vcpkg_configure_cmake( - SOURCE_PATH ${SOURCE_PATH} - PREFER_NINJA +vcpkg_cmake_configure( + SOURCE_PATH "${SOURCE_PATH}" OPTIONS ${FEATURE_OPTIONS} -DBUILD_TESTS=OFF ) -vcpkg_install_cmake() +vcpkg_cmake_install() +vcpkg_copy_pdbs() -#Remove include debug files -file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/include) +# Remove include debug files +file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/include") # Handle copyright -configure_file(${SOURCE_PATH}/LICENSE ${CURRENT_PACKAGES_DIR}/share/${PORT}/copyright COPYONLY) +configure_file("${SOURCE_PATH}/LICENSE" "${CURRENT_PACKAGES_DIR}/share/${PORT}/copyright" COPYONLY) diff --git a/ports/restbed/use-FindOpenSSL-cmake.patch b/ports/restbed/use-FindOpenSSL-cmake.patch deleted file mode 100644 index efba4cbcf3..0000000000 --- a/ports/restbed/use-FindOpenSSL-cmake.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/CMakeLists.txt b/CMakeLists.txt -index 1ec4f07..2fb74b3 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -55,7 +55,7 @@ set( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/cmake" ) - find_package( asio REQUIRED ) - - if ( BUILD_SSL ) -- find_package( openssl REQUIRED ) -+ find_package( OpenSSL REQUIRED ) - endif ( ) - - include_directories( ${INCLUDE_DIR} SYSTEM ${asio_INCLUDE} ${ssl_INCLUDE} ) diff --git a/ports/restbed/vcpkg.json b/ports/restbed/vcpkg.json index d06ab063c1..fa275eb221 100644 --- a/ports/restbed/vcpkg.json +++ b/ports/restbed/vcpkg.json @@ -1,14 +1,25 @@ { "name": "restbed", - "version-string": "4.7", + "version": "4.8", "description": "Corvusoft's Restbed framework brings asynchronous RESTful functionality to C++14 applications.", + "homepage": "https://github.com/corvusoft/restbed", "dependencies": [ - "asio" + "asio", + { + "name": "vcpkg-cmake", + "host": true + } ], "features": { "openssl": { "description": "Secure over the wire communication allowing you to transmit private data online.", "dependencies": [ + { + "name": "asio", + "features": [ + "openssl" + ] + }, "openssl" ] } diff --git a/versions/baseline.json b/versions/baseline.json index ad10096812..6de501f01e 100644 --- a/versions/baseline.json +++ b/versions/baseline.json @@ -5949,7 +5949,7 @@ "port-version": 2 }, "restbed": { - "baseline": "4.7", + "baseline": "4.8", "port-version": 0 }, "restc-cpp": { diff --git a/versions/r-/restbed.json b/versions/r-/restbed.json index 846c82f734..64738c1534 100644 --- a/versions/r-/restbed.json +++ b/versions/r-/restbed.json @@ -1,5 +1,10 @@ { "versions": [ + { + "git-tree": "3b134a281ce09ee7258a281808cca0e40ff2f7d1", + "version": "4.8", + "port-version": 0 + }, { "git-tree": "deab0777d5581a96752beb7528254f02380daf46", "version-string": "4.7",