pkgsrc-Changes archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

CVS commit: pkgsrc/audio



Module Name:    pkgsrc
Committed By:   nia
Date:           Sun Jul  3 16:09:15 UTC 2022

Modified Files:
        pkgsrc/audio: Makefile
Added Files:
        pkgsrc/audio/snapcast: DESCR Makefile PLIST distinfo options.mk
        pkgsrc/audio/snapcast/files: snapclient.sh snapserver.sh
        pkgsrc/audio/snapcast/patches: patch-CMakeLists.txt
            patch-client_CMakeLists.txt patch-client_controller.cpp
            patch-client_player_sun__player.cpp
            patch-client_player_sun__player.hpp patch-client_snapclient.cpp
            patch-common_utils.hpp patch-server_CMakeLists.txt
            patch-server_etc_snapserver.conf patch-server_server__settings.hpp
            patch-server_snapserver.1 patch-server_snapserver.cpp
            patch-server_streamreader_pipe__stream.cpp

Log Message:
add audio/snapcast

Snapcast is a multiroom client-server audio player, where all clients are
time synchronized with the server to play perfectly synced audio. It's not
a standalone player, but an extension that turns your existing audio player
into a Sonos-like multiroom solution.


To generate a diff of this commit:
cvs rdiff -u -r1.655 -r1.656 pkgsrc/audio/Makefile
cvs rdiff -u -r0 -r1.1 pkgsrc/audio/snapcast/DESCR \
    pkgsrc/audio/snapcast/Makefile pkgsrc/audio/snapcast/PLIST \
    pkgsrc/audio/snapcast/distinfo pkgsrc/audio/snapcast/options.mk
cvs rdiff -u -r0 -r1.1 pkgsrc/audio/snapcast/files/snapclient.sh \
    pkgsrc/audio/snapcast/files/snapserver.sh
cvs rdiff -u -r0 -r1.1 pkgsrc/audio/snapcast/patches/patch-CMakeLists.txt \
    pkgsrc/audio/snapcast/patches/patch-client_CMakeLists.txt \
    pkgsrc/audio/snapcast/patches/patch-client_controller.cpp \
    pkgsrc/audio/snapcast/patches/patch-client_player_sun__player.cpp \
    pkgsrc/audio/snapcast/patches/patch-client_player_sun__player.hpp \
    pkgsrc/audio/snapcast/patches/patch-client_snapclient.cpp \
    pkgsrc/audio/snapcast/patches/patch-common_utils.hpp \
    pkgsrc/audio/snapcast/patches/patch-server_CMakeLists.txt \
    pkgsrc/audio/snapcast/patches/patch-server_etc_snapserver.conf \
    pkgsrc/audio/snapcast/patches/patch-server_server__settings.hpp \
    pkgsrc/audio/snapcast/patches/patch-server_snapserver.1 \
    pkgsrc/audio/snapcast/patches/patch-server_snapserver.cpp \
    pkgsrc/audio/snapcast/patches/patch-server_streamreader_pipe__stream.cpp

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: pkgsrc/audio/Makefile
diff -u pkgsrc/audio/Makefile:1.655 pkgsrc/audio/Makefile:1.656
--- pkgsrc/audio/Makefile:1.655 Fri Jul  1 18:36:27 2022
+++ pkgsrc/audio/Makefile       Sun Jul  3 16:09:15 2022
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.655 2022/07/01 18:36:27 nia Exp $
+# $NetBSD: Makefile,v 1.656 2022/07/03 16:09:15 nia Exp $
 #
 
 COMMENT=       Audio tools, players, and libraries
@@ -442,6 +442,7 @@ SUBDIR+=    shntool
 SUBDIR+=       shorten
 SUBDIR+=       sidplay
 SUBDIR+=       sidplay2
+SUBDIR+=       snapcast
 SUBDIR+=       snd
 SUBDIR+=       sndfile-tools
 SUBDIR+=       solfege

Added files:

