mirror of
https://github.com/microsoft/vcpkg.git
synced 2025-01-14 23:07:58 +08:00
[gstreamer] create a new port (#17394)
* [gstreamer] create port with meson * initial build config * nodownload in vcpkg_configure_meson needs be removed * [gstreamer] remove duplicated GL headers * 1st check for deps in windows * mac: fix regex for bison * [gstreamer] more detailed options * remove glib usage Will use WIP changes in microsoft/vcpkg * [gstreamer] build with glib port * [gstreamer] extract plugins to features * fix some config errors in windows * fails to find z.lib. this should be zlib.lib * [gstreamer] create patches to search 'zlib' * update tool list * [vcpkg meson] add path of GIT * use append for LINKER_FLAGS Allow injection of LINKER_FLAGS to vcpkg_configure_meson * [gstreamer] update baseline and port SHA * [gstreamer] zlib is required for Windows * Revert "[vcpkg meson] add path of GIT" This reverts commit 8a67fbd1d287fa769cf516b834981ea175463492. * [gstreamer] make git visible in meson * [gstreamer] fix platform expression * [gstreamer] revert change of vcpkg_configure_meson * [gstreamer] modify build.ninja after configure * [gstreamer] drop unknown flag with vcpkg_replace_string * [gstreamer] disable 'devtools' option * [gstreamer] remove dylib * [gstreamer] move dll,pdb after install * [gstreamer] remove 'nls' feature Co-authored-by: Billy Robert ONeal III <bion@microsoft.com>
This commit is contained in:
parent
9f20dbd9a0
commit
9172179c51
13
ports/gstreamer/plugins-base-use-zlib.patch
Normal file
13
ports/gstreamer/plugins-base-use-zlib.patch
Normal file
@ -0,0 +1,13 @@
|
||||
diff --git a/gst-libs/gst/tag/meson.build b/gst-libs/gst/tag/meson.build
|
||||
index 5ec3739..a6cff8d 100644
|
||||
--- a/gst-libs/gst/tag/meson.build
|
||||
+++ b/gst-libs/gst/tag/meson.build
|
||||
@@ -70,7 +70,7 @@ endif
|
||||
core_conf.set('HAVE_ISO_CODES', have_iso_codes)
|
||||
|
||||
# could drop optional zlib dep and use g_zlib_decompressor_new()
|
||||
-zlib_dep = dependency('zlib', required : false)
|
||||
+zlib_dep = dependency('zlib', required : true)
|
||||
if not zlib_dep.found()
|
||||
zlib_dep = cc.find_library('z', required : false)
|
||||
if not zlib_dep.found() or not cc.has_header('zlib.h')
|
13
ports/gstreamer/plugins-good-use-zlib.patch
Normal file
13
ports/gstreamer/plugins-good-use-zlib.patch
Normal file
@ -0,0 +1,13 @@
|
||||
diff --git a/meson.build b/meson.build
|
||||
index 9de3b01..091a7f0 100644
|
||||
--- a/meson.build
|
||||
+++ b/meson.build
|
||||
@@ -326,7 +326,7 @@ if have_gstgl
|
||||
endif
|
||||
endif
|
||||
|
||||
-zlib_dep = dependency('zlib', required : false)
|
||||
+zlib_dep = dependency('zlib', required : true)
|
||||
if not zlib_dep.found()
|
||||
zlib_dep = cc.find_library('z', required : false)
|
||||
if not zlib_dep.found() or not cc.has_header('zlib.h')
|
262
ports/gstreamer/portfile.cmake
Normal file
262
ports/gstreamer/portfile.cmake
Normal file
@ -0,0 +1,262 @@
|
||||
vcpkg_fail_port_install(ON_ARCH "arm" ON_TARGET "uwp" "emscripten" "wasm32" "android" "ios")
|
||||
|
||||
vcpkg_from_github(
|
||||
OUT_SOURCE_PATH GST_BUILD_SOURCE_PATH
|
||||
REPO gstreamer/gst-build
|
||||
REF 1.18.4
|
||||
SHA512 9b3927ba1a2ba1e384f2141c454978f582087795a70246709ed60875bc983a42eef54f3db7617941b8dacc20c434f81ef9931834861767d7a4dc09d42beeb900
|
||||
HEAD_REF master
|
||||
)
|
||||
vcpkg_from_github(
|
||||
OUT_SOURCE_PATH GST_SOURCE_PATH
|
||||
REPO gstreamer/gstreamer
|
||||
REF 1.18.4
|
||||
SHA512 684a7ce93143a0c3e0ce627ab2bf1451d49735b4bab273f308bc3b48d8312f7c13c0afa7e71f3a3a7274b90373215636dd8ff0076f143cbe26061de0c4efa102
|
||||
HEAD_REF master
|
||||
)
|
||||
if(VCPKG_TARGET_IS_WINDOWS)
|
||||
list(APPEND PLUGIN_BASE_PATCHES plugins-base-use-zlib.patch)
|
||||
list(APPEND PLUGIN_GOOD_PATCHES plugins-good-use-zlib.patch)
|
||||
endif()
|
||||
vcpkg_from_github(
|
||||
OUT_SOURCE_PATH GST_PLUGIN_BASE_SOURCE_PATH
|
||||
REPO gstreamer/gst-plugins-base
|
||||
REF 1.18.4
|
||||
SHA512 b89924e90f880195740421f2eec3f2a667b96f6ca92ccaf87da246e9c9fd13646bf6235376844c012414a79d38dfaea8f10d56ffec900fe0b9cb8f19e722f05e
|
||||
HEAD_REF master
|
||||
PATCHES ${PLUGIN_BASE_PATCHES}
|
||||
)
|
||||
vcpkg_from_github(
|
||||
OUT_SOURCE_PATH GST_PLUGIN_GOOD_SOURCE_PATH
|
||||
REPO gstreamer/gst-plugins-good
|
||||
REF 1.18.4
|
||||
SHA512 d97f4b76b6fc089b7675a9b10cabf4c704d71d663a23f34133a2671761d98e931aa87df7158f663cd9ebb6a8febd9ab1833aef7eb8be2ef2b54fad288bd0ae66
|
||||
HEAD_REF master
|
||||
PATCHES ${PLUGIN_GOOD_PATCHES}
|
||||
)
|
||||
vcpkg_from_github(
|
||||
OUT_SOURCE_PATH GST_PLUGIN_BAD_SOURCE_PATH
|
||||
REPO gstreamer/gst-plugins-bad
|
||||
REF 1.18.4
|
||||
SHA512 0bf5344fbef883dbe0908495c9a50cd3bf915c5d328cf2768532ff077a9aa4255747f417a310c16c3ea86fcb79ac6ba4bf37375ff84776985451ab47b9d9ac6e
|
||||
HEAD_REF master
|
||||
)
|
||||
vcpkg_from_github(
|
||||
OUT_SOURCE_PATH GST_PLUGIN_UGLY_SOURCE_PATH
|
||||
REPO gstreamer/gst-plugins-ugly
|
||||
REF 1.18.4
|
||||
SHA512 01413155d21f654a90bcf7235b5605c244d3700632ae6c56cafbbabfb11192a09c2ab01c4662ab452eabb004b09c9ec2efa72024db8be5863054d25569034a03
|
||||
HEAD_REF master
|
||||
)
|
||||
vcpkg_from_gitlab(
|
||||
GITLAB_URL https://gitlab.freedesktop.org
|
||||
OUT_SOURCE_PATH GST_MESON_PORTS_SOURCE_PATH
|
||||
REPO gstreamer/meson-ports/gl-headers
|
||||
REF 5c8c7c0d3ca1f0b783272dac0b95e09414e49bc8 # master commit. Date 2021-04-21
|
||||
SHA512 d001535e1c1b5bb515ac96c7d15b25ca51460a5af0c858df53b11c7bae87c4a494e4a1b1b9c3c41a5989001db083645dde2054b82acbbeab7f9939308b676f9c
|
||||
HEAD_REF master
|
||||
)
|
||||
|
||||
file(RENAME ${GST_SOURCE_PATH} ${GST_BUILD_SOURCE_PATH}/subprojects/gstreamer)
|
||||
file(RENAME ${GST_PLUGIN_BASE_SOURCE_PATH} ${GST_BUILD_SOURCE_PATH}/subprojects/gst-plugins-base)
|
||||
file(RENAME ${GST_PLUGIN_GOOD_SOURCE_PATH} ${GST_BUILD_SOURCE_PATH}/subprojects/gst-plugins-good)
|
||||
file(RENAME ${GST_PLUGIN_BAD_SOURCE_PATH} ${GST_BUILD_SOURCE_PATH}/subprojects/gst-plugins-bad)
|
||||
file(RENAME ${GST_PLUGIN_UGLY_SOURCE_PATH} ${GST_BUILD_SOURCE_PATH}/subprojects/gst-plugins-ugly)
|
||||
file(RENAME ${GST_MESON_PORTS_SOURCE_PATH} ${GST_BUILD_SOURCE_PATH}/subprojects/gl-headers)
|
||||
|
||||
if(VCPKG_TARGET_IS_OSX)
|
||||
# In Darwin platform, there can be an old version of `bison`,
|
||||
# Which can't be used for `gst-build`. It requires 2.4+
|
||||
vcpkg_find_acquire_program(BISON)
|
||||
execute_process(
|
||||
COMMAND ${BISON} --version
|
||||
OUTPUT_VARIABLE BISON_OUTPUT
|
||||
)
|
||||
string(REGEX MATCH "([0-9]+)\\.([0-9]+)\\.([0-9]+)" BISON_VERSION "${BISON_OUTPUT}")
|
||||
set(BISON_MAJOR ${CMAKE_MATCH_1})
|
||||
set(BISON_MINOR ${CMAKE_MATCH_2})
|
||||
message(STATUS "Using bison: ${BISON_MAJOR}.${BISON_MINOR}.${CMAKE_MATCH_3}")
|
||||
if(NOT (BISON_MAJOR GREATER_EQUAL 2 AND BISON_MINOR GREATER_EQUAL 4))
|
||||
message(WARNING "'bison' upgrade is required. Please check the https://stackoverflow.com/a/35161881")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# make tools like 'glib-mkenums' visible
|
||||
get_filename_component(GLIB_TOOL_DIR ${CURRENT_INSTALLED_DIR}/tools/glib ABSOLUTE)
|
||||
message(STATUS "Using glib tools: ${GLIB_TOOL_DIR}")
|
||||
vcpkg_add_to_path(PREPEND ${GLIB_TOOL_DIR})
|
||||
|
||||
if("plugins-bad" IN_LIST FEATURES)
|
||||
# requires 'libdrm', 'dssim', 'libmicrodns'
|
||||
message(FATAL_ERROR "The feature 'plugins-bad' is not supported in this port version")
|
||||
set(PLUGIN_BAD_SUPPORT enabled)
|
||||
else()
|
||||
set(PLUGIN_BAD_SUPPORT disabled)
|
||||
endif()
|
||||
if("plugins-ugly" IN_LIST FEATURES)
|
||||
set(PLUGIN_UGLY_SUPPORT enabled)
|
||||
else()
|
||||
set(PLUGIN_UGLY_SUPPORT disabled)
|
||||
endif()
|
||||
|
||||
if(VCPKG_LIBRARY_LINKAGE STREQUAL "dynamic")
|
||||
set(LIBRARY_LINKAGE "shared")
|
||||
else()
|
||||
set(LIBRARY_LINKAGE "static")
|
||||
endif()
|
||||
|
||||
# gst-build's meson configuration needs git. Make the tool visible.
|
||||
vcpkg_find_acquire_program(GIT)
|
||||
get_filename_component(GIT_DIR "${GIT}" DIRECTORY)
|
||||
vcpkg_add_to_path("${GIT_DIR}")
|
||||
|
||||
#
|
||||
# check scripts/cmake/vcpkg_configure_meson.cmake
|
||||
# --wrap-mode=nodownload
|
||||
#
|
||||
# References
|
||||
# https://github.com/GStreamer/gst-build/blob/1.18.4/meson_options.txt
|
||||
# https://github.com/GStreamer/gst-plugins-base/blob/1.18.4/meson_options.txt
|
||||
# https://github.com/GStreamer/gst-plugins-good/blob/1.18.4/meson_options.txt
|
||||
# https://github.com/GStreamer/gst-plugins-bad/blob/1.18.4/meson_options.txt
|
||||
# https://github.com/GStreamer/gst-plugins-ugly/blob/1.18.4/meson_options.txt
|
||||
#
|
||||
vcpkg_configure_meson(
|
||||
SOURCE_PATH ${GST_BUILD_SOURCE_PATH}
|
||||
OPTIONS
|
||||
# gstreamer
|
||||
-Dgstreamer:default_library=${LIBRARY_LINKAGE}
|
||||
-Dgstreamer:check=disabled
|
||||
-Dgstreamer:libunwind=disabled
|
||||
-Dgstreamer:libdw=disabled
|
||||
-Dgstreamer:dbghelp=disabled
|
||||
-Dgstreamer:bash-completion=disabled
|
||||
-Dgstreamer:coretracers=disabled
|
||||
-Dgstreamer:examples=disabled
|
||||
-Dgstreamer:tests=disabled
|
||||
-Dgstreamer:benchmarks=disabled
|
||||
-Dgstreamer:tools=disabled
|
||||
-Dgstreamer:gtk_doc=disabled
|
||||
-Dgstreamer:introspection=disabled
|
||||
-Dgstreamer:nls=disabled
|
||||
# gst-plugins-base
|
||||
-Dgst-plugins-base:default_library=${LIBRARY_LINKAGE}
|
||||
-Dgst-plugins-base:examples=disabled
|
||||
-Dgst-plugins-base:tests=disabled
|
||||
-Dgst-plugins-base:tools=disabled
|
||||
-Dgst-plugins-base:introspection=disabled
|
||||
-Dgst-plugins-base:nls=disabled
|
||||
-Dgst-plugins-base:orc=disabled
|
||||
# gst-plugins-good
|
||||
-Dgst-plugins-good:default_library=${LIBRARY_LINKAGE}
|
||||
-Dgst-plugins-good:qt5=disabled
|
||||
-Dgst-plugins-good:soup=disabled
|
||||
-Dgst-plugins-good:cairo=auto # cairo[gobject]
|
||||
-Dgst-plugins-good:speex=auto # speex
|
||||
-Dgst-plugins-good:taglib=auto # taglib
|
||||
-Dgst-plugins-good:vpx=auto # libvpx
|
||||
-Dgst-plugins-good:examples=disabled
|
||||
-Dgst-plugins-good:tests=disabled
|
||||
-Dgst-plugins-good:nls=disabled
|
||||
-Dgst-plugins-good:orc=disabled
|
||||
# gst-plugins-bad
|
||||
-Dbad=${PLUGIN_BAD_SUPPORT}
|
||||
-Dgst-plugins-bad:default_library=${LIBRARY_LINKAGE}
|
||||
-Dgst-plugins-bad:opencv=disabled
|
||||
-Dgst-plugins-bad:hls-crypto=openssl
|
||||
-Dgst-plugins-bad:examples=disabled
|
||||
-Dgst-plugins-bad:tests=disabled
|
||||
-Dgst-plugins-bad:introspection=disabled
|
||||
-Dgst-plugins-bad:nls=${LIBRARY_LINKAGE}
|
||||
-Dgst-plugins-bad:orc=disabled
|
||||
# gst-plugins-ugly
|
||||
-Dugly=${PLUGIN_UGLY_SUPPORT}
|
||||
-Dgst-plugins-ugly:default_library=${LIBRARY_LINKAGE}
|
||||
-Dgst-plugins-ugly:tests=disabled
|
||||
-Dgst-plugins-ugly:nls=disabled
|
||||
-Dgst-plugins-ugly:orc=disabled
|
||||
# see ${GST_BUILD_SOURCE_PATH}/meson_options.txt
|
||||
-Dpython=disabled
|
||||
-Dlibav=disabled
|
||||
-Dlibnice=disabled # libnice
|
||||
-Ddevtools=disabled
|
||||
-Dges=disabled
|
||||
-Drtsp_server=disabled
|
||||
-Domx=disabled
|
||||
-Dvaapi=disabled
|
||||
-Dsharp=disabled
|
||||
-Drs=disabled
|
||||
-Dgst-examples=disabled
|
||||
-Dtls=disabled
|
||||
-Dtests=disabled # common options
|
||||
-Dexamples=disabled
|
||||
-Dintrospection=disabled
|
||||
-Dnls=disabled
|
||||
-Dorc=disabled
|
||||
-Ddoc=disabled
|
||||
-Dgtk_doc=disabled
|
||||
-Ddevtools=disabled
|
||||
OPTIONS_DEBUG
|
||||
-Dgstreamer:gst_debug=true # plugins will reference this value
|
||||
OPTIONS_RELEASE
|
||||
-Dgstreamer:gst_debug=false
|
||||
-Dgstreamer:gobject-cast-checks=disabled
|
||||
-Dgstreamer:glib-asserts=disabled
|
||||
-Dgstreamer:glib-checks=disabled
|
||||
-Dgstreamer:extra-checks=disabled
|
||||
-Dgst-plugins-base:gobject-cast-checks=disabled
|
||||
-Dgst-plugins-base:glib-asserts=disabled
|
||||
-Dgst-plugins-base:glib-checks=disabled
|
||||
-Dgst-plugins-good:gobject-cast-checks=disabled
|
||||
-Dgst-plugins-good:glib-asserts=disabled
|
||||
-Dgst-plugins-good:glib-checks=disabled
|
||||
-Dgst-plugins-bad:gobject-cast-checks=disabled
|
||||
-Dgst-plugins-bad:glib-asserts=disabled
|
||||
-Dgst-plugins-bad:glib-checks=disabled
|
||||
)
|
||||
if(VCPKG_TARGET_IS_WINDOWS)
|
||||
# note: can't find where z.lib comes from. replace it to appropriate library name manually
|
||||
get_filename_component(BUILD_NINJA_DBG ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg/build.ninja ABSOLUTE)
|
||||
vcpkg_replace_string(${BUILD_NINJA_DBG} "z.lib" "zlibd.lib")
|
||||
get_filename_component(BUILD_NINJA_REL ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/build.ninja ABSOLUTE)
|
||||
vcpkg_replace_string(${BUILD_NINJA_REL} "z.lib" "zlib.lib")
|
||||
vcpkg_replace_string(${BUILD_NINJA_REL} "\"-Wno-unused\"" "") # todo: may need a patch for `gst_debug=false`
|
||||
endif()
|
||||
vcpkg_install_meson()
|
||||
|
||||
# Remove duplicated GL headers (we already have `opengl-registry`)
|
||||
file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/include/KHR
|
||||
${CURRENT_PACKAGES_DIR}/include/GL
|
||||
)
|
||||
file(RENAME ${CURRENT_PACKAGES_DIR}/lib/gstreamer-1.0/include/gst/gl/gstglconfig.h
|
||||
${CURRENT_PACKAGES_DIR}/include/gstreamer-1.0/gst/gl/gstglconfig.h
|
||||
)
|
||||
|
||||
file(INSTALL ${GST_BUILD_SOURCE_PATH}/LICENSE DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT} RENAME copyright)
|
||||
file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/share
|
||||
${CURRENT_PACKAGES_DIR}/debug/libexec
|
||||
${CURRENT_PACKAGES_DIR}/debug/lib/gstreamer-1.0/include
|
||||
${CURRENT_PACKAGES_DIR}/libexec
|
||||
${CURRENT_PACKAGES_DIR}/lib/gstreamer-1.0/include
|
||||
)
|
||||
if(VCPKG_LIBRARY_LINKAGE STREQUAL "static")
|
||||
file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/bin
|
||||
${CURRENT_PACKAGES_DIR}/bin
|
||||
)
|
||||
set(PREFIX ${CMAKE_SHARED_LIBRARY_PREFIX})
|
||||
set(SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX})
|
||||
file(REMOVE ${CURRENT_PACKAGES_DIR}/debug/lib/${PREFIX}gstreamer-full-1.0${SUFFIX}
|
||||
${CURRENT_PACKAGES_DIR}/lib/${PREFIX}gstreamer-full-1.0${SUFFIX}
|
||||
)
|
||||
endif()
|
||||
if(VCPKG_TARGET_IS_WINDOWS AND VCPKG_LIBRARY_LINKAGE STREQUAL "dynamic")
|
||||
file(GLOB DBG_BINS ${CURRENT_PACKAGES_DIR}/debug/lib/gstreamer-1.0/*.dll
|
||||
${CURRENT_PACKAGES_DIR}/debug/lib/gstreamer-1.0/*.pdb
|
||||
)
|
||||
file(COPY ${DBG_BINS} DESTINATION ${CURRENT_PACKAGES_DIR}/debug/bin)
|
||||
file(GLOB REL_BINS ${CURRENT_PACKAGES_DIR}/lib/gstreamer-1.0/*.dll
|
||||
${CURRENT_PACKAGES_DIR}/lib/gstreamer-1.0/*.pdb
|
||||
)
|
||||
file(COPY ${REL_BINS} DESTINATION ${CURRENT_PACKAGES_DIR}/bin)
|
||||
file(REMOVE ${DBG_BINS} ${REL_BINS})
|
||||
endif()
|
75
ports/gstreamer/vcpkg.json
Normal file
75
ports/gstreamer/vcpkg.json
Normal file
@ -0,0 +1,75 @@
|
||||
{
|
||||
"name": "gstreamer",
|
||||
"version": "1.18.4",
|
||||
"description": "GStreamer open-source multimedia framework core library",
|
||||
"homepage": "https://gstreamer.freedesktop.org/",
|
||||
"license": "LGPL-2.0",
|
||||
"supports": "(windows | osx) & (x64 | x86)",
|
||||
"dependencies": [
|
||||
{
|
||||
"name": "cairo",
|
||||
"features": [
|
||||
"gobject"
|
||||
],
|
||||
"platform": "windows | osx"
|
||||
},
|
||||
{
|
||||
"name": "freetype",
|
||||
"features": [
|
||||
"brotli",
|
||||
"png",
|
||||
"zlib"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "glib",
|
||||
"host": true
|
||||
},
|
||||
"graphene",
|
||||
"libnice",
|
||||
"libxml2",
|
||||
{
|
||||
"name": "opengl-registry",
|
||||
"platform": "windows | osx"
|
||||
},
|
||||
"openssl",
|
||||
"tool-meson",
|
||||
{
|
||||
"name": "yasm-tool-helper",
|
||||
"platform": "windows"
|
||||
}
|
||||
],
|
||||
"default-features": [
|
||||
"plugins-good",
|
||||
"plugins-ugly"
|
||||
],
|
||||
"features": {
|
||||
"plugins-bad": {
|
||||
"description": "'Bad' GStreamer plugins and helper libraries",
|
||||
"dependencies": [
|
||||
"openh264"
|
||||
]
|
||||
},
|
||||
"plugins-good": {
|
||||
"description": "'Good' GStreamer plugins and helper libraries",
|
||||
"dependencies": [
|
||||
"bzip2",
|
||||
"jack2",
|
||||
"libflac",
|
||||
"libjpeg-turbo",
|
||||
"libpng",
|
||||
"libraw",
|
||||
"libvpx",
|
||||
"mpg123",
|
||||
"speex",
|
||||
"taglib"
|
||||
]
|
||||
},
|
||||
"plugins-ugly": {
|
||||
"description": "'Ugly' GStreamer plugins and helper libraries",
|
||||
"dependencies": [
|
||||
"x264"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
@ -2416,6 +2416,10 @@
|
||||
"baseline": "2.8.112",
|
||||
"port-version": 0
|
||||
},
|
||||
"gstreamer": {
|
||||
"baseline": "1.18.4",
|
||||
"port-version": 0
|
||||
},
|
||||
"gtest": {
|
||||
"baseline": "1.11.0",
|
||||
"port-version": 0
|
||||
|
9
versions/g-/gstreamer.json
Normal file
9
versions/g-/gstreamer.json
Normal file
@ -0,0 +1,9 @@
|
||||
{
|
||||
"versions": [
|
||||
{
|
||||
"git-tree": "308df77361916f76938e3a022feab2520e2ce2a3",
|
||||
"version": "1.18.4",
|
||||
"port-version": 0
|
||||
}
|
||||
]
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user