shairplay: add new package.

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
This commit is contained in:
Álvaro Fernández Rojas 2014-10-25 21:48:57 +02:00
parent 31db0a0ca6
commit 236f128117
6 changed files with 158 additions and 0 deletions

View File

@ -0,0 +1,56 @@
#
# Copyright (C) 2014 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
include $(TOPDIR)/rules.mk
PKG_NAME:=shairplay
PKG_VERSION:=2014-10-25
PKG_RELEASE:=$(PKG_SOURCE_VERSION)
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=git://github.com/juhovh/shairplay.git
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
PKG_SOURCE_VERSION:=64d59e3087f829006d091fa0d114efb50972a2bf
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
PKG_MAINTAINER:=Álvaro Fernández Rojas <noltari@gmail.com>
PKG_LICENSE:=MIT
PKG_LICENSE_FILES:=LICENSE
include $(INCLUDE_DIR)/package.mk
PKG_FIXUP:=libtool
define Package/shairplay
SECTION:=multimedia
CATEGORY:=Multimedia
DEPENDS:=+avahi-daemon +libao +libavahi-compat-libdnssd +libltdl +libpthread
TITLE:=Shairplay
endef
define Build/Configure
(cd $(PKG_BUILD_DIR)/$(CONFIGURE_PATH); \
./autogen.sh;)
$(call Build/Configure/Default)
endef
define Package/shairplay/description
Free portable AirPlay server implementation similar to ShairPort.
endef
define Package/shairplay/install
$(INSTALL_DIR) $(1)/usr/bin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/src/shairplay $(1)/usr/bin/
$(INSTALL_DIR) $(1)/usr/share/shairplay
$(INSTALL_DATA) $(PKG_BUILD_DIR)/airport.key $(1)/usr/share/shairplay/
$(INSTALL_DIR) $(1)/etc/init.d
$(INSTALL_BIN) files/shairplay.init $(1)/etc/init.d/shairplay
$(INSTALL_DIR) $(1)/etc/config
$(INSTALL_CONF) files/shairplay.config $(1)/etc/config/shairplay
endef
$(eval $(call BuildPackage,shairplay))

View File

@ -0,0 +1,9 @@
config shairplay main
option disabled '1'
option apname 'AirPlay'
option port '5000'
option password ''
option hwaddr ''
option ao_driver 'oss'
option ao_devicename ''
option ao_deviceid ''

View File

@ -0,0 +1,47 @@
#!/bin/sh /etc/rc.common
# Copyright (C) 2014 OpenWrt.org
START=90
USE_PROCD=1
append_arg() {
local cfg="$1"
local var="$2"
local opt="$3"
local def="$4"
local val
config_get val "$cfg" "$var"
[ -n "$val" -o -n "$def" ] && procd_append_param command $opt="${val:-$def}"
}
start_instance() {
local cfg="$1"
config_get_bool disabled "$cfg" 'disabled' '0'
[ "$disabled" = 1 ] && return 1
procd_open_instance
procd_set_param command /usr/bin/shairplay
append_arg "$cfg" apname "--apname" "AirPlay"
append_arg "$cfg" port "--server_port"
append_arg "$cfg" password "--password"
append_arg "$cfg" hwaddr "--hwaddr"
append_arg "$cfg" ao_driver "--ao_driver"
append_arg "$cfg" ao_devicename "--ao_devicename"
append_arg "$cfg" ao_deviceid "--ao_deviceid"
procd_close_instance
}
service_triggers() {
procd_add_reload_trigger "shairplay"
}
start_service() {
config_load shairplay
config_foreach start_instance shairplay
}

View File

@ -0,0 +1,11 @@
--- a/src/shairplay.c
+++ b/src/shairplay.c
@@ -346,7 +346,7 @@ main(int argc, char *argv[])
raop_cbs.audio_destroy = audio_destroy;
raop_cbs.audio_set_volume = audio_set_volume;
- raop = raop_init_from_keyfile(10, &raop_cbs, "airport.key", NULL);
+ raop = raop_init_from_keyfile(10, &raop_cbs, "/usr/share/shairplay/airport.key", NULL);
if (raop == NULL) {
fprintf(stderr, "Could not initialize the RAOP service\n");
fprintf(stderr, "Please make sure the airport.key file is in the current directory.\n");

View File

@ -0,0 +1,11 @@
--- a/src/lib/dnssd.c
+++ b/src/lib/dnssd.c
@@ -167,7 +167,7 @@ dnssd_init(int *error)
return NULL;
}
#elif USE_LIBDL
- dnssd->module = dlopen("libdns_sd.so", RTLD_LAZY);
+ dnssd->module = dlopen("libdns_sd.so.1", RTLD_LAZY);
if (!dnssd->module) {
if (error) *error = DNSSD_ERROR_LIBNOTFOUND;
free(dnssd);

View File

@ -0,0 +1,24 @@
--- a/src/lib/alac/alac.c
+++ b/src/lib/alac/alac.c
@@ -29,11 +29,7 @@
*
*/
-#ifdef __BIG_ENDIAN__
-static const int host_bigendian = 1;
-#else
-static const int host_bigendian = 0;
-#endif
+static int host_bigendian = 0;
#include <stdio.h>
#include <stdlib.h>
@@ -1181,6 +1177,8 @@ alac_file *create_alac(int samplesize, i
{
alac_file *newfile = malloc(sizeof(alac_file));
+ host_bigendian = (htonl(42) == 42);
+
newfile->samplesize = samplesize;
newfile->numchannels = numchannels;
newfile->bytespersample = (samplesize / 8) * numchannels;