Index: pkgsrc/audio/snapcast/DESCR
diff -u /dev/null pkgsrc/audio/snapcast/DESCR:1.1
--- /dev/null   Sun Jul  3 16:09:15 2022
+++ pkgsrc/audio/snapcast/DESCR Sun Jul  3 16:09:15 2022
@@ -0,0 +1,4 @@
+Snapcast is a multiroom client-server audio player, where all clients are
+time synchronized with the server to play perfectly synced audio. It's not
+a standalone player, but an extension that turns your existing audio player
+into a Sonos-like multiroom solution.
Index: pkgsrc/audio/snapcast/Makefile
diff -u /dev/null pkgsrc/audio/snapcast/Makefile:1.1
--- /dev/null   Sun Jul  3 16:09:15 2022
+++ pkgsrc/audio/snapcast/Makefile      Sun Jul  3 16:09:15 2022
@@ -0,0 +1,79 @@
+# $NetBSD: Makefile,v 1.1 2022/07/03 16:09:15 nia Exp $
+
+DISTNAME=      snapcast-0.26.0
+CATEGORIES=    audio
+MASTER_SITES=  ${MASTER_SITE_GITHUB:=badaix/}
+GITHUB_TAG=    v${PKGVERSION_NOREV}
+
+MAINTAINER=    nia%NetBSD.org@localhost
+HOMEPAGE=      https://github.com/badaix/snapcast
+COMMENT=       Multiroom client-server audio player,
+LICENSE=       gnu-gpl-v3
+
+USE_CMAKE=     yes
+USE_TOOLS+=    pkg-config
+USE_LANGUAGES= c c++
+
+REPLACE_PYTHON+=       server/etc/plug-ins/meta_mpd.py
+
+PYTHON_VERSIONS_INCOMPATIBLE=  27
+
+CONF_FILES+=   ${PREFIX}/share/examples/snapcast/snapserver.conf \
+               ${PKG_SYSCONFDIR}/snapserver.conf
+
+SUBST_CLASSES+=                etc
+SUBST_STAGE.etc=       pre-configure
+SUBST_FILES.etc+=      server/etc/snapserver.conf
+SUBST_FILES.etc+=      server/server_settings.hpp
+SUBST_FILES.etc+=      server/snapserver.cpp
+SUBST_FILES.etc+=      server/snapserver.1
+SUBST_VARS.etc+=       PKG_SYSCONFDIR
+SUBST_VARS.etc+=       VARBASE
+
+RCD_SCRIPTS+=          snapclient
+RCD_SCRIPTS+=          snapserver
+
+SNAPCLIENT_USER?=      snapclient
+SNAPCLIENT_GROUP?=     snapclient
+
+SNAPSERVER_USER?=      snapserver
+SNAPSERVER_GROUP?=     snapserver
+
+BUILD_DEFS+=           VARBASE
+
+.include "../../mk/bsd.prefs.mk"
+
+FILES_SUBST+=          SNAPCLIENT_USER=${SNAPCLIENT_USER}
+FILES_SUBST+=          SNAPCLIENT_GROUP=${SNAPCLIENT_GROUP}
+FILES_SUBST+=          VARBASE=${VARBASE}
+
+PKG_GROUPS+=           ${SNAPCLIENT_GROUP}
+PKG_GROUPS+=           ${SNAPSERVER_GROUP}
+
+PKG_USERS+=            ${SNAPCLIENT_USER}:${SNAPCLIENT_GROUP}
+PKG_USERS+=            ${SNAPSERVER_USER}:${SNAPSERVER_GROUP}
+
+OWN_DIRS_PERMS+=       ${VARBASE}/run/snapclient \
+                       ${SNAPCLIENT_USER} ${SNAPCLIENT_GROUP} 0755
+
+OWN_DIRS_PERMS+=       ${VARBASE}/run/snapserver \
+                       ${SNAPCLIENT_USER} ${SNAPCLIENT_GROUP} 0755
+
+OWN_DIRS_PERMS+=       ${VARBASE}/lib/snapclient \
+                       ${SNAPSERVER_USER} ${SNAPSERVER_GROUP} 0755
+
+OWN_DIRS_PERMS+=       ${VARBASE}/lib/snapserver \
+                       ${SNAPSERVER_USER} ${SNAPSERVER_GROUP} 0755
+
+post-install:
+       cd ${WRKSRC} && ${CHMOD} +r ${DESTDIR}${PREFIX}/share/snapserver/plug-ins/meta_mpd.py
+
+.include "options.mk"
+.include "../../audio/flac/buildlink3.mk"
+.include "../../audio/libopus/buildlink3.mk"
+.include "../../audio/libsoxr/buildlink3.mk"
+.include "../../audio/libvorbis/buildlink3.mk"
+.include "../../devel/boost-headers/buildlink3.mk"
+.include "../../lang/python/application.mk"
+.include "../../textproc/expat/buildlink3.mk"
+.include "../../mk/bsd.pkg.mk"
Index: pkgsrc/audio/snapcast/PLIST
diff -u /dev/null pkgsrc/audio/snapcast/PLIST:1.1
--- /dev/null   Sun Jul  3 16:09:15 2022
+++ pkgsrc/audio/snapcast/PLIST Sun Jul  3 16:09:15 2022
@@ -0,0 +1,24 @@
+@comment $NetBSD: PLIST,v 1.1 2022/07/03 16:09:15 nia Exp $
+bin/snapclient
+bin/snapserver
+man/man1/snapclient.1
+man/man1/snapserver.1
+share/examples/snapcast/snapserver.conf
+share/pixmaps/snapcast.svg
+share/snapserver/index.html
+share/snapserver/plug-ins/meta_mpd.py
+share/snapserver/snapweb/10-seconds-of-silence.mp3
+share/snapserver/snapweb/3rd-party/libflac.js
+share/snapserver/snapweb/config.js
+share/snapserver/snapweb/favicon.ico
+share/snapserver/snapweb/index.html
+share/snapserver/snapweb/launcher-icon.png
+share/snapserver/snapweb/manifest.json
+share/snapserver/snapweb/mute_icon.png
+share/snapserver/snapweb/play.png
+share/snapserver/snapweb/snapcast-512.png
+share/snapserver/snapweb/snapcontrol.js
+share/snapserver/snapweb/snapstream.js
+share/snapserver/snapweb/speaker_icon.png
+share/snapserver/snapweb/stop.png
+share/snapserver/snapweb/styles.css
Index: pkgsrc/audio/snapcast/distinfo
diff -u /dev/null pkgsrc/audio/snapcast/distinfo:1.1
--- /dev/null   Sun Jul  3 16:09:15 2022
+++ pkgsrc/audio/snapcast/distinfo      Sun Jul  3 16:09:15 2022
@@ -0,0 +1,18 @@
+$NetBSD: distinfo,v 1.1 2022/07/03 16:09:15 nia Exp $
+
+BLAKE2s (snapcast-0.26.0.tar.gz) = e0ef56ee25d30c8536158949c5e5f85b32a8c410303da939ef844bb3dc300012
+SHA512 (snapcast-0.26.0.tar.gz) = fc7885e42a11794e33314544083251ffbb91a0cf160c6d4b854c56f57ffe9f38f75c7594478c9edabfe9076959938cd8de891dd456e66202692de664a75cde71
+Size (snapcast-0.26.0.tar.gz) = 1537036 bytes
+SHA1 (patch-CMakeLists.txt) = c3f02503c918e6843ab18d987b3e886e22e13865
+SHA1 (patch-client_CMakeLists.txt) = 48559046bd578e2d75f97b4ec422d4a56b567733
+SHA1 (patch-client_controller.cpp) = a87b5515a519ab579c36786b9727b58934128148
+SHA1 (patch-client_player_sun__player.cpp) = 6e98d22c9deaccc3bf2ac14b7e275dc1c8bc771a
+SHA1 (patch-client_player_sun__player.hpp) = d8eeba9f4c16e85833baba95c07f9a0600763752
+SHA1 (patch-client_snapclient.cpp) = d682d4c1de438251d1510d40387e9a0b2bcf926f
+SHA1 (patch-common_utils.hpp) = 8184a65459accd76b55e8e9e95d1911439fb4d8a
+SHA1 (patch-server_CMakeLists.txt) = 49144e902844bd3308871a625f5da56575904855
+SHA1 (patch-server_etc_snapserver.conf) = a740795aa764ffb5870a4d798518a0464ca3517b
+SHA1 (patch-server_server__settings.hpp) = 50950a4855ecc336dbec146b86935fa18942dc1d
+SHA1 (patch-server_snapserver.1) = 3459c6109635d1ad72c1aee92e302088a2317007
+SHA1 (patch-server_snapserver.cpp) = 62d5dcbfe369f9095e9b6c695680650f7eb458b6
+SHA1 (patch-server_streamreader_pipe__stream.cpp) = aec6fd900e0aca776510c3b413e457b9082b01b5
Index: pkgsrc/audio/snapcast/options.mk
diff -u /dev/null pkgsrc/audio/snapcast/options.mk:1.1
--- /dev/null   Sun Jul  3 16:09:15 2022
+++ pkgsrc/audio/snapcast/options.mk    Sun Jul  3 16:09:15 2022
@@ -0,0 +1,28 @@
+# $NetBSD: options.mk,v 1.1 2022/07/03 16:09:15 nia Exp $
+
+PKG_OPTIONS_VAR=               PKG_OPTIONS.snapcast
+PKG_SUPPORTED_OPTIONS=         alsa avahi pulseaudio
+PKG_SUGGESTED_OPTIONS.Linux+=  alsa
+
+.include "../../mk/bsd.options.mk"
+
+.if !empty(PKG_OPTIONS:Malsa)
+CMAKE_ARGS+=           -DBUILD_WITH_ALSA=ON
+.  include "../../audio/alsa-lib/buildlink3.mk"
+.else
+CMAKE_ARGS+=           -DBUILD_WITH_ALSA=OFF
+.endif
+
+.if !empty(PKG_OPTIONS:Mavahi)
+CMAKE_ARGS+=           -DBUILD_WITH_AVAHI=ON
+.  include "../../net/avahi/buildlink3.mk"
+.else
+CMAKE_ARGS+=           -DBUILD_WITH_AVAHI=OFF
+.endif
+
+.if !empty(PKG_OPTIONS:Mpulseaudio)
+CMAKE_ARGS+=           -DBUILD_WITH_PULSE=ON
+.  include "../../audio/pulseaudio/buildlink3.mk"
+.else
+CMAKE_ARGS+=           -DBUILD_WITH_PULSE=OFF
+.endif

