gerbera: upgrade 1.12.1 -> 2.0.0

* 0001-Fix-build-against-fmt-10.patch dropped because fixed in the new version
* Expat dropped from DEPENDS because has been replaced with pugixml at version 1.5.0
* Required dependencies updated and added to DEPENDS
* Optional packages added and those enable by default have been enabled.

Changelog:

NEW Features

    Staged importing that allows updating the virtual layout instead of deleting and recreating it each time (import-mode="grb")
    Config options as command line arguments (--set-option OPT=VAL with --print-options)
    Allow configuration of follow-symlinks per autoscan directory
    Configuration of containers in virtual layout: title can be changed, some nodes can be disabled
    New mode of loading Javascript plugins with cleanup of global variables
    Generation of example configuration via command line option --create-example-config
    Case insensitive sorting for databases
    New config options for URL handling and host redirection
    Use .nomedia to hide directory, incl. config option
    Support for UPnP commands GetFeatureList and GetSortExtensionCapabilities
    Build for Ubuntu 23.04 and 23.10

FIXES

    Autoscan: Keep track of renamed directories
    Docker: add JPEG and update description
    Runtime issues in request handling
    Configurable handling of HOME directory
    Transcoding: parsing issue of requests
    Stability for sqlite database access
    Browsing on Samsung devices

Code Improvements

    Update Javascript libraries
    Update versions of googletest (1.14), pupnp (1.14.18), libexiv2 (v0.28.1), libebml (1.4.5), fmt (10.2.0), pugixml (1.14), spdlog (1.12.0) and taglib (1.13.1)
    Compatibility with gcc14

Signed-off-by: alperak <alperyasinak1@gmail.com>
Signed-off-by: Khem Raj <raj.khem@gmail.com>
This commit is contained in:
alperak
2024-01-15 14:49:20 +03:00
committed by Khem Raj
parent 9f5b336614
commit f391181395
3 changed files with 30 additions and 199 deletions

View File

