diff --git a/packages/snapcast-server/CMakeLists.txt.patch b/packages/snapcast-server/CMakeLists.txt.patch new file mode 100644 index 000000000..58612e491 --- /dev/null +++ b/packages/snapcast-server/CMakeLists.txt.patch @@ -0,0 +1,53 @@ +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -91,11 +91,6 @@ + if (BUILD_CLIENT) + message(FATAL_ERROR "Snapclient not yet supported for FreeBSD, use \"-DBUILD_CLIENT=OFF\"") + endif() +-elseif (${CMAKE_SYSTEM_NAME} MATCHES "Android") +- set (ANDROID TRUE) +- if (BUILD_SERVER) +- message(FATAL_ERROR "Snapserver not yet supported for Android, use \"-DBUILD_SERVER=OFF\"") +- endif() + endif() + + # Configure paths +@@ -120,7 +115,7 @@ + set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/") + add_definitions(-DVERSION="${PROJECT_VERSION}") + +-if(NOT ANDROID) ++if(TRUE) + set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin) + set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin) +@@ -165,7 +160,7 @@ + endif() + + +-if(NOT WIN32 AND NOT ANDROID) ++if(NOT WIN32) + + if(MACOSX) + set(BONJOUR_FOUND true) +@@ -178,11 +173,6 @@ + list(APPEND INCLUDE_DIRS "/usr/local/include") + else() + +- pkg_search_module(ALSA REQUIRED alsa) +- if (ALSA_FOUND) +- add_definitions(-DHAS_ALSA) +- endif (ALSA_FOUND) +- + if(BUILD_WITH_PULSE) + pkg_search_module(PULSE libpulse) + if (PULSE_FOUND) +@@ -279,7 +269,7 @@ + endif() + endif() + +-if(NOT ANDROID) ++if(TRUE) + find_package(Boost 1.70 REQUIRED) + else() + find_package(oboe REQUIRED CONFIG) diff --git a/packages/snapcast-server/build.sh b/packages/snapcast-server/build.sh new file mode 100644 index 000000000..e7dc66bea --- /dev/null +++ b/packages/snapcast-server/build.sh @@ -0,0 +1,14 @@ +TERMUX_PKG_HOMEPAGE=https://github.com/badaix/snapcast +TERMUX_PKG_DESCRIPTION="A multiroom client-server audio player" +TERMUX_PKG_LICENSE="GPL-3.0" +TERMUX_PKG_MAINTAINER="@termux" +TERMUX_PKG_VERSION=0.25.0 +TERMUX_PKG_SRCURL=https://github.com/badaix/snapcast/archive/v${TERMUX_PKG_VERSION}.tar.gz +TERMUX_PKG_SHA256=c4e449cb693e091261727421f4965492be049632537e034fa9c59c92d091a846 +TERMUX_PKG_DEPENDS="libc++, libexpat, libflac, libopus, libsoxr, libvorbis" +TERMUX_PKG_BUILD_DEPENDS="boost" +TERMUX_PKG_EXTRA_CONFIGURE_ARGS="-DBUILD_CLIENT=OFF -DBUILD_TESTS=OFF" + +termux_step_pre_configure() { + LDFLAGS+=" -llog" +} diff --git a/packages/snapcast-server/common-CMakeLists.txt.patch b/packages/snapcast-server/common-CMakeLists.txt.patch new file mode 100644 index 000000000..753b87b79 --- /dev/null +++ b/packages/snapcast-server/common-CMakeLists.txt.patch @@ -0,0 +1,20 @@ +--- a/common/CMakeLists.txt ++++ b/common/CMakeLists.txt +@@ -2,7 +2,7 @@ + resampler.cpp + sample_format.cpp) + +-if(NOT WIN32 AND NOT ANDROID) ++if(NOT WIN32) + list(APPEND SOURCES daemon.cpp) + endif() + +@@ -12,7 +12,7 @@ + + add_library(common STATIC ${SOURCES}) + +-if (ANDROID) ++if (FALSE) + target_link_libraries(common soxr::soxr) + elseif(SOXR_FOUND) + target_link_libraries(common ${SOXR_LIBRARIES}) diff --git a/packages/snapcast-server/server-config.cpp.patch b/packages/snapcast-server/server-config.cpp.patch new file mode 100644 index 000000000..e2c11b324 --- /dev/null +++ b/packages/snapcast-server/server-config.cpp.patch @@ -0,0 +1,11 @@ +--- a/server/config.cpp ++++ b/server/config.cpp +@@ -43,7 +43,7 @@ + if (!root_directory.empty()) + dir = root_directory; + else if (getenv("HOME") == nullptr) +- dir = "/var/lib/snapserver/"; ++ dir = "@TERMUX_PREFIX@/var/lib/snapserver/"; + else + dir = string(getenv("HOME")) + "/.config/snapserver/"; + diff --git a/packages/snapcast-server/server-control_session_http.cpp.patch b/packages/snapcast-server/server-control_session_http.cpp.patch new file mode 100644 index 000000000..1d6d01ad1 --- /dev/null +++ b/packages/snapcast-server/server-control_session_http.cpp.patch @@ -0,0 +1,34 @@ +--- a/server/control_session_http.cpp ++++ b/server/control_session_http.cpp +@@ -41,11 +41,11 @@ + " This webserver is a websocket endpoint for control clients (ws://host:1780/jsonrpc) and streaming clients" + " (ws://host:1780/stream), but it can also host simple web pages. To serve a web page, you must configure the" + " document root in the snapserver configuration file snapserver.conf, usually located in" +- " /etc/snapserver.conf" ++ " @TERMUX_PREFIX@/etc/snapserver.conf" + "

