diff --git a/net/gerbera/Makefile b/net/gerbera/Makefile index 6d8ba99f9859..f3c03b54fc28 100644 --- a/net/gerbera/Makefile +++ b/net/gerbera/Makefile @@ -1,98 +1,91 @@ PORTNAME= gerbera DISTVERSIONPREFIX= v -DISTVERSION= 1.12.1 -PORTREVISION= 4 +DISTVERSION= 2.0.0 CATEGORIES= net multimedia -PATCH_SITES= https://github.com/${PORTNAME}/${PORTNAME}/commit/ -PATCHFILES= 37957aac0aea776e6f843af2358916f81056a405.patch:-p1 - MAINTAINER= diizzy@FreeBSD.org COMMENT= Media server compatible with DLNA and UPnP WWW= https://gerbera.io/ LICENSE= GPLv2 LICENSE_FILE= ${WRKSRC}/LICENSE.md LIB_DEPENDS= libfmt.so:devel/libfmt \ libspdlog.so:devel/spdlog \ libpugixml.so:textproc/pugixml \ libinotify.so:devel/libinotify USES= cmake compiler:c++17-lang iconv localbase:ldflags \ pkgconfig sqlite USE_GITHUB= yes USE_RC_SUBR= gerbera +CMAKE_ON= WITH_MAGIC CMAKE_OFF= WITH_EXIF WITH_LASTFM WITH_MYSQL WITH_SYSTEMD SUB_FILES= pkg-message SUB_LIST= USER=${USERS} GROUP=${GROUPS} USERS= gerbera GROUPS= gerbera PLIST_SUB= USER=${USERS} GROUP=${GROUPS} OPTIONS_DEFINE= CURL DEBUG DUKTAPE EXIV2 FFMPEG FFMPEGTHUMBNAILER \ - LIBMAGIC MATROSKA TAGLIB TEST -OPTIONS_DEFAULT= CURL DUKTAPE EXIV2 FFMPEG LIBMAGIC TAGLIB LIBNPUPNP + MATROSKA TAGLIB TEST +OPTIONS_DEFAULT= CURL DUKTAPE EXIV2 FFMPEG TAGLIB LIBNPUPNP OPTIONS_SINGLE= UPNPLIB OPTIONS_SINGLE_UPNPLIB= LIBNPUPNP LIBUPNP CURL_DESC= Support for online services via cURL DUKTAPE_DESC= Javascript support for custom import scripts FFMPEGTHUMBNAILER_DESC= Support for thumbnail generation -LIBMAGIC_DESC= Identify file mime types via libmagic LIBNPUPNP_DESC= Use high performance libnpupnp library LIBUPNP_DESC= Use libupnp library MATROSKA_DESC= Extract video/mkv metadata via libmatroska TAGLIB_DESC= Extract audio file metadata via taglib CURL_LIB_DEPENDS= libcurl.so:ftp/curl CURL_CMAKE_BOOL= WITH_CURL DEBUG_CMAKE_BOOL= WITH_DEBUG DUKTAPE_LIB_DEPENDS= libduktape.so:lang/duktape-lib DUKTAPE_CMAKE_BOOL= WITH_JS EXIV2_LIB_DEPENDS= libexiv2.so:graphics/exiv2 EXIV2_CMAKE_BOOL= WITH_EXIV2 FFMPEGTHUMBNAILER_IMPLIES= FFMPEG FFMPEGTHUMBNAILER_LIB_DEPENDS= libffmpegthumbnailer.so:multimedia/ffmpegthumbnailer FFMPEGTHUMBNAILER_CMAKE_BOOL= WITH_FFMPEGTHUMBNAILER FFMPEG_LIB_DEPENDS= libavformat.so:multimedia/ffmpeg \ libavutil.so:multimedia/ffmpeg FFMPEG_CMAKE_BOOL= WITH_AVCODEC -LIBMAGIC_LIB_DEPENDS= libmagic.so:sysutils/file -LIBMAGIC_CMAKE_BOOL= WITH_MAGIC - LIBNPUPNP_LIB_DEPENDS= libnpupnp.so:net/libnpupnp LIBNPUPNP_CMAKE_BOOL= WITH_NPUPNP LIBUPNP_LIB_DEPENDS= libupnp.so:devel/upnp MATROSKA_LIB_DEPENDS= libmatroska.so:multimedia/libmatroska MATROSKA_CMAKE_BOOL= WITH_MATROSKA TAGLIB_LIB_DEPENDS= libtag.so:audio/taglib TAGLIB_CMAKE_BOOL= WITH_TAGLIB TEST_IMPLIES= CURL DUKTAPE TEST_BUILD_DEPENDS= googletest>=0:devel/googletest TEST_CMAKE_BOOL= WITH_TESTS TEST_TEST_TARGET= test post-install: ${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/gerbera @${MKDIR} ${STAGEDIR}/var/db/gerbera @${MKDIR} ${STAGEDIR}/var/log/gerbera @${STAGEDIR}${PREFIX}/bin/gerbera -f /var/db/gerbera --create-config > ${STAGEDIR}${PREFIX}/etc/gerbera-config.xml.sample .include diff --git a/net/gerbera/distinfo b/net/gerbera/distinfo index 441acebcd5c3..8796b34c9af5 100644 --- a/net/gerbera/distinfo +++ b/net/gerbera/distinfo @@ -1,5 +1,3 @@ -TIMESTAMP = 1694942560 -SHA256 (gerbera-gerbera-v1.12.1_GH0.tar.gz) = 2144a7c4a13e8b43aa0c911fbeae65f05e2c42254ddd03be5c41f5fcf103a93c -SIZE (gerbera-gerbera-v1.12.1_GH0.tar.gz) = 4368573 -SHA256 (37957aac0aea776e6f843af2358916f81056a405.patch) = ffa2fedae292fd02c30149af2c6ecd715f2e29ad1b53766958aaec1274b2b623 -SIZE (37957aac0aea776e6f843af2358916f81056a405.patch) = 8400 +TIMESTAMP = 1705147817 +SHA256 (gerbera-gerbera-v2.0.0_GH0.tar.gz) = db2015a9e67ce896600221d912b402cbdeee9d1898761f6c6425c7182fffac2e +SIZE (gerbera-gerbera-v2.0.0_GH0.tar.gz) = 4219702 diff --git a/net/gerbera/files/patch-CMakeLists.txt b/net/gerbera/files/patch-CMakeLists.txt deleted file mode 100644 index ef7d23dd3515..000000000000 --- a/net/gerbera/files/patch-CMakeLists.txt +++ /dev/null @@ -1,10 +0,0 @@ ---- CMakeLists.txt.orig 2021-05-31 22:55:03 UTC -+++ CMakeLists.txt -@@ -592,6 +592,6 @@ INSTALL(FILES - src/database/mysql/mysql.sql - src/database/sqlite3/sqlite3.sql - DESTINATION share/gerbera) --INSTALL(FILES ${PROJECT_SOURCE_DIR}/doc/gerbera.1 DESTINATION share/man/man1) -+INSTALL(FILES ${PROJECT_SOURCE_DIR}/doc/gerbera.1 DESTINATION man/man1) - - include(packaging) diff --git a/net/gerbera/files/patch-git-01-3e2f026f2281aa511f1a9106cf48a1f5344ae06b b/net/gerbera/files/patch-git-01-3e2f026f2281aa511f1a9106cf48a1f5344ae06b new file mode 100644 index 000000000000..8f3c4e84831f --- /dev/null +++ b/net/gerbera/files/patch-git-01-3e2f026f2281aa511f1a9106cf48a1f5344ae06b @@ -0,0 +1,225 @@ +From 3e2f026f2281aa511f1a9106cf48a1f5344ae06b Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Karl=20Strau=C3=9Fberger?= +Date: Tue, 9 Jan 2024 13:12:10 +0100 +Subject: [PATCH] Build Support for NPUPNP + +--- + .github/workflows/ci.yml | 23 ++++++++ + CMakeLists.txt | 43 ++++++++++++--- + ChangeLog.md | 5 ++ + README.md | 2 +- + cmake/FindNPUPNP.cmake | 54 +++++++++++++++++++ + cmake/FindUPNP.cmake | 6 +-- + scripts/debian/build-deb.sh | 33 ++++++++++-- + scripts/install-googletest.sh | 4 +- + scripts/install-npupnp.sh | 83 +++++++++++++++++++++++++++++ + scripts/versions.sh | 4 +- + src/iohandler/process_io_handler.cc | 1 + + src/server.cc | 2 + + src/server.h | 2 + + 13 files changed, 244 insertions(+), 18 deletions(-) + create mode 100644 cmake/FindNPUPNP.cmake + create mode 100755 scripts/install-npupnp.sh + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 1c301ecd9..5299b7bee 100644 +--- CMakeLists.txt ++++ CMakeLists.txt +@@ -385,14 +385,45 @@ target_compile_options(libgerbera PUBLIC ${LFS_COMPILE_OPTIONS}) + target_link_libraries(libgerbera PUBLIC ${LFS_LIBRARIES}) + + if (WITH_NPUPNP) +- find_package(PkgConfig QUIET) +- pkg_check_modules(NPUPNP QUIET libnpupnp>=4.2.1) +- if (NOT NPUPNP_FOUND) +- find_package(NPUPNP REQUIRED) ++ set(REQ_NPUPNP_VERSION 4.2.1) ++ ++ find_package(NPUPNP ${REQ_NPUPNP_VERSION} QUIET) ++ ++ if (NOT TARGET NPUPNP::NPUPNP) ++ find_package(npupnp ${REQ_NPUPNP_VERSION} QUIET) ++ if(TARGET npupnp::npupnp) ++ add_library(NPUPNP::NPUPNP ALIAS npupnp::npupnp) ++ endif() + endif() +- target_include_directories(libgerbera PUBLIC ${NPUPNP_INCLUDE_DIRS}) ++ if(NOT TARGET NPUPNP::NPUPNP) ++ message(FATAL_ERROR "Gerbera failed to find libnpupnp! at least version ${REQ_UPNP_VERSION} is needed.") ++ endif() ++ # Conan autogenerated targets dont set a version, but to set name_VERSION var ++ get_target_property(_UPNP_VERSION NPUPNP::NPUPNP VERSION) ++ if (NOT _UPNP_VERSION) ++ set(_UPNP_VERSION ${npupnp_VERSION}) ++ endif() ++ get_target_property(_UPNP_LIB NPUPNP::NPUPNP LOCATION) ++ ++ # Check and warn for libnpupnp features ++ include(CheckCXXSymbolExists) ++ get_target_property(UPNP_INCLUDE_DIR NPUPNP::NPUPNP INTERFACE_INCLUDE_DIRECTORIES) ++ check_cxx_symbol_exists(UPNP_ENABLE_IPV6 "${UPNP_INCLUDE_DIR}/upnpconfig.h" UPNP_HAS_IPV6) ++ if (NOT UPNP_HAS_IPV6) ++ message(FATAL_ERROR "Gerbera requires libnpupnp with IPv6 support.") ++ endif() ++ ++ check_cxx_symbol_exists(UPNP_HAVE_TOOLS "${UPNP_INCLUDE_DIR}/upnpconfig.h" UPNP_HAS_TOOLS) ++ if (NOT UPNP_HAS_TOOLS) ++ message(WARNING [=[ ++ !! It is strongly recommended to build libupnp with --enable-tools !! ++ ]=]) ++ endif() ++ ++ message(STATUS "Found libnpupnp: ${_UPNP_LIB} (found version ${_UPNP_VERSION})") ++ + target_compile_definitions(libgerbera PUBLIC USING_NPUPNP) +- target_link_libraries(libgerbera PUBLIC ${NPUPNP_LIBRARIES}) ++ target_link_libraries(libgerbera PUBLIC NPUPNP::NPUPNP) + else() + set(REQ_UPNP_VERSION 1.14.6) + # LibUPnP official target since 1.16 (Lib version 18) +new file mode 100644 +index 000000000..b83168295 +--- /dev/null ++++ cmake/FindNPUPNP.cmake +@@ -0,0 +1,54 @@ ++# - Try to find LibNPUPnP (npupnp) 4.1.2 ++# Once done this will define ++# NPUPNP_FOUND - System has LibNPUPnP ++# UPNP_INCLUDE_DIRS - The LibNPUPnP include directories ++# NPUPNP_LIBRARIES - The libraries needed to use LibNPUPnP ++# NPUPNP_VERSION_STRING - The version of LibNPUPnP found ++# NPUPNP_HAS_IPV6 - If LibNPUPnP was built with IPv6 support ++# NPUPNP_HAS_REUSEADDR - If LibNPUPnP was built with SO_REUSEADDR support ++find_package(PkgConfig QUIET) ++pkg_search_module (PC_NPUPNP libnpupnp QUIET) ++ ++find_path(UPNP_INCLUDE_DIR upnp.h ++ HINTS ${PC_NPUPNP_INCLUDEDIR} ${PC_UPNP_INCLUDE_DIRS} ++ PATH_SUFFIXES npupnp) ++ ++#if (STATIC_LIBUPNP) ++# set(OLD_SUFFIX ${CMAKE_FIND_LIBRARY_SUFFIXES}) ++# set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_STATIC_LIBRARY_SUFFIX}) ++#endif() ++ ++find_library(NPUPNP_LIBRARY ++ NAMES libnpupnp npupnp ++ HINTS ${PC_NPUPNP_LIBDIR} ${PC_NPUPNP_LIBRARY_DIRS}) ++ ++# Restore ++#if (STATIC_LIBUPNP) ++# set(CMAKE_FIND_LIBRARY_SUFFIXES ${OLD_SUFFIX}) ++#endif() ++ ++if(EXISTS ${UPNP_INCLUDE_DIR}/upnpconfig.h) ++ file (STRINGS ${UPNP_INCLUDE_DIR}/upnpconfig.h upnp_ver_str REGEX "^#define[ \t]+NPUPNP_VERSION_STRING[ \t]+\".+\"") ++ string(REGEX REPLACE "^#define[ \t]+NPUPNP_VERSION_STRING[ \t]+\"([^\"]+)\".*" "\\1" NPUPNP_VERSION "${upnp_ver_str}") ++endif() ++ ++include(FindPackageHandleStandardArgs) ++FIND_PACKAGE_HANDLE_STANDARD_ARGS(NPUPNP ++ REQUIRED_VARS NPUPNP_LIBRARY UPNP_INCLUDE_DIR ++ VERSION_VAR NPUPNP_VERSION) ++ ++if (NPUPNP_FOUND) ++ if(NOT TARGET NPUPNP::NPUPNP) ++ add_library(NPUPNP::NPUPNP SHARED IMPORTED) ++ set_target_properties(NPUPNP::NPUPNP PROPERTIES ++ IMPORTED_LOCATION ${NPUPNP_LIBRARY} ++ INTERFACE_INCLUDE_DIRECTORIES ${UPNP_INCLUDE_DIR} ++ VERSION ${NPUPNP_VERSION} ++ ) ++ endif() ++endif () ++ ++MARK_AS_ADVANCED( ++ UPNP_INCLUDE_DIR ++ NPUPNP_LIBRARY ++) +diff --git a/cmake/FindUPNP.cmake b/cmake/FindUPNP.cmake +index 587e1c5ef..246328806 100644 +--- cmake/FindUPNP.cmake ++++ cmake/FindUPNP.cmake +@@ -3,9 +3,9 @@ + # UPNP_FOUND - System has LibUPnP + # UPNP_INCLUDE_DIRS - The LibUPnP include directories + # UPNP_LIBRARIES - The libraries needed to use LibUPnP +-# UPNP_VERSION_STRING - The version of LinUPnP found +-# UPNP_HAS_IPV6 - If LinUPnP was built with IPv6 support +-# UPNP_HAS_REUSEADDR - If LinUPnP was built with SO_REUSEADDR support ++# UPNP_VERSION_STRING - The version of LibUPnP found ++# UPNP_HAS_IPV6 - If LibUPnP was built with IPv6 support ++# UPNP_HAS_REUSEADDR - If LibUPnP was built with SO_REUSEADDR support + find_package(PkgConfig QUIET) + pkg_search_module (PC_UPNP QUIET libupnp) + +diff --git a/scripts/versions.sh b/scripts/versions.sh +index c859e701b..86612f3e3 100755 +--- scripts/versions.sh ++++ scripts/versions.sh +@@ -30,6 +30,7 @@ if [[ "${GERBERA_ENV-head}" == "minimum" ]]; then + MATROSKA="1.5.2" + PUGIXML="1.10" + PUPNP="1.14.6" ++ NPUPNP="4.2.1" + SPDLOG="1.8.1" + WAVPACK="5.1.0" + TAGLIB="1.12" +@@ -46,6 +47,7 @@ elif [[ "${GERBERA_ENV-head}" == "default" ]]; then + MATROSKA="1.5.2" + PUGIXML="1.10" + PUPNP="1.14.17" ++ NPUPNP="5.1.2" + SPDLOG="1.11.0" + WAVPACK="5.4.0" + TAGLIB="1.12" +@@ -63,8 +65,8 @@ else + PUGIXML="1.14" + PUPNP="1.14.18" + SPDLOG="1.12.0" ++ NPUPNP="6.1.0" + WAVPACK="5.6.0" + TAGLIB="1.13.1" + + fi +- +diff --git a/src/iohandler/process_io_handler.cc b/src/iohandler/process_io_handler.cc +index de174eab2..3ff9e8099 100644 +--- src/iohandler/process_io_handler.cc ++++ src/iohandler/process_io_handler.cc +@@ -39,6 +39,7 @@ + + #include + #include ++#include + + #include "content/content_manager.h" + +diff --git a/src/server.cc b/src/server.cc +index c8a0c2c75..bfd5d6477 100644 +--- src/server.cc ++++ src/server.cc +@@ -231,8 +231,10 @@ void Server::run() + throw UpnpException(ret, fmt::format("run: UpnpSendAdvertisement {} failed", aliveAdvertisementInterval)); + } + ++#if !defined(USING_NPUPNP) + if (config->getBoolOption(CFG_UPNP_LITERAL_HOST_REDIRECTION)) + UpnpSetAllowLiteralHostRedirection(1); ++#endif + + UpnpSetHostValidateCallback( + [](auto host, auto cookie) -> int { +diff --git a/src/server.h b/src/server.h +index a91466b65..5826a1a77 100644 +--- src/server.h ++++ src/server.h +@@ -34,6 +34,8 @@ + #ifndef __SERVER_H__ + #define __SERVER_H__ + ++#include ++ + #include "request_handler.h" + + // forward declaration diff --git a/net/gerbera/pkg-plist b/net/gerbera/pkg-plist index 032814342ae3..35064fd6a272 100644 --- a/net/gerbera/pkg-plist +++ b/net/gerbera/pkg-plist @@ -1,83 +1,86 @@ bin/gerbera +%%DATADIR%%/js/audio.js %%DATADIR%%/js/common.js %%DATADIR%%/js/import.js %%DATADIR%%/js/metadata.js %%DATADIR%%/js/playlists.js %%DATADIR%%/mysql-upgrade.xml %%DATADIR%%/mysql.sql %%DATADIR%%/sqlite3-upgrade.xml %%DATADIR%%/sqlite3.sql %%DATADIR%%/web/README.md %%DATADIR%%/web/assets/theme/colors.css %%DATADIR%%/web/assets/theme/gerbera-logo-white.png %%DATADIR%%/web/assets/theme/gerbera.css %%DATADIR%%/web/cds.xml %%DATADIR%%/web/cm.xml %%DATADIR%%/web/disabled.html %%DATADIR%%/web/favicon.ico %%DATADIR%%/web/gerbera-config-expert.json %%DATADIR%%/web/gerbera-config-minimal.json %%DATADIR%%/web/gerbera-config-standard.json %%DATADIR%%/web/icons/mt-icon120.bmp %%DATADIR%%/web/icons/mt-icon120.jpg %%DATADIR%%/web/icons/mt-icon120.png %%DATADIR%%/web/icons/mt-icon32.bmp %%DATADIR%%/web/icons/mt-icon32.jpg %%DATADIR%%/web/icons/mt-icon32.png %%DATADIR%%/web/icons/mt-icon48.bmp %%DATADIR%%/web/icons/mt-icon48.jpg %%DATADIR%%/web/icons/mt-icon48.png %%DATADIR%%/web/index.html %%DATADIR%%/web/js/gerbera-app.module.js %%DATADIR%%/web/js/gerbera-auth.module.js %%DATADIR%%/web/js/gerbera-autoscan.module.js %%DATADIR%%/web/js/gerbera-clients.module.js %%DATADIR%%/web/js/gerbera-config.module.js %%DATADIR%%/web/js/gerbera-items.module.js %%DATADIR%%/web/js/gerbera-menu.module.js %%DATADIR%%/web/js/gerbera-trail.module.js %%DATADIR%%/web/js/gerbera-tree.module.js %%DATADIR%%/web/js/gerbera-tweak.module.js %%DATADIR%%/web/js/gerbera-updates.module.js %%DATADIR%%/web/js/jquery.gerbera.autoscan.js %%DATADIR%%/web/js/jquery.gerbera.clients.js %%DATADIR%%/web/js/jquery.gerbera.config.js %%DATADIR%%/web/js/jquery.gerbera.editor.js %%DATADIR%%/web/js/jquery.gerbera.items.js %%DATADIR%%/web/js/jquery.gerbera.toast.js %%DATADIR%%/web/js/jquery.gerbera.trail.js %%DATADIR%%/web/js/jquery.gerbera.tree.js %%DATADIR%%/web/js/jquery.gerbera.tweak.js -%%DATADIR%%/web/js/md5.js %%DATADIR%%/web/mr_reg.xml %%DATADIR%%/web/vendor/bootstrap/css/bootstrap-grid.min.css %%DATADIR%%/web/vendor/bootstrap/css/bootstrap-grid.min.css.map %%DATADIR%%/web/vendor/bootstrap/css/bootstrap-reboot.min.css %%DATADIR%%/web/vendor/bootstrap/css/bootstrap-reboot.min.css.map %%DATADIR%%/web/vendor/bootstrap/css/bootstrap.min.css %%DATADIR%%/web/vendor/bootstrap/css/bootstrap.min.css.map %%DATADIR%%/web/vendor/bootstrap/js/bootstrap.min.js %%DATADIR%%/web/vendor/bootstrap/js/bootstrap.min.js.map %%DATADIR%%/web/vendor/font-awesome/css/font-awesome.css %%DATADIR%%/web/vendor/font-awesome/css/font-awesome.min.css %%DATADIR%%/web/vendor/font-awesome/fonts/FontAwesome.otf %%DATADIR%%/web/vendor/font-awesome/fonts/fontawesome-webfont.eot %%DATADIR%%/web/vendor/font-awesome/fonts/fontawesome-webfont.svg %%DATADIR%%/web/vendor/font-awesome/fonts/fontawesome-webfont.ttf %%DATADIR%%/web/vendor/font-awesome/fonts/fontawesome-webfont.woff %%DATADIR%%/web/vendor/font-awesome/fonts/fontawesome-webfont.woff2 -%%DATADIR%%/web/vendor/jquery/jquery-3.6.0.min.js -%%DATADIR%%/web/vendor/jquery/jquery-3.6.0.min.map +%%DATADIR%%/web/vendor/jquery/jquery.min.js +%%DATADIR%%/web/vendor/jquery/jquery.min.map %%DATADIR%%/web/vendor/jquery/jquery-ui.min.js %%DATADIR%%/web/vendor/js-cookie.min.js %%DATADIR%%/web/vendor/lato/LICENCE.md %%DATADIR%%/web/vendor/lato/lato-v14-latin-ext_latin-regular.woff %%DATADIR%%/web/vendor/lato/lato-v14-latin-ext_latin-regular.woff2 -%%DATADIR%%/web/vendor/popper/popper.js +%%DATADIR%%/web/vendor/md5.min.js +%%DATADIR%%/web/vendor/md5.min.js.map +%%DATADIR%%/web/vendor/popper/popper.min.js +%%DATADIR%%/web/vendor/popper/popper.min.js.map %%DATADIR%%/web/vendor/tether/tether.min.js -man/man1/gerbera.1.gz +share/man/man1/gerbera.1.gz @owner %%USER%% @group %%GROUP%% @dir /var/db/gerbera @dir /var/log/gerbera @sample(gerbera,gerbera,0640) /usr/local/etc/gerbera-config.xml.sample