@@ -1,168 +0,0 @@
From 2c08724e8a7e3a0ee8cdd91246a714a17f2ba5c1 Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Wed, 17 May 2023 17:31:56 -0700
Subject: [PATCH] Fix build against fmt 10+
Fixes
git/src/config/setup/config_setup_vector.cc:191:9: required from here
| /home/hains/openpli-dm920-python3/build/tmp/work/cortexa15hf-neon-vfpv4-oe-linux-gnueabi/gerbera/1.11.0-r0/
recipe-sysroot/usr/include/fmt/core.h:1691:7: error: static assertion failed: Cannot format an argument. To make type T formattable provide a formatter<T> specialization: https://fmt.dev/latest/api.html#udt
| 1691 | formattable,
| | ^~~~~~~~~~~
Source: https://github.com/Hains/openpli-dm920-python3/commit/688ae121bd3928925a8656bd4aaf3857d8e8a8ed
Upstream-Status: Pending
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
src/config/setup/config_setup_array.cc | 6 +++---
src/config/setup/config_setup_autoscan.cc | 2 +-
src/config/setup/config_setup_client.cc | 2 +-
src/config/setup/config_setup_dictionary.cc | 6 +++---
src/config/setup/config_setup_dynamic.cc | 2 +-
src/config/setup/config_setup_transcoding.cc | 2 +-
src/config/setup/config_setup_tweak.cc | 2 +-
src/config/setup/config_setup_vector.cc | 4 ++--
8 files changed, 13 insertions(+), 13 deletions(-)
diff --git a/src/config/setup/config_setup_array.cc b/src/config/setup/config_setup_array.cc
index 8f3cf1db..efc9b501 100644
--- a/src/config/setup/config_setup_array.cc
+++ b/src/config/setup/config_setup_array.cc
@@ -136,11 +136,11 @@ std::vector<std::string> ConfigArraySetup::getXmlContent(const pugi::xml_node& o
std::vector<std::string> result;
if (initArray) {
if (!initArray(optValue, result, ConfigDefinition::mapConfigOption(nodeOption))) {
- throw_std_runtime_error("Invalid {} array value '{}'", xpath, optValue);
+ throw_std_runtime_error("Invalid {} array value '{}'", xpath, optValue.value());
}
} else {
if (!createOptionFromNode(optValue, result)) {
- throw_std_runtime_error("Invalid {} array value '{}'", xpath, optValue);
+ throw_std_runtime_error("Invalid {} array value '{}'", xpath, optValue.value());
}
}
if (result.empty()) {
@@ -149,7 +149,7 @@ std::vector<std::string> ConfigArraySetup::getXmlContent(const pugi::xml_node& o
result = defaultEntries;
}
if (notEmpty && result.empty()) {
- throw_std_runtime_error("Invalid array {} empty '{}'", xpath, optValue);
+ throw_std_runtime_error("Invalid array {} empty '{}'", xpath, optValue.value());
}
return result;
}
diff --git a/src/config/setup/config_setup_autoscan.cc b/src/config/setup/config_setup_autoscan.cc
index e882ca3e..d773419b 100644
--- a/src/config/setup/config_setup_autoscan.cc
+++ b/src/config/setup/config_setup_autoscan.cc
@@ -203,7 +203,7 @@ std::shared_ptr<ConfigOption> ConfigAutoscanSetup::newOption(const pugi::xml_nod
{
auto result = std::vector<AutoscanDirectory>();
if (!createOptionFromNode(optValue, result)) {
- throw_std_runtime_error("Init {} autoscan failed '{}'", xpath, optValue);
+ throw_std_runtime_error("Init {} autoscan failed '{}'", xpath, optValue.value());
}
optionValue = std::make_shared<AutoscanListOption>(result);
return optionValue;
diff --git a/src/config/setup/config_setup_client.cc b/src/config/setup/config_setup_client.cc
index 30bb98cb..56be9c53 100644
--- a/src/config/setup/config_setup_client.cc
+++ b/src/config/setup/config_setup_client.cc
@@ -163,7 +163,7 @@ std::shared_ptr<ConfigOption> ConfigClientSetup::newOption(const pugi::xml_node&
auto result = std::make_shared<ClientConfigList>();
if (!createOptionFromNode(isEnabled ? optValue : pugi::xml_node(nullptr), result)) {
- throw_std_runtime_error("Init {} client config failed '{}'", xpath, optValue);
+ throw_std_runtime_error("Init {} client config failed '{}'", xpath, optValue.value());
}
optionValue = std::make_shared<ClientConfigListOption>(result);
return optionValue;
diff --git a/src/config/setup/config_setup_dictionary.cc b/src/config/setup/config_setup_dictionary.cc
index eb91c694..ea2aaa05 100644
--- a/src/config/setup/config_setup_dictionary.cc
+++ b/src/config/setup/config_setup_dictionary.cc
@@ -162,11 +162,11 @@ std::map<std::string, std::string> ConfigDictionarySetup::getXmlContent(const pu
std::map<std::string, std::string> result;
if (initDict) {
if (!initDict(optValue, result)) {
- throw_std_runtime_error("Init {} dictionary failed '{}'", xpath, optValue);
+ throw_std_runtime_error("Init {} dictionary failed '{}'", xpath, optValue.value());
}
} else {
if (!createOptionFromNode(optValue, result) && required) {
- throw_std_runtime_error("Init {} dictionary failed '{}'", xpath, optValue);
+ throw_std_runtime_error("Init {} dictionary failed '{}'", xpath, optValue.value());
}
}
if (result.empty()) {
@@ -175,7 +175,7 @@ std::map<std::string, std::string> ConfigDictionarySetup::getXmlContent(const pu
result = defaultEntries;
}
if (notEmpty && result.empty()) {
- throw_std_runtime_error("Invalid dictionary {} empty '{}'", xpath, optValue);
+ throw_std_runtime_error("Invalid dictionary {} empty '{}'", xpath, optValue.value());
}
return result;
}
diff --git a/src/config/setup/config_setup_dynamic.cc b/src/config/setup/config_setup_dynamic.cc
index 6a43b820..93030b85 100644
--- a/src/config/setup/config_setup_dynamic.cc
+++ b/src/config/setup/config_setup_dynamic.cc
@@ -179,7 +179,7 @@ std::shared_ptr<ConfigOption> ConfigDynamicContentSetup::newOption(const pugi::x
auto result = std::make_shared<DynamicContentList>();
if (!createOptionFromNode(optValue, result)) {
- throw_std_runtime_error("Init {} DynamicContentList failed '{}'", xpath, optValue);
+ throw_std_runtime_error("Init {} DynamicContentList failed '{}'", xpath, optValue.value());
}
optionValue = std::make_shared<DynamicContentListOption>(result);
return optionValue;
diff --git a/src/config/setup/config_setup_transcoding.cc b/src/config/setup/config_setup_transcoding.cc
index 4827f109..c353ce1f 100644
--- a/src/config/setup/config_setup_transcoding.cc
+++ b/src/config/setup/config_setup_transcoding.cc
@@ -492,7 +492,7 @@ std::shared_ptr<ConfigOption> ConfigTranscodingSetup::newOption(const pugi::xml_
auto result = std::make_shared<TranscodingProfileList>();
if (!createOptionFromNode(isEnabled ? optValue : pugi::xml_node(nullptr), result)) {
- throw_std_runtime_error("Init {} transcoding failed '{}'", xpath, optValue);
+ throw_std_runtime_error("Init {} transcoding failed '{}'", xpath, optValue.value());
}
optionValue = std::make_shared<TranscodingProfileListOption>(result);
return optionValue;
diff --git a/src/config/setup/config_setup_tweak.cc b/src/config/setup/config_setup_tweak.cc
index d7692c09..72c2beb2 100644
--- a/src/config/setup/config_setup_tweak.cc
+++ b/src/config/setup/config_setup_tweak.cc
@@ -242,7 +242,7 @@ std::shared_ptr<ConfigOption> ConfigDirectorySetup::newOption(const pugi::xml_no
auto result = std::make_shared<DirectoryConfigList>();
if (!createOptionFromNode(optValue, result)) {
- throw_std_runtime_error("Init {} DirectoryConfigList failed '{}'", xpath, optValue);
+ throw_std_runtime_error("Init {} DirectoryConfigList failed '{}'", xpath, optValue.value());
}
optionValue = std::make_shared<DirectoryTweakOption>(result);
return optionValue;
diff --git a/src/config/setup/config_setup_vector.cc b/src/config/setup/config_setup_vector.cc
index c8ff853d..91f99ca4 100644
--- a/src/config/setup/config_setup_vector.cc
+++ b/src/config/setup/config_setup_vector.cc
@@ -180,7 +180,7 @@ std::vector<std::vector<std::pair<std::string, std::string>>> ConfigVectorSetup:
{
std::vector<std::vector<std::pair<std::string, std::string>>> result;
if (!createOptionFromNode(optValue, result) && required) {
- throw_std_runtime_error("Init {} vector failed '{}'", xpath, optValue);
+ throw_std_runtime_error("Init {} vector failed '{}'", xpath, optValue.value());
}
if (result.empty()) {
log_debug("{} assigning {} default values", xpath, defaultEntries.size());
@@ -188,7 +188,7 @@ std::vector<std::vector<std::pair<std::string, std::string>>> ConfigVectorSetup:
result = defaultEntries;
}
if (notEmpty && result.empty()) {
- throw_std_runtime_error("Invalid vector {} empty '{}'", xpath, optValue);
+ throw_std_runtime_error("Invalid vector {} empty '{}'", xpath, optValue.value());
}
return result;
}

View File

@@ -1,31 +0,0 @@
Description = "Gerbera - An UPnP media server"
LICENSE = "GPL-2.0-only"
LIC_FILES_CHKSUM = "file://LICENSE.md;md5=25cdec9afe3f1f26212ead6bd2f7fac8"
SRC_URI = "git://github.com/gerbera/gerbera.git;protocol=https;branch=master \
file://0001-Fix-build-against-fmt-10.patch \
"
SRCREV = "559e1d1a92f5977ce8cff7393aa85330dbf2d1d6"
S = "${WORKDIR}/git"
DEPENDS = "expat fmt spdlog pugixml libebml libmatroska zlib curl libupnp e2fsprogs sqlite3 libnsl2"
SYSTEMD_SERVICE:${PN} = "gerbera.service"
inherit cmake pkgconfig systemd
PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)}"
PACKAGECONFIG[systemd] = "-DWITH_SYSTEMD=TRUE,-DWITH_SYSTEMD=FALSE,systemd"
PACKAGECONFIG[taglib] = "-DWITH_TAGLIB=TRUE,-DWITH_TAGLIB=FALSE,taglib"
EXTRA_OECMAKE = "-DWITH_JS=FALSE -DWITH_MAGIC=FALSE -DWITH_EXIF=FALSE -DLIBUUID_INCLUDE_DIRS=${STAGING_INCDIR} -DLIBUUID_LIBRARIES=-luuid"
do_install:append() {
install -d ${D}/root/.config/
}
FILES:${PN} += "/root/.config/"
SECURITY_CFLAGS:riscv64 = "${SECURITY_NOPIE_CFLAGS}"

View File

@@ -0,0 +1,30 @@
Description = "Gerbera is a UPnP media server which allows you to stream your digital media through your home network and consume it on a variety of UPnP compatible devices."
LICENSE = "GPL-2.0-only"
LIC_FILES_CHKSUM = "file://LICENSE.md;md5=25cdec9afe3f1f26212ead6bd2f7fac8"
SRC_URI = "git://github.com/gerbera/gerbera.git;protocol=https;branch=master"
SRCREV = "2f26e656b16fb86132f27d1f8d47c6055041430d"
S = "${WORKDIR}/git"
DEPENDS = "pugixml sqlite3 zlib fmt spdlog util-linux-libuuid libupnp libnsl2"
SYSTEMD_SERVICE:${PN} = "gerbera.service"
inherit cmake pkgconfig systemd
PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)} curl taglib inotify exif matroska magic js"
PACKAGECONFIG[systemd] = "-DWITH_SYSTEMD=TRUE,-DWITH_SYSTEMD=FALSE,systemd"
PACKAGECONFIG[taglib] = "-DWITH_TAGLIB=TRUE,-DWITH_TAGLIB=FALSE,taglib"
PACKAGECONFIG[curl] = "-DWITH_CURL=TRUE,-DWITH_CURL=FALSE,curl"
PACKAGECONFIG[inotify] = "-DWITH_INOTIFY=TRUE,-DWITH_INOTIFY=FALSE,inotify-tools"
PACKAGECONFIG[avcodec] = "-DWITH_AVCODEC=TRUE,-DWITH_AVCODEC=FALSE,ffmpeg"
PACKAGECONFIG[wavpack] = "-DWITH_WAVPACK=TRUE,-DWITH_WAVPACK=FALSE,wavpack"
PACKAGECONFIG[exif] = "-DWITH_EXIF=TRUE,-DWITH_EXIF=FALSE,libexif"
PACKAGECONFIG[exiv2] = "-DWITH_EXIV2=TRUE,-DWITH_EXIV2=FALSE,exiv2"
PACKAGECONFIG[matroska] = "-DWITH_MATROSKA=TRUE,-DWITH_MATROSKA=FALSE,libebml libmatroska"
PACKAGECONFIG[magic] = "-DWITH_MAGIC=TRUE,-DWITH_MAGIC=FALSE,file"
PACKAGECONFIG[js] = "-DWITH_JS=TRUE,-DWITH_JS=FALSE,duktape"
SECURITY_CFLAGS:riscv64 = "${SECURITY_NOPIE_CFLAGS}"