" + "

" + " The Snapserver installation should include a copy of Snapweb," +- " located in /usr/share/snapserver/snapweb/
" ++ " located in @TERMUX_PREFIX@/share/snapserver/snapweb/
" + " To activate it, please configure the doc_root as follows, and restart Snapserver to activate the changes:" + "

" + "
"
+@@ -56,7 +56,7 @@
+     "...\n"
+     "\n"
+     "# serve a website from the doc_root location\n"
+-    "doc_root = /usr/share/snapserver/snapweb/\n"
++    "doc_root = @TERMUX_PREFIX@/share/snapserver/snapweb/\n"
+     "\n"
+     "#\n"
+     "################################################
" +@@ -241,7 +241,7 @@ + + if (settings_.doc_root.empty()) + { +- std::string default_page = "/usr/share/snapserver/index.html"; ++ std::string default_page = "@TERMUX_PREFIX@/share/snapserver/index.html"; + struct stat buffer; + if (stat(default_page.c_str(), &buffer) == 0) + path = default_page; diff --git a/packages/snapcast-server/server-etc-snapserver.conf.patch b/packages/snapcast-server/server-etc-snapserver.conf.patch new file mode 100644 index 000000000..2ddefb94d --- /dev/null +++ b/packages/snapcast-server/server-etc-snapserver.conf.patch @@ -0,0 +1,38 @@ +--- a/server/etc/snapserver.conf ++++ b/server/etc/snapserver.conf +@@ -30,7 +30,7 @@ + #threads = -1 + + # the pid file when running as daemon +-#pidfile = /var/run/snapserver/pid ++#pidfile = @TERMUX_PREFIX@/var/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 ++# - "@TERMUX_PREFIX@/var/lib/snapserver/" when running as daemon + # - "$HOME/.config/snapserver/" when not running as daemon + #datadir = + +@@ -65,7 +65,7 @@ + + # serve a website from the doc_root location + # disabled if commented or empty +-doc_root = /usr/share/snapserver/snapweb ++doc_root = @TERMUX_PREFIX@/share/snapserver/snapweb + # + ############################################################################### + +@@ -127,7 +127,7 @@ + # tcp client: tcp://:?name=&mode=client + # alsa: alsa://?name=&device=[&send_silence=false][&idle_threshold=100][&silence_threshold_percent=0.0] + # meta: meta://///.../?name= +-source = pipe:///tmp/snapfifo?name=default ++source = pipe://@TERMUX_PREFIX@/tmp/snapfifo?name=default + #source = tcp://127.0.0.1?name=mopidy_tcp + + # Default sample format diff --git a/packages/snapcast-server/server-server_settings.hpp.patch b/packages/snapcast-server/server-server_settings.hpp.patch new file mode 100644 index 000000000..be09e70e2 --- /dev/null +++ b/packages/snapcast-server/server-server_settings.hpp.patch @@ -0,0 +1,11 @@ +--- a/server/server_settings.hpp ++++ b/server/server_settings.hpp +@@ -27,7 +27,7 @@ + struct Server + { + int threads{-1}; +- std::string pid_file{"/var/run/snapserver/pid"}; ++ std::string pid_file{"@TERMUX_PREFIX@/var/run/snapserver/pid"}; + std::string user{"snapserver"}; + std::string group{""}; + std::string data_dir{""}; diff --git a/packages/snapcast-server/server-snapserver.1.patch b/packages/snapcast-server/server-snapserver.1.patch new file mode 100644 index 000000000..e7472a796 --- /dev/null +++ b/packages/snapcast-server/server-snapserver.1.patch @@ -0,0 +1,20 @@ +--- a/server/snapserver.1 ++++ b/server/snapserver.1 +@@ -9,7 +9,7 @@ + standalone player, but an extension that turns your existing audio player into + a Sonos-like multiroom solution. + .br +-The server's audio input is a named pipe `/tmp/snapfifo`. All data that is fed ++The server's audio input is a named pipe `@TERMUX_PREFIX@/tmp/snapfifo`. All data that is fed + into this file will be send to the connected clients. One of the most generic + ways to use Snapcast is in conjunction with the music player daemon or Mopidy, + which can be configured to use a named pipe as audio output. +@@ -29,7 +29,7 @@ + path to the configuration file + .SH FILES + .TP +-\fI/tmp/snapfifo\fR ++\fI@TERMUX_PREFIX@/tmp/snapfifo\fR + PCM input fifo file + .TP + \fI/etc/default/snapserver\fR diff --git a/packages/snapcast-server/server-snapserver.cpp.patch b/packages/snapcast-server/server-snapserver.cpp.patch new file mode 100644 index 000000000..be9f7d765 --- /dev/null +++ b/packages/snapcast-server/server-snapserver.cpp.patch @@ -0,0 +1,22 @@ +--- a/server/snapserver.cpp ++++ b/server/snapserver.cpp +@@ -56,8 +56,8 @@ + try + { + ServerSettings settings; +- std::string pcmSource = "pipe:///tmp/snapfifo?name=default"; +- std::string config_file = "/etc/snapserver.conf"; ++ std::string pcmSource = "pipe://@TERMUX_PREFIX@/tmp/snapfifo?name=default"; ++ std::string config_file = "@TERMUX_PREFIX@/etc/snapserver.conf"; + + OptionParser op("Allowed options"); + auto helpSwitch = op.add("h", "help", "Produce help message, use -hh to show options from config file"); +@@ -250,7 +250,7 @@ + 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 = "@TERMUX_PREFIX@/var/lib/snapserver"; + Config::instance().init(settings.server.data_dir, settings.server.user, settings.server.group); + + daemon = std::make_unique(settings.server.user, settings.server.group, settings.server.pid_file); diff --git a/packages/snapcast-server/server-streamreader-airplay_stream.cpp.patch b/packages/snapcast-server/server-streamreader-airplay_stream.cpp.patch new file mode 100644 index 000000000..b31366d0a --- /dev/null +++ b/packages/snapcast-server/server-streamreader-airplay_stream.cpp.patch @@ -0,0 +1,11 @@ +--- a/server/streamreader/airplay_stream.cpp ++++ b/server/streamreader/airplay_stream.cpp +@@ -204,7 +204,7 @@ + + void AirplayStream::setParamsAndPipePathFromPort() + { +- pipePath_ = "/tmp/shairmeta." + cpt::to_string(getpid()) + "." + cpt::to_string(port_); ++ pipePath_ = "@TERMUX_PREFIX@/tmp/shairmeta." + cpt::to_string(getpid()) + "." + cpt::to_string(port_); + params_ = params_wo_port_ + " \"--metadata-pipename=" + pipePath_ + "\" --port=" + cpt::to_string(port_); + } + diff --git a/packages/snapcast-server/test-test_main.cpp.patch b/packages/snapcast-server/test-test_main.cpp.patch new file mode 100644 index 000000000..cd05bb349 --- /dev/null +++ b/packages/snapcast-server/test-test_main.cpp.patch @@ -0,0 +1,14 @@ +--- a/test/test_main.cpp ++++ b/test/test_main.cpp +@@ -36,9 +36,9 @@ + { + AixLog::Log::init(AixLog::Severity::debug); + using namespace streamreader; +- StreamUri uri("pipe:///tmp/snapfifo?name=default&codec=flac"); ++ StreamUri uri("pipe://@TERMUX_PREFIX@/tmp/snapfifo?name=default&codec=flac"); + REQUIRE(uri.scheme == "pipe"); +- REQUIRE(uri.path == "/tmp/snapfifo"); ++ REQUIRE(uri.path == "@TERMUX_PREFIX@/tmp/snapfifo"); + REQUIRE(uri.host.empty()); + + // uri = StreamUri("scheme:[//host[:port]][/]path[?query=none][#fragment]");