Index: pkgsrc/audio/snapcast/files/snapclient.sh
diff -u /dev/null pkgsrc/audio/snapcast/files/snapclient.sh:1.1
--- /dev/null   Sun Jul  3 16:09:15 2022
+++ pkgsrc/audio/snapcast/files/snapclient.sh   Sun Jul  3 16:09:15 2022
@@ -0,0 +1,23 @@
+#!@RCD_SCRIPTS_SHELL@
+#
+# $NetBSD: snapclient.sh,v 1.1 2022/07/03 16:09:15 nia Exp $
+#
+# PROVIDE: snapclient
+# KEYWORD: shutdown
+#
+
+if [ -f /etc/rc.subr ]
+then
+       . /etc/rc.subr
+fi
+
+name="snapclient"
+rcvar=${name}
+command="@PREFIX@/bin/snapclient"
+command_args="-d"
+pidfile="@VARBASE@/run/snapclient/pid"
+snapclient_user=@SNAPCLIENT_USER@
+snapclient_group=@SNAPCLIENT_GROUP@
+
+load_rc_config $name
+run_rc_command "$1"
Index: pkgsrc/audio/snapcast/files/snapserver.sh
diff -u /dev/null pkgsrc/audio/snapcast/files/snapserver.sh:1.1
--- /dev/null   Sun Jul  3 16:09:15 2022
+++ pkgsrc/audio/snapcast/files/snapserver.sh   Sun Jul  3 16:09:15 2022
@@ -0,0 +1,21 @@
+#!@RCD_SCRIPTS_SHELL@
+#
+# $NetBSD: snapserver.sh,v 1.1 2022/07/03 16:09:15 nia Exp $
+#
+# PROVIDE: snapserver
+# KEYWORD: shutdown
+#
+
+if [ -f /etc/rc.subr ]
+then
+       . /etc/rc.subr
+fi
+
+name="snapserver"
+rcvar=${name}
+command="@PREFIX@/bin/snapserver"
+command_args="-d"
+pidfile="@VARBASE@/run/snapserver/pid"
+
+load_rc_config $name
+run_rc_command "$1"

Index: pkgsrc/audio/snapcast/patches/patch-CMakeLists.txt
diff -u /dev/null pkgsrc/audio/snapcast/patches/patch-CMakeLists.txt:1.1
--- /dev/null   Sun Jul  3 16:09:15 2022
+++ pkgsrc/audio/snapcast/patches/patch-CMakeLists.txt  Sun Jul  3 16:09:15 2022
@@ -0,0 +1,32 @@
+$NetBSD: patch-CMakeLists.txt,v 1.1 2022/07/03 16:09:15 nia Exp $
+
+Make ALSA optional. Add Sun Audio support for NetBSD.
+
+--- CMakeLists.txt.orig        2021-12-22 17:40:36.000000000 +0000
++++ CMakeLists.txt
+@@ -178,10 +178,12 @@ if(NOT WIN32 AND NOT ANDROID)
+         list(APPEND INCLUDE_DIRS "/usr/local/include")
+     else()
+ 
+-        pkg_search_module(ALSA REQUIRED alsa)
++        if(BUILD_WITH_ALSA)
++        pkg_search_module(ALSA alsa)
+         if (ALSA_FOUND)
+             add_definitions(-DHAS_ALSA)
+         endif (ALSA_FOUND)
++        endif(BUILD_WITH_ALSA)
+ 
+         if(BUILD_WITH_PULSE)
+             pkg_search_module(PULSE libpulse)
+@@ -206,6 +208,11 @@ if(NOT WIN32 AND NOT ANDROID)
+             link_directories("/usr/local/lib")
+             list(APPEND INCLUDE_DIRS "/usr/local/include")
+         endif()
++
++        check_include_file("sys/audioio.h" SUN_FOUND)
++        if (SUN_FOUND)
++            add_definitions(-DHAS_SUN)
++        endif (SUN_FOUND)
+     endif()
+ 
+     pkg_search_module(SOXR soxr)
Index: pkgsrc/audio/snapcast/patches/patch-client_CMakeLists.txt
diff -u /dev/null pkgsrc/audio/snapcast/patches/patch-client_CMakeLists.txt:1.1
--- /dev/null   Sun Jul  3 16:09:15 2022
+++ pkgsrc/audio/snapcast/patches/patch-client_CMakeLists.txt   Sun Jul  3 16:09:15 2022
@@ -0,0 +1,17 @@
+$NetBSD: patch-client_CMakeLists.txt,v 1.1 2022/07/03 16:09:15 nia Exp $
+
+Add Sun Audio support for NetBSD.
+
+--- client/CMakeLists.txt.orig 2021-12-22 17:40:36.000000000 +0000
++++ client/CMakeLists.txt
+@@ -53,6 +53,10 @@ elseif(NOT ANDROID)
+         list(APPEND CLIENT_LIBRARIES ${PULSE_LIBRARIES})
+         list(APPEND CLIENT_INCLUDE ${PULSE_INCLUDE_DIRS})
+     endif (PULSE_FOUND)
++
++    if (SUN_FOUND)
++        list(APPEND CLIENT_SOURCES player/sun_player.cpp)
++    endif (SUN_FOUND)
+ endif (MACOSX)
+ 
+ if (ANDROID)
Index: pkgsrc/audio/snapcast/patches/patch-client_controller.cpp
diff -u /dev/null pkgsrc/audio/snapcast/patches/patch-client_controller.cpp:1.1
--- /dev/null   Sun Jul  3 16:09:15 2022
+++ pkgsrc/audio/snapcast/patches/patch-client_controller.cpp   Sun Jul  3 16:09:15 2022
@@ -0,0 +1,37 @@
+$NetBSD: patch-client_controller.cpp,v 1.1 2022/07/03 16:09:15 nia Exp $
+
+Add Sun Audio support for NetBSD.
+
+--- client/controller.cpp.orig 2021-12-22 17:40:36.000000000 +0000
++++ client/controller.cpp
+@@ -38,6 +38,9 @@
+ #ifdef HAS_PULSE
+ #include "player/pulse_player.hpp"
+ #endif
++#ifdef HAS_SUN
++#include "player/sun_player.hpp"
++#endif
+ #ifdef HAS_OPENSL
+ #include "player/opensl_player.hpp"
+ #endif
+@@ -92,6 +95,9 @@ std::unique_ptr<Player> Controller::crea
+ std::vector<std::string> Controller::getSupportedPlayerNames()
+ {
+     std::vector<std::string> result;
++#ifdef HAS_SUN
++    result.emplace_back(player::SUN);
++#endif
+ #ifdef HAS_ALSA
+     result.emplace_back(player::ALSA);
+ #endif
+@@ -188,6 +194,10 @@ void Controller::getNextMessage()
+             stream_ = make_shared<Stream>(sampleFormat_, settings_.player.sample_format);
+             stream_->setBufferLen(std::max(0, serverSettings_->getBufferMs() - serverSettings_->getLatency() - settings_.player.latency));
+ 
++#ifdef HAS_SUN
++            if (!player_)
++                player_ = createPlayer<SunPlayer>(settings_.player, player::SUN);
++#endif
+ #ifdef HAS_ALSA
+             if (!player_)
+                 player_ = createPlayer<AlsaPlayer>(settings_.player, player::ALSA);
Index: pkgsrc/audio/snapcast/patches/patch-client_player_sun__player.cpp
diff -u /dev/null pkgsrc/audio/snapcast/patches/patch-client_player_sun__player.cpp:1.1
--- /dev/null   Sun Jul  3 16:09:15 2022
+++ pkgsrc/audio/snapcast/patches/patch-client_player_sun__player.cpp   Sun Jul  3 16:09:15 2022
@@ -0,0 +1,312 @@
+$NetBSD: patch-client_player_sun__player.cpp,v 1.1 2022/07/03 16:09:15 nia Exp $
+
+Add Sun Audio support for NetBSD.
+
+--- client/player/sun_player.cpp.orig  2022-07-03 14:25:19.031712372 +0000
++++ client/player/sun_player.cpp
+@@ -0,0 +1,305 @@
++/***
++    This file is part of snapcast
++    Copyright (C) 2014-2021  Johannes Pohl
++
++    This program is free software: you can redistribute it and/or modify
++    it under the terms of the GNU General Public License as published by
++    the Free Software Foundation, either version 3 of the License, or
++    (at your option) any later version.
++
++    This program is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++    GNU General Public License for more details.
++
++    You should have received a copy of the GNU General Public License
++    along with this program.  If not, see <http://www.gnu.org/licenses/>.
++***/
++
++#include <sys/audioio.h>
++#include <sys/ioctl.h>
++#include <fcntl.h>
++#include <unistd.h>
++#include "sun_player.hpp"
++#include "common/aixlog.hpp"
++#include "common/snap_exception.hpp"
++#include "common/str_compat.hpp"
++#include "common/utils/logging.hpp"
++#include "common/utils/string_utils.hpp"
++
++#ifndef SUN_MAXDEVS
++#define SUN_MAXDEVS (16)
++#endif
++
++#ifndef AUDIO_GETBUFINFO
++#define AUDIO_GETBUFINFO AUDIO_GETINFO
++#endif
++
++#ifndef AUDIO_ENCODING_SLIENAR
++#define AUDIO_ENCODING_SLIENAR AUDIO_ENCODING_LINEAR8;
++#endif
++
++#ifndef AUDIO_ENCODING_SLIENAR_LE
++#define AUDIO_ENCODING_SLIENAR_LE AUDIO_ENCODING_LINEAR;
++#endif
++
++using namespace std::chrono_literals;
++using namespace std;
++
++namespace player
++{
++
++static constexpr std::chrono::milliseconds BUFFER_TIME = 10ms;
++static constexpr int PERIODS = 3;
++static constexpr int MIN_PERIODS = 1;
++
++static constexpr auto LOG_TAG = "Sun";
++
++SunPlayer::SunPlayer(boost::asio::io_context& io_context, const ClientSettings::Player& settings, std::shared_ptr<Stream> stream)
++    : Player(io_context, settings, stream), handle_(-1)
++{
++}
++
++void SunPlayer::initSun()
++{
++    std::lock_guard<std::recursive_mutex> lock(mutex_);
++    const char *dev;
++    const SampleFormat& format = stream_->getFormat();
++    struct audio_info info;
++    uint32_t rate = format.rate();
++    int channels = format.channels();
++
++    // Open the PCM device in playback mode
++    if (settings_.pcm_device.name == "default")
++        dev = "/dev/audio";
++    else
++        dev = settings_.pcm_device.name.c_str();
++
++    if ((handle_ = open(dev, O_WRONLY)) < 0)
++        throw SnapException("Can't open " + settings_.pcm_device.name + ", error: " + strerror(errno));
++
++    AUDIO_INITINFO(&info);
++
++    switch (format.bits()) {
++    case 8:
++        info.play.encoding = AUDIO_ENCODING_SLINEAR;
++        info.play.precision = 8;
++        break;
++    case 16:
++        info.play.encoding = AUDIO_ENCODING_SLINEAR_LE;
++        info.play.precision = 16;
++        break;
++    case 32:
++        info.play.encoding = AUDIO_ENCODING_SLINEAR_LE;
++        info.play.precision = 32;
++        break;
++    default:
++        throw SnapException("Unsupported sample format: " + cpt::to_string(format.bits()));
++        break;
++    }
++
++    if (ioctl(handle_, AUDIO_SETINFO, &info) < 0)
++    {
++        throw SnapException("Unsupported sample format: " + cpt::to_string(format.bits()));
++    }
++
++    AUDIO_INITINFO(&info);
++
++    info.play.channels = channels;
++
++    if (ioctl(handle_, AUDIO_SETINFO, &info) < 0)
++    {
++        throw SnapException("Can't set channel count: " + string(strerror(errno)));
++    }
++
++    AUDIO_INITINFO(&info);
++
++    info.play.sample_rate = rate;
++
++    if (ioctl(handle_, AUDIO_SETINFO, &info) < 0)
++    {
++        throw SnapException("Can't set rate: " + string(strerror(errno)));
++    }
++
++    (void)ioctl(handle_, AUDIO_GETINFO, &info);
++
++    rate = info.play.sample_rate;
++
++    if (format.rate() != rate)
++        LOG(WARNING, LOG_TAG) << "Could not set sample rate to " << format.rate() << " Hz, using: " << rate << " Hz\n";
++
++    AUDIO_INITINFO(&info);
++    info.hiwat = PERIODS;
++    info.lowat = MIN_PERIODS;
++    (void)ioctl(handle_, AUDIO_SETINFO, &info);
++}
++
++
++void SunPlayer::uninitSun()
++{
++    std::lock_guard<std::recursive_mutex> lock(mutex_);
++    if (handle_ != -1)
++    {
++        close(handle_);
++        handle_ = -1;
++    }
++}
++
++
++void SunPlayer::start()
++{
++    try
++    {
++        initSun();
++    }
++    catch (const SnapException& e)
++    {
++        LOG(ERROR, LOG_TAG) << "Exception: " << e.what() << ", code: " << e.code() << "\n";
++        // Accept "Device or ressource busy", the worker loop will retry
++        if (e.code() != -EBUSY)
++            throw;
++    }
++
++    Player::start();
++}
++
++
++SunPlayer::~SunPlayer()
++{
++    stop();
++}
++
++
++void SunPlayer::stop()
++{
++    Player::stop();
++    uninitSun();
++}
++
++
++bool SunPlayer::needsThread() const
++{
++    return true;
++}
++
++void SunPlayer::worker()
++{
++    unsigned int framesDelay;
++    unsigned int framesAvail;
++    long lastChunkTick = chronos::getTickCount();
++    const SampleFormat& format = stream_->getFormat();
++    struct audio_info info;
++
++    while (active_)
++    {
++        if (handle_ == -1)
++        {
++            try
++            {
++                initSun();
++            }
++            catch (const std::exception& e)
++            {
++                LOG(ERROR, LOG_TAG) << "Exception in initSun: " << e.what() << endl;
++                chronos::sleep(100);
++            }
++            if (handle_ == -1)
++                continue;
++        }
++
++        if (ioctl(handle_, AUDIO_GETBUFINFO, &info) == -1) {
++            this_thread::sleep_for(10ms);
++            continue;
++        }
++
++        framesDelay = info.play.seek / format.frameSize();
++        framesAvail = (info.play.buffer_size - info.play.seek) / format.frameSize();
++
++        if (buffer_.size() < static_cast<size_t>(info.play.buffer_size))
++        {
++            LOG(DEBUG, LOG_TAG) << "Resizing buffer from " << buffer_.size() << " to " << info.play.buffer_size << "\n";
++            buffer_.resize(info.play.buffer_size);
++        }
++
++        if (framesAvail == 0)
++        {
++            auto frame_time = std::chrono::microseconds(static_cast<int>((info.blocksize / format.frameSize()) / format.usRate()));
++            std::chrono::microseconds wait = std::min(frame_time / 2, std::chrono::microseconds(10ms));
++            LOG(DEBUG, LOG_TAG) << "No frames available, waiting for " << wait.count() << " us\n";
++            this_thread::sleep_for(wait);
++            continue;
++        }
++
++
++        chronos::usec delay(static_cast<chronos::usec::rep>(1000 * static_cast<double>(framesDelay) / format.msRate()));
++
++        if (stream_->getPlayerChunk(buffer_.data(), delay, framesAvail))
++        {
++            lastChunkTick = chronos::getTickCount();
++            adjustVolume(buffer_.data(), framesAvail);
++            if (write(handle_, buffer_.data(), framesAvail * format.frameSize()) < 0)
++            {
++                LOG(ERROR, LOG_TAG) << "ERROR. Can't write to PCM device: " << strerror(errno) << "\n";
++                uninitSun();
++            }
++        }
++        else
++        {
++            LOG(INFO, LOG_TAG) << "Failed to get chunk\n";
++            while (active_ && !stream_->waitForChunk(100ms))
++            {
++                static utils::logging::TimeConditional cond(2s);
++                LOG(DEBUG, LOG_TAG) << cond << "Waiting for chunk\n";
++                if ((handle_ != -1) && (chronos::getTickCount() - lastChunkTick > 5000))
++                {
++                    LOG(NOTICE, LOG_TAG) << "No chunk received for 5000ms. Closing audio device.\n";
++                    uninitSun();
++                    stream_->clearChunks();
++                }
++            }
++        }
++    }
++}
++
++
++
++vector<PcmDevice> SunPlayer::pcm_list()
++{
++    std::string name;
++    struct audio_device dev;
++    vector<PcmDevice> result;
++    PcmDevice pcmDevice;
++    int i;
++    int fd;
++    int props;
++
++    for (i = 0; i < SUN_MAXDEVS; ++i)
++    {
++        name = "/dev/audio" + cpt::to_string(i);
++        fd = open(name.c_str(), O_WRONLY);
++        if (fd == -1)
++             break;
++        if (ioctl(fd, AUDIO_GETPROPS, &props) == -1)
++        {
++             close(fd);
++             break;
++        }
++        if (ioctl(fd, AUDIO_GETDEV, &dev) == -1)
++        {
++             close(fd);
++             break;
++        }
++        close(fd);
++        if ((props & AUDIO_PROP_PLAYBACK) == 0)
++        {
++             continue;
++        }
++        pcmDevice.name = name;
++        pcmDevice.description = string(dev.name) + " " + string(dev.version);
++        pcmDevice.idx = i;
++        result.push_back(pcmDevice);
++    }
++    return result;
++}
++
++} // namespace player
Index: pkgsrc/audio/snapcast/patches/patch-client_player_sun__player.hpp
diff -u /dev/null pkgsrc/audio/snapcast/patches/patch-client_player_sun__player.hpp:1.1
--- /dev/null   Sun Jul  3 16:09:15 2022
+++ pkgsrc/audio/snapcast/patches/patch-client_player_sun__player.hpp   Sun Jul  3 16:09:15 2022
@@ -0,0 +1,74 @@
+$NetBSD: patch-client_player_sun__player.hpp,v 1.1 2022/07/03 16:09:15 nia Exp $
+
+Add Sun Audio support for NetBSD.
+
+--- client/player/sun_player.hpp.orig  2022-07-03 13:22:32.864495808 +0000
++++ client/player/sun_player.hpp
+@@ -0,0 +1,67 @@
++/***
++    This file is part of snapcast
++    Copyright (C) 2014-2020  Johannes Pohl
++
++    This program is free software: you can redistribute it and/or modify
++    it under the terms of the GNU General Public License as published by
++    the Free Software Foundation, either version 3 of the License, or
++    (at your option) any later version.
++
++    This program is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++    GNU General Public License for more details.
++
++    You should have received a copy of the GNU General Public License
++    along with this program.  If not, see <http://www.gnu.org/licenses/>.
++***/
++
++#ifndef SUN_PLAYER_HPP
++#define SUN_PLAYER_HPP
++
++#include "player.hpp"
++
++#include <chrono>
++#include <optional>
++
++
++namespace player
++{
++
++static constexpr auto SUN = "sun";
++
++/// Audio Player
++/**
++ * Audio player implementation using Sun/NetBSD audio
++ */
++class SunPlayer : public Player
++{
++public:
++    SunPlayer(boost::asio::io_context& io_context, const ClientSettings::Player& settings, std::shared_ptr<Stream> stream);
++    ~SunPlayer() override;
++
++    void start() override;
++    void stop() override;
++
++    /// List the system's audio output devices
++    static std::vector<PcmDevice> pcm_list();
++
++protected:
++    void worker() override;
++    bool needsThread() const override;
++
++private:
++    /// initialize audio device
++    void initSun();
++    /// close audio device
++    void uninitSun();
++
++    int handle_;
++
++    std::recursive_mutex mutex_;
++    std::vector<char> buffer_;
++};
++
++} // namespace player
++
++#endif
Index: pkgsrc/audio/snapcast/patches/patch-client_snapclient.cpp
diff -u /dev/null pkgsrc/audio/snapcast/patches/patch-client_snapclient.cpp:1.1
--- /dev/null   Sun Jul  3 16:09:15 2022
+++ pkgsrc/audio/snapcast/patches/patch-client_snapclient.cpp   Sun Jul  3 16:09:15 2022
@@ -0,0 +1,59 @@
+$NetBSD: patch-client_snapclient.cpp,v 1.1 2022/07/03 16:09:15 nia Exp $
+
+Add Sun Audio support for NetBSD.
+
+--- client/snapclient.cpp.orig 2021-12-22 17:40:36.000000000 +0000
++++ client/snapclient.cpp
+@@ -32,6 +32,9 @@
+ #ifdef HAS_PULSE
+ #include "player/pulse_player.hpp"
+ #endif
++#ifdef HAS_SUN
++#include "player/sun_player.hpp"
++#endif
+ #ifdef HAS_WASAPI
+ #include "player/wasapi_player.hpp"
+ #endif
+@@ -62,8 +65,12 @@ PcmDevice getPcmDevice(const std::string
+ {
+     LOG(DEBUG, LOG_TAG) << "Trying to get PCM device for player: " << player << ", parameter: "
+                         << ", card: " << soundcard << "\n";
+-#if defined(HAS_ALSA) || defined(HAS_PULSE) || defined(HAS_WASAPI)
++#if defined(HAS_ALSA) || defined(HAS_PULSE) || defined(HAS_WASAPI) || defined(HAS_SUN)
+     vector<PcmDevice> pcm_devices;
++#if defined(HAS_SUN)
++    if (player == player::SUN)
++        pcm_devices = SunPlayer::pcm_list();
++#endif
+ #if defined(HAS_ALSA)
+     if (player == player::ALSA)
+         pcm_devices = AlsaPlayer::pcm_list();
+@@ -142,7 +149,7 @@ int main(int argc, char** argv)
+         op.add<Value<string>>("", "hostID", "unique host id, default is MAC address", "", &settings.host_id);
+ 
+ // PCM device specific
+-#if defined(HAS_ALSA) || defined(HAS_PULSE) || defined(HAS_WASAPI)
++#if defined(HAS_ALSA) || defined(HAS_PULSE) || defined(HAS_WASAPI) || defined(HAS_SUN)
+         auto listSwitch = op.add<Switch>("l", "list", "list PCM devices");
+         /*auto soundcardValue =*/op.add<Value<string>>("s", "soundcard", "index or name of the pcm device", pcm_device, &pcm_device);
+ #endif
+@@ -210,7 +217,7 @@ int main(int argc, char** argv)
+ 
+         settings.player.player_name = utils::string::split_left(settings.player.player_name, ':', settings.player.parameter);
+ 
+-#if defined(HAS_ALSA) || defined(HAS_PULSE) || defined(HAS_WASAPI)
++#if defined(HAS_ALSA) || defined(HAS_PULSE) || defined(HAS_WASAPI) || defined(HAS_SUN)
+         if (listSwitch->is_set())
+         {
+             try
+@@ -224,6 +231,10 @@ int main(int argc, char** argv)
+                 if (settings.player.player_name == player::PULSE)
+                     pcm_devices = PulsePlayer::pcm_list(settings.player.parameter);
+ #endif
++#if defined(HAS_SUN)
++                if (settings.player.player_name == player::SUN)
++                    pcm_devices = SunPlayer::pcm_list();
++#endif
+ #if defined(HAS_WASAPI)
+                 if (settings.player.player_name == player::WASAPI)
+                     pcm_devices = WASAPIPlayer::pcm_list();
Index: pkgsrc/audio/snapcast/patches/patch-common_utils.hpp
diff -u /dev/null pkgsrc/audio/snapcast/patches/patch-common_utils.hpp:1.1
--- /dev/null   Sun Jul  3 16:09:15 2022
+++ pkgsrc/audio/snapcast/patches/patch-common_utils.hpp        Sun Jul  3 16:09:15 2022
@@ -0,0 +1,67 @@
+$NetBSD: patch-common_utils.hpp,v 1.1 2022/07/03 16:09:15 nia Exp $
+
+Add NetBSD support.
+
+--- common/utils.hpp.orig      2021-12-22 17:40:36.000000000 +0000
++++ common/utils.hpp
+@@ -1,5 +1,4 @@
+-/***
+-    This file is part of snapcast
++/*** This file is part of snapcast
+     Copyright (C) 2014-2020  Johannes Pohl
+ 
+     This program is free software: you can redistribute it and/or modify
+@@ -44,7 +43,7 @@
+ #include <sys/stat.h>
+ #include <sys/types.h>
+ #include <vector>
+-#if !defined(WINDOWS) && !defined(FREEBSD)
++#if defined(MACOS) || defined(__linux__)
+ #include <sys/sysinfo.h>
+ #endif
+ #ifdef MACOS
+@@ -53,6 +52,10 @@
+ #include <ifaddrs.h>
+ #include <net/if_dl.h>
+ #endif
++#ifdef __NetBSD__
++#include <ifaddrs.h>
++#include <net/if_dl.h>
++#endif
+ #ifdef ANDROID
+ #include <sys/system_properties.h>
+ #endif
+@@ -306,7 +309,7 @@ static std::string getMacAddress(int soc
+         {
+             if (!(ifr.ifr_flags & IFF_LOOPBACK)) // don't count loopback
+             {
+-#ifdef MACOS
++#if defined(MACOS) || defined(__NetBSD__)
+                 /// Dirty Mac version
+                 struct ifaddrs *ifap, *ifaptr;
+                 unsigned char* ptr;
+@@ -333,6 +336,7 @@ static std::string getMacAddress(int soc
+                 }
+ #endif
+ 
++#ifndef __NetBSD__
+ #ifdef FREEBSD
+                 if (ioctl(sock, SIOCGIFMAC, &ifr) == 0)
+ #else
+@@ -355,6 +359,7 @@ static std::string getMacAddress(int soc
+                             return line;
+                     }
+                 }
++#endif
+             }
+         }
+         else
+@@ -369,7 +374,7 @@ static std::string getMacAddress(int soc
+         return "";
+ 
+     char mac[19];
+-#ifndef FREEBSD
++#if !defined(FREEBSD) && !defined(__NetBSD__)
+     sprintf(mac, "%02x:%02x:%02x:%02x:%02x:%02x", (unsigned char)ifr.ifr_hwaddr.sa_data[0], (unsigned char)ifr.ifr_hwaddr.sa_data[1],
+             (unsigned char)ifr.ifr_hwaddr.sa_data[2], (unsigned char)ifr.ifr_hwaddr.sa_data[3], (unsigned char)ifr.ifr_hwaddr.sa_data[4],
+             (unsigned char)ifr.ifr_hwaddr.sa_data[5]);
Index: pkgsrc/audio/snapcast/patches/patch-server_CMakeLists.txt
diff -u /dev/null pkgsrc/audio/snapcast/patches/patch-server_CMakeLists.txt:1.1
--- /dev/null   Sun Jul  3 16:09:15 2022
+++ pkgsrc/audio/snapcast/patches/patch-server_CMakeLists.txt   Sun Jul  3 16:09:15 2022
@@ -0,0 +1,15 @@
+$NetBSD: patch-server_CMakeLists.txt,v 1.1 2022/07/03 16:09:15 nia Exp $
+
+Install config files to examples, per pkgsrc conventions.
+
+--- server/CMakeLists.txt.orig 2021-12-22 17:40:36.000000000 +0000
++++ server/CMakeLists.txt
+@@ -114,7 +114,7 @@ else()
+ 
+     install(TARGETS snapserver COMPONENT server DESTINATION ${CMAKE_INSTALL_BINDIR})
+     install(FILES snapserver.1 COMPONENT server DESTINATION ${CMAKE_INSTALL_MANDIR}/man1)
+-    install(FILES etc/snapserver.conf COMPONENT server DESTINATION ${CMAKE_INSTALL_SYSCONFDIR})
++    install(FILES etc/snapserver.conf COMPONENT server DESTINATION ${CMAKE_INSTALL_DATADIR}/examples/snapcast)
+     install(FILES etc/index.html COMPONENT server DESTINATION ${CMAKE_INSTALL_DATADIR}/snapserver)
+     install(DIRECTORY etc/snapweb/ DESTINATION ${CMAKE_INSTALL_DATADIR}/snapserver/snapweb)
+     install(FILES etc/plug-ins/meta_mpd.py PERMISSIONS OWNER_EXECUTE GROUP_EXECUTE WORLD_EXECUTE DESTINATION ${CMAKE_INSTALL_DATADIR}/snapserver/plug-ins/)
Index: pkgsrc/audio/snapcast/patches/patch-server_etc_snapserver.conf
diff -u /dev/null pkgsrc/audio/snapcast/patches/patch-server_etc_snapserver.conf:1.1
--- /dev/null   Sun Jul  3 16:09:15 2022
+++ pkgsrc/audio/snapcast/patches/patch-server_etc_snapserver.conf      Sun Jul  3 16:09:15 2022
@@ -0,0 +1,24 @@
+$NetBSD: patch-server_etc_snapserver.conf,v 1.1 2022/07/03 16:09:15 nia Exp $
+
+Don't hardcode various paths, allow pkgsrc to substitute them.
+
+--- server/etc/snapserver.conf.orig    2021-12-22 17:40:36.000000000 +0000
++++ server/etc/snapserver.conf
+@@ -30,7 +30,7 @@
+ #threads = -1
+ 
+ # the pid file when running as daemon
+-#pidfile = /var/run/snapserver/pid
++#pidfile = @VARBASE@/run/snapserver/pid
+ 
+ # the user to run as when daemonized
+ #user = snapserver
+@@ -39,7 +39,7 @@
+ 
+ # directory where persistent data is stored (server.json)
+ # if empty, data dir will be
+-#  - "/var/lib/snapserver/" when running as daemon
++#  - "@VARBASE@/lib/snapserver/" when running as daemon
+ #  - "$HOME/.config/snapserver/" when not running as daemon
+ #datadir = 
+ 
Index: pkgsrc/audio/snapcast/patches/patch-server_server__settings.hpp
diff -u /dev/null pkgsrc/audio/snapcast/patches/patch-server_server__settings.hpp:1.1
--- /dev/null   Sun Jul  3 16:09:15 2022
+++ pkgsrc/audio/snapcast/patches/patch-server_server__settings.hpp     Sun Jul  3 16:09:15 2022
@@ -0,0 +1,15 @@
+$NetBSD: patch-server_server__settings.hpp,v 1.1 2022/07/03 16:09:15 nia Exp $
+
+Don't hardcode various paths, allow pkgsrc to substitute them.
+
+--- server/server_settings.hpp.orig    2021-12-22 17:40:36.000000000 +0000
++++ server/server_settings.hpp
+@@ -30,7 +30,7 @@ struct ServerSettings
+     struct Server
+     {
+         int threads{-1};
+-        std::string pid_file{"/var/run/snapserver/pid"};
++        std::string pid_file{"@VARBASE@/run/snapserver/pid"};
+         std::string user{"snapserver"};
+         std::string group{""};
+         std::string data_dir{""};
Index: pkgsrc/audio/snapcast/patches/patch-server_snapserver.1
diff -u /dev/null pkgsrc/audio/snapcast/patches/patch-server_snapserver.1:1.1
--- /dev/null   Sun Jul  3 16:09:15 2022
+++ pkgsrc/audio/snapcast/patches/patch-server_snapserver.1     Sun Jul  3 16:09:15 2022
@@ -0,0 +1,30 @@
+$NetBSD: patch-server_snapserver.1,v 1.1 2022/07/03 16:09:15 nia Exp $
+
+Don't hardcode various paths, allow pkgsrc to substitute them.
+
+--- server/snapserver.1.orig   2021-12-22 17:40:36.000000000 +0000
++++ server/snapserver.1
+@@ -25,20 +25,17 @@ Show version number
+ Daemonize
+ optional process priority [-20..19]
+ .TP
+-\fB-c, --config arg (=/etc/snapserver.conf)\fR
++\fB-c, --config arg (=@PKG_SYSCONFDIR@/snapserver.conf)\fR
+ path to the configuration file
+ .SH FILES
+ .TP
+ \fI/tmp/snapfifo\fR
+ PCM input fifo file
+ .TP
+-\fI/etc/default/snapserver\fR
+-the daemon default configuration file
+-.TP
+-\fI/etc/snapserver.conf\fR
++\fI@PKG_SYSCONFDIR@/snapserver.conf\fR
+ the snapserver configuration file
+ .TP
+-\fI~/.config/snapcast/server.json\fR or (if $HOME is not set) \fI/var/lib/snapcast/server.json\fR
++\fI~/.config/snapcast/server.json\fR or (if $HOME is not set) \fI@VARBASE@/lib/snapcast/server.json\fR
+ persistent server data file
+ .SH "COPYRIGHT"
+ Copyright (C) 2014-2020 Johannes Pohl (snapcast%badaix.de@localhost).
Index: pkgsrc/audio/snapcast/patches/patch-server_snapserver.cpp
diff -u /dev/null pkgsrc/audio/snapcast/patches/patch-server_snapserver.cpp:1.1
--- /dev/null   Sun Jul  3 16:09:15 2022
+++ pkgsrc/audio/snapcast/patches/patch-server_snapserver.cpp   Sun Jul  3 16:09:15 2022
@@ -0,0 +1,24 @@
+$NetBSD: patch-server_snapserver.cpp,v 1.1 2022/07/03 16:09:15 nia Exp $
+
+Don't hardcode various paths, allow pkgsrc to substitute them.
+
+--- server/snapserver.cpp.orig 2021-12-22 17:40:36.000000000 +0000
++++ server/snapserver.cpp
+@@ -58,7 +58,7 @@ int main(int argc, char* argv[])
+     {
+         ServerSettings settings;
+         std::string pcmSource = "pipe:///tmp/snapfifo?name=default";
+-        std::string config_file = "/etc/snapserver.conf";
++        std::string config_file = "@PKG_SYSCONFDIR@/snapserver.conf";
+ 
+         OptionParser op("Allowed options");
+         auto helpSwitch = op.add<Switch>("h", "help", "Produce help message, use -hh to show options from config file");
+@@ -252,7 +252,7 @@ int main(int argc, char* argv[])
+                 throw std::invalid_argument("user must not be empty");
+ 
+             if (settings.server.data_dir.empty())
+-                settings.server.data_dir = "/var/lib/snapserver";
++                settings.server.data_dir = "@VARBASE@/lib/snapserver";
+             Config::instance().init(settings.server.data_dir, settings.server.user, settings.server.group);
+ 
+             daemon = std::make_unique<Daemon>(settings.server.user, settings.server.group, settings.server.pid_file);
Index: pkgsrc/audio/snapcast/patches/patch-server_streamreader_pipe__stream.cpp
diff -u /dev/null pkgsrc/audio/snapcast/patches/patch-server_streamreader_pipe__stream.cpp:1.1
--- /dev/null   Sun Jul  3 16:09:15 2022
+++ pkgsrc/audio/snapcast/patches/patch-server_streamreader_pipe__stream.cpp    Sun Jul  3 16:09:15 2022
@@ -0,0 +1,15 @@
+$NetBSD: patch-server_streamreader_pipe__stream.cpp,v 1.1 2022/07/03 16:09:15 nia Exp $
+
+Add NetBSD support.
+
+--- server/streamreader/pipe_stream.cpp.orig   2021-12-22 17:40:36.000000000 +0000
++++ server/streamreader/pipe_stream.cpp
+@@ -59,7 +59,7 @@ void PipeStream::do_connect()
+ {
+     int fd = open(uri_.path.c_str(), O_RDONLY | O_NONBLOCK);
+     int pipe_size = -1;
+-#if !defined(MACOS) && !defined(FREEBSD)
++#ifdef __linux__
+     pipe_size = fcntl(fd, F_GETPIPE_SZ);
+ #endif
+     LOG(TRACE, LOG_TAG) << "Stream: " << name_ << ", connect to pipe: " << uri_.path << ", fd: " << fd << ", pipe size: " << pipe_size << "\n";



Home | Main Index | Thread Index | Old Index