include $(TOPDIR)/rules.mk
PKG_NAME:=debootstrap
-PKG_VERSION:=1.0.116
+PKG_VERSION:=1.0.119~bpo10+1
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-udeb_$(PKG_VERSION)_all.udeb
PKG_SOURCE_URL:=http://ftp.debian.org/debian/pool/main/d/debootstrap
-PKG_HASH:=2325cbad6fac19cec7db34cff8fc06f9d9781862621b6e91f10549cf7c7c66af
+PKG_HASH:=b48aeb76533f233ac45c8b5ddd452550b3998e67e32dba4137f320a1a7b3519e
PKG_MAINTAINER:=Daniel Golle <daniel@makrotopia.org>
PKG_LICENSE:=Unique
+#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
--- /dev/null
+--- a/usr/share/debootstrap/functions
++++ b/usr/share/debootstrap/functions
+@@ -77,7 +77,6 @@ progress_next () {
+ }
+
+ wgetprogress () {
+- [ ! "$VERBOSE" ] && NVSWITCH="-nv"
+ local ret=0
+ if [ "$USE_DEBIANINSTALLER_INTERACTION" ] && [ "$PROGRESS_NEXT" ]; then
+ # The exit status of a pipeline is that of the last command in
--- /dev/null
+menu "Configuration"
+
+config SCHROOT_BTRFS
+ bool "Enable support for btrfs snapshots"
+ select PACKAGE_btrfs-progs
+ default n
+
+config SCHROOT_LOOPBACK
+ bool "Enable support for loopback mounts"
+ select PACKAGE_losetup
+ default n
+
+config SCHROOT_LVM
+ bool "Enable support for LVM snapshots"
+ select PACKAGE_lvm2
+ default n
+
+config SCHROOT_UUID
+ bool "Enable support for UUIDs"
+ select PACKAGE_libuuid
+ default n
+
+endmenu
--- /dev/null
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=schroot
+PKG_VERSION:=1.6.10
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)_$(PKG_VERSION).orig.tar.xz
+PKG_SOURCE_URL:=http://deb.debian.org/debian/pool/main/s/schroot
+PKG_HASH:=3ce8dfd9cb97b099e4b6d4ccec421d6cc8c9ef84574681e928a12badb5643d0b
+
+PKG_MAINTAINER:=Javier Marcet <javier@marcet.info>
+PKG_LICENSE:=GPL-3.0-only
+PKG_LICENSE_FILES:=COPYING
+
+PKG_INSTALL:=1
+PKG_BUILD_PARALLEL:=1
+PKG_FIXUP:=autoreconf
+
+include $(INCLUDE_DIR)/nls.mk
+include $(INCLUDE_DIR)/package.mk
+
+define Package/schroot
+ SECTION:=admin
+ CATEGORY:=Administration
+ TITLE:=Securely enter a chroot and run a command or login shell.
+ DEPENDS:=$(ICONV_DEPENDS) \
+ +boost +boost-filesystem +boost-iostreams +boost-program_options +boost-regex \
+ +SCHROOT_BTRFS:btrfs-progs \
+ +SCHROOT_LOOPBACK:losetup \
+ +SCHROOT_LVM:lvm2 \
+ +SCHROOT_UUID:libuuid
+ URL:=https://salsa.debian.org/debian/schroot
+endef
+
+define Package/schroot/description
+ Securely enter a chroot and run a command or login shell.
+endef
+
+define Package/sudo/conffiles
+/etc/schroot/
+endef
+
+define Package/schroot/config
+ source "$(SOURCE)/Config.in"
+endef
+
+PKG_CONFIG_DEPENDS := \
+ CONFIG_SCHROOT_BTRFS \
+ CONFIG_SCHROOT_LOOPBACK \
+ CONFIG_SCHROOT_LVM \
+ CONFIG_SCHROOT_UUID
+
+CONFIGURE_ARGS += \
+ $(if $(CONFIG_SCHROOT_BTRFS),--enable,--disable)-btrfs-snapshot \
+ $(if $(CONFIG_SCHROOT_LOOPBACK),--enable,--disable)-loopback \
+ $(if $(CONFIG_SCHROOT_LVM),--enable,--disable)-lvm-snapshot \
+ $(if $(CONFIG_SCHROOT_UUID),--enable,--disable)-uuid \
+ --enable-block-device \
+ --enable-union \
+ --disable-dchroot \
+ --disable-dchroot-dsa \
+ --disable-csbuild \
+ --disable-debug \
+ --disable-pam \
+ --disable-doxygen \
+ --disable-rpath
+
+define Package/schroot/install
+ $(INSTALL_DIR) $(1)/usr/bin
+ $(INSTALL_SUID) $(PKG_INSTALL_DIR)/usr/bin/schroot $(1)/usr/bin/
+ $(INSTALL_DIR) $(1)/etc/schroot
+ $(CP) -R $(PKG_INSTALL_DIR)/etc/schroot/* $(1)/etc/schroot
+ $(INSTALL_DIR) $(1)/usr/lib/schroot
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/libsbuild.* $(1)/usr/lib/
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/schroot/* $(1)/usr/lib/schroot/
+ $(INSTALL_DIR) $(1)/usr/share/schroot
+ $(CP) -R $(PKG_INSTALL_DIR)/usr/share/schroot/* $(1)/usr/share/schroot/
+ $(INSTALL_DIR) $(1)/etc/init.d
+ $(INSTALL_BIN) ./files/schroot.init $(1)/etc/init.d/schroot
+endef
+
+$(eval $(call BuildPackage,schroot))
--- /dev/null
+#!/bin/sh /etc/rc.common
+
+START=94
+
+start() {
+ [ -d /var/lib/schroot ] || {
+ mkdir -p /var/lib/schroot/mount /var/lib/schroot/session /var/lib/schroot/unpack /var/lib/schroot/union/overlay /var/lib/schroot/union/underlay
+ chmod 0700 /var/lib/schroot
+ }
+}
--- /dev/null
+--- ./configure.ac-orig 2019-12-09 12:56:45.217308628 +0100
++++ ./configure.ac 2019-12-09 12:57:18.667492923 +0100
+@@ -284,22 +284,8 @@ if test -z "$DOXYGEN"; then
+ HAVE_DOXYGEN="no"
+ fi
+ HAVE_LVM="yes"
+-AC_PATH_PROG([LVCREATE], [lvcreate], [], [$PATH:/sbin:/usr/sbin])
+-AC_PATH_PROG([LVREMOVE], [lvremove], [], [$PATH:/sbin:/usr/sbin])
+-if test -z "$LVCREATE" || test -z "$LVREMOVE"; then
+- HAVE_LVM="no"
+-fi
+ HAVE_BTRFS="yes"
+-AC_PATH_PROG([BTRFS], [btrfs], [], [$PATH:/sbin:/usr/sbin])
+-AC_PATH_PROG([BTRFSCTL], [btrfsctl], [], [$PATH:/sbin:/usr/sbin])
+-if test -z "$BTRFS" || test -z "$BTRFSCTL"; then
+- HAVE_BTRFS="no"
+-fi
+ HAVE_LOOPBACK="yes"
+-AC_PATH_PROG([LOSETUP], [losetup], [], [$PATH:/sbin:/usr/sbin])
+-if test -z "$LOSETUP"; then
+- HAVE_LOOPBACK="no"
+-fi
+
+
+ # Check for host platform
+@@ -336,7 +322,6 @@ PKG_CHECK_MODULES([UUID], [uuid],
+ [HAVE_UUID=yes],
+ [HAVE_UUID=no])
+
+-AM_PATH_CPPUNIT([1.10.0], [HAVE_CPPUNIT=yes])
+ AM_CONDITIONAL([USE_UNIT_TESTS], [test -n "$HAVE_CPPUNIT"])
+
+ SCHROOT_CFLAGS="$UUID_CFLAGS"
+@@ -688,42 +673,25 @@ if test "$BOOST_PROGRAM_OPTIONS_VALIDATI
+ fi
+
+ dnl Note the use of quadrigraphs to quote [ and ] in regexes.
+-AH_TEMPLATE(HAVE_REGEX_REGEX, [Set if the <regex> header file includes std::regex])
+ AH_TEMPLATE(HAVE_BOOST_REGEX, [Set if the <boost/regex.hpp> header file includes boost::regex])
+-AC_MSG_CHECKING([for std::regex])
+-define([testprog], [AC_LANG_PROGRAM([#include <regex>],
+- [std::regex foo("^foo@<:@bar@:>@$");
+- std::regex bar("^foo@<:@bar@:>@$", std::regex::extended);
+- std::regex check("^@<:@^:/,.@:>@@<:@^:/,@:>@*$", std::regex::extended);])])
+-AC_RUN_IFELSE(testprog,
+- [AC_MSG_RESULT([yes])
+- AC_DEFINE(HAVE_REGEX_REGEX, 1)],
+- [dnl Check if std::regex is present but broken.
+-define([testprog], [AC_LANG_PROGRAM([#include <regex>],
+- [std::regex foo("^foo@<:@bar@:>@$");
+- std::regex bar("^foo@<:@bar@:>@$", std::regex::extended);])])
++AC_MSG_CHECKING([for boost::regex in -lboost_regex])
++saved_LIBS="${LIBS}"
++LIBS="${saved_LIBS} -lboost_regex"
++define([testprog], [AC_LANG_PROGRAM([#include <boost/regex.hpp>],
++ [boost::regex("^foo@<:@bar@:>@$");
++ boost::regex bar("^foo@<:@bar@:>@$", boost::regex::extended);])])
+ AC_LINK_IFELSE(testprog,
+- [AC_MSG_RESULT([broken])],
+- [AC_MSG_RESULT([no])])
+- AC_MSG_CHECKING([for boost::regex in -lboost_regex])
+- saved_LIBS="${LIBS}"
+- LIBS="${saved_LIBS} -lboost_regex"
+- define([testprog], [AC_LANG_PROGRAM([#include <boost/regex.hpp>],
+- [boost::regex("^foo@<:@bar@:>@$");
+- boost::regex bar("^foo@<:@bar@:>@$", boost::regex::extended);])])
+- AC_LINK_IFELSE(testprog,
+- [AC_MSG_RESULT([yes])
+- AC_DEFINE(HAVE_BOOST_REGEX, 1)
+- BOOST_LIBS="${BOOST_LIBS} -lboost_regex"],
+- [LIBS="${saved_LIBS} -lboost_regex-mt"
+- AC_LINK_IFELSE(testprog,
+- [AC_MSG_RESULT([yes])
+- AC_DEFINE(HAVE_BOOST_REGEX, 1)
+- BOOST_LIBS="${BOOST_LIBS} -lboost_regex-mt"],
+- [AC_MSG_RESULT([no])
+- AC_MSG_FAILURE([libboost_regex (Boost C++ Libraries) is not installed, but is required by schroot])])])
+- LIBS="${saved_LIBS}"
+-])
++ [AC_MSG_RESULT([yes])
++ AC_DEFINE(HAVE_BOOST_REGEX, 1)
++ BOOST_LIBS="${BOOST_LIBS} -lboost_regex"],
++ [LIBS="${saved_LIBS} -lboost_regex-mt"
++ AC_LINK_IFELSE(testprog,
++ [AC_MSG_RESULT([yes])
++ AC_DEFINE(HAVE_BOOST_REGEX, 1)
++ BOOST_LIBS="${BOOST_LIBS} -lboost_regex-mt"],
++ [AC_MSG_RESULT([no])
++ AC_MSG_FAILURE([libboost_regex (Boost C++ Libraries) is not installed, but is required by schroot])])])
++LIBS="${saved_LIBS}"
+
+ AC_MSG_CHECKING([for boost::iostreams in -lboost_iostreams])
+ saved_LIBS="${LIBS}"
+--- ./bin/schroot-base/schroot-base-run.h-orig 2019-12-09 04:23:51.881428446 +0100
++++ ./bin/schroot-base/schroot-base-run.h 2019-12-09 04:24:14.934887089 +0100
+@@ -61,8 +61,8 @@ namespace schroot_base
+ std::cout.imbue(std::locale());
+ std::cerr.imbue(std::locale());
+
+- bindtextdomain (SBUILD_MESSAGE_CATALOGUE, SCHROOT_LOCALE_DIR);
+- textdomain (SBUILD_MESSAGE_CATALOGUE);
++ //bindtextdomain (SBUILD_MESSAGE_CATALOGUE, SCHROOT_LOCALE_DIR);
++ //textdomain (SBUILD_MESSAGE_CATALOGUE);
+
+ typename options_type::ptr opts(new options_type);
+ main_type kit(opts);
+--- ./sbuild/sbuild-feature.h-orig 2019-12-09 04:23:51.881428446 +0100
++++ ./sbuild/sbuild-feature.h 2019-12-09 04:24:14.934887089 +0100
+@@ -24,6 +24,7 @@
+ #include <string>
+
+ #include <boost/format.hpp>
++#include <libintl.h>
+
+ namespace sbuild
+ {
+--- ./etc/setup.d/20copyfiles-orig 2018-11-03 14:26:12.000000000 +0100
++++ ./etc/setup.d/20copyfiles 2019-12-09 13:56:45.277145648 +0100
+@@ -39,9 +39,9 @@ copy_file()
+ if [ -e "$2" ]; then
+
+ # Device and inode
+- da=$(/usr/bin/stat --format="%d %i" "$1")
++ da=$(/bin/stat --format="%d %i" "$1")
+ # This one can fail since it might not exist yet
+- db=$(/usr/bin/stat --format="%d %i" "$2" 2>/dev/null || :)
++ db=$(/bin/stat --format="%d %i" "$2" 2>/dev/null || :)
+
+ if [ "$da" = "$db" ]; then
+ COPY="false"
+--- ./etc/setup.d/20nssdatabases-orig 2018-11-03 14:26:12.000000000 +0100
++++ ./etc/setup.d/20nssdatabases 2019-12-09 13:57:34.397419039 +0100
+@@ -29,7 +29,7 @@ set -e
+ dup_nss()
+ {
+ info "Copying $1 database to $2"
+- getent "$1" > "$2"
++ cat "/etc/$1" > "$2"
+ }
+
+ if [ $STAGE = "setup-start" ] || [ $STAGE = "setup-recover" ]; then
+@@ -42,9 +42,9 @@ if [ $STAGE = "setup-start" ] || [ $STAG
+ fi
+
+ # Device and inode
+- dr=$(/usr/bin/stat --format="%d %i" "/etc/$db")
++ dr=$(/bin/stat --format="%d %i" "/etc/$db")
+ # This one can fail since it might not exist yet
+- dc=$(/usr/bin/stat --format="%d %i" "${CHROOT_PATH}/etc/$db" 2>/dev/null || :)
++ dc=$(/bin/stat --format="%d %i" "${CHROOT_PATH}/etc/$db" 2>/dev/null || :)
+
+ # If the database inside and outside the chroot is the
+ # same, it's very likely that dup_nss would blank the
+diff -X /home/jmarcet/.rsync-filter -pru ./etc/profile-templates/all/all/nssdatabases ./etc/profile-templates/all/all/nssdatabases
+--- ./etc/profile-templates/all/all/nssdatabases 2018-11-03 14:26:12.000000000 +0100
++++ ./etc/profile-templates/all/all/nssdatabases 2019-12-09 14:03:12.799297723 +0100
+@@ -4,4 +4,4 @@
+ passwd
+ shadow
+-group
+-gshadow
++#group
++#gshadow
+diff -X /home/jmarcet/.rsync-filter -pru ./etc/profile-templates/buildd/all/nssdatabases ./etc/profile-templates/buildd/all/nssdatabases
+--- ./etc/profile-templates/buildd/all/nssdatabases 2018-11-03 14:26:12.000000000 +0100
++++ ./etc/profile-templates/buildd/all/nssdatabases 2019-12-09 14:03:12.802631074 +0100
+@@ -4,4 +4,4 @@
+ passwd
+ shadow
+-group
+-gshadow
++#group
++#gshadow
+diff -X /home/jmarcet/.rsync-filter -pru ./etc/profile-templates/default/all/nssdatabases ./etc/profile-templates/default/all/nssdatabases
+--- ./etc/profile-templates/default/all/nssdatabases 2018-11-03 14:26:12.000000000 +0100
++++ ./etc/profile-templates/default/all/nssdatabases 2019-12-09 14:03:12.809297778 +0100
+@@ -1,4 +1,4 @@
+ services
+ protocols
+-networks
++#networks
+ hosts
+diff -X /home/jmarcet/.rsync-filter -pru ./etc/profile-templates/desktop/all/nssdatabases ./etc/profile-templates/desktop/all/nssdatabases
+--- ./etc/profile-templates/desktop/all/nssdatabases 2018-11-03 14:26:12.000000000 +0100
++++ ./etc/profile-templates/desktop/all/nssdatabases 2019-12-09 14:03:12.812631129 +0100
+@@ -1,4 +1,4 @@
+ services
+ protocols
+-networks
++#networks
+ hosts
+diff -X /home/jmarcet/.rsync-filter -pru ./etc/profile-templates/default/linux/fstab ./etc/profile-templates/default/linux/fstab
+--- ./etc/profile-templates/default/linux/fstab 2018-11-03 14:26:12.000000000 +0100
++++ ./etc/profile-templates/default/linux/fstab 2019-12-09 14:18:46.970887080 +0100
+@@ -7,7 +7,7 @@
+ # to run additional services in the chroot. However, note that this
+ # may potentially cause undesirable behaviour on upgrades, such as
+ # killing services on the host.
+-#/run /run none rw,bind 0 0
++/run /run none rw,bind 0 0
+ #/run/lock /run/lock none rw,bind 0 0
+-#/dev/shm /dev/shm none rw,bind 0 0
+-#/run/shm /run/shm none rw,bind 0 0
++/tmp/shm /dev/shm none rw,bind 0 0
++/tmp/shm /run/shm none rw,bind 0 0
+diff -X /home/jmarcet/.rsync-filter -pru ./etc/profile-templates/desktop/linux/fstab ./etc/profile-templates/desktop/linux/fstab
+--- ./etc/profile-templates/desktop/linux/fstab 2018-11-03 14:26:12.000000000 +0100
++++ ./etc/profile-templates/desktop/linux/fstab 2019-12-09 14:22:14.148555674 +0100
+@@ -12,7 +12,7 @@
+ # to run additional services in the chroot. However, note that this
+ # may potentially cause undesirable behaviour on upgrades, such as
+ # killing services on the host.
+-#/run /run none rw,bind 0 0
++/run /run none rw,bind 0 0
+ #/run/lock /run/lock none rw,bind 0 0
+-#/dev/shm /dev/shm none rw,bind 0 0
+-#/run/shm /run/shm none rw,bind 0 0
++/tmp/shm /dev/shm none rw,bind 0 0
++/tmp/shm /run/shm none rw,bind 0 0
include $(TOPDIR)/rules.mk
PKG_NAME:=syslog-ng
-PKG_VERSION:=3.25.1
-PKG_RELEASE:=2
+PKG_VERSION:=3.26.1
+PKG_RELEASE:=1
PKG_MAINTAINER:=Josef Schlehofer <josef.schlehofer@nic.cz>
PKG_LICENSE:=LGPL-2.1-or-later GPL-2.0-or-later
PKG_CPE_ID:=cpe:/a:balabit:syslog-ng
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://github.com/balabit/syslog-ng/releases/download/$(PKG_NAME)-$(PKG_VERSION)/
-PKG_HASH:=34cb9673bcde58d543890e6c1189f466f938e199f227c524a6fa2f47f4db6817
+PKG_SOURCE_URL:=https://github.com/syslog-ng/syslog-ng/releases/download/$(PKG_NAME)-$(PKG_VERSION)/
+PKG_HASH:=90214223864df252cea80dbb35c88a2464edcbbb2c9fbc6f6f6c13ee60cb62cd
PKG_BUILD_PARALLEL:=1
PKG_INSTALL:=1
$(INSTALL_DATA) ./files/syslog-ng.conf $(1)/etc
touch $(1)/etc/syslog-ng.d/.keep
- $(INSTALL_BIN) ./files/logread $(1)/usr/sbin
+ $(INSTALL_DIR) $(1)/sbin
+ $(INSTALL_BIN) ./files/logread $(1)/sbin
endef
define Package/syslog-ng/postinst
# More details about these settings can be found here:
# https://www.syslog-ng.com/technical-documents/list/syslog-ng-open-source-edition
-@version: 3.25
+@version: 3.26
@include "scl.conf"
@include "/etc/syslog-ng.d/" # Put any customization files in this directory
$(MAKE) -C "$(LINUX_DIR)" \
ARCH="$(LINUX_KARCH)" \
CROSS_COMPILE="$(TARGET_CROSS)" \
- SUBDIRS="$(PKG_BUILD_DIR)" \
+ M="$(PKG_BUILD_DIR)" \
V="$(V)" \
modules
endef
include $(TOPDIR)/rules.mk
PKG_NAME:=meson
-PKG_VERSION:=0.53.1
+PKG_VERSION:=0.53.2
PKG_RELEASE:=1
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://github.com/mesonbuild/meson/releases/download/$(PKG_VERSION)/
-PKG_HASH:=ec1ba33eea701baca2c1607dac458152dc8323364a51fdef6babda2623413b04
+PYPI_NAME:=meson
+PKG_HASH:=3e8f830f33184397c2eb0b651ec502adb63decb28978bdc84b3558d71284c21f
PKG_MAINTAINER:=Andre Heider <a.heider@gmail.com>
PKG_LICENSE:=Apache-2.0
HOST_BUILD_DEPENDS:=ninja/host
+include ../../lang/python/pypi.mk
include $(INCLUDE_DIR)/host-build.mk
include $(INCLUDE_DIR)/package.mk
include ../../lang/python/python3-package.mk
--- /dev/null
+include $(TOPDIR)/rules.mk
+include $(INCLUDE_DIR)/kernel.mk
+
+PKG_NAME:=antfs
+PKG_RELEASE:=1
+
+PKG_SOURCE_URL:=https://github.com/klukonin/antfs.git
+PKG_SOURCE_PROTO:=git
+PKG_SOURCE_DATE:=2020-02-10
+PKG_SOURCE_VERSION:=b41ba529f6b64b429527e09a06ce0326d5456c05
+PKG_MIRROR_HASH:=dae039c0fe5bf1a2c8c1cca4211d607a4d6f56fc41b38444e2234b40d710d9db
+
+PKG_LICENSE:=GPL-2.0-or-later
+PKG_LICENSE_FILES:=LICENSE
+
+include $(INCLUDE_DIR)/package.mk
+
+define KernelPackage/fs-antfs
+ SUBMENU:=Filesystems
+ TITLE:=AVM NTFS Read/Write Driver
+ FILES:=$(PKG_BUILD_DIR)/antfs.ko
+ AUTOLOAD:=$(call AutoLoad,30,antfs,1)
+ DEPENDS:=+kmod-nls-base
+endef
+
+define KernelPackage/fs-antfs/description
+ Kernel module for NTFS Filesytem
+endef
+
+MAKE_OPTS:= \
+ ARCH="$(LINUX_KARCH)" \
+ CROSS_COMPILE="$(TARGET_CROSS)" \
+ M="$(PKG_BUILD_DIR)"
+
+define Build/Compile
+ $(MAKE) -C "$(LINUX_DIR)" \
+ $(MAKE_OPTS) \
+ CONFIG_ANTFS_FS=m \
+ CONFIG_ANTFS_SYMLINKS=y \
+ ANTFS_VERSION=07.19-$(call version_abbrev,$(PKG_SOURCE_VERSION)) \
+ modules
+endef
+
+$(eval $(call KernelPackage,fs-antfs))
include $(INCLUDE_DIR)/package.mk
-define KernelPackage/fs-exfat
+define KernelPackage/fs-exfat0
SUBMENU:=Filesystems
- TITLE:=ExFAT Kernel driver
+ TITLE:=ExFAT Kernel driver (deprecated)
FILES:=$(PKG_BUILD_DIR)/exfat.ko
AUTOLOAD:=$(call AutoLoad,30,exfat,1)
- DEPENDS:=+kmod-nls-base
+ DEPENDS:=+kmod-nls-base @(LINUX_4_14||LINUX_4_19)
endef
-define KernelPackage/fs-exfat/description
+define KernelPackage/fs-exfat0/description
Kernel module for ExFAT Filesytems
endef
modules
endef
-$(eval $(call KernelPackage,fs-exfat))
+$(eval $(call KernelPackage,fs-exfat0))
endif
define Build/Compile
- $(KERNEL_MAKE) SUBDIRS="$(PKG_BUILD_DIR)" \
+ $(KERNEL_MAKE) M="$(PKG_BUILD_DIR)" \
EXTRA_CFLAGS="$(EXTRA_CFLAGS)" \
$(PKG_EXTRA_KCONFIG) \
CONFIG_SMB_SERVER=m \
-#
-# Copyright (C) 2019 Jerônimo Cordoni Pellegrini <j_p@aleph0.info>
+# Copyright (C) 2019-2020 Jerônimo Cordoni Pellegrini <j_p@aleph0.info>
#
# This file is free software, licensed under the GNU General Public License v3
# or later.
include $(TOPDIR)/rules.mk
-PKG_NAME:=chicken-scheme-interpreter
-PKG_VERSION=5.1.0
+PKG_NAME:=chicken-scheme
+PKG_VERSION=5.2.0
PKG_RELEASE:=1
+PKG_BUILD_DIR:=$(BUILD_DIR)/chicken-$(PKG_VERSION)
PKG_SOURCE:=chicken-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://code.call-cc.org/releases/$(PKG_VERSION)/
-PKG_HASH:=5c1101a8d8faabfd500ad69101e0c7c8bd826c68970f89c270640470e7b84b4b
-PKG_BUILD_DIR:=$(BUILD_DIR)/chicken-$(PKG_VERSION)
-
+PKG_HASH:=819149c8ce7303a9b381d3fdc1d5765c5f9ac4dee6f627d1652f47966a8780fa
PKG_MAINTAINER:=Jeronimo Pellegrini <j_p@aleph0.info>
+
PKG_LICENSE:=BSD-3-Clause
PKG_LICENSE_FILES:=LICENSE
include $(INCLUDE_DIR)/package.mk
-define Package/chicken-scheme-interpreter
+
+
+
+define Package/chicken-scheme/Default
SECTION:=lang
CATEGORY:=Languages
- TITLE:=Chicken Scheme
URL:=https://call-cc.org
ABI_VERSION:=11
endef
+
+##
+## chicken-scheme-interpreter
+##
+
+define Package/chicken-scheme-interpreter
+$(call Package/chicken-scheme/Default)
+ TITLE:=Chicken Scheme -- interpreter only
+ SECTION:=lang
+ CATEGORY:=Languages
+endef
+
define Package/chicken-scheme-interpreter/description
Chicken is an implementation of the Scheme language. It is portable, efficient, and supports
the R5RS and R7RS (work in progress) standards, and many extensions.
For more information, please refer to the Chicken Scheme website at https://call-cc.org.
endef
-MAKE_FLAGS += PLATFORM=linux C_COMPILER=$(TARGET_CC) LINKER=$(TARGET_CC) PREFIX=/usr C_COMPILER_OPTIMIZATION_OPTIONS="$(TARGET_CFLAGS)"
+
+# csc calls gcc with "-lm -ldl", but "-lm" doesn't work with musl,
+# so we set LIBRARIES=-lm
+MAKE_FLAGS += PLATFORM=linux C_COMPILER=$(TARGET_CC) LINKER=$(TARGET_CC) PREFIX=/usr C_COMPILER_OPTIMIZATION_OPTIONS="$(TARGET_CFLAGS)" LIBRARIES=-lm
# not installed:
# - csc and chicken, the compiler
# - the include dir (only useful with the compiler)
-# - install, uninstall, status, and chicken-do, which deal with modules (installation of more modules depends on the compiler)
+# - install, uninstall, status, and chicken-do, which deal with modules
+# (installation of more modules depends on the compiler)
# - profiler
# - feathers, the debugger
# - libchicken.a, the static library
$(eval $(call BuildPackage,chicken-scheme-interpreter))
+
+
+##
+## chicken-scheme-full
+##
+
+# mips-openwrt-linux-musl-gcc dowsn't seem to link with libchicken.so.
+# already tried -lchicken and passing /usr/lib/libchicken.so on the command
+# line.
+# also tried -Wl,-R/usr/lib,-R/usr/lib/chicken/$(ABI_VERSION)
+#
+# current solution: we do not strip binaries in chicken-scheme-full
+# we do this by unsetting STRIP and RSTRIP, *and* reloading rules.mk
+#
+STRIP:=:
+RSTRIP:=:
+include $(TOPDIR)/rules.mk
+
+define Package/chicken-scheme-full
+$(call Package/chicken-scheme/Default)
+ TITLE:=Chicken Scheme -- full package
+ SECTION:=lang
+ CATEGORY:=Languages
+ # csc depends on gcc; chicken-install uses the 'install' command from coreutils
+ EXTRA_DEPENDS:= gcc, coreutils-install
+endef
+
+define Package/chicken-scheme-full/description
+ Chicken is an implementation of the Scheme language. It is portable, efficient, and supports
+ the R5RS and R7RS (work in progress) standards, and many extensions.
+ Chicken can be used as a scripting language to automate tasks.
+ This package contains the interpreter, 'csi'; the compiler, 'csc';
+ the tools for installing and removing eggs (modules); the profiler and
+ the debugger.
+ Note that this package depends on gcc, which is quite large (more than 100Mb).
+ For more information, please refer to the Chicken Scheme website at https://call-cc.org.
+endef
+
+
+# not installed:
+# - libchicken.a, the static library
+define Package/chicken-scheme-full/install
+ $(INSTALL_DIR) $(1)/usr/bin
+ $(INSTALL_DIR) $(1)/usr/lib/chicken/$(ABI_VERSION)
+ $(INSTALL_DIR) $(1)/usr/include/chicken
+ $(INSTALL_DIR) $(1)/usr/share/chicken
+ $(INSTALL_BIN) $(PKG_BUILD_DIR)/csi $(1)/usr/bin/
+ $(CP) $(PKG_BUILD_DIR)/libchicken.so.$(ABI_VERSION) $(1)/usr/lib/
+ $(CP) $(PKG_BUILD_DIR)/libchicken.so $(1)/usr/lib/
+ $(CP) $(PKG_BUILD_DIR)/*.import.so $(1)/usr/lib/chicken/$(ABI_VERSION)/
+ $(CP) $(PKG_BUILD_DIR)/types.db $(1)/usr/lib/chicken/$(ABI_VERSION)/
+ # csc
+ $(INSTALL_BIN) $(PKG_BUILD_DIR)/csc $(1)/usr/bin/
+ $(INSTALL_BIN) $(PKG_BUILD_DIR)/chicken $(1)/usr/bin/
+ $(INSTALL_DATA) $(PKG_BUILD_DIR)/chicken.h $(1)/usr/include/chicken/
+ $(INSTALL_DATA) $(PKG_BUILD_DIR)/chicken-config.h $(1)/usr/include/chicken/
+ # chicken-install
+ $(INSTALL_BIN) $(PKG_BUILD_DIR)/chicken-install $(1)/usr/bin/
+ $(INSTALL_BIN) $(PKG_BUILD_DIR)/chicken-uninstall $(1)/usr/bin/
+ $(INSTALL_BIN) $(PKG_BUILD_DIR)/chicken-status $(1)/usr/bin/
+ $(INSTALL_BIN) $(PKG_BUILD_DIR)/chicken-do $(1)/usr/bin/
+ $(INSTALL_DATA) $(PKG_BUILD_DIR)/setup.defaults $(1)/usr/share/chicken/
+ # profile
+ $(INSTALL_BIN) $(PKG_BUILD_DIR)/chicken-profile $(1)/usr/bin/
+ # feathers
+ $(INSTALL_BIN) $(PKG_BUILD_DIR)/feathers.tcl $(1)/usr/share/chicken/
+ $(INSTALL_BIN) $(PKG_BUILD_DIR)/feathers $(1)/usr/bin/
+endef
+
+$(eval $(call BuildPackage,chicken-scheme-full))
GOROOT \
GOTMPDIR
# Unmodified:
+# GOINSECURE
# GOPRIVATE
# GOPROXY
# GONOPROXY
include $(TOPDIR)/rules.mk
-GO_VERSION_MAJOR_MINOR:=1.13
-GO_VERSION_PATCH:=8
+GO_VERSION_MAJOR_MINOR:=1.14
+GO_VERSION_PATCH:=
PKG_NAME:=golang
PKG_VERSION:=$(GO_VERSION_MAJOR_MINOR)$(if $(GO_VERSION_PATCH),.$(GO_VERSION_PATCH))
PKG_SOURCE:=go$(PKG_VERSION).src.tar.gz
PKG_SOURCE_URL:=$(GO_SOURCE_URLS)
-PKG_HASH:=b13bf04633d4d8cf53226ebeaace8d4d2fd07ae6fa676d0844a688339debec34
+PKG_HASH:=6d643e46ad565058c7a39dac01144172ef9bd476521f42148be59249e4b74389
PKG_MAINTAINER:=Jeffery To <jeffery.to@gmail.com>
PKG_LICENSE:=BSD-3-Clause
HOST_GO_VALID_OS_ARCH:= \
android_386 android_amd64 android_arm android_arm64 \
darwin_386 darwin_amd64 darwin_arm darwin_arm64 \
+ freebsd_386 freebsd_amd64 freebsd_arm freebsd_arm64 \
linux_386 linux_amd64 linux_arm linux_arm64 \
- openbsd_386 openbsd_amd64 openbsd_arm openbsd_arm64 \
\
- freebsd_386 freebsd_amd64 freebsd_arm \
+ openbsd_386 openbsd_amd64 openbsd_arm \
netbsd_386 netbsd_amd64 netbsd_arm \
plan9_386 plan9_amd64 plan9_arm \
\
aix_ppc64 \
js_wasm \
\
- linux_ppc64 linux_ppc64le linux_mips linux_mipsle linux_mips64 linux_mips64le linux_s390x
+ linux_ppc64 linux_ppc64le \
+ linux_mips linux_mipsle linux_mips64 linux_mips64le \
+ linux_riscv64 linux_s390x
BOOTSTRAP_SOURCE:=go1.4-bootstrap-20171003.tar.gz
BOOTSTRAP_SOURCE_URL:=$(GO_SOURCE_URLS)
PKG_NPM_NAME:=node-hid
PKG_NAME:=$(PKG_NPM_NAME)
-PKG_VERSION:=1.1.0
+PKG_VERSION:=1.2.0
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NPM_NAME)-$(PKG_VERSION).tgz
PKG_SOURCE_URL:=https://registry.npmjs.org/$(PKG_NPM_NAME)/-/
-PKG_HASH:=a128331388b9a0ac443fb55493e37a9b8043f34699c60453f395ad37b7d5f145
+PKG_HASH:=b4a3e4c5a42dcdb4b6ef3ceeec18ed073322e8bca4160b95ef1671b062796bde
PKG_BUILD_DEPENDS:=node/host
PKG_USE_MIPS16:=0
PKG_NPM_NAME:=homebridge
PKG_NAME:=node-$(PKG_NPM_NAME)
-PKG_VERSION:=0.4.50
+PKG_VERSION:=0.4.52
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NPM_NAME)-$(PKG_VERSION).tgz
PKG_SOURCE_URL:=http://registry.npmjs.org/$(PKG_NPM_NAME)/-/
-PKG_HASH:=85541254b44c0b70e38ed5e49a9c6a68a20467b99fe0ff3703ca9fc422ce879c
+PKG_HASH:=2acab13e3a48d47917b31cf137fd034872ef5a1f3683cfd8c295e544decdc848
PKG_BUILD_DEPENDS:=node/host
PKG_USE_MIPS16:=0
PKG_NPM_SCOPE:=serialport
PKG_NPM_NAME:=bindings
PKG_NAME:=node-$(PKG_NPM_SCOPE)-$(PKG_NPM_NAME)
-PKG_VERSION:=8.0.4
+PKG_VERSION:=8.0.7
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NPM_NAME)-$(PKG_VERSION).tgz
PKG_SOURCE_URL:=https://registry.npmjs.org/@$(PKG_NPM_SCOPE)/$(PKG_NPM_NAME)/-/
-PKG_HASH:=fd48dba7fd4de42d9908e33c21cd028345c3d481eff668511966313cfac61695
+PKG_HASH:=b555aabf8f47a914589e5e625c87b1ec6f0ce63f284cf59d5bf18c934ac988c4
PKG_BUILD_DEPENDS:=node/host
PKG_USE_MIPS16:=0
PKG_NPM_NAME:=serialport
PKG_NAME:=node-$(PKG_NPM_NAME)
-PKG_VERSION:=8.0.5
+PKG_VERSION:=8.0.7
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NPM_NAME)-$(PKG_VERSION).tgz
PKG_SOURCE_URL:=https://registry.npmjs.org/$(PKG_NPM_NAME)/-/
-PKG_HASH:=d06e67edcc2d2c6489d8634b3bcef46325ecee0b9f8d9243af3518505608213e
+PKG_HASH:=b70000ad4560dbd7170e657554d6302024a340ae868e1db0fc672aaab2efbd9c
PKG_BUILD_DEPENDS:=node/host
PKG_USE_MIPS16:=0
@@ -46,7 +46,6 @@
],
"dependencies": {
- "@serialport/binding-mock": "^8.0.4",
-- "@serialport/bindings": "^8.0.4",
- "@serialport/parser-byte-length": "^8.0.4",
- "@serialport/parser-cctalk": "^8.0.4",
- "@serialport/parser-delimiter": "^8.0.4",
+ "@serialport/binding-mock": "^8.0.6",
+- "@serialport/bindings": "^8.0.7",
+ "@serialport/parser-byte-length": "^8.0.6",
+ "@serialport/parser-cctalk": "^8.0.6",
+ "@serialport/parser-delimiter": "^8.0.6",
PKG_NAME:=perl-www-curl
PKG_VERSION:=4.17
-PKG_RELEASE:=6
+PKG_RELEASE:=7
PKG_SOURCE_URL:=http://www.cpan.org/authors/id/S/SZ/SZBALINT/
PKG_SOURCE:=WWW-Curl-$(PKG_VERSION).tar.gz
--- /dev/null
+--- a/Makefile.PL
++++ b/Makefile.PL
+@@ -127,7 +127,7 @@
+ close H;
+
+ for my $e (sort @syms) {
+- if($e =~ /(OBSOLETE|^CURL_EXTERN|^CURL_STRICTER\z|_LAST\z|_LASTENTRY\z)/) {
++ if($e =~ /(OBSOLETE|^CURL_EXTERN|CURLOPT\z|^CURL_STRICTER\z|_LAST\z|_LASTENTRY\z|WIN32)/) {
+ next;
+ }
+ my ($group) = $e =~ m/^([^_]+_)/;
include $(TOPDIR)/rules.mk
PKG_NAME:=django
-PKG_VERSION:=3.0.3
-PKG_RELEASE:=2
+PKG_VERSION:=3.0.4
+PKG_RELEASE:=1
PYPI_NAME:=Django
-PKG_HASH:=2f1ba1db8648484dd5c238fb62504777b7ad090c81c5f1fd8d5eb5ec21b5f283
+PKG_HASH:=50b781f6cbeb98f673aa76ed8e572a019a45e52bdd4ad09001072dfd91ab07c8
PKG_MAINTAINER:=Alexandru Ardelean <ardeleanalex@gmail.com>
PKG_LICENSE:=BSD-3-Clause
include $(TOPDIR)/rules.mk
PKG_NAME:=django1
-PKG_VERSION:=1.11.28
-PKG_RELEASE:=2
+PKG_VERSION:=1.11.29
+PKG_RELEASE:=1
PYPI_NAME:=Django
-PKG_HASH:=b33ce35f47f745fea6b5aa3cf3f4241069803a3712d423ac748bd673a39741eb
+PKG_HASH:=4200aefb6678019a0acf0005cd14cfce3a5e6b9b90d06145fcdd2e474ad4329c
PKG_MAINTAINER:=Alexandru Ardelean <ardeleanalex@gmail.com>
PKG_LICENSE:=BSD-3-Clause
include $(TOPDIR)/rules.mk
PKG_NAME:=python-requests
-PKG_VERSION:=2.22.0
+PKG_VERSION:=2.23.0
PKG_RELEASE:=1
PKG_MAINTAINER:=Josef Schlehofer <josef.schlehofer@nic.cz>, Alexandru Ardelean <ardeleanalex@gmail.com>
PKG_CPE_ID:=cpe:/a:python-requests:requests
PYPI_NAME:=requests
-PKG_HASH:=11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4
+PKG_HASH:=b3f43d496c6daba4493e7c431722aeb7dbc6288f52a6e04e7b6023b0247817e6
include ../pypi.mk
include $(INCLUDE_DIR)/package.mk
include $(TOPDIR)/rules.mk
PKG_NAME:=asgiref
-PKG_VERSION:=3.2.3
+PKG_VERSION:=3.2.5
PKG_RELEASE:=1
PYPI_NAME:=asgiref
-PKG_HASH:=7e06d934a7718bf3975acbf87780ba678957b87c7adc056f13b6215d610695a0
+PKG_HASH:=c8f49dd3b42edcc51d09dd2eea8a92b3cfc987ff7e6486be734b4d0cbfd5d315
PKG_MAINTAINER:=Peter Stadler <peter.stadler@student.uibk.ac.at>
PKG_LICENSE:=BSD-3-Clause
include $(TOPDIR)/rules.mk
PKG_NAME:=sqlparse
-PKG_VERSION:=0.3.0
+PKG_VERSION:=0.3.1
PKG_RELEASE:=1
PYPI_NAME:=sqlparse
-PKG_HASH:=7c3dca29c022744e95b547e867cee89f4fce4373f3549ccd8797d8eb52cdb873
+PKG_HASH:=e162203737712307dfe78860cc56c8da8a852ab2ee33750e33aeadf38d12c548
PKG_MAINTAINER:=Peter Stadler <peter.stadler@student.uibk.ac.at>
PKG_LICENSE:=BSD-3-Clause
include $(TOPDIR)/rules.mk
PKG_NAME:=vala
-PKG_VERSION:=0.46.6
+PKG_VERSION:=0.48.0
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
-PKG_SOURCE_URL:=@GNOME/vala/0.46
-PKG_HASH:=ef31649932872f094971d46453b21c60a41661670f98afa334062425b4aec47a
+PKG_SOURCE_URL:=@GNOME/vala/0.48
+PKG_HASH:=0926b29614c82a67e36e95996e905ad052f7f7b02fe855b2d17bd14e155e10cc
PKG_MAINTAINER:=
PKG_LICENSE:=LGPL-2.1-or-later
include $(TOPDIR)/rules.mk
PKG_NAME:=avahi
-PKG_VERSION:=0.7
-PKG_RELEASE:=5
+PKG_VERSION:=0.8
+PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://github.com/lathiat/avahi/releases/download/v$(PKG_VERSION) \
https://avahi.org/download
-PKG_HASH:=57a99b5dfe7fdae794e3d1ee7a62973a368e91e414bd0dfa5d84434de5b14804
+PKG_HASH:=060309d7a333d38d951bc27598c677af1796934dbd98e1024e7ad8de798fedda
PKG_MAINTAINER:=Ted Hess <thess@kitschensync.net>
PKG_LICENSE:=LGPL-2.1-or-later
PKG_LICENSE_FILES:=LICENSE
PKG_CPE_ID:=cpe:/a:avahi:avahi
-PKG_BUILD_DEPENDS:=intltool/host
-PKG_FIXUP:=autoreconf
-PKG_REMOVE_FILES:=autogen.sh
-
PKG_INSTALL:=1
PKG_BUILD_PARALLEL:=1
endef
TARGET_CFLAGS += $(FPIC) -DGETTEXT_PACKAGE
+TARGET_LDFLAGS += $(if $(CONFIG_SSP_SUPPORT),-lssp_nonshared)
-CONFIGURE_ARGS+= \
+CONFIGURE_ARGS += \
--enable-shared \
--enable-static \
--disable-glib \
--disable-gobject \
+ --disable-introspection \
--disable-qt3 \
--disable-qt4 \
+ --disable-qt5 \
--disable-gtk \
--disable-gtk3 \
- --with-xml=expat \
--disable-dbm \
--enable-gdbm \
--enable-libdaemon \
+ --disable-libevent \
--disable-python \
- --disable-pygtk \
--disable-python-dbus \
--disable-mono \
--disable-monodoc \
--disable-doxygen-html \
--disable-doxygen-ps \
--disable-doxygen-pdf \
+ --disable-manpages \
--disable-xmltoman \
+ --disable-tests \
+ --with-xml=expat \
--with-distro=none \
--with-avahi-user=nobody \
--with-avahi-group=nogroup \
--with-autoipd-user=nobody \
--with-autoipd-group=nogroup
-ifneq ($(CONFIG_SSP_SUPPORT),y)
-CONFIGURE_ARGS+= \
- --disable-stack-protector
-endif
-
ifeq ($(BUILD_VARIANT),dbus)
ifneq ($(CONFIG_PACKAGE_libavahi-compat-libdnssd),)
CONFIGURE_ARGS += \
CONFIGURE_VARS+= \
CFLAGS="$$$$CFLAGS -DNDEBUG -DDISABLE_SYSTEMD" \
- ac_cv_header_sys_capability_h=no \
+ ac_cv_header_sys_capability_h=no
define Build/InstallDev
$(INSTALL_DIR) $(1)/usr/include
local iface="$2"
proto_export "INTERFACE=$config"
- proto_run_command "$config" avahi-autoipd $iface
+ proto_run_command "$config" avahi-autoipd "$iface"
}
proto_autoip_teardown() {
+++ /dev/null
-diff --git a/Makefile.am b/Makefile.am
-index 8234d69..156d4c4 100644
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -75,8 +75,7 @@ SUBDIRS = \
- avahi-compat-howl \
- avahi-autoipd \
- avahi-ui \
-- avahi-ui-sharp \
-- po
-+ avahi-ui-sharp
-
- DX_INPUT = \
- $(srcdir)/avahi-common/address.h \
-diff --git a/avahi-python/avahi-discover/Makefile.am b/avahi-python/avahi-discover/Makefile.am
-index 5fc4b25..4c39d3d 100644
---- a/avahi-python/avahi-discover/Makefile.am
-+++ b/avahi-python/avahi-discover/Makefile.am
-@@ -38,7 +38,6 @@ if HAVE_GDBM
- pythonscripts += \
- avahi-discover
- desktop_DATA += avahi-discover.desktop
--@INTLTOOL_DESKTOP_RULE@
- avahi_discover_PYTHON += __init__.py
- endif
-
-@@ -46,7 +45,6 @@ if HAVE_DBM
- pythonscripts += \
- avahi-discover
- desktop_DATA += avahi-discover.desktop
--@INTLTOOL_DESKTOP_RULE@
- avahi_discover_PYTHON += __init__.py
- endif
-
-diff --git a/avahi-ui/Makefile.am b/avahi-ui/Makefile.am
-index 238d43a..65a147a 100644
---- a/avahi-ui/Makefile.am
-+++ b/avahi-ui/Makefile.am
-@@ -80,7 +80,6 @@ endif
-
- bin_PROGRAMS = bssh
- desktop_DATA += bssh.desktop bvnc.desktop
--@INTLTOOL_DESKTOP_RULE@
-
- bssh_SOURCES = bssh.c
-
-@@ -108,6 +107,4 @@ endif # HAVE_GLIB
- endif
- endif
-
--@INTLTOOL_DESKTOP_RULE@
--
- CLEANFILES = $(desktop_DATA) $(desktop_DATA_in)
-diff --git a/configure.ac b/configure.ac
-index 6678971..00dac6e 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -23,7 +23,7 @@ AC_INIT([avahi],[0.7],[avahi (at) lists (dot) freedesktop (dot) org])
- AC_CONFIG_SRCDIR([avahi-core/server.c])
- AC_CONFIG_MACRO_DIR([common])
- AC_CONFIG_HEADERS([config.h])
--AM_INIT_AUTOMAKE([foreign 1.11 -Wall -Wno-portability silent-rules tar-pax])
-+AM_INIT_AUTOMAKE([foreign 1.11 -Wall -Wno-portability tar-pax])
-
- AC_SUBST(PACKAGE_URL, [http://avahi.org/])
-
-@@ -43,8 +43,6 @@ AC_SUBST(HOWL_COMPAT_VERSION, [0.9.8])
-
- AC_CANONICAL_HOST
-
--AM_SILENT_RULES([yes])
--
- AC_CHECK_PROG([STOW], [stow], [yes], [no])
-
- AS_IF([test "x$STOW" = "xyes" && test -d /usr/local/stow], [
-@@ -413,12 +411,6 @@ if test "x$have_kqueue" = "xyes" ; then
- AC_DEFINE([HAVE_KQUEUE], 1, [Enable BSD kqueue() usage])
- fi
-
--IT_PROG_INTLTOOL([0.35.0])
--GETTEXT_PACKAGE=avahi
--AC_SUBST([GETTEXT_PACKAGE])
--AC_DEFINE_UNQUOTED([GETTEXT_PACKAGE],["$GETTEXT_PACKAGE"],[Gettext package])
--AM_GLIB_GNU_GETTEXT
--
- avahilocaledir='${prefix}/${DATADIRNAME}/locale'
- AC_SUBST(avahilocaledir)
-
-From ef0ea001f6dd13d6a2e0bc17d13f595d2829f8a8 Mon Sep 17 00:00:00 2001
-From: Jeremiah McConnell <miah@miah.com>
-Date: Fri, 15 Jun 2018 11:31:10 -0600
-Subject: [PATCH] move runtime_dir to /var/run
-
-Upstream transitioned to using /run as runtime_dir for 0.7. Revert
-that change for procd compatibility.
-
-Signed-off-by: Jeremiah McConnell <miah@miah.com>
----
- configure.ac | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/configure.ac b/configure.ac
-index 72d61478..8f6e9768 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -984,7 +984,7 @@ AC_DEFINE_UNQUOTED(AVAHI_AUTOIPD_GROUP,"$AVAHI_AUTOIPD_GROUP", [Group for runnin
+--- a/configure
++++ b/configure
+@@ -24638,7 +24638,7 @@ _ACEOF
#
# Avahi runtime dir
#
-avahi_runtime_dir="/run"
+avahi_runtime_dir="${localstatedir}/run"
avahi_socket="${avahi_runtime_dir}/avahi-daemon/socket"
- AC_SUBST(avahi_runtime_dir)
- AC_SUBST(avahi_socket)
+
+
include $(TOPDIR)/rules.mk
PKG_NAME:=faad2
-PKG_VERSION:=2.8.8
-PKG_RELEASE:=2
+PKG_VERSION:=2.9.1
+PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=@SF/faac/faad2-src/$(PKG_NAME)-2.8.0
-PKG_HASH:=985c3fadb9789d2815e50f4ff714511c79c2710ac27a4aaaf5c0c2662141426d
+PKG_SOURCE_URL:=https://codeload.github.com/knik0/faad2/tar.gz/2_9_1?
+PKG_HASH:=7fa33cff76abdda5a220ca5de0b2e05a77354f3b97f735193c2940224898aa9a
+PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-2_9_1
+
PKG_MAINTAINER:=Ted Hess <thess@kitschensync.net>
-PKG_CPE_ID:=cpe:/a:audiocoding:faad2
+PKG_LICENSE:=GPL-2.0-or-later
+PKG_LICENSE_FILES:=COPYING
+PKG_CPE_ID:=cpe:/a:audiocoding:freeware_advanced_audio_decoder_2
PKG_FIXUP:=autoreconf
PKG_INSTALL:=1
+PKG_BUILD_PARALLEL:=1
include $(INCLUDE_DIR)/package.mk
This package contains the library.
endef
-TARGET_CFLAGS += $(FPIC)
-CONFIGURE_ARGS+= --without-xmms
+TARGET_CFLAGS += \
+ $(if $(CONFIG_BUILD_PATENTED),,-DLC_ONLY_DECODER) \
+ $(if $(CONFIG_SOFT_FLOAT),-DFIXED_POINT)
-ifeq ($(CONFIG_SOFT_FLOAT),y)
- TARGET_CFLAGS+= -DFIXED_POINT
- CONFIGURE_ARGS+= -nfp
-endif
+CONFIGURE_ARGS += \
+ --without-drm \
+ --without-mpeg4ip \
+ --without-xmms
define Build/InstallDev
$(INSTALL_DIR) $(1)/usr/include
--- /dev/null
+From 8552fd53aaf5059ed769a0564330816beacaca98 Mon Sep 17 00:00:00 2001
+From: Rosen Penev <rosenp@gmail.com>
+Date: Tue, 10 Mar 2020 17:38:29 -0700
+Subject: [PATCH] fix compilation with LC_ONLY_DECODER
+
+881b5e263f25a8a8b714e83407fc2c9dab407e40 broke compilation by always
+defining DRN and DRM_PS. Fix this and place the define where it belongs.
+---
+ libfaad/Makefile.am | 2 +-
+ libfaad/common.h | 7 +++++--
+ 2 files changed, 6 insertions(+), 3 deletions(-)
+
+diff --git a/libfaad/Makefile.am b/libfaad/Makefile.am
+index 8ed57ae..7d9c71f 100644
+--- a/libfaad/Makefile.am
++++ b/libfaad/Makefile.am
+@@ -32,5 +32,5 @@ libfaad_la_SOURCES = bits.c cfft.c decoder.c drc.c \
+
+ libfaad_drm_la_LDFLAGS = ${libfaad_la_LDFLAGS}
+ libfaad_drm_la_LIBADD = ${libfaad_la_LIBADD}
+-libfaad_drm_la_CFLAGS = ${libfaad_la_CFLAGS} -DDRM -DDRM_PS
++libfaad_drm_la_CFLAGS = ${libfaad_la_CFLAGS} -DDRM_SUPPORT
+ libfaad_drm_la_SOURCES = ${libfaad_la_SOURCES}
+diff --git a/libfaad/common.h b/libfaad/common.h
+index 8b78807..76722e4 100644
+--- a/libfaad/common.h
++++ b/libfaad/common.h
+@@ -91,8 +91,10 @@ extern "C" {
+ /* Allow decoding of LD profile AAC */
+ #define LD_DEC
+ /* Allow decoding of Digital Radio Mondiale (DRM) */
+-//#define DRM
+-//#define DRM_PS
++#ifdef DRM_SUPPORT
++#define DRM
++#define DRM_PS
++#endif
+
+ /* LD can't do without LTP */
+ #ifdef LD_DEC
+@@ -115,6 +117,7 @@ extern "C" {
+ #undef MAIN_DEC
+ #undef SSR_DEC
+ #undef DRM
++ #undef DRM_PS
+ #undef ALLOW_SMALL_FRAMELENGTH
+ #undef ERROR_RESILIENCE
+ #endif
--- /dev/null
+From 4ae9873a80ea47858d20f1d590aaf816c3aebb20 Mon Sep 17 00:00:00 2001
+From: Rosen Penev <rosenp@gmail.com>
+Date: Tue, 10 Mar 2020 20:13:57 -0700
+Subject: [PATCH] fix compilation without SBR/PS_DEC
+
+The bits.h include needs to be in mp4.h as it uses the bitfield struct.
+---
+ libfaad/mp4.c | 1 -
+ libfaad/mp4.h | 1 +
+ 2 files changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/libfaad/mp4.c b/libfaad/mp4.c
+index 9f0198a..dbcff83 100644
+--- a/libfaad/mp4.c
++++ b/libfaad/mp4.c
+@@ -33,7 +33,6 @@
+
+ #include <stdlib.h>
+
+-#include "bits.h"
+ #include "mp4.h"
+ #include "syntax.h"
+
+diff --git a/libfaad/mp4.h b/libfaad/mp4.h
+index 5a94be4..d99a3e3 100644
+--- a/libfaad/mp4.h
++++ b/libfaad/mp4.h
+@@ -35,6 +35,7 @@
+ extern "C" {
+ #endif
+
++#include "bits.h"
+ #include "neaacdec.h"
+
+ int8_t AudioSpecificConfig2(uint8_t *pBuffer,
--- /dev/null
+--- a/libfaad/common.h
++++ b/libfaad/common.h
+@@ -120,8 +120,7 @@ extern "C" {
+ #undef DRM_PS
+ #undef ALLOW_SMALL_FRAMELENGTH
+ #undef ERROR_RESILIENCE
+-#endif
+-
++#else
+ #define SBR_DEC
+ //#define SBR_LOW_POWER
+ #define PS_DEC
+@@ -129,6 +128,7 @@ extern "C" {
+ #ifdef SBR_LOW_POWER
+ #undef PS_DEC
+ #endif
++#endif
+
+ /* FIXED POINT: No MAIN decoding */
+ #ifdef FIXED_POINT
+++ /dev/null
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=audiofile
-PKG_VERSION:=0.3.6
-PKG_RELEASE:=5
-
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
-PKG_SOURCE_URL:=@GNOME/$(PKG_NAME)/0.3
-PKG_HASH:=ea2449ad3f201ec590d811db9da6d02ffc5e87a677d06b92ab15363d8cb59782
-
-PKG_MAINTAINER:=Ted Hess <thess@kitschensync.net>
-PKG_CPE_ID:=cpe:/a:audiofile:audiofile
-
-PKG_FIXUP:=autoreconf
-PKG_INSTALL=1
-
-include $(INCLUDE_DIR)/uclibc++.mk
-include $(INCLUDE_DIR)/package.mk
-
-define Package/libaudiofile
- SECTION:=libs
- CATEGORY:=Libraries
- TITLE:=Audio File library
- URL:=http://audiofile.68k.org/
- DEPENDS:=$(CXX_DEPENDS) +libflac
-endef
-
-define Package/libaudiofile/description
- The audiofile library allows the processing of audio data to and from audio
- files of many common formats (currently AIFF, AIFF-C, WAVE, NeXT/Sun, BICS,
- FLAC, ALAC, and raw data).
-endef
-
-CONFIGURE_ARGS+= \
- --enable-shared \
- --enable-static \
- --disable-docs \
- --disable-coverage \
- --disable-examples
-
-
-TARGET_CFLAGS+= $(FPIC)
-
-define Build/InstallDev
- $(INSTALL_DIR) $(1)/usr/include
- $(CP) \
- $(PKG_INSTALL_DIR)/usr/include/{af_vfs,audiofile,aupvlist}.h \
- $(1)/usr/include/
-
- $(INSTALL_DIR) $(1)/usr/lib
- $(CP) \
- $(PKG_INSTALL_DIR)/usr/lib/libaudiofile.{la,a,so*} \
- $(1)/usr/lib/
-
- $(INSTALL_DIR) $(1)/usr/lib/pkgconfig
- $(CP) \
- $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/audiofile.pc \
- $(1)/usr/lib/pkgconfig/
-endef
-
-define Package/libaudiofile/install
- $(INSTALL_DIR) $(1)/usr/lib
- $(CP) \
- $(PKG_INSTALL_DIR)/usr/lib/libaudiofile.so.* \
- $(1)/usr/lib/
-endef
-
-$(eval $(call BuildPackage,libaudiofile))
+++ /dev/null
-Description: Fix FTBFS with GCC 6
-Author: Michael Schwendt <mschwendt@fedoraproject.org>
-Origin: vendor, https://github.com/mpruett/audiofile/pull/27
-Bug-Debian: https://bugs.debian.org/812055
----
-This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
-
---- a/libaudiofile/modules/SimpleModule.h
-+++ b/libaudiofile/modules/SimpleModule.h
-@@ -123,7 +123,7 @@ struct signConverter
- typedef typename IntTypes<Format>::UnsignedType UnsignedType;
-
- static const int kScaleBits = (Format + 1) * CHAR_BIT - 1;
-- static const int kMinSignedValue = -1 << kScaleBits;
-+ static const int kMinSignedValue = 0-(1U<<kScaleBits);
-
- struct signedToUnsigned : public std::unary_function<SignedType, UnsignedType>
- {
+++ /dev/null
---- a/configure.ac
-+++ b/configure.ac
-@@ -159,12 +159,8 @@ AC_CONFIG_FILES([
- audiofile.pc
- audiofile-uninstalled.pc
- sfcommands/Makefile
-- test/Makefile
-- gtest/Makefile
-- examples/Makefile
- libaudiofile/Makefile
- libaudiofile/alac/Makefile
- libaudiofile/modules/Makefile
-- docs/Makefile
- Makefile])
- AC_OUTPUT
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -1,6 +1,6 @@
- ## Process this file with automake to produce Makefile.in
-
--SUBDIRS = gtest libaudiofile sfcommands test examples docs
-+SUBDIRS = libaudiofile sfcommands
-
- EXTRA_DIST = \
- ACKNOWLEDGEMENTS \
+++ /dev/null
-Description: fix buffer overflow when changing both sample format and
- number of channels
-Origin: backport, https://github.com/mpruett/audiofile/pull/25
-Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/audiofile/+bug/1502721
-Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=801102
-
-Index: audiofile-0.3.6/libaudiofile/modules/ModuleState.cpp
-===================================================================
---- audiofile-0.3.6.orig/libaudiofile/modules/ModuleState.cpp 2015-10-20 08:00:58.036128202 -0400
-+++ audiofile-0.3.6/libaudiofile/modules/ModuleState.cpp 2015-10-20 08:00:58.036128202 -0400
-@@ -402,7 +402,7 @@
- addModule(new Transform(outfc, in.pcm, out.pcm));
-
- if (in.channelCount != out.channelCount)
-- addModule(new ApplyChannelMatrix(infc, isReading,
-+ addModule(new ApplyChannelMatrix(outfc, isReading,
- in.channelCount, out.channelCount,
- in.pcm.minClip, in.pcm.maxClip,
- track->channelMatrix));
+++ /dev/null
-From c48e4c6503f7dabd41f11d4c9c7b7f8960e7f2c0 Mon Sep 17 00:00:00 2001
-From: Antonio Larrosa <larrosa@kde.org>
-Date: Mon, 6 Mar 2017 12:51:22 +0100
-Subject: [PATCH] Always check the number of coefficients
-
-When building the library with NDEBUG, asserts are eliminated
-so it's better to always check that the number of coefficients
-is inside the array range.
-
-This fixes the 00191-audiofile-indexoob issue in #41
----
- libaudiofile/WAVE.cpp | 6 ++++++
- 1 file changed, 6 insertions(+)
-
-diff --git a/libaudiofile/WAVE.cpp b/libaudiofile/WAVE.cpp
-index 0e81cf7..61f9541 100644
---- a/libaudiofile/WAVE.cpp
-+++ b/libaudiofile/WAVE.cpp
-@@ -281,6 +281,12 @@ status WAVEFile::parseFormat(const Tag &id, uint32_t size)
-
- /* numCoefficients should be at least 7. */
- assert(numCoefficients >= 7 && numCoefficients <= 255);
-+ if (numCoefficients < 7 || numCoefficients > 255)
-+ {
-+ _af_error(AF_BAD_HEADER,
-+ "Bad number of coefficients");
-+ return AF_FAIL;
-+ }
-
- m_msadpcmNumCoefficients = numCoefficients;
-
---
-2.11.0
-
+++ /dev/null
-From 25eb00ce913452c2e614548d7df93070bf0d066f Mon Sep 17 00:00:00 2001
-From: Antonio Larrosa <larrosa@kde.org>
-Date: Mon, 6 Mar 2017 18:02:31 +0100
-Subject: [PATCH] clamp index values to fix index overflow in IMA.cpp
-
-This fixes #33
-(also reported at https://bugzilla.opensuse.org/show_bug.cgi?id=1026981
-and https://blogs.gentoo.org/ago/2017/02/20/audiofile-global-buffer-overflow-in-decodesample-ima-cpp/)
----
- libaudiofile/modules/IMA.cpp | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/libaudiofile/modules/IMA.cpp b/libaudiofile/modules/IMA.cpp
-index 7476d44..df4aad6 100644
---- a/libaudiofile/modules/IMA.cpp
-+++ b/libaudiofile/modules/IMA.cpp
-@@ -169,7 +169,7 @@ int IMA::decodeBlockWAVE(const uint8_t *encoded, int16_t *decoded)
- if (encoded[1] & 0x80)
- m_adpcmState[c].previousValue -= 0x10000;
-
-- m_adpcmState[c].index = encoded[2];
-+ m_adpcmState[c].index = clamp(encoded[2], 0, 88);
-
- *decoded++ = m_adpcmState[c].previousValue;
-
-@@ -210,7 +210,7 @@ int IMA::decodeBlockQT(const uint8_t *encoded, int16_t *decoded)
- predictor -= 0x10000;
-
- state.previousValue = clamp(predictor, MIN_INT16, MAX_INT16);
-- state.index = encoded[1] & 0x7f;
-+ state.index = clamp(encoded[1] & 0x7f, 0, 88);
- encoded += 2;
-
- for (int n=0; n<m_framesPerPacket; n+=2)
---
-2.11.0
-
+++ /dev/null
-From 7d65f89defb092b63bcbc5d98349fb222ca73b3c Mon Sep 17 00:00:00 2001
-From: Antonio Larrosa <larrosa@kde.org>
-Date: Mon, 6 Mar 2017 13:54:52 +0100
-Subject: [PATCH] Check for multiplication overflow in sfconvert
-
-Checks that a multiplication doesn't overflow when
-calculating the buffer size, and if it overflows,
-reduce the buffer size instead of failing.
-
-This fixes the 00192-audiofile-signintoverflow-sfconvert case
-in #41
----
- sfcommands/sfconvert.c | 34 ++++++++++++++++++++++++++++++++--
- 1 file changed, 32 insertions(+), 2 deletions(-)
-
-diff --git a/sfcommands/sfconvert.c b/sfcommands/sfconvert.c
-index 80a1bc4..970a3e4 100644
---- a/sfcommands/sfconvert.c
-+++ b/sfcommands/sfconvert.c
-@@ -45,6 +45,33 @@ void printusage (void);
- void usageerror (void);
- bool copyaudiodata (AFfilehandle infile, AFfilehandle outfile, int trackid);
-
-+int firstBitSet(int x)
-+{
-+ int position=0;
-+ while (x!=0)
-+ {
-+ x>>=1;
-+ ++position;
-+ }
-+ return position;
-+}
-+
-+#ifndef __has_builtin
-+#define __has_builtin(x) 0
-+#endif
-+
-+int multiplyCheckOverflow(int a, int b, int *result)
-+{
-+#if (defined __GNUC__ && __GNUC__ >= 5) || ( __clang__ && __has_builtin(__builtin_mul_overflow))
-+ return __builtin_mul_overflow(a, b, result);
-+#else
-+ if (firstBitSet(a)+firstBitSet(b)>31) // int is signed, so we can't use 32 bits
-+ return true;
-+ *result = a * b;
-+ return false;
-+#endif
-+}
-+
- int main (int argc, char **argv)
- {
- if (argc == 2)
-@@ -323,8 +350,11 @@ bool copyaudiodata (AFfilehandle infile, AFfilehandle outfile, int trackid)
- {
- int frameSize = afGetVirtualFrameSize(infile, trackid, 1);
-
-- const int kBufferFrameCount = 65536;
-- void *buffer = malloc(kBufferFrameCount * frameSize);
-+ int kBufferFrameCount = 65536;
-+ int bufferSize;
-+ while (multiplyCheckOverflow(kBufferFrameCount, frameSize, &bufferSize))
-+ kBufferFrameCount /= 2;
-+ void *buffer = malloc(bufferSize);
-
- AFframecount totalFrames = afGetFrameCount(infile, AF_DEFAULT_TRACK);
- AFframecount totalFramesWritten = 0;
---
-2.11.0
-
+++ /dev/null
-From a2e9eab8ea87c4ffc494d839ebb4ea145eb9f2e6 Mon Sep 17 00:00:00 2001
-From: Antonio Larrosa <larrosa@kde.org>
-Date: Mon, 6 Mar 2017 18:59:26 +0100
-Subject: [PATCH] Actually fail when error occurs in parseFormat
-
-When there's an unsupported number of bits per sample or an invalid
-number of samples per block, don't only print an error message using
-the error handler, but actually stop parsing the file.
-
-This fixes #35 (also reported at
-https://bugzilla.opensuse.org/show_bug.cgi?id=1026983 and
-https://blogs.gentoo.org/ago/2017/02/20/audiofile-heap-based-buffer-overflow-in-imadecodeblockwave-ima-cpp/
-)
----
- libaudiofile/WAVE.cpp | 2 ++
- 1 file changed, 2 insertions(+)
-
---- a/libaudiofile/WAVE.cpp
-+++ b/libaudiofile/WAVE.cpp
-@@ -332,6 +332,7 @@ status WAVEFile::parseFormat(const Tag &
- {
- _af_error(AF_BAD_NOT_IMPLEMENTED,
- "IMA ADPCM compression supports only 4 bits per sample");
-+ return AF_FAIL;
- }
-
- int bytesPerBlock = (samplesPerBlock + 14) / 8 * 4 * channelCount;
-@@ -339,6 +340,7 @@ status WAVEFile::parseFormat(const Tag &
- {
- _af_error(AF_BAD_CODEC_CONFIG,
- "Invalid samples per block for IMA ADPCM compression");
-+ return AF_FAIL;
- }
-
- track->f.sampleWidth = 16;
+++ /dev/null
-From beacc44eb8cdf6d58717ec1a5103c5141f1b37f9 Mon Sep 17 00:00:00 2001
-From: Antonio Larrosa <larrosa@kde.org>
-Date: Mon, 6 Mar 2017 13:43:53 +0100
-Subject: [PATCH] Check for multiplication overflow in MSADPCM decodeSample
-
-Check for multiplication overflow (using __builtin_mul_overflow
-if available) in MSADPCM.cpp decodeSample and return an empty
-decoded block if an error occurs.
-
-This fixes the 00193-audiofile-signintoverflow-MSADPCM case of #41
----
- libaudiofile/modules/BlockCodec.cpp | 5 ++--
- libaudiofile/modules/MSADPCM.cpp | 47 +++++++++++++++++++++++++++++++++----
- 2 files changed, 46 insertions(+), 6 deletions(-)
-
-diff --git a/libaudiofile/modules/BlockCodec.cpp b/libaudiofile/modules/BlockCodec.cpp
-index 45925e8..4731be1 100644
---- a/libaudiofile/modules/BlockCodec.cpp
-+++ b/libaudiofile/modules/BlockCodec.cpp
-@@ -52,8 +52,9 @@ void BlockCodec::runPull()
- // Decompress into m_outChunk.
- for (int i=0; i<blocksRead; i++)
- {
-- decodeBlock(static_cast<const uint8_t *>(m_inChunk->buffer) + i * m_bytesPerPacket,
-- static_cast<int16_t *>(m_outChunk->buffer) + i * m_framesPerPacket * m_track->f.channelCount);
-+ if (decodeBlock(static_cast<const uint8_t *>(m_inChunk->buffer) + i * m_bytesPerPacket,
-+ static_cast<int16_t *>(m_outChunk->buffer) + i * m_framesPerPacket * m_track->f.channelCount)==0)
-+ break;
-
- framesRead += m_framesPerPacket;
- }
-diff --git a/libaudiofile/modules/MSADPCM.cpp b/libaudiofile/modules/MSADPCM.cpp
-index 8ea3c85..ef9c38c 100644
---- a/libaudiofile/modules/MSADPCM.cpp
-+++ b/libaudiofile/modules/MSADPCM.cpp
-@@ -101,24 +101,60 @@ static const int16_t adaptationTable[] =
- 768, 614, 512, 409, 307, 230, 230, 230
- };
-
-+int firstBitSet(int x)
-+{
-+ int position=0;
-+ while (x!=0)
-+ {
-+ x>>=1;
-+ ++position;
-+ }
-+ return position;
-+}
-+
-+#ifndef __has_builtin
-+#define __has_builtin(x) 0
-+#endif
-+
-+int multiplyCheckOverflow(int a, int b, int *result)
-+{
-+#if (defined __GNUC__ && __GNUC__ >= 5) || ( __clang__ && __has_builtin(__builtin_mul_overflow))
-+ return __builtin_mul_overflow(a, b, result);
-+#else
-+ if (firstBitSet(a)+firstBitSet(b)>31) // int is signed, so we can't use 32 bits
-+ return true;
-+ *result = a * b;
-+ return false;
-+#endif
-+}
-+
-+
- // Compute a linear PCM value from the given differential coded value.
- static int16_t decodeSample(ms_adpcm_state &state,
-- uint8_t code, const int16_t *coefficient)
-+ uint8_t code, const int16_t *coefficient, bool *ok=NULL)
- {
- int linearSample = (state.sample1 * coefficient[0] +
- state.sample2 * coefficient[1]) >> 8;
-+ int delta;
-
- linearSample += ((code & 0x08) ? (code - 0x10) : code) * state.delta;
-
- linearSample = clamp(linearSample, MIN_INT16, MAX_INT16);
-
-- int delta = (state.delta * adaptationTable[code]) >> 8;
-+ if (multiplyCheckOverflow(state.delta, adaptationTable[code], &delta))
-+ {
-+ if (ok) *ok=false;
-+ _af_error(AF_BAD_COMPRESSION, "Error decoding sample");
-+ return 0;
-+ }
-+ delta >>= 8;
- if (delta < 16)
- delta = 16;
-
- state.delta = delta;
- state.sample2 = state.sample1;
- state.sample1 = linearSample;
-+ if (ok) *ok=true;
-
- return static_cast<int16_t>(linearSample);
- }
-@@ -212,13 +248,16 @@ int MSADPCM::decodeBlock(const uint8_t *encoded, int16_t *decoded)
- {
- uint8_t code;
- int16_t newSample;
-+ bool ok;
-
- code = *encoded >> 4;
-- newSample = decodeSample(*state[0], code, coefficient[0]);
-+ newSample = decodeSample(*state[0], code, coefficient[0], &ok);
-+ if (!ok) return 0;
- *decoded++ = newSample;
-
- code = *encoded & 0x0f;
-- newSample = decodeSample(*state[1], code, coefficient[1]);
-+ newSample = decodeSample(*state[1], code, coefficient[1], &ok);
-+ if (!ok) return 0;
- *decoded++ = newSample;
-
- encoded++;
---
-2.11.0
-
+++ /dev/null
-From ce536d707b8e2a26baca77320398c45238224ca7 Mon Sep 17 00:00:00 2001
-From: Antonio Larrosa <larrosa@kde.org>
-Date: Fri, 10 Mar 2017 15:40:02 +0100
-Subject: [PATCH] Fix signature of multiplyCheckOverflow. It returns a bool,
- not an int
-
----
- libaudiofile/modules/MSADPCM.cpp | 2 +-
- sfcommands/sfconvert.c | 2 +-
- 2 files changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/libaudiofile/modules/MSADPCM.cpp b/libaudiofile/modules/MSADPCM.cpp
-index ef9c38c..d8c9553 100644
---- a/libaudiofile/modules/MSADPCM.cpp
-+++ b/libaudiofile/modules/MSADPCM.cpp
-@@ -116,7 +116,7 @@ int firstBitSet(int x)
- #define __has_builtin(x) 0
- #endif
-
--int multiplyCheckOverflow(int a, int b, int *result)
-+bool multiplyCheckOverflow(int a, int b, int *result)
- {
- #if (defined __GNUC__ && __GNUC__ >= 5) || ( __clang__ && __has_builtin(__builtin_mul_overflow))
- return __builtin_mul_overflow(a, b, result);
-diff --git a/sfcommands/sfconvert.c b/sfcommands/sfconvert.c
-index 970a3e4..367f7a5 100644
---- a/sfcommands/sfconvert.c
-+++ b/sfcommands/sfconvert.c
-@@ -60,7 +60,7 @@ int firstBitSet(int x)
- #define __has_builtin(x) 0
- #endif
-
--int multiplyCheckOverflow(int a, int b, int *result)
-+bool multiplyCheckOverflow(int a, int b, int *result)
- {
- #if (defined __GNUC__ && __GNUC__ >= 5) || ( __clang__ && __has_builtin(__builtin_mul_overflow))
- return __builtin_mul_overflow(a, b, result);
---
-2.11.0
-
+++ /dev/null
-From: Antonio Larrosa <larrosa@kde.org>
-Date: Thu, 9 Mar 2017 10:21:18 +0100
-Subject: Check for division by zero in BlockCodec::runPull
-
----
- libaudiofile/modules/BlockCodec.cpp | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/libaudiofile/modules/BlockCodec.cpp b/libaudiofile/modules/BlockCodec.cpp
-index 4731be1..eb2fb4d 100644
---- a/libaudiofile/modules/BlockCodec.cpp
-+++ b/libaudiofile/modules/BlockCodec.cpp
-@@ -47,7 +47,7 @@ void BlockCodec::runPull()
-
- // Read the compressed data.
- ssize_t bytesRead = read(m_inChunk->buffer, m_bytesPerPacket * blockCount);
-- int blocksRead = bytesRead >= 0 ? bytesRead / m_bytesPerPacket : 0;
-+ int blocksRead = (bytesRead >= 0 && m_bytesPerPacket > 0) ? bytesRead / m_bytesPerPacket : 0;
-
- // Decompress into m_outChunk.
- for (int i=0; i<blocksRead; i++)
include $(TOPDIR)/rules.mk
PKG_NAME:=libgee
-PKG_VERSION:=0.20.2
+PKG_VERSION:=0.20.3
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=@GNOME/libgee/0.20
-PKG_HASH:=9e035c4b755f46bfae70ba81cdcf8328b03f554373cec8c816e8b5680f85353c
+PKG_HASH:=d0b5edefc88cbca5f1709d19fa62aef490922c6577a14ac4e7b085507911a5de
PKG_MAINTAINER:=W. Michael Petullo <mike@flyn.org>
PKG_LICENSE:=LGPL-2.1-or-later
include $(TOPDIR)/rules.mk
PKG_NAME:=libiio
-PKG_VERSION:=0.18
+PKG_VERSION:=0.19
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://codeload.github.com/analogdevicesinc/libiio/tar.gz/v$(PKG_VERSION)?
-PKG_HASH:=bc2c5299974b65cfe9aa4a06d8c74d7651594e026bce416db48a2c5aa7ba2554
+PKG_HASH:=81c414d5c47b715d9bc9275b9fabbfd9e9483e60c035f3001b5977932049595d
PKG_LICENSE:=LGPL-2.1
PKG_LICENSE_FILES:=COPYING.txt
--- /dev/null
+From 98ba73179f6db323b68a8d59e90c2d7c39a16736 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Petr=20=C5=A0tetiar?= <ynezz@true.cz>
+Date: Tue, 3 Mar 2020 18:27:42 +0100
+Subject: [PATCH] Update channel type and modifier lists
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Update the channel type and modifier lists against Linux 5.4.22.
+
+Signed-off-by: Petr Å tetiar <ynezz@true.cz>
+---
+ channel.c | 10 ++++++++++
+ iio.h | 10 ++++++++++
+ 2 files changed, 20 insertions(+)
+
+diff --git a/channel.c b/channel.c
+index 302592dfc764..407ce632fcc7 100644
+--- a/channel.c
++++ b/channel.c
+@@ -56,6 +56,9 @@ static const char * const iio_chan_type_name_spec[] = {
+ [IIO_COUNT] = "count",
+ [IIO_INDEX] = "index",
+ [IIO_GRAVITY] = "gravity",
++ [IIO_POSITIONRELATIVE] = "positionrelative",
++ [IIO_PHASE] = "phase",
++ [IIO_MASSCONCENTRATION] = "massconcentration",
+ };
+
+ static const char * const modifier_names[] = {
+@@ -79,6 +82,7 @@ static const char * const modifier_names[] = {
+ [IIO_MOD_LIGHT_GREEN] = "green",
+ [IIO_MOD_LIGHT_BLUE] = "blue",
+ [IIO_MOD_LIGHT_UV] = "uv",
++ [IIO_MOD_LIGHT_DUV] = "duv",
+ [IIO_MOD_QUATERNION] = "quaternion",
+ [IIO_MOD_TEMP_AMBIENT] = "ambient",
+ [IIO_MOD_TEMP_OBJECT] = "object",
+@@ -94,7 +98,13 @@ static const char * const modifier_names[] = {
+ [IIO_MOD_I] = "i",
+ [IIO_MOD_Q] = "q",
+ [IIO_MOD_CO2] = "co2",
++ [IIO_MOD_ETHANOL] = "ethanol",
++ [IIO_MOD_H2] = "h2",
+ [IIO_MOD_VOC] = "voc",
++ [IIO_MOD_PM1] = "pm1",
++ [IIO_MOD_PM2P5] = "pm2p5",
++ [IIO_MOD_PM4] = "pm4",
++ [IIO_MOD_PM10] = "pm10",
+ };
+
+ /*
+diff --git a/iio.h b/iio.h
+index 5c11fcefe5c2..5afc28ea0197 100644
+--- a/iio.h
++++ b/iio.h
+@@ -125,6 +125,9 @@ enum iio_chan_type {
+ IIO_COUNT,
+ IIO_INDEX,
+ IIO_GRAVITY,
++ IIO_POSITIONRELATIVE,
++ IIO_PHASE,
++ IIO_MASSCONCENTRATION,
+ IIO_CHAN_TYPE_UNKNOWN = INT_MAX
+ };
+
+@@ -173,6 +176,13 @@ enum iio_modifier {
+ IIO_MOD_CO2,
+ IIO_MOD_VOC,
+ IIO_MOD_LIGHT_UV,
++ IIO_MOD_LIGHT_DUV,
++ IIO_MOD_PM1,
++ IIO_MOD_PM2P5,
++ IIO_MOD_PM4,
++ IIO_MOD_PM10,
++ IIO_MOD_ETHANOL,
++ IIO_MOD_H2,
+ };
+
+ /* ---------------------------------------------------------------------------*/
KERNEL_DIR="$(LINUX_DIR)" \
ARCH="$(LINUX_KARCH)" \
CROSS_COMPILE="$(TARGET_CROSS)" \
- SUBDIRS="$(PKG_BUILD_DIR)/kernel" \
+ M="$(PKG_BUILD_DIR)/kernel" \
EXTRA_CFLAGS="$(EXTRA_CFLAGS) -I$(PKG_BUILD_DIR)/kernel" \
modules
$(call Build/Compile/Default)
include $(TOPDIR)/rules.mk
PKG_NAME:=libqmi
-PKG_VERSION:=1.24.4
-PKG_RELEASE:=2
+PKG_VERSION:=1.24.6
+PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=https://www.freedesktop.org/software/libqmi
-PKG_HASH:=0316badec92ff32f51fe6278e6046968d2272a26608995deedd8e4afb563918a
+PKG_HASH:=1325257bc16de7b2b443fa689826c993474bdbd6e78c7a1e60e527269b44d8c9
PKG_MAINTAINER:=Nicholas Smith <nicholas.smith@telcoantennas.com.au>
include $(TOPDIR)/rules.mk
PKG_NAME:=libuhttpd
-PKG_VERSION:=3.0.1
+PKG_VERSION:=3.1.0
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL=https://github.com/zhaojh329/libuhttpd/releases/download/v$(PKG_VERSION)
-PKG_HASH:=07cc357a94e29c5a04eea46331352c869beed01d7fd6cc23972e878a5c4b023c
+PKG_HASH:=733fdb2183fe4984e2f909c41e24d81989a748265a75ef288018568e67a9cd49
-PKG_MAINTAINER:=Jianhui Zhao <jianhuizhao329@gmail.com>
+PKG_MAINTAINER:=Jianhui Zhao <zhaojh329@gmail.com>
PKG_LICENSE:=MIT
PKG_LICENSE_FILES:=LICENSE
include $(TOPDIR)/rules.mk
PKG_NAME:=libzdb
-PKG_VERSION:=3.2
+PKG_VERSION:=3.2.1
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://www.tildeslash.com/libzdb/dist/
-PKG_HASH:=005ddf4b29c6db622e16303298c2f914dfd82590111cea7cfd09b4acf46cf4f2
+PKG_HASH:=b9a7b59a0a9f53dc87ce1b5a919f21b8cd6448c04a9157bccef1e3c1dffd3ff1
PKG_MAINTAINER:=Alexandru Ardelean <ardeleanalex@gmail.com>
PKG_LICENSE:=GPL-3.0-or-later
PKG_INSTALL:=1
PKG_BUILD_PARALLEL:=1
PKG_BUILD_DEPENDS:=libzdb/host
+PKG_FIXUP:=autoreconf
include $(INCLUDE_DIR)/uclibc++.mk
include $(INCLUDE_DIR)/package.mk
--- /dev/null
+--- a/configure.ac
++++ b/configure.ac
+@@ -454,16 +454,6 @@ if test $ondarwin -eq 1; then
+ else
+ stdc="gnu"
+ fi
+-AC_RUN_IFELSE(
+-[AC_LANG_PROGRAM([], [dnl
+- #ifdef __STDC_VERSION__
+- #if __STDC_VERSION__ >= 201112L
+- return 0;
+- #endif
+- #endif
+- return 1;
+- ])], [CFLAGS="$CFLAGS -std=${stdc}11"], [CFLAGS="$CFLAGS -std=${stdc}99"])
+-AC_CHECK_HEADERS([stdint.h stdbool.h], [], [AC_MSG_ERROR([toolchain does not have C99 headers])])
+
+ # ---------------------------------------------------------------------------
+ # Outputs
+++ /dev/null
---- a/test/zdbpp.cpp
-+++ b/test/zdbpp.cpp
-@@ -1,3 +1,4 @@
-+#include <cassert>
- #include <iostream>
- #include <string>
- #include <map>
---- a/Makefile.in
-+++ b/Makefile.in
-@@ -476,7 +476,7 @@ DIST_SUBDIRS = . test
- EXTRA_DIST = README AUTHORS CHANGES COPYING bootstrap doc test src tools config
- LIBRARY_NAME = zdb
- RE2CFLAGS = -b
--FILTERH = ./tools/bin/filterh
-+FILTERH = $(STAGING_DIR_HOSTPKG)/bin/filterh
- AM_CPPFLAGS = $(CPPFLAGS) $(DBCPPFLAGS) -Isrc -Isrc/util -Isrc/net \
- -Isrc/db -Isrc/db/oracle -Isrc/exceptions
- pkgconfigdir = $(libdir)/pkgconfig
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -12,7 +12,7 @@ LIBRARY_NAME = zdb
+
+ RE2C = @RE2C@
+ RE2CFLAGS = -b
+-FILTERH = ./tools/bin/filterh
++FILTERH = $(STAGING_DIR_HOSTPKG)/bin/filterh
+
+ AM_CPPFLAGS = $(CPPFLAGS) $(DBCPPFLAGS)
+ AM_CPPFLAGS += -Isrc -Isrc/util -Isrc/net -Isrc/db -Isrc/db/oracle -Isrc/exceptions
include $(TOPDIR)/rules.mk
PKG_NAME:=measurement-kit
-PKG_VERSION:=0.10.9
-PKG_RELEASE:=2
+PKG_VERSION:=0.10.11
+PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://codeload.github.com/measurement-kit/measurement-kit/tar.gz/v$(PKG_VERSION)?
-PKG_HASH:=8ac160fe1f318983b6784d78f612b657ddeed73ddc6371aaa299326196a381e5
+PKG_HASH:=f9dbf5f721516fd709c13ac5011737b3622076299e3c899a1f70861901ec1b40
PKG_MAINTAINER:=Jan Pavlinec <jan.pavlinec@nic.cz>
PKG_LICENSE:=BSD-2-Clause
include $(TOPDIR)/rules.mk
PKG_NAME:=tdb
-PKG_VERSION:=1.3.16
-PKG_RELEASE:=2
+PKG_VERSION:=1.4.3
+PKG_RELEASE:=1
PKG_LICENSE:=GPL-2.0
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://www.samba.org/ftp/tdb/
-PKG_HASH:=6a3fc2616567f23993984ada3cea97d953a27669ffd1bfbbe961f26e0cf96cc5
+PKG_HASH:=c8058393dfa15f47e11ebd2f1d132693f0b3b3b8bf22d0201bfb305026f88a1b
+PKG_BUILD_DEPENDS:=python3/host
PKG_INSTALL:=1
include $(INCLUDE_DIR)/package.mk
SECTION:=libs
CATEGORY:=Libraries
TITLE:=Trivial Database
- DEPNEDS:=+libattr
URL:=http://sourceforge.net/projects/tdb/
MAINTAINER:=Dmitry V. Zimin <pfzim@mail.ru>
endef
$(CP) $(PKG_INSTALL_DIR)/usr/lib/* $(1)/usr/lib/
endef
-CONFIGURE_ARGS = \
- --target=$(GNU_TARGET_NAME) \
- --build=$(GNU_HOST_NAME) \
+CONFIGURE_ARGS:= \
--cross-compile \
--cross-answers="$(PKG_BUILD_DIR)/cache.txt" \
- --program-prefix="" \
--prefix=$(CONFIGURE_PREFIX) \
--exec-prefix=$(CONFIGURE_PREFIX) \
--bindir=$(CONFIGURE_PREFIX)/bin \
--localstatedir=/var \
--mandir=$(CONFIGURE_PREFIX)/man \
--infodir=$(CONFIGURE_PREFIX)/info \
- $(DISABLE_IPV6)
-
-CONFIGURE_ARGS += \
--disable-python \
--disable-rpath \
--disable-rpath-install \
-diff --git a/lib/replace/wscript b/lib/replace/wscript
-index fd00a42..337d559 100644
--- a/lib/replace/wscript
+++ b/lib/replace/wscript
-@@ -340,22 +340,13 @@ def configure(conf):
+@@ -416,22 +416,13 @@
conf.CHECK_FUNCS('prctl dirname basename')
- strlcpy_in_bsd = False
--
++ # Not checking for libbsd
++ conf.CHECK_FUNCS('strlcpy strlcat')
++ conf.CHECK_FUNCS('getpeereid')
++ conf.CHECK_FUNCS_IN('setproctitle', 'setproctitle', headers='setproctitle.h')
++ conf.CHECK_FUNCS('setproctitle_init')
+
- # libbsd on some platforms provides strlcpy and strlcat
- if not conf.CHECK_FUNCS('strlcpy strlcat'):
- if conf.CHECK_FUNCS_IN('strlcpy strlcat', 'bsd', headers='bsd/string.h',
-
- if not conf.CHECK_FUNCS('closefrom'):
- conf.CHECK_FUNCS_IN('closefrom', 'bsd', headers='bsd/unistd.h')
-+ # Not checking for libbsd
-+ conf.CHECK_FUNCS('strlcpy strlcat')
-+ conf.CHECK_FUNCS('getpeereid')
-+ conf.CHECK_FUNCS_IN('setproctitle', 'setproctitle', headers='setproctitle.h')
-+ conf.CHECK_FUNCS('setproctitle_init')
-+
+ conf.CHECK_FUNCS('closefrom')
conf.CHECK_CODE('''
struct ucred cred;
-@@ -698,9 +689,6 @@ def configure(conf):
+@@ -808,9 +799,6 @@
# look for a method of finding the list of network interfaces
for method in ['HAVE_IFACE_GETIFADDRS', 'HAVE_IFACE_AIX', 'HAVE_IFACE_IFCONF', 'HAVE_IFACE_IFREQ']:
if conf.CHECK_CODE('''
#define %s 1
#define NO_CONFIG_H 1
-@@ -713,7 +701,7 @@ def configure(conf):
- #include "test/getifaddrs.c"
+@@ -823,7 +811,7 @@
+ #include "tests/getifaddrs.c"
''' % method,
method,
- lib='nsl socket' + bsd_for_strlcpy,
addmain=False,
execute=True):
break
-@@ -761,7 +749,6 @@ def build(bld):
+@@ -871,7 +859,6 @@
break
extra_libs = ''
- if bld.CONFIG_SET('HAVE_LIBBSD'): extra_libs += ' bsd'
+ if bld.CONFIG_SET('HAVE_LIBRT'): extra_libs += ' rt'
+ if bld.CONFIG_SET('REPLACE_REQUIRES_LIBSOCKET_LIBNSL'): extra_libs += ' socket nsl'
- bld.SAMBA_SUBSYSTEM('LIBREPLACE_HOSTCC',
- REPLACE_HOSTCC_SOURCE,
+$(MAKE) $(PKG_JOBS) -C "$(LINUX_DIR)" \
ARCH="$(LINUX_KARCH)" \
CROSS_COMPILE="$(TARGET_CROSS)" \
- SUBDIRS="$(PKG_BUILD_DIR)/xr_usb_serial_common-1a" \
+ M="$(PKG_BUILD_DIR)/xr_usb_serial_common-1a" \
modules
endef
include $(TOPDIR)/rules.mk
PKG_NAME:=grilo-plugins
-PKG_VERSION:=0.3.10
+PKG_VERSION:=0.3.11
PKG_RELEASE:=1
PKG_MAINTAINER:=W. Michael Petullo <mike@flyn.org>
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=@GNOME/grilo-plugins/0.3/
-PKG_HASH:=803b360fdb6d5fde1e647bdc40c16de3031b1a95b347b48b65fe4fc27a548d4a
+PKG_HASH:=dde2e605b1994341c6bf012493e056b406b08571834dea3b3c671d5b8b1dcd73
PKG_BUILD_PARALLEL:=1
PKG_INSTALL:=1
$(eval $(call BuildPackage,grilo-plugins))
$(eval $(call BuildPlugin,dleyna,DLNA sharing,dleyna,,30))
-# This is currently disabled because it won't work with libdmapsharing-4.0.so
-#$(eval $(call BuildPlugin,dmap,DAAP and DPAP sharing,daap dpap,libdmapsharing,30))
+$(eval $(call BuildPlugin,dmap,DAAP and DPAP sharing,daap dpap,libdmapsharing,30))
$(eval $(call BuildPlugin,gravatar,Gravatar provider,gravatar,,30))
$(eval $(call BuildPlugin,jamendo,Jamendo sharing,jamendo,,30))
$(eval $(call BuildPlugin,magnatune,Magnatune sharing,magnatune,,30))
--- /dev/null
+diff --git a/src/dmap/grl-common.c b/src/dmap/grl-common.c
+index fa92df9..6a1da5e 100644
+--- a/src/dmap/grl-common.c
++++ b/src/dmap/grl-common.c
+@@ -39,7 +39,7 @@ gchar *
+ grl_dmap_build_url (DMAPMdnsBrowserService *service)
+ {
+ return g_strdup_printf ("%s://%s:%u",
+- service->service_name,
+- service->host,
+- service->port);
++ service->service_name,
++ service->host,
++ service->port);
+ }
+diff --git a/src/dmap/grl-daap-db.c b/src/dmap/grl-daap-db.c
+index 6621094..c931d91 100644
+--- a/src/dmap/grl-daap-db.c
++++ b/src/dmap/grl-daap-db.c
+@@ -112,8 +112,8 @@ grl_daap_db_lookup_by_id (const DMAPDb *db, guint id)
+
+ static void
+ grl_daap_db_foreach (const DMAPDb *db,
+- GHFunc func,
+- gpointer data)
++ GHFunc func,
++ gpointer data)
+ {
+ g_error ("Not implemented");
+ }
+@@ -135,7 +135,7 @@ set_insert (GHashTable *category, const char *category_name, char *set_name, Grl
+ id = g_strdup_printf ("%s-%s", category_name, set_name);
+
+ container = grl_media_container_new ();
+- grl_media_set_id (container, id);
++ grl_media_set_id (container, id);
+ grl_media_set_title (container, set_name);
+
+ set = g_hash_table_lookup (category, container);
+@@ -173,26 +173,16 @@ grl_daap_db_add (DMAPDb *_db, DMAPRecord *_record)
+ GrlMedia *media;
+
+ g_object_get (record,
+- "songalbum",
+- &album,
+- "songartist",
+- &artist,
+- "bitrate",
+- &bitrate,
+- "duration",
+- &duration,
+- "songgenre",
+- &genre,
+- "title",
+- &title,
+- "track",
+- &track,
+- "disc",
+- &disc,
+- "location",
+- &url,
+- "has-video",
+- &has_video,
++ "songalbum", &album,
++ "songartist", &artist,
++ "bitrate", &bitrate,
++ "duration", &duration,
++ "songgenre", &genre,
++ "title", &title,
++ "track", &track,
++ "disc", &disc,
++ "location", &url,
++ "has-video", &has_video,
+ NULL);
+
+ id_s = g_strdup_printf ("%u", nextid);
+@@ -203,8 +193,8 @@ grl_daap_db_add (DMAPDb *_db, DMAPRecord *_record)
+ media = grl_media_audio_new ();
+ }
+
+- grl_media_set_id (media, id_s);
+- grl_media_set_duration (media, duration);
++ grl_media_set_id (media, id_s);
++ grl_media_set_duration (media, duration);
+
+ if (title) {
+ grl_media_set_title (media, title);
+@@ -217,7 +207,7 @@ grl_daap_db_add (DMAPDb *_db, DMAPRecord *_record)
+ }
+
+ if (has_video == FALSE) {
+- grl_media_set_bitrate (media, bitrate);
++ grl_media_set_bitrate (media, bitrate);
+ grl_media_set_track_number (media, track);
+
+ if (disc != 0) {
+@@ -249,7 +239,7 @@ grl_daap_db_add (DMAPDb *_db, DMAPRecord *_record)
+ static gboolean
+ same_media (GrlMedia *a, GrlMedia *b)
+ {
+- return (strcmp (grl_media_get_id (a), grl_media_get_id (b)) == 0);
++ return strcmp (grl_media_get_id (a), grl_media_get_id (b)) == 0;
+ }
+
+ void
+@@ -334,7 +324,7 @@ grl_daap_db_search (GrlDAAPDb *db,
+ results = g_hash_table_new (g_str_hash, g_str_equal);
+
+ /* For albums and artists... */
+- for (i = 0; i < G_N_ELEMENTS(hash_tables); i++) {
++ for (i = 0; i < G_N_ELEMENTS (hash_tables); i++) {
+ g_hash_table_iter_init (&iter1, hash_tables[i]);
+ /* For each album or artist in above... */
+ for (j = 0; g_hash_table_iter_next (&iter1, &key1, &val1); j++) {
+@@ -396,10 +386,10 @@ grl_daap_db_init (GrlDAAPDb *db)
+ db->priv->albums_container = grl_media_container_new ();
+ db->priv->artists_container = grl_media_container_new ();
+
+- grl_media_set_id (GRL_MEDIA (db->priv->albums_container), ALBUMS_ID);
++ grl_media_set_id (GRL_MEDIA (db->priv->albums_container), ALBUMS_ID);
+ grl_media_set_title (GRL_MEDIA (db->priv->albums_container), ALBUMS_NAME);
+
+- grl_media_set_id (GRL_MEDIA (db->priv->artists_container), ARTISTS_ID);
++ grl_media_set_id (GRL_MEDIA (db->priv->artists_container), ARTISTS_ID);
+ grl_media_set_title (GRL_MEDIA (db->priv->artists_container), ARTISTS_NAME);
+
+ db->priv->root = g_hash_table_new_full (container_hash, container_equal, g_object_unref, (GDestroyNotify) g_hash_table_destroy);
+@@ -426,9 +416,9 @@ grl_daap_db_finalize (GObject *object)
+
+ static void
+ grl_daap_db_set_property (GObject *object,
+- guint prop_id,
+- const GValue *value,
+- GParamSpec *pspec)
++ guint prop_id,
++ const GValue *value,
++ GParamSpec *pspec)
+ {
+ switch (prop_id) {
+ default:
+@@ -439,9 +429,9 @@ grl_daap_db_set_property (GObject *object,
+
+ static void
+ grl_daap_db_get_property (GObject *object,
+- guint prop_id,
+- GValue *value,
+- GParamSpec *pspec)
++ guint prop_id,
++ GValue *value,
++ GParamSpec *pspec)
+ {
+ switch (prop_id) {
+ default:
+diff --git a/src/dmap/grl-daap-db.h b/src/dmap/grl-daap-db.h
+index f52a9b5..2548c50 100644
+--- a/src/dmap/grl-daap-db.h
++++ b/src/dmap/grl-daap-db.h
+@@ -26,34 +26,34 @@
+
+ G_BEGIN_DECLS
+
+-#define TYPE_GRL_DAAP_DB \
+- (grl_daap_db_get_type ())
+-
+-#define GRL_DAAP_DB(o) \
+- (G_TYPE_CHECK_INSTANCE_CAST ((o), \
+- TYPE_GRL_DAAP_DB, \
+- GrlDAAPDb))
+-
+-#define GRL_DAAP_DB_CLASS(k) \
+- (G_TYPE_CHECK_CLASS_CAST((k), \
+- TYPE_GRL_DAAP_DB, \
+- GrlDAAPDbClass))
+-#define IS_GRL_DAAP_DB(o) \
+- (G_TYPE_CHECK_INSTANCE_TYPE((o), \
+- TYPE_GRL_DAAP_DB))
+-#define IS_GRL_DAAP_DB_CLASS(k) \
+- (G_TYPE_CHECK_CLASS_TYPE((k), \
+- TYPE_GRL_DAAP_DB_CLASS))
+-
+-#define GRL_DAAP_DB_GET_CLASS(o) \
+- (G_TYPE_INSTANCE_GET_CLASS((o), \
+- TYPE_GRL_DAAP_DB, \
+- GrlDAAPDbClass))
++#define TYPE_GRL_DAAP_DB (grl_daap_db_get_type ())
++
++#define GRL_DAAP_DB(o) \
++ (G_TYPE_CHECK_INSTANCE_CAST ((o), \
++ TYPE_GRL_DAAP_DB, \
++ GrlDAAPDb))
+
+-#define GRL_DAAP_DB_GET_PRIVATE(o) \
+- (G_TYPE_INSTANCE_GET_PRIVATE((o), \
+- TYPE_GRL_DAAP_DB, \
+- GrlDAAPDbPrivate))
++#define GRL_DAAP_DB_CLASS(k) \
++ (G_TYPE_CHECK_CLASS_CAST ((k), \
++ TYPE_GRL_DAAP_DB, \
++ GrlDAAPDbClass))
++#define IS_GRL_DAAP_DB(o) \
++ (G_TYPE_CHECK_INSTANCE_TYPE ((o), \
++ TYPE_GRL_DAAP_DB))
++
++#define IS_GRL_DAAP_DB_CLASS(k) \
++ (G_TYPE_CHECK_CLASS_TYPE ((k), \
++ TYPE_GRL_DAAP_DB_CLASS))
++
++#define GRL_DAAP_DB_GET_CLASS(o) \
++ (G_TYPE_INSTANCE_GET_CLASS ((o), \
++ TYPE_GRL_DAAP_DB, \
++ GrlDAAPDbClass))
++
++#define GRL_DAAP_DB_GET_PRIVATE(o) \
++ (G_TYPE_INSTANCE_GET_PRIVATE ((o), \
++ TYPE_GRL_DAAP_DB, \
++ GrlDAAPDbPrivate))
+
+ typedef struct GrlDAAPDbPrivate GrlDAAPDbPrivate;
+
+diff --git a/src/dmap/grl-daap-record-factory.c b/src/dmap/grl-daap-record-factory.c
+index e986394..648fd85 100644
+--- a/src/dmap/grl-daap-record-factory.c
++++ b/src/dmap/grl-daap-record-factory.c
+@@ -22,9 +22,9 @@
+ #include "grl-daap-record.h"
+
+ DMAPRecord *
+-grl_daap_record_factory_create (DMAPRecordFactory *factory, gpointer user_data)
++grl_daap_record_factory_create (DMAPRecordFactory *factory, gpointer user_data)
+ {
+- return DMAP_RECORD (grl_daap_record_new ());
++ return DMAP_RECORD (grl_daap_record_new ());
+ }
+
+ static void
+@@ -40,19 +40,19 @@ grl_daap_record_factory_class_init (GrlDAAPRecordFactoryClass *klass)
+ static void
+ grl_daap_record_factory_interface_init (gpointer iface, gpointer data)
+ {
+- DMAPRecordFactoryIface *factory = iface;
++ DMAPRecordFactoryIface *factory = iface;
+
+- g_assert (G_TYPE_FROM_INTERFACE (factory) == DMAP_TYPE_RECORD_FACTORY);
++ g_assert (G_TYPE_FROM_INTERFACE (factory) == DMAP_TYPE_RECORD_FACTORY);
+
+- factory->create = grl_daap_record_factory_create;
++ factory->create = grl_daap_record_factory_create;
+ }
+
+ G_DEFINE_TYPE_WITH_CODE (GrlDAAPRecordFactory, grl_daap_record_factory, G_TYPE_OBJECT,
+- G_IMPLEMENT_INTERFACE (DMAP_TYPE_RECORD_FACTORY,
+- grl_daap_record_factory_interface_init))
++ G_IMPLEMENT_INTERFACE (DMAP_TYPE_RECORD_FACTORY,
++ grl_daap_record_factory_interface_init))
+
+ GrlDAAPRecordFactory *
+ grl_daap_record_factory_new (void)
+ {
+- return SIMPLE_DAAP_RECORD_FACTORY (g_object_new (TYPE_SIMPLE_DAAP_RECORD_FACTORY, NULL));
++ return SIMPLE_DAAP_RECORD_FACTORY (g_object_new (TYPE_SIMPLE_DAAP_RECORD_FACTORY, NULL));
+ }
+diff --git a/src/dmap/grl-daap-record-factory.h b/src/dmap/grl-daap-record-factory.h
+index 514713a..45aa69a 100644
+--- a/src/dmap/grl-daap-record-factory.h
++++ b/src/dmap/grl-daap-record-factory.h
+@@ -25,32 +25,31 @@
+
+ G_BEGIN_DECLS
+
+-#define TYPE_SIMPLE_DAAP_RECORD_FACTORY \
+- (grl_daap_record_factory_get_type ())
+-
+-#define SIMPLE_DAAP_RECORD_FACTORY(o) \
+- (G_TYPE_CHECK_INSTANCE_CAST((o), \
+- TYPE_SIMPLE_DAAP_RECORD_FACTORY, \
+- GrlDAAPRecordFactory))
+-
+-#define SIMPLE_DAAP_RECORD_FACTORY_CLASS(k) \
+- (G_TYPE_CHECK_CLASS_CAST((k), \
+- TYPE_SIMPLE_DAAP_RECORD_FACTORY, \
+- GrlDAAPRecordFactoryClass))
+-
+-#define IS_SIMPLE_DAAP_RECORD_FACTORY(o) \
+- (G_TYPE_CHECK_INSTANCE_TYPE((o), \
+- TYPE_SIMPLE_DAAP_RECORD_FACTORY))
+-
+-#define IS_SIMPLE_DAAP_RECORD_FACTORY_CLASS(k) \
+- (G_TYPE_CHECK_CLASS_TYPE((k), \
+- TYPE_SIMPLE_DAAP_RECORD_FACTORY_CLASS))
+-
+-#define SIMPLE_DAAP_RECORD_FACTORY_GET_CLASS(o) \
+- (G_TYPE_INSTANCE_GET_CLASS((o), \
+- TYPE_SIMPLE_DAAP_RECORD_FACTORY, \
++#define TYPE_SIMPLE_DAAP_RECORD_FACTORY (grl_daap_record_factory_get_type ())
++
++#define SIMPLE_DAAP_RECORD_FACTORY(o) \
++ (G_TYPE_CHECK_INSTANCE_CAST ((o), \
++ TYPE_SIMPLE_DAAP_RECORD_FACTORY, \
++ GrlDAAPRecordFactory))
++
++#define SIMPLE_DAAP_RECORD_FACTORY_CLASS(k) \
++ (G_TYPE_CHECK_CLASS_CAST ((k), \
++ TYPE_SIMPLE_DAAP_RECORD_FACTORY, \
+ GrlDAAPRecordFactoryClass))
+
++#define IS_SIMPLE_DAAP_RECORD_FACTORY(o) \
++ (G_TYPE_CHECK_INSTANCE_TYPE ((o), \
++ TYPE_SIMPLE_DAAP_RECORD_FACTORY))
++
++#define IS_SIMPLE_DAAP_RECORD_FACTORY_CLASS(k) \
++ (G_TYPE_CHECK_CLASS_TYPE ((k), \
++ TYPE_SIMPLE_DAAP_RECORD_FACTORY_CLASS))
++
++#define SIMPLE_DAAP_RECORD_FACTORY_GET_CLASS(o) \
++ (G_TYPE_INSTANCE_GET_CLASS ((o), \
++ TYPE_SIMPLE_DAAP_RECORD_FACTORY, \
++ GrlDAAPRecordFactoryClass))
++
+ typedef struct GrlDAAPRecordFactoryPrivate GrlDAAPRecordFactoryPrivate;
+
+ typedef struct {
+@@ -61,11 +60,11 @@ typedef struct {
+ GObjectClass parent;
+ } GrlDAAPRecordFactoryClass;
+
+-GType grl_daap_record_factory_get_type (void);
++GType grl_daap_record_factory_get_type (void);
+
+-GrlDAAPRecordFactory *grl_daap_record_factory_new (void);
++GrlDAAPRecordFactory *grl_daap_record_factory_new (void);
+
+-DMAPRecord *grl_daap_record_factory_create (DMAPRecordFactory *factory, gpointer user_data);
++DMAPRecord *grl_daap_record_factory_create (DMAPRecordFactory *factory, gpointer user_data);
+
+ #endif /* __SIMPLE_DAAP_RECORD_FACTORY */
+
+diff --git a/src/dmap/grl-daap-record.c b/src/dmap/grl-daap-record.c
+index d1721d2..82bf2f9 100644
+--- a/src/dmap/grl-daap-record.c
++++ b/src/dmap/grl-daap-record.c
+@@ -69,9 +69,9 @@ enum {
+
+ static void
+ grl_daap_record_set_property (GObject *object,
+- guint prop_id,
+- const GValue *value,
+- GParamSpec *pspec)
++ guint prop_id,
++ const GValue *value,
++ GParamSpec *pspec)
+ {
+ GrlDAAPRecord *record = SIMPLE_DAAP_RECORD (object);
+
+@@ -86,27 +86,27 @@ grl_daap_record_set_property (GObject *object,
+ break;
+ case PROP_ALBUM:
+ g_free (record->priv->album);
+- record->priv->album = g_value_dup_string(value);
++ record->priv->album = g_value_dup_string (value);
+ break;
+ case PROP_SORT_ALBUM:
+ g_free (record->priv->sort_album);
+- record->priv->sort_album = g_value_dup_string(value);
++ record->priv->sort_album = g_value_dup_string (value);
+ break;
+ case PROP_ARTIST:
+ g_free (record->priv->artist);
+- record->priv->artist = g_value_dup_string(value);
++ record->priv->artist = g_value_dup_string (value);
+ break;
+ case PROP_SORT_ARTIST:
+ g_free (record->priv->sort_artist);
+- record->priv->sort_artist = g_value_dup_string(value);
++ record->priv->sort_artist = g_value_dup_string (value);
+ break;
+ case PROP_GENRE:
+ g_free (record->priv->genre);
+- record->priv->genre = g_value_dup_string(value);
++ record->priv->genre = g_value_dup_string (value);
+ break;
+ case PROP_FORMAT:
+ g_free (record->priv->format);
+- record->priv->format = g_value_dup_string(value);
++ record->priv->format = g_value_dup_string (value);
+ break;
+ case PROP_MEDIAKIND:
+ record->priv->mediakind = g_value_get_enum (value);
+@@ -142,18 +142,16 @@ grl_daap_record_set_property (GObject *object,
+ record->priv->has_video = g_value_get_boolean (value);
+ break;
+ default:
+- G_OBJECT_WARN_INVALID_PROPERTY_ID (object,
+- prop_id,
+- pspec);
++ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+ }
+
+ static void
+ grl_daap_record_get_property (GObject *object,
+- guint prop_id,
+- GValue *value,
+- GParamSpec *pspec)
++ guint prop_id,
++ GValue *value,
++ GParamSpec *pspec)
+ {
+ GrlDAAPRecord *record = SIMPLE_DAAP_RECORD (object);
+
+@@ -216,9 +214,7 @@ grl_daap_record_get_property (GObject *object,
+ g_value_set_boolean (value, record->priv->has_video);
+ break;
+ default:
+- G_OBJECT_WARN_INVALID_PROPERTY_ID (object,
+- prop_id,
+- pspec);
++ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+ }
+diff --git a/src/dmap/grl-daap-record.h b/src/dmap/grl-daap-record.h
+index 59558c4..7aae82d 100644
+--- a/src/dmap/grl-daap-record.h
++++ b/src/dmap/grl-daap-record.h
+@@ -25,36 +25,35 @@
+
+ G_BEGIN_DECLS
+
+-#define TYPE_SIMPLE_DAAP_RECORD \
+- (grl_daap_record_get_type ())
+-
+-#define SIMPLE_DAAP_RECORD(o) \
+- (G_TYPE_CHECK_INSTANCE_CAST((o), \
+- TYPE_SIMPLE_DAAP_RECORD, \
+- GrlDAAPRecord))
+-
+-#define SIMPLE_DAAP_RECORD_CLASS(k) \
+- (G_TYPE_CHECK_CLASS_CAST((k), \
+- TYPE_SIMPLE_DAAP_RECORD, \
+- GrlDAAPRecordClass))
+-
+-#define IS_SIMPLE_DAAP_RECORD(o) \
+- (G_TYPE_CHECK_INSTANCE_TYPE((o), \
+- TYPE_SIMPLE_DAAP_RECORD))
+-
+-#define IS_SIMPLE_DAAP_RECORD_CLASS(k) \
+- (G_TYPE_CHECK_CLASS_TYPE((k), \
+- TYPE_SIMPLE_DAAP_RECORD_CLASS))
+-
+-#define SIMPLE_DAAP_RECORD_GET_CLASS(o) \
+- (G_TYPE_INSTANCE_GET_CLASS((o), \
+- TYPE_SIMPLE_DAAP_RECORD, \
++#define TYPE_SIMPLE_DAAP_RECORD (grl_daap_record_get_type ())
++
++#define SIMPLE_DAAP_RECORD(o) \
++ (G_TYPE_CHECK_INSTANCE_CAST ((o), \
++ TYPE_SIMPLE_DAAP_RECORD, \
++ GrlDAAPRecord))
++
++#define SIMPLE_DAAP_RECORD_CLASS(k) \
++ (G_TYPE_CHECK_CLASS_CAST ((k), \
++ TYPE_SIMPLE_DAAP_RECORD, \
+ GrlDAAPRecordClass))
+
+-#define SIMPLE_DAAP_RECORD_GET_PRIVATE(o) \
+- (G_TYPE_INSTANCE_GET_PRIVATE((o), \
+- TYPE_SIMPLE_DAAP_RECORD, \
+- GrlDAAPRecordPrivate))
++#define IS_SIMPLE_DAAP_RECORD(o) \
++ (G_TYPE_CHECK_INSTANCE_TYPE ((o), \
++ TYPE_SIMPLE_DAAP_RECORD))
++
++#define IS_SIMPLE_DAAP_RECORD_CLASS(k) \
++ (G_TYPE_CHECK_CLASS_TYPE ((k), \
++ TYPE_SIMPLE_DAAP_RECORD_CLASS))
++
++#define SIMPLE_DAAP_RECORD_GET_CLASS(o) \
++ (G_TYPE_INSTANCE_GET_CLASS ((o), \
++ TYPE_SIMPLE_DAAP_RECORD, \
++ GrlDAAPRecordClass))
++
++#define SIMPLE_DAAP_RECORD_GET_PRIVATE(o) \
++ (G_TYPE_INSTANCE_GET_PRIVATE ((o), \
++ TYPE_SIMPLE_DAAP_RECORD, \
++ GrlDAAPRecordPrivate))
+
+ typedef struct GrlDAAPRecordPrivate GrlDAAPRecordPrivate;
+
+@@ -69,9 +68,9 @@ typedef struct {
+
+ GType grl_daap_record_get_type (void);
+
+-GrlDAAPRecord *grl_daap_record_new (void);
+-GInputStream *grl_daap_record_read (DAAPRecord *record, GError **error);
+-gint grl_daap_record_get_id (DAAPRecord *record);
++GrlDAAPRecord *grl_daap_record_new (void);
++GInputStream *grl_daap_record_read (DAAPRecord *record, GError **error);
++gint grl_daap_record_get_id (DAAPRecord *record);
+
+ #endif /* __SIMPLE_DAAP_RECORD */
+
+diff --git a/src/dmap/grl-daap.c b/src/dmap/grl-daap.c
+index 13cc7e3..f3c4115 100644
+--- a/src/dmap/grl-daap.c
++++ b/src/dmap/grl-daap.c
+@@ -42,7 +42,7 @@
+ /* --------- Logging -------- */
+
+ #define GRL_LOG_DOMAIN_DEFAULT daap_log_domain
+-GRL_LOG_DOMAIN_STATIC(daap_log_domain);
++GRL_LOG_DOMAIN_STATIC (daap_log_domain);
+
+ /* --- Plugin information --- */
+
+@@ -111,19 +111,19 @@ grl_daap_plugin_init (GrlRegistry *registry,
+ sources = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);
+
+ g_signal_connect (G_OBJECT (browser),
+- "service-added",
++ "service-added",
+ G_CALLBACK (grl_daap_service_added_cb),
+ (gpointer) plugin);
+
+ g_signal_connect (G_OBJECT (browser),
+- "service-removed",
++ "service-removed",
+ G_CALLBACK (grl_daap_service_removed_cb),
+ (gpointer) plugin);
+
+ if (!dmap_mdns_browser_start (browser, &error)) {
+ GRL_DEBUG ("error starting browser. code: %d message: %s",
+- error->code,
+- error->message);
++ error->code,
++ error->message);
+ g_error_free (error);
+
+ g_hash_table_unref (connections);
+@@ -138,12 +138,12 @@ grl_daap_plugin_init (GrlRegistry *registry,
+ GRL_PLUGIN_DEFINE (GRL_MAJOR,
+ GRL_MINOR,
+ DAAP_PLUGIN_ID,
+- "DAAP",
+- "A plugin for browsing DAAP servers",
+- "W. Michael Petullo",
++ "DAAP",
++ "A plugin for browsing DAAP servers",
++ "W. Michael Petullo",
+ VERSION,
+- "LGPL",
+- "http://www.flyn.org",
++ "LGPL",
++ "http://www.flyn.org",
+ grl_daap_plugin_init,
+ NULL,
+ NULL);
+@@ -166,10 +166,10 @@ grl_daap_source_new (DMAPMdnsBrowserService *service)
+ source_id = g_strdup_printf (SOURCE_ID_TEMPLATE, service->name);
+
+ source = g_object_new (GRL_DAAP_SOURCE_TYPE,
+- "source-id", source_id,
+- "source-name", service->name,
+- "source-desc", source_desc,
+- "supported-media", GRL_SUPPORTED_MEDIA_AUDIO,
++ "source-id", source_id,
++ "source-name", service->name,
++ "source-desc", source_desc,
++ "supported-media", GRL_SUPPORTED_MEDIA_AUDIO,
+ NULL);
+
+ source->priv->service = service;
+@@ -209,14 +209,14 @@ grl_daap_source_finalize (GObject *object)
+ static void
+ grl_daap_do_browse (ResultCbAndArgsAndDb *cb_and_db)
+ {
+- grl_daap_db_browse(GRL_DAAP_DB(cb_and_db->db),
+- cb_and_db->cb.container,
+- cb_and_db->cb.source,
+- cb_and_db->cb.op_id,
+- cb_and_db->cb.skip,
+- cb_and_db->cb.count,
+- cb_and_db->cb.callback,
+- cb_and_db->cb.user_data);
++ grl_daap_db_browse (GRL_DAAP_DB(cb_and_db->db),
++ cb_and_db->cb.container,
++ cb_and_db->cb.source,
++ cb_and_db->cb.op_id,
++ cb_and_db->cb.skip,
++ cb_and_db->cb.count,
++ cb_and_db->cb.callback,
++ cb_and_db->cb.user_data);
+
+ g_free (cb_and_db);
+ }
+@@ -224,13 +224,13 @@ grl_daap_do_browse (ResultCbAndArgsAndDb *cb_and_db)
+ static void
+ grl_daap_do_search (ResultCbAndArgsAndDb *cb_and_db)
+ {
+- grl_daap_db_search(GRL_DAAP_DB(cb_and_db->db),
+- cb_and_db->cb.source,
+- cb_and_db->cb.op_id,
+- (GHRFunc) cb_and_db->cb.predicate,
+- cb_and_db->cb.predicate_data,
+- cb_and_db->cb.callback,
+- cb_and_db->cb.user_data);
++ grl_daap_db_search (GRL_DAAP_DB (cb_and_db->db),
++ cb_and_db->cb.source,
++ cb_and_db->cb.op_id,
++ (GHRFunc) cb_and_db->cb.predicate,
++ cb_and_db->cb.predicate_data,
++ cb_and_db->cb.callback,
++ cb_and_db->cb.user_data);
+
+ g_free (cb_and_db);
+ }
+diff --git a/src/dmap/grl-daap.h b/src/dmap/grl-daap.h
+index 4912b05..1119495 100644
+--- a/src/dmap/grl-daap.h
++++ b/src/dmap/grl-daap.h
+@@ -26,31 +26,30 @@
+
+ #include <grilo.h>
+
+-#define GRL_DAAP_SOURCE_TYPE \
+- (grl_daap_source_get_type ())
+-
+-#define GRL_DAAP_SOURCE(obj) \
+- (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
+- GRL_DAAP_SOURCE_TYPE, \
+- GrlDaapSource))
+-
+-#define GRL_IS_DAAP_SOURCE(obj) \
+- (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
+- GRL_DAAP_SOURCE_TYPE))
+-
+-#define GRL_DAAP_SOURCE_CLASS(klass) \
+- (G_TYPE_CHECK_CLASS_CAST((klass), \
+- GRL_DAAP_SOURCE_TYPE, \
+- GrlDaapSourceClass))
+-
+-#define GRL_IS_DAAP_SOURCE_CLASS(klass) \
+- (G_TYPE_CHECK_CLASS_TYPE((klass), \
+- GRL_DAAP_SOURCE_TYPE))
+-
+-#define GRL_DAAP_SOURCE_GET_CLASS(obj) \
+- (G_TYPE_INSTANCE_GET_CLASS ((obj), \
+- GRL_DAAP_SOURCE_TYPE, \
+- GrlDaapSourceClass))
++#define GRL_DAAP_SOURCE_TYPE (grl_daap_source_get_type ())
++
++#define GRL_DAAP_SOURCE(obj) \
++ (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
++ GRL_DAAP_SOURCE_TYPE, \
++ GrlDaapSource))
++
++#define GRL_IS_DAAP_SOURCE(obj) \
++ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
++ GRL_DAAP_SOURCE_TYPE))
++
++#define GRL_DAAP_SOURCE_CLASS(klass) \
++ (G_TYPE_CHECK_CLASS_CAST ((klass), \
++ GRL_DAAP_SOURCE_TYPE, \
++ GrlDaapSourceClass))
++
++#define GRL_IS_DAAP_SOURCE_CLASS(klass) \
++ (G_TYPE_CHECK_CLASS_TYPE ((klass), \
++ GRL_DAAP_SOURCE_TYPE))
++
++#define GRL_DAAP_SOURCE_GET_CLASS(obj) \
++ (G_TYPE_INSTANCE_GET_CLASS ((obj), \
++ GRL_DAAP_SOURCE_TYPE, \
++ GrlDaapSourceClass))
+
+ typedef struct _GrlDaapSourcePrivate GrlDaapSourcePrivate;
+ typedef struct _GrlDaapSource GrlDaapSource;
+diff --git a/src/dmap/grl-dpap-db.c b/src/dmap/grl-dpap-db.c
+index 1f2d5ca..02ffd3a 100644
+--- a/src/dmap/grl-dpap-db.c
++++ b/src/dmap/grl-dpap-db.c
+@@ -80,8 +80,8 @@ grl_dpap_db_lookup_by_id (const DMAPDb *db, guint id)
+
+ static void
+ grl_dpap_db_foreach (const DMAPDb *db,
+- GHFunc func,
+- gpointer data)
++ GHFunc func,
++ gpointer data)
+ {
+ g_warning ("Not implemented");
+ }
+@@ -103,7 +103,7 @@ set_insert (GHashTable *category, const char *category_name, char *set_name, Grl
+ id = g_strdup_printf ("%s-%s", category_name, set_name);
+
+ container = grl_media_container_new ();
+- grl_media_set_id (container, id);
++ grl_media_set_id (container, id);
+ grl_media_set_title (container, set_name);
+
+ set = g_hash_table_lookup (category, container);
+@@ -142,35 +142,24 @@ grl_dpap_db_add (DMAPDb *_db, DMAPRecord *_record)
+ GrlMedia *media;
+
+ g_object_get (record,
+- "large-filesize",
+- &largefilesize,
+- "creation-date",
+- &creationdate,
+- "rating",
+- &rating,
+- "filename",
+- &filename,
+- "aspect-ratio",
+- &aspectratio,
+- "pixel-height",
+- &height,
+- "pixel-width",
+- &width,
+- "format",
+- &format,
+- "comments",
+- &comments,
+- "thumbnail",
+- &thumbnail,
+- "location",
+- &url,
++ "large-filesize", &largefilesize,
++ "creation-date", &creationdate,
++ "rating", &rating,
++ "filename", &filename,
++ "aspect-ratio", &aspectratio,
++ "pixel-height", &height,
++ "pixel-width", &width,
++ "format", &format,
++ "comments", &comments,
++ "thumbnail", &thumbnail,
++ "location", &url,
+ NULL);
+
+ id_s = g_strdup_printf ("%u", nextid);
+
+ media = grl_media_image_new ();
+
+- grl_media_set_id (media, id_s);
++ grl_media_set_id (media, id_s);
+
+ if (filename)
+ grl_media_set_title (media, filename);
+@@ -181,7 +170,7 @@ grl_dpap_db_add (DMAPDb *_db, DMAPRecord *_record)
+ grl_media_set_url (media, url);
+ }
+
+- grl_media_set_width (media, width);
++ grl_media_set_width (media, width);
+ grl_media_set_height (media, height);
+
+ set_insert (db->priv->photos, PHOTOS_ID, "Unknown", media);
+@@ -195,7 +184,7 @@ grl_dpap_db_add (DMAPDb *_db, DMAPRecord *_record)
+ static gboolean
+ same_media (GrlMedia *a, GrlMedia *b)
+ {
+- return (strcmp (grl_media_get_id (a), grl_media_get_id (b)) == 0);
++ return strcmp (grl_media_get_id (a), grl_media_get_id (b)) == 0;
+ }
+
+ void
+@@ -230,7 +219,7 @@ grl_dpap_db_browse (GrlDPAPDb *db,
+ if (hash_table == NULL) {
+ GError *error = g_error_new (GRL_CORE_ERROR,
+ GRL_CORE_ERROR_BROWSE_FAILED,
+- "Invalid container identifier %s",
++ "Invalid container identifier %s",
+ container_id);
+ func (source, op_id, NULL, 0, user_data, error);
+ goto done;
+@@ -334,7 +323,7 @@ grl_dpap_db_init (GrlDPAPDb *db)
+
+ db->priv->photos_container = grl_media_container_new ();
+
+- grl_media_set_id (GRL_MEDIA (db->priv->photos_container), PHOTOS_ID);
++ grl_media_set_id (GRL_MEDIA (db->priv->photos_container), PHOTOS_ID);
+ grl_media_set_title (GRL_MEDIA (db->priv->photos_container), PHOTOS_NAME);
+
+ db->priv->root = g_hash_table_new_full (container_hash, container_equal, g_object_unref, (GDestroyNotify) g_hash_table_destroy);
+diff --git a/src/dmap/grl-dpap-db.h b/src/dmap/grl-dpap-db.h
+index 4c17d1a..d3abcba 100644
+--- a/src/dmap/grl-dpap-db.h
++++ b/src/dmap/grl-dpap-db.h
+@@ -26,34 +26,33 @@
+
+ G_BEGIN_DECLS
+
+-#define TYPE_GRL_DPAP_DB \
+- (grl_dpap_db_get_type ())
++#define TYPE_GRL_DPAP_DB (grl_dpap_db_get_type ())
+
+-#define GRL_DPAP_DB(o) \
+- (G_TYPE_CHECK_INSTANCE_CAST ((o), \
+- TYPE_GRL_DPAP_DB, \
+- GrlDPAPDb))
++#define GRL_DPAP_DB(o) \
++ (G_TYPE_CHECK_INSTANCE_CAST ((o), \
++ TYPE_GRL_DPAP_DB, \
++ GrlDPAPDb))
+
+-#define GRL_DPAP_DB_CLASS(k) \
+- (G_TYPE_CHECK_CLASS_CAST((k), \
+- TYPE_GRL_DPAP_DB, \
+- GrlDPAPDbClass))
+-#define IS_GRL_DPAP_DB(o) \
+- (G_TYPE_CHECK_INSTANCE_TYPE((o), \
+- TYPE_GRL_DPAP_DB))
+-#define IS_GRL_DPAP_DB_CLASS(k) \
+- (G_TYPE_CHECK_CLASS_TYPE((k), \
+- TYPE_GRL_DPAP_DB_CLASS))
+-
+-#define GRL_DPAP_DB_GET_CLASS(o) \
+- (G_TYPE_INSTANCE_GET_CLASS((o), \
+- TYPE_GRL_DPAP_DB, \
++#define GRL_DPAP_DB_CLASS(k) \
++ (G_TYPE_CHECK_CLASS_CAST ((k), \
++ TYPE_GRL_DPAP_DB, \
+ GrlDPAPDbClass))
++#define IS_GRL_DPAP_DB(o) \
++ (G_TYPE_CHECK_INSTANCE_TYPE ((o), \
++ TYPE_GRL_DPAP_DB))
++#define IS_GRL_DPAP_DB_CLASS(k) \
++ (G_TYPE_CHECK_CLASS_TYPE ((k), \
++ TYPE_GRL_DPAP_DB_CLASS))
++
++#define GRL_DPAP_DB_GET_CLASS(o) \
++ (G_TYPE_INSTANCE_GET_CLASS ((o), \
++ TYPE_GRL_DPAP_DB, \
++ GrlDPAPDbClass))
+
+-#define GRL_DPAP_DB_GET_PRIVATE(o) \
+- (G_TYPE_INSTANCE_GET_PRIVATE((o), \
+- TYPE_GRL_DPAP_DB, \
+- GrlDPAPDbPrivate))
++#define GRL_DPAP_DB_GET_PRIVATE(o) \
++ (G_TYPE_INSTANCE_GET_PRIVATE ((o), \
++ TYPE_GRL_DPAP_DB, \
++ GrlDPAPDbPrivate))
+
+ typedef struct GrlDPAPDbPrivate GrlDPAPDbPrivate;
+
+diff --git a/src/dmap/grl-dpap-record-factory.c b/src/dmap/grl-dpap-record-factory.c
+index 8174338..3d0c87a 100644
+--- a/src/dmap/grl-dpap-record-factory.c
++++ b/src/dmap/grl-dpap-record-factory.c
+@@ -22,9 +22,9 @@
+ #include "grl-dpap-record.h"
+
+ DMAPRecord *
+-grl_dpap_record_factory_create (DMAPRecordFactory *factory, gpointer user_data)
++grl_dpap_record_factory_create (DMAPRecordFactory *factory, gpointer user_data)
+ {
+- return DMAP_RECORD (grl_dpap_record_new ());
++ return DMAP_RECORD (grl_dpap_record_new ());
+ }
+
+ static void
+@@ -40,19 +40,19 @@ grl_dpap_record_factory_class_init (GrlDPAPRecordFactoryClass *klass)
+ static void
+ grl_dpap_record_factory_interface_init (gpointer iface, gpointer data)
+ {
+- DMAPRecordFactoryIface *factory = iface;
++ DMAPRecordFactoryIface *factory = iface;
+
+- g_assert (G_TYPE_FROM_INTERFACE (factory) == DMAP_TYPE_RECORD_FACTORY);
++ g_assert (G_TYPE_FROM_INTERFACE (factory) == DMAP_TYPE_RECORD_FACTORY);
+
+- factory->create = grl_dpap_record_factory_create;
++ factory->create = grl_dpap_record_factory_create;
+ }
+
+ G_DEFINE_TYPE_WITH_CODE (GrlDPAPRecordFactory, grl_dpap_record_factory, G_TYPE_OBJECT,
+- G_IMPLEMENT_INTERFACE (DMAP_TYPE_RECORD_FACTORY,
+- grl_dpap_record_factory_interface_init))
++ G_IMPLEMENT_INTERFACE (DMAP_TYPE_RECORD_FACTORY,
++ grl_dpap_record_factory_interface_init))
+
+ GrlDPAPRecordFactory *
+ grl_dpap_record_factory_new (void)
+ {
+- return SIMPLE_DPAP_RECORD_FACTORY (g_object_new (TYPE_SIMPLE_DPAP_RECORD_FACTORY, NULL));
++ return SIMPLE_DPAP_RECORD_FACTORY (g_object_new (TYPE_SIMPLE_DPAP_RECORD_FACTORY, NULL));
+ }
+diff --git a/src/dmap/grl-dpap-record-factory.h b/src/dmap/grl-dpap-record-factory.h
+index c2106b1..3f4ca54 100644
+--- a/src/dmap/grl-dpap-record-factory.h
++++ b/src/dmap/grl-dpap-record-factory.h
+@@ -25,30 +25,29 @@
+
+ G_BEGIN_DECLS
+
+-#define TYPE_SIMPLE_DPAP_RECORD_FACTORY \
+- (grl_dpap_record_factory_get_type ())
++#define TYPE_SIMPLE_DPAP_RECORD_FACTORY (grl_dpap_record_factory_get_type ())
+
+-#define SIMPLE_DPAP_RECORD_FACTORY(o) \
+- (G_TYPE_CHECK_INSTANCE_CAST((o), \
+- TYPE_SIMPLE_DPAP_RECORD_FACTORY, \
+- GrlDPAPRecordFactory))
++#define SIMPLE_DPAP_RECORD_FACTORY(o) \
++ (G_TYPE_CHECK_INSTANCE_CAST ((o), \
++ TYPE_SIMPLE_DPAP_RECORD_FACTORY, \
++ GrlDPAPRecordFactory))
+
+-#define SIMPLE_DPAP_RECORD_FACTORY_CLASS(k) \
+- (G_TYPE_CHECK_CLASS_CAST((k), \
+- TYPE_SIMPLE_DPAP_RECORD_FACTORY, \
+- GrlDPAPRecordFactoryClass))
++#define SIMPLE_DPAP_RECORD_FACTORY_CLASS(k) \
++ (G_TYPE_CHECK_CLASS_CAST ((k), \
++ TYPE_SIMPLE_DPAP_RECORD_FACTORY, \
++ GrlDPAPRecordFactoryClass))
+
+-#define IS_SIMPLE_DPAP_RECORD_FACTORY(o) \
+- (G_TYPE_CHECK_INSTANCE_TYPE((o), \
++#define IS_SIMPLE_DPAP_RECORD_FACTORY(o) \
++ (G_TYPE_CHECK_INSTANCE_TYPE ((o), \
+ TYPE_SIMPLE_DPAP_RECORD_FACTORY))
+
+-#define IS_SIMPLE_DPAP_RECORD_FACTORY_CLASS(k) \
+- (G_TYPE_CHECK_CLASS_TYPE((k), \
+- TYPE_SIMPLE_DPAP_RECORD_FACTORY_CLASS))
++#define IS_SIMPLE_DPAP_RECORD_FACTORY_CLASS(k) \
++ (G_TYPE_CHECK_CLASS_TYPE ((k), \
++ TYPE_SIMPLE_DPAP_RECORD_FACTORY_CLASS))
+
+-#define SIMPLE_DPAP_RECORD_FACTORY_GET_CLASS(o) \
+- (G_TYPE_INSTANCE_GET_CLASS((o), \
+- TYPE_SIMPLE_DPAP_RECORD_FACTORY, \
++#define SIMPLE_DPAP_RECORD_FACTORY_GET_CLASS(o) \
++ (G_TYPE_INSTANCE_GET_CLASS ((o), \
++ TYPE_SIMPLE_DPAP_RECORD_FACTORY, \
+ GrlDPAPRecordFactoryClass))
+
+ typedef struct GrlDPAPRecordFactoryPrivate GrlDPAPRecordFactoryPrivate;
+@@ -61,11 +60,11 @@ typedef struct {
+ GObjectClass parent;
+ } GrlDPAPRecordFactoryClass;
+
+-GType grl_dpap_record_factory_get_type (void);
++GType grl_dpap_record_factory_get_type (void);
+
+-GrlDPAPRecordFactory *grl_dpap_record_factory_new (void);
++GrlDPAPRecordFactory *grl_dpap_record_factory_new (void);
+
+-DMAPRecord *grl_dpap_record_factory_create (DMAPRecordFactory *factory, gpointer user_data);
++DMAPRecord *grl_dpap_record_factory_create (DMAPRecordFactory *factory, gpointer user_data);
+
+ #endif /* __SIMPLE_DPAP_RECORD_FACTORY */
+
+diff --git a/src/dmap/grl-dpap-record.c b/src/dmap/grl-dpap-record.c
+index 6281417..14eb1de 100644
+--- a/src/dmap/grl-dpap-record.c
++++ b/src/dmap/grl-dpap-record.c
+@@ -61,9 +61,9 @@ G_DEFINE_TYPE_WITH_CODE (GrlDPAPRecord, grl_dpap_record, G_TYPE_OBJECT,
+
+ static void
+ grl_dpap_record_set_property (GObject *object,
+- guint prop_id,
+- const GValue *value,
+- GParamSpec *pspec)
++ guint prop_id,
++ const GValue *value,
++ GParamSpec *pspec)
+ {
+ GrlDPAPRecord *record = SIMPLE_DPAP_RECORD (object);
+
+@@ -116,9 +116,9 @@ grl_dpap_record_set_property (GObject *object,
+
+ static void
+ grl_dpap_record_get_property (GObject *object,
+- guint prop_id,
+- GValue *value,
+- GParamSpec *pspec)
++ guint prop_id,
++ GValue *value,
++ GParamSpec *pspec)
+ {
+ GrlDPAPRecord *record = SIMPLE_DPAP_RECORD (object);
+
+diff --git a/src/dmap/grl-dpap-record.h b/src/dmap/grl-dpap-record.h
+index 4441740..203e57e 100644
+--- a/src/dmap/grl-dpap-record.h
++++ b/src/dmap/grl-dpap-record.h
+@@ -25,36 +25,35 @@
+
+ G_BEGIN_DECLS
+
+-#define TYPE_SIMPLE_DPAP_RECORD \
+- (grl_dpap_record_get_type ())
+-
+-#define SIMPLE_DPAP_RECORD(o) \
+- (G_TYPE_CHECK_INSTANCE_CAST((o), \
+- TYPE_SIMPLE_DPAP_RECORD, \
+- GrlDPAPRecord))
+-
+-#define SIMPLE_DPAP_RECORD_CLASS(k) \
+- (G_TYPE_CHECK_CLASS_CAST((k), \
+- TYPE_SIMPLE_DPAP_RECORD, \
+- GrlDPAPRecordClass))
+-
+-#define IS_SIMPLE_DPAP_RECORD(o) \
+- (G_TYPE_CHECK_INSTANCE_TYPE((o), \
+- TYPE_SIMPLE_DPAP_RECORD))
+-
+-#define IS_SIMPLE_DPAP_RECORD_CLASS(k) \
+- (G_TYPE_CHECK_CLASS_TYPE((k), \
+- TYPE_SIMPLE_DPAP_RECORD_CLASS))
+-
+-#define SIMPLE_DPAP_RECORD_GET_CLASS(o) \
+- (G_TYPE_INSTANCE_GET_CLASS((o), \
+- TYPE_SIMPLE_DPAP_RECORD, \
++#define TYPE_SIMPLE_DPAP_RECORD (grl_dpap_record_get_type ())
++
++#define SIMPLE_DPAP_RECORD(o) \
++ (G_TYPE_CHECK_INSTANCE_CAST ((o), \
++ TYPE_SIMPLE_DPAP_RECORD, \
++ GrlDPAPRecord))
++
++#define SIMPLE_DPAP_RECORD_CLASS(k) \
++ (G_TYPE_CHECK_CLASS_CAST ((k), \
++ TYPE_SIMPLE_DPAP_RECORD, \
+ GrlDPAPRecordClass))
+
+-#define SIMPLE_DPAP_RECORD_GET_PRIVATE(o) \
+- (G_TYPE_INSTANCE_GET_PRIVATE((o), \
+- TYPE_SIMPLE_DPAP_RECORD, \
+- GrlDPAPRecordPrivate))
++#define IS_SIMPLE_DPAP_RECORD(o) \
++ (G_TYPE_CHECK_INSTANCE_TYPE ((o), \
++ TYPE_SIMPLE_DPAP_RECORD))
++
++#define IS_SIMPLE_DPAP_RECORD_CLASS(k) \
++ (G_TYPE_CHECK_CLASS_TYPE ((k), \
++ TYPE_SIMPLE_DPAP_RECORD_CLASS))
++
++#define SIMPLE_DPAP_RECORD_GET_CLASS(o) \
++ (G_TYPE_INSTANCE_GET_CLASS ((o), \
++ TYPE_SIMPLE_DPAP_RECORD, \
++ GrlDPAPRecordClass))
++
++#define SIMPLE_DPAP_RECORD_GET_PRIVATE(o) \
++ (G_TYPE_INSTANCE_GET_PRIVATE ((o), \
++ TYPE_SIMPLE_DPAP_RECORD, \
++ GrlDPAPRecordPrivate))
+
+ typedef struct GrlDPAPRecordPrivate GrlDPAPRecordPrivate;
+
+@@ -69,9 +68,9 @@ typedef struct {
+
+ GType grl_dpap_record_get_type (void);
+
+-GrlDPAPRecord *grl_dpap_record_new (void);
+-GInputStream *grl_dpap_record_read (DPAPRecord *record, GError **error);
+-gint grl_dpap_record_get_id (DPAPRecord *record);
++GrlDPAPRecord *grl_dpap_record_new (void);
++GInputStream *grl_dpap_record_read (DPAPRecord *record, GError **error);
++gint grl_dpap_record_get_id (DPAPRecord *record);
+
+ #endif /* __SIMPLE_DPAP_RECORD */
+
+diff --git a/src/dmap/grl-dpap.c b/src/dmap/grl-dpap.c
+index 744de80..9829ec2 100644
+--- a/src/dmap/grl-dpap.c
++++ b/src/dmap/grl-dpap.c
+@@ -42,7 +42,7 @@
+ /* --------- Logging -------- */
+
+ #define GRL_LOG_DOMAIN_DEFAULT dmap_log_domain
+-GRL_LOG_DOMAIN_STATIC(dmap_log_domain);
++GRL_LOG_DOMAIN_STATIC (dmap_log_domain);
+
+ /* --- Plugin information --- */
+
+@@ -51,10 +51,10 @@ GRL_LOG_DOMAIN_STATIC(dmap_log_domain);
+
+ /* --- Grilo DPAP Private --- */
+
+-#define GRL_DPAP_SOURCE_GET_PRIVATE(object) \
+- (G_TYPE_INSTANCE_GET_PRIVATE((object), \
+- GRL_DPAP_SOURCE_TYPE, \
+- GrlDpapSourcePrivate))
++#define GRL_DPAP_SOURCE_GET_PRIVATE(object) \
++ (G_TYPE_INSTANCE_GET_PRIVATE ((object), \
++ GRL_DPAP_SOURCE_TYPE, \
++ GrlDpapSourcePrivate))
+
+ struct _GrlDpapSourcePrivate {
+ DMAPMdnsBrowserService *service;
+@@ -116,19 +116,19 @@ grl_dpap_plugin_init (GrlRegistry *registry,
+ sources = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);
+
+ g_signal_connect (G_OBJECT (browser),
+- "service-added",
++ "service-added",
+ G_CALLBACK (grl_dpap_service_added_cb),
+ (gpointer) plugin);
+
+ g_signal_connect (G_OBJECT (browser),
+- "service-removed",
++ "service-removed",
+ G_CALLBACK (grl_dpap_service_removed_cb),
+ (gpointer) plugin);
+
+ if (!dmap_mdns_browser_start (browser, &error)) {
+ GRL_DEBUG ("error starting browser. code: %d message: %s",
+- error->code,
+- error->message);
++ error->code,
++ error->message);
+ g_error_free (error);
+
+ g_hash_table_unref (connections);
+@@ -143,12 +143,12 @@ grl_dpap_plugin_init (GrlRegistry *registry,
+ GRL_PLUGIN_DEFINE (GRL_MAJOR,
+ GRL_MINOR,
+ DPAP_PLUGIN_ID,
+- "DPAP",
+- "A plugin for browsing DPAP servers",
+- "W. Michael Petullo",
++ "DPAP",
++ "A plugin for browsing DPAP servers",
++ "W. Michael Petullo",
+ VERSION,
+- "LGPL",
+- "http://www.flyn.org",
++ "LGPL",
++ "http://www.flyn.org",
+ grl_dpap_plugin_init,
+ NULL,
+ NULL);
+@@ -171,10 +171,10 @@ grl_dpap_source_new (DMAPMdnsBrowserService *service)
+ source_id = g_strdup_printf (SOURCE_ID_TEMPLATE, service->name);
+
+ source = g_object_new (GRL_DPAP_SOURCE_TYPE,
+- "source-id", source_id,
+- "source-name", service->name,
+- "source-desc", source_desc,
+- "supported-media", GRL_SUPPORTED_MEDIA_IMAGE,
++ "source-id", source_id,
++ "source-name", service->name,
++ "source-desc", source_desc,
++ "supported-media", GRL_SUPPORTED_MEDIA_IMAGE,
+ NULL);
+
+ source->priv->service = service;
+@@ -214,14 +214,14 @@ grl_dpap_source_finalize (GObject *object)
+ static void
+ grl_dpap_do_browse (ResultCbAndArgsAndDb *cb_and_db)
+ {
+- grl_dpap_db_browse(GRL_DPAP_DB(cb_and_db->db),
+- cb_and_db->cb.container,
+- cb_and_db->cb.source,
+- cb_and_db->cb.op_id,
+- cb_and_db->cb.skip,
+- cb_and_db->cb.count,
+- cb_and_db->cb.callback,
+- cb_and_db->cb.user_data);
++ grl_dpap_db_browse (GRL_DPAP_DB (cb_and_db->db),
++ cb_and_db->cb.container,
++ cb_and_db->cb.source,
++ cb_and_db->cb.op_id,
++ cb_and_db->cb.skip,
++ cb_and_db->cb.count,
++ cb_and_db->cb.callback,
++ cb_and_db->cb.user_data);
+
+ g_free (cb_and_db);
+ }
+@@ -229,13 +229,13 @@ grl_dpap_do_browse (ResultCbAndArgsAndDb *cb_and_db)
+ static void
+ grl_dpap_do_search (ResultCbAndArgsAndDb *cb_and_db)
+ {
+- grl_dpap_db_search(GRL_DPAP_DB(cb_and_db->db),
+- cb_and_db->cb.source,
+- cb_and_db->cb.op_id,
+- (GHRFunc) cb_and_db->cb.predicate,
+- cb_and_db->cb.predicate_data,
+- cb_and_db->cb.callback,
+- cb_and_db->cb.user_data);
++ grl_dpap_db_search (GRL_DPAP_DB (cb_and_db->db),
++ cb_and_db->cb.source,
++ cb_and_db->cb.op_id,
++ (GHRFunc) cb_and_db->cb.predicate,
++ cb_and_db->cb.predicate_data,
++ cb_and_db->cb.callback,
++ cb_and_db->cb.user_data);
+
+ g_free (cb_and_db);
+ }
+diff --git a/src/dmap/grl-dpap.h b/src/dmap/grl-dpap.h
+index 1f36cfc..ee596b5 100644
+--- a/src/dmap/grl-dpap.h
++++ b/src/dmap/grl-dpap.h
+@@ -26,31 +26,30 @@
+
+ #include <grilo.h>
+
+-#define GRL_DPAP_SOURCE_TYPE \
+- (grl_dpap_source_get_type ())
++#define GRL_DPAP_SOURCE_TYPE (grl_dpap_source_get_type ())
+
+-#define GRL_DPAP_SOURCE(obj) \
+- (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
+- GRL_DPAP_SOURCE_TYPE, \
+- GrlDpapSource))
++#define GRL_DPAP_SOURCE(obj) \
++ (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
++ GRL_DPAP_SOURCE_TYPE, \
++ GrlDpapSource))
+
+-#define GRL_IS_DPAP_SOURCE(obj) \
+- (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
+- GRL_DPAP_SOURCE_TYPE))
++#define GRL_IS_DPAP_SOURCE(obj) \
++ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
++ GRL_DPAP_SOURCE_TYPE))
+
+-#define GRL_DPAP_SOURCE_CLASS(klass) \
+- (G_TYPE_CHECK_CLASS_CAST((klass), \
+- GRL_DPAP_SOURCE_TYPE, \
+- GrlDpapSourceClass))
++#define GRL_DPAP_SOURCE_CLASS(klass) \
++ (G_TYPE_CHECK_CLASS_CAST ((klass), \
++ GRL_DPAP_SOURCE_TYPE, \
++ GrlDpapSourceClass))
+
+-#define GRL_IS_DPAP_SOURCE_CLASS(klass) \
+- (G_TYPE_CHECK_CLASS_TYPE((klass), \
+- GRL_DPAP_SOURCE_TYPE))
++#define GRL_IS_DPAP_SOURCE_CLASS(klass) \
++ (G_TYPE_CHECK_CLASS_TYPE ((klass), \
++ GRL_DPAP_SOURCE_TYPE))
+
+-#define GRL_DPAP_SOURCE_GET_CLASS(obj) \
+- (G_TYPE_INSTANCE_GET_CLASS ((obj), \
+- GRL_DPAP_SOURCE_TYPE, \
+- GrlDpapSourceClass))
++#define GRL_DPAP_SOURCE_GET_CLASS(obj) \
++ (G_TYPE_INSTANCE_GET_CLASS ((obj), \
++ GRL_DPAP_SOURCE_TYPE, \
++ GrlDpapSourceClass))
+
+ typedef struct _GrlDpapSourcePrivate GrlDpapSourcePrivate;
+ typedef struct _GrlDpapSource GrlDpapSource;
--- /dev/null
+diff --git a/src/dmap/grl-daap-db.c b/src/dmap/grl-daap-db.c
+index c931d91..f460113 100644
+--- a/src/dmap/grl-daap-db.c
++++ b/src/dmap/grl-daap-db.c
+@@ -232,6 +232,11 @@ grl_daap_db_add (DMAPDb *_db, DMAPRecord *_record)
+
+ g_free (id_s);
+ g_object_unref (media);
++ g_free(album);
++ g_free(artist);
++ g_free(genre);
++ g_free(title);
++ g_free(url);
+
+ return --nextid;
+ }
+diff --git a/src/dmap/grl-dpap-db.c b/src/dmap/grl-dpap-db.c
+index 02ffd3a..8be278b 100644
+--- a/src/dmap/grl-dpap-db.c
++++ b/src/dmap/grl-dpap-db.c
+@@ -177,6 +177,12 @@ grl_dpap_db_add (DMAPDb *_db, DMAPRecord *_record)
+
+ g_free (id_s);
+ g_object_unref (media);
++ g_free(filename);
++ g_free(aspectratio);
++ g_free(format);
++ g_free(comments);
++ g_free(url);
++ g_byte_array_unref(thumbnail);
+
+ return --nextid;
+ }
--- /dev/null
+diff --git a/meson.build b/meson.build
+index 33a6f40..8a590b9 100644
+--- a/meson.build
++++ b/meson.build
+@@ -62,7 +62,12 @@ gstreamer_dep = dependency('gstreamer-1.0', required: false)
+ gthread_dep = dependency('gthread-2.0', required: false)
+ json_glib_dep = dependency('json-glib-1.0', required: false)
+ libarchive_dep = dependency('libarchive', required: false)
+-libdmapsharing_dep = dependency('libdmapsharing-3.0', version: '>= 2.9.12', required: false)
++libdmapsharing4_dep = dependency('libdmapsharing-4.0', version: '>= 3.9.4', required: false)
++if libdmapsharing4_dep.found()
++ libdmapsharing_dep = libdmapsharing4_dep
++else
++ libdmapsharing_dep = dependency('libdmapsharing-3.0', version: '>= 2.9.12', required: false)
++endif
+ libgdata_dep = dependency('libgdata', version: '>= 0.9.1', required: false)
+ libmediaart_dep = dependency('libmediaart-2.0', required: false)
+ libsoup_dep = dependency('libsoup-2.4', required: false)
+diff --git a/src/dmap/grl-common.c b/src/dmap/grl-common.c
+index 6a1da5e..74a965f 100644
+--- a/src/dmap/grl-common.c
++++ b/src/dmap/grl-common.c
+@@ -33,13 +33,27 @@
+ #include <stdlib.h>
+ #include <libdmapsharing/dmap.h>
+
++#include "grl-dmap-compat.h"
+ #include "grl-common.h"
+
+ gchar *
+-grl_dmap_build_url (DMAPMdnsBrowserService *service)
++grl_dmap_build_url (DmapMdnsService *service)
+ {
+- return g_strdup_printf ("%s://%s:%u",
+- service->service_name,
+- service->host,
+- service->port);
++ gchar *url = NULL;
++ gchar *service_name, *host;
++ guint port;
++
++ service_name = grl_dmap_service_get_service_name (service);
++ host = grl_dmap_service_get_host (service);
++ port = grl_dmap_service_get_port (service);
++
++ url = g_strdup_printf ("%s://%s:%u",
++ service_name,
++ host,
++ port);
++
++ g_free (service_name);
++ g_free (host);
++
++ return url;
+ }
+diff --git a/src/dmap/grl-common.h b/src/dmap/grl-common.h
+index e9c8327..d61df63 100644
+--- a/src/dmap/grl-common.h
++++ b/src/dmap/grl-common.h
+@@ -24,9 +24,6 @@
+ #ifndef _GRL_COMMON_H_
+ #define _GRL_COMMON_H_
+
+-#include <grilo.h>
+-#include <libdmapsharing/dmap.h>
+-
+ typedef struct {
+ GrlSourceResultCb callback;
+ GrlSource *source;
+@@ -41,9 +38,9 @@ typedef struct {
+
+ typedef struct {
+ ResultCbAndArgs cb;
+- DMAPDb *db;
++ DmapDb *db;
+ } ResultCbAndArgsAndDb;
+
+-gchar *grl_dmap_build_url (DMAPMdnsBrowserService *service);
++gchar *grl_dmap_build_url (DmapMdnsService *service);
+
+ #endif /* _GRL_COMMON_H_ */
+diff --git a/src/dmap/grl-daap-compat.h b/src/dmap/grl-daap-compat.h
+new file mode 100644
+index 0000000..da9025f
+--- /dev/null
++++ b/src/dmap/grl-daap-compat.h
+@@ -0,0 +1,76 @@
++/*
++ * Copyright (C) 2019 W. Michael Petullo
++ * Copyright (C) 2019 Igalia S.L.
++ *
++ * Contact: W. Michael Petullo <mike@flyn.org>
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public License
++ * as published by the Free Software Foundation; version 2.1 of
++ * the License, or (at your option) any later version.
++ *
++ * This library 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
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with this library; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
++ * 02110-1301 USA
++ *
++ */
++
++#ifndef _GRL_DAAP_COMPAT_H_
++#define _GRL_DAAP_COMPAT_H_
++
++#include "grl-dmap-compat.h"
++
++#ifdef LIBDMAPSHARING_COMPAT
++
++DMAPRecord *grl_daap_record_factory_create (DMAPRecordFactory *factory, gpointer user_data, GError **error);
++guint grl_daap_db_add (DMAPDb *_db, DMAPRecord *_record, GError **error);
++
++/* Building against libdmapsharing 3 API. */
++
++#define dmap_av_connection_new daap_connection_new
++#define DmapAvRecord DAAPRecord
++#define DmapAvRecordInterface DAAPRecordIface
++#define DMAP_AV_RECORD DAAP_RECORD
++#define DMAP_TYPE_AV_RECORD DAAP_TYPE_RECORD
++#define IS_DMAP_AV_RECORD IS_DAAP_RECORD
++
++static inline DmapRecord *
++grl_daap_record_factory_create_compat (DmapRecordFactory *factory, gpointer user_data)
++{
++ return grl_daap_record_factory_create (factory, user_data, NULL);
++}
++
++static inline guint
++grl_daap_db_add_compat (DmapDb *_db, DmapRecord *_record)
++{
++ return grl_daap_db_add (_db, _record, NULL);
++}
++
++#else
++
++/* Building against libdmapsharing 4 API. */
++
++DmapRecord *grl_daap_record_factory_create (DmapRecordFactory *factory, gpointer user_data, GError **error);
++guint grl_daap_db_add (DmapDb *_db, DmapRecord *_record, GError **error);
++
++static inline DmapRecord *
++grl_daap_record_factory_create_compat (DmapRecordFactory *factory, gpointer user_data, GError **error)
++{
++ return grl_daap_record_factory_create (factory, user_data, error);
++}
++
++static inline guint
++grl_daap_db_add_compat (DmapDb *_db, DmapRecord *_record, GError **error)
++{
++ return grl_daap_db_add (_db, _record, error);
++}
++
++#endif
++
++#endif /* _GRL_DAAP_COMPAT_H_ */
+diff --git a/src/dmap/grl-daap-db.c b/src/dmap/grl-daap-db.c
+index f460113..315370e 100644
+--- a/src/dmap/grl-daap-db.c
++++ b/src/dmap/grl-daap-db.c
+@@ -54,8 +54,12 @@
+ #include <sys/stat.h>
+ #include <sys/types.h>
+ #include <glib.h>
++#include <grilo.h>
+ #include <string.h>
++#include <libdmapsharing/dmap.h>
+
++#include "grl-daap-compat.h"
++#include "grl-common.h"
+ #include "grl-daap-db.h"
+
+ #define ALBUMS_ID "albums"
+@@ -103,23 +107,23 @@ grl_daap_db_new (void)
+ return db;
+ }
+
+-static DMAPRecord *
+-grl_daap_db_lookup_by_id (const DMAPDb *db, guint id)
++static DmapRecord *
++grl_daap_db_lookup_by_id (const DmapDb *db, guint id)
+ {
+ g_error ("Not implemented");
+ return NULL;
+ }
+
+ static void
+-grl_daap_db_foreach (const DMAPDb *db,
+- GHFunc func,
++grl_daap_db_foreach (const DmapDb *db,
++ DmapIdRecordFunc func,
+ gpointer data)
+ {
+ g_error ("Not implemented");
+ }
+
+ static gint64
+-grl_daap_db_count (const DMAPDb *db)
++grl_daap_db_count (const DmapDb *db)
+ {
+ g_error ("Not implemented");
+ return 0;
+@@ -150,14 +154,14 @@ set_insert (GHashTable *category, const char *category_name, char *set_name, Grl
+ g_object_unref (container);
+ }
+
+-static guint
+-grl_daap_db_add (DMAPDb *_db, DMAPRecord *_record)
++guint
++grl_daap_db_add (DmapDb *_db, DmapRecord *_record, GError **error)
+ {
+ g_assert (IS_GRL_DAAP_DB (_db));
+- g_assert (IS_DAAP_RECORD (_record));
++ g_assert (IS_DMAP_AV_RECORD (_record));
+
+ GrlDAAPDb *db = GRL_DAAP_DB (_db);
+- DAAPRecord *record = DAAP_RECORD (_record);
++ DmapAvRecord *record = DMAP_AV_RECORD (_record);
+
+ gint duration = 0;
+ gint32 bitrate = 0,
+@@ -232,11 +236,11 @@ grl_daap_db_add (DMAPDb *_db, DMAPRecord *_record)
+
+ g_free (id_s);
+ g_object_unref (media);
+- g_free(album);
+- g_free(artist);
+- g_free(genre);
+- g_free(title);
+- g_free(url);
++ g_free (album);
++ g_free (artist);
++ g_free (genre);
++ g_free (title);
++ g_free (url);
+
+ return --nextid;
+ }
+@@ -359,11 +363,11 @@ grl_daap_db_search (GrlDAAPDb *db,
+ static void
+ dmap_db_interface_init (gpointer iface, gpointer data)
+ {
+- DMAPDbIface *daap_db = iface;
++ DmapDbInterface *daap_db = iface;
+
+ g_assert (G_TYPE_FROM_INTERFACE (daap_db) == DMAP_TYPE_DB);
+
+- daap_db->add = grl_daap_db_add;
++ daap_db->add = grl_daap_db_add_compat;
+ daap_db->lookup_by_id = grl_daap_db_lookup_by_id;
+ daap_db->foreach = grl_daap_db_foreach;
+ daap_db->count = grl_daap_db_count;
+diff --git a/src/dmap/grl-daap-db.h b/src/dmap/grl-daap-db.h
+index 2548c50..1a37a3a 100644
+--- a/src/dmap/grl-daap-db.h
++++ b/src/dmap/grl-daap-db.h
+@@ -24,6 +24,8 @@
+ #include <libdmapsharing/dmap.h>
+ #include <grilo.h>
+
++#include "grl-daap-compat.h"
++
+ G_BEGIN_DECLS
+
+ #define TYPE_GRL_DAAP_DB (grl_daap_db_get_type ())
+diff --git a/src/dmap/grl-daap-record-factory.c b/src/dmap/grl-daap-record-factory.c
+index 648fd85..d0c590f 100644
+--- a/src/dmap/grl-daap-record-factory.c
++++ b/src/dmap/grl-daap-record-factory.c
+@@ -1,5 +1,5 @@
+ /*
+- * DAAPRecord factory class
++ * DmapAvRecord factory class
+ *
+ * Copyright (C) 2008 W. Michael Petullo <mike@flyn.org>
+ *
+@@ -18,11 +18,16 @@
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
++#include <grilo.h>
++#include <libdmapsharing/dmap.h>
++
++#include "grl-daap-compat.h"
++#include "grl-common.h"
+ #include "grl-daap-record-factory.h"
+ #include "grl-daap-record.h"
+
+-DMAPRecord *
+-grl_daap_record_factory_create (DMAPRecordFactory *factory, gpointer user_data)
++DmapRecord *
++grl_daap_record_factory_create (DmapRecordFactory *factory, gpointer user_data, GError **error)
+ {
+ return DMAP_RECORD (grl_daap_record_new ());
+ }
+@@ -40,11 +45,11 @@ grl_daap_record_factory_class_init (GrlDAAPRecordFactoryClass *klass)
+ static void
+ grl_daap_record_factory_interface_init (gpointer iface, gpointer data)
+ {
+- DMAPRecordFactoryIface *factory = iface;
++ DmapRecordFactoryInterface *factory = iface;
+
+ g_assert (G_TYPE_FROM_INTERFACE (factory) == DMAP_TYPE_RECORD_FACTORY);
+
+- factory->create = grl_daap_record_factory_create;
++ factory->create = grl_daap_record_factory_create_compat;
+ }
+
+ G_DEFINE_TYPE_WITH_CODE (GrlDAAPRecordFactory, grl_daap_record_factory, G_TYPE_OBJECT,
+diff --git a/src/dmap/grl-daap-record-factory.h b/src/dmap/grl-daap-record-factory.h
+index 45aa69a..f114bad 100644
+--- a/src/dmap/grl-daap-record-factory.h
++++ b/src/dmap/grl-daap-record-factory.h
+@@ -23,6 +23,8 @@
+
+ #include <libdmapsharing/dmap.h>
+
++#include "grl-daap-compat.h"
++
+ G_BEGIN_DECLS
+
+ #define TYPE_SIMPLE_DAAP_RECORD_FACTORY (grl_daap_record_factory_get_type ())
+@@ -64,8 +66,6 @@ GType grl_daap_record_factory_get_type (void);
+
+ GrlDAAPRecordFactory *grl_daap_record_factory_new (void);
+
+-DMAPRecord *grl_daap_record_factory_create (DMAPRecordFactory *factory, gpointer user_data);
+-
+ #endif /* __SIMPLE_DAAP_RECORD_FACTORY */
+
+ G_END_DECLS
+diff --git a/src/dmap/grl-daap-record.c b/src/dmap/grl-daap-record.c
+index 82bf2f9..4fa0c54 100644
+--- a/src/dmap/grl-daap-record.c
++++ b/src/dmap/grl-daap-record.c
+@@ -20,6 +20,11 @@
+ *
+ */
+
++#include <grilo.h>
++#include <libdmapsharing/dmap.h>
++
++#include "grl-daap-compat.h"
++#include "grl-common.h"
+ #include "grl-daap-record.h"
+
+ struct GrlDAAPRecordPrivate {
+@@ -226,7 +231,7 @@ grl_daap_record_new (void)
+ }
+
+ GInputStream *
+-grl_daap_record_read (DAAPRecord *record, GError **error)
++grl_daap_record_read (DmapAvRecord *record, GError **error)
+ {
+ GFile *file;
+ GInputStream *stream;
+@@ -280,9 +285,9 @@ grl_daap_record_class_init (GrlDAAPRecordClass *klass)
+ static void
+ grl_daap_record_daap_iface_init (gpointer iface, gpointer data)
+ {
+- DAAPRecordIface *daap_record = iface;
++ DmapAvRecordInterface *daap_record = iface;
+
+- g_assert (G_TYPE_FROM_INTERFACE (daap_record) == DAAP_TYPE_RECORD);
++ g_assert (G_TYPE_FROM_INTERFACE (daap_record) == DMAP_TYPE_AV_RECORD);
+
+ daap_record->read = grl_daap_record_read;
+ }
+@@ -290,7 +295,7 @@ grl_daap_record_daap_iface_init (gpointer iface, gpointer data)
+ static void
+ grl_daap_record_dmap_iface_init (gpointer iface, gpointer data)
+ {
+- DMAPRecordIface *dmap_record = iface;
++ DmapRecordInterface *dmap_record = iface;
+
+ g_assert (G_TYPE_FROM_INTERFACE (dmap_record) == DMAP_TYPE_RECORD);
+ }
+@@ -298,7 +303,7 @@ grl_daap_record_dmap_iface_init (gpointer iface, gpointer data)
+
+ G_DEFINE_TYPE_WITH_CODE (GrlDAAPRecord, grl_daap_record, G_TYPE_OBJECT,
+ G_ADD_PRIVATE (GrlDAAPRecord)
+- G_IMPLEMENT_INTERFACE (DAAP_TYPE_RECORD, grl_daap_record_daap_iface_init)
++ G_IMPLEMENT_INTERFACE (DMAP_TYPE_AV_RECORD, grl_daap_record_daap_iface_init)
+ G_IMPLEMENT_INTERFACE (DMAP_TYPE_RECORD, grl_daap_record_dmap_iface_init))
+
+ static void
+diff --git a/src/dmap/grl-daap-record.h b/src/dmap/grl-daap-record.h
+index 7aae82d..42782b1 100644
+--- a/src/dmap/grl-daap-record.h
++++ b/src/dmap/grl-daap-record.h
+@@ -23,6 +23,8 @@
+
+ #include <libdmapsharing/dmap.h>
+
++#include "grl-daap-compat.h"
++
+ G_BEGIN_DECLS
+
+ #define TYPE_SIMPLE_DAAP_RECORD (grl_daap_record_get_type ())
+@@ -69,8 +71,8 @@ typedef struct {
+ GType grl_daap_record_get_type (void);
+
+ GrlDAAPRecord *grl_daap_record_new (void);
+-GInputStream *grl_daap_record_read (DAAPRecord *record, GError **error);
+-gint grl_daap_record_get_id (DAAPRecord *record);
++GInputStream *grl_daap_record_read (DmapAvRecord *record, GError **error);
++gint grl_daap_record_get_id (DmapAvRecord *record);
+
+ #endif /* __SIMPLE_DAAP_RECORD */
+
+diff --git a/src/dmap/grl-daap.c b/src/dmap/grl-daap.c
+index f3c4115..962f2b8 100644
+--- a/src/dmap/grl-daap.c
++++ b/src/dmap/grl-daap.c
+@@ -33,6 +33,7 @@
+ #include <stdlib.h>
+ #include <libdmapsharing/dmap.h>
+
++#include "grl-daap-compat.h"
+ #include "grl-common.h"
+ #include "grl-daap.h"
+ #include "grl-daap-db.h"
+@@ -52,12 +53,12 @@ GRL_LOG_DOMAIN_STATIC (daap_log_domain);
+ /* --- Grilo DAAP Private --- */
+
+ struct _GrlDaapSourcePrivate {
+- DMAPMdnsBrowserService *service;
++ DmapMdnsService *service;
+ };
+
+ /* --- Data types --- */
+
+-static GrlDaapSource *grl_daap_source_new (DMAPMdnsBrowserService *service);
++static GrlDaapSource *grl_daap_source_new (DmapMdnsService *service);
+
+ static void grl_daap_source_finalize (GObject *object);
+
+@@ -74,16 +75,16 @@ static void grl_daap_source_search (GrlSource *source,
+ GrlSourceSearchSpec *ss);
+
+
+-static void grl_daap_service_added_cb (DMAPMdnsBrowser *browser,
+- DMAPMdnsBrowserService *service,
++static void grl_daap_service_added_cb (DmapMdnsBrowser *browser,
++ DmapMdnsService *service,
+ GrlPlugin *plugin);
+
+-static void grl_daap_service_removed_cb (DMAPMdnsBrowser *browser,
++static void grl_daap_service_removed_cb (DmapMdnsBrowser *browser,
+ const gchar *service_name,
+ GrlPlugin *plugin);
+
+ /* ===================== Globals ======================= */
+-static DMAPMdnsBrowser *browser;
++static DmapMdnsBrowser *browser;
+ /* Maps URIs to DBs */
+ static GHashTable *connections;
+ /* Map DAAP services to Grilo media sources */
+@@ -106,7 +107,7 @@ grl_daap_plugin_init (GrlRegistry *registry,
+ bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
+ bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
+
+- browser = dmap_mdns_browser_new (DMAP_MDNS_BROWSER_SERVICE_TYPE_DAAP);
++ browser = dmap_mdns_browser_new (DMAP_MDNS_SERVICE_TYPE_DAAP);
+ connections = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);
+ sources = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);
+
+@@ -153,8 +154,10 @@ GRL_PLUGIN_DEFINE (GRL_MAJOR,
+ G_DEFINE_TYPE_WITH_PRIVATE (GrlDaapSource, grl_daap_source, GRL_TYPE_SOURCE)
+
+ static GrlDaapSource *
+-grl_daap_source_new (DMAPMdnsBrowserService *service)
++grl_daap_source_new (DmapMdnsService *service)
+ {
++ gchar *name;
++ gchar *service_name;
+ gchar *source_desc;
+ gchar *source_id;
+
+@@ -162,12 +165,15 @@ grl_daap_source_new (DMAPMdnsBrowserService *service)
+
+ GRL_DEBUG ("grl_daap_source_new");
+
+- source_desc = g_strdup_printf (SOURCE_DESC_TEMPLATE, service->name);
+- source_id = g_strdup_printf (SOURCE_ID_TEMPLATE, service->name);
++ name = grl_dmap_service_get_name (service);
++ service_name = grl_dmap_service_get_service_name (service);
++
++ source_desc = g_strdup_printf (SOURCE_DESC_TEMPLATE, name);
++ source_id = g_strdup_printf (SOURCE_ID_TEMPLATE, name);
+
+ source = g_object_new (GRL_DAAP_SOURCE_TYPE,
+ "source-id", source_id,
+- "source-name", service->name,
++ "source-name", service_name,
+ "source-desc", source_desc,
+ "supported-media", GRL_SUPPORTED_MEDIA_AUDIO,
+ NULL);
+@@ -176,6 +182,8 @@ grl_daap_source_new (DMAPMdnsBrowserService *service)
+
+ g_free (source_desc);
+ g_free (source_id);
++ g_free (service_name);
++ g_free (name);
+
+ return source;
+ }
+@@ -209,7 +217,7 @@ grl_daap_source_finalize (GObject *object)
+ static void
+ grl_daap_do_browse (ResultCbAndArgsAndDb *cb_and_db)
+ {
+- grl_daap_db_browse (GRL_DAAP_DB(cb_and_db->db),
++ grl_daap_db_browse (GRL_DAAP_DB (cb_and_db->db),
+ cb_and_db->cb.container,
+ cb_and_db->cb.source,
+ cb_and_db->cb.op_id,
+@@ -236,7 +244,7 @@ grl_daap_do_search (ResultCbAndArgsAndDb *cb_and_db)
+ }
+
+ static void
+-browse_connected_cb (DMAPConnection *connection,
++browse_connected_cb (DmapConnection *connection,
+ gboolean result,
+ const char *reason,
+ ResultCbAndArgsAndDb *cb_and_db)
+@@ -261,7 +269,7 @@ browse_connected_cb (DMAPConnection *connection,
+ }
+
+ static void
+-search_connected_cb (DMAPConnection *connection,
++search_connected_cb (DmapConnection *connection,
+ gboolean result,
+ const char *reason,
+ ResultCbAndArgsAndDb *cb_and_db)
+@@ -286,8 +294,8 @@ search_connected_cb (DMAPConnection *connection,
+ }
+
+ static void
+-grl_daap_service_added_cb (DMAPMdnsBrowser *browser,
+- DMAPMdnsBrowserService *service,
++grl_daap_service_added_cb (DmapMdnsBrowser *browser,
++ DmapMdnsService *service,
+ GrlPlugin *plugin)
+ {
+ GrlRegistry *registry = grl_registry_get_default ();
+@@ -301,13 +309,16 @@ grl_daap_service_added_cb (DMAPMdnsBrowser *browser,
+ GRL_SOURCE (source),
+ NULL);
+ if (source != NULL) {
+- g_hash_table_insert (sources, g_strdup (service->name), g_object_ref (source));
++ gchar *name;
++ name = grl_dmap_service_get_name (service);
++ g_hash_table_insert (sources, g_strdup (name), g_object_ref (source));
+ g_object_remove_weak_pointer (G_OBJECT (source), (gpointer *) &source);
++ g_free (name);
+ }
+ }
+
+ static void
+-grl_daap_service_removed_cb (DMAPMdnsBrowser *browser,
++grl_daap_service_removed_cb (DmapMdnsBrowser *browser,
+ const gchar *service_name,
+ GrlPlugin *plugin)
+ {
+@@ -323,14 +334,14 @@ grl_daap_service_removed_cb (DMAPMdnsBrowser *browser,
+ }
+
+ static void
+-grl_daap_connect (gchar *name, gchar *host, guint port, ResultCbAndArgsAndDb *cb_and_db, DMAPConnectionCallback callback)
++grl_daap_connect (gchar *name, gchar *host, guint port, ResultCbAndArgsAndDb *cb_and_db, DmapConnectionFunc callback)
+ {
+- DMAPRecordFactory *factory;
+- DMAPConnection *connection;
++ DmapRecordFactory *factory;
++ DmapConnection *connection;
+
+ factory = DMAP_RECORD_FACTORY (grl_daap_record_factory_new ());
+- connection = DMAP_CONNECTION (daap_connection_new (name, host, port, DMAP_DB (cb_and_db->db), factory));
+- dmap_connection_connect (connection, (DMAPConnectionCallback) callback, cb_and_db);
++ connection = DMAP_CONNECTION (dmap_av_connection_new (name, host, port, DMAP_DB (cb_and_db->db), factory));
++ dmap_connection_start (connection, (DmapConnectionFunc) callback, cb_and_db);
+ }
+
+ static gboolean
+@@ -397,15 +408,25 @@ grl_daap_source_browse (GrlSource *source,
+ browse_connected_cb (NULL, TRUE, NULL, cb_and_db);
+ } else {
+ /* Connect */
++ gchar *name, *host;
++ guint port;
++
+ cb_and_db->db = DMAP_DB (grl_daap_db_new ());
+
+- grl_daap_connect (dmap_source->priv->service->name,
+- dmap_source->priv->service->host,
+- dmap_source->priv->service->port,
++ name = grl_dmap_service_get_name (dmap_source->priv->service);
++ host = grl_dmap_service_get_host (dmap_source->priv->service);
++ port = grl_dmap_service_get_port (dmap_source->priv->service);
++
++ grl_daap_connect (name,
++ host,
++ port,
+ cb_and_db,
+- (DMAPConnectionCallback) browse_connected_cb);
++ (DmapConnectionFunc) browse_connected_cb);
+
+ g_hash_table_insert (connections, g_strdup (url), cb_and_db->db);
++
++ g_free (name);
++ g_free (host);
+ }
+
+ g_free (url);
+@@ -417,7 +438,7 @@ static void grl_daap_source_search (GrlSource *source,
+ GrlDaapSource *dmap_source = GRL_DAAP_SOURCE (source);
+
+ ResultCbAndArgsAndDb *cb_and_db;
+- DMAPMdnsBrowserService *service = dmap_source->priv->service;
++ DmapMdnsService *service = dmap_source->priv->service;
+ gchar *url = grl_dmap_build_url (service);
+
+ cb_and_db = g_new (ResultCbAndArgsAndDb, 1);
+@@ -435,9 +456,25 @@ static void grl_daap_source_search (GrlSource *source,
+ search_connected_cb (NULL, TRUE, NULL, cb_and_db);
+ } else {
+ /* Connect */
++ gchar *name, *host;
++ guint port;
++
+ cb_and_db->db = DMAP_DB (grl_daap_db_new ());
+- grl_daap_connect (service->name, service->host, service->port, cb_and_db, (DMAPConnectionCallback) search_connected_cb);
++
++ name = grl_dmap_service_get_name (dmap_source->priv->service);
++ host = grl_dmap_service_get_host (dmap_source->priv->service);
++ port = grl_dmap_service_get_port (dmap_source->priv->service);
++
++ grl_daap_connect (name,
++ host,
++ port,
++ cb_and_db,
++ (DmapConnectionFunc) search_connected_cb);
++
+ g_hash_table_insert (connections, g_strdup (url), cb_and_db->db);
++
++ g_free (name);
++ g_free (host);
+ }
+
+ g_free (url);
+diff --git a/src/dmap/grl-daap.h b/src/dmap/grl-daap.h
+index 1119495..5271435 100644
+--- a/src/dmap/grl-daap.h
++++ b/src/dmap/grl-daap.h
+@@ -26,6 +26,8 @@
+
+ #include <grilo.h>
+
++#include "grl-daap-compat.h"
++
+ #define GRL_DAAP_SOURCE_TYPE (grl_daap_source_get_type ())
+
+ #define GRL_DAAP_SOURCE(obj) \
+diff --git a/src/dmap/grl-dmap-compat.h b/src/dmap/grl-dmap-compat.h
+new file mode 100644
+index 0000000..cd1934f
+--- /dev/null
++++ b/src/dmap/grl-dmap-compat.h
+@@ -0,0 +1,108 @@
++/*
++ * Copyright (C) 2019 W. Michael Petullo
++ * Copyright (C) 2019 Igalia S.L.
++ *
++ * Contact: W. Michael Petullo <mike@flyn.org>
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public License
++ * as published by the Free Software Foundation; version 2.1 of
++ * the License, or (at your option) any later version.
++ *
++ * This library 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
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with this library; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
++ * 02110-1301 USA
++ *
++ */
++
++#ifndef _GRL_DMAP_COMPAT_H_
++#define _GRL_DMAP_COMPAT_H_
++
++#ifdef LIBDMAPSHARING_COMPAT
++
++/* Building against libdmapsharing 3 API. */
++
++#define DmapConnection DMAPConnection
++#define DmapConnectionFunc DMAPConnectionCallback
++#define dmap_connection_start dmap_connection_connect
++#define DmapDb DMAPDb
++#define DmapDbInterface DMAPDbIface
++#define DmapIdRecordFunc GHFunc
++#define DmapMdnsBrowser DMAPMdnsBrowser
++#define DmapMdnsService DMAPMdnsBrowserService
++#define DMAP_MDNS_SERVICE_TYPE_DAAP DMAP_MDNS_BROWSER_SERVICE_TYPE_DAAP
++#define DMAP_MDNS_SERVICE_TYPE_DPAP DMAP_MDNS_BROWSER_SERVICE_TYPE_DPAP
++#define DmapRecord DMAPRecord
++#define DmapRecordFactory DMAPRecordFactory
++#define DmapRecordFactoryInterface DMAPRecordFactoryIface
++#define DmapRecordInterface DMAPRecordIface
++
++static inline gchar *
++grl_dmap_service_get_name (DmapMdnsService *service)
++{
++ return g_strdup (service->name);
++}
++
++static inline gchar *
++grl_dmap_service_get_service_name (DmapMdnsService *service)
++{
++ return g_strdup (service->service_name);
++}
++
++static inline gchar *
++grl_dmap_service_get_host (DmapMdnsService *service)
++{
++ return g_strdup (service->host);
++}
++
++static inline guint
++grl_dmap_service_get_port (DmapMdnsService *service)
++{
++ return service->port;
++}
++
++#else
++
++/* Building against libdmapsharing 4 API. */
++
++static inline gchar *
++grl_dmap_service_get_name (DmapMdnsService *service)
++{
++ gchar *name;
++ g_object_get (service, "name", &name, NULL);
++ return name;
++}
++
++static inline gchar *
++grl_dmap_service_get_service_name (DmapMdnsService *service)
++{
++ gchar *service_name;
++ g_object_get (service, "service-name", &service_name, NULL);
++ return service_name;
++}
++
++static inline gchar *
++grl_dmap_service_get_host (DmapMdnsService *service)
++{
++ gchar *host;
++ g_object_get (service, "host", &host, NULL);
++ return host;
++}
++
++static inline guint
++grl_dmap_service_get_port (DmapMdnsService *service)
++{
++ guint port;
++ g_object_get (service, "port", &port, NULL);
++ return port;
++}
++
++#endif
++
++#endif /* _GRL_DMAP_COMPAT_H_ */
+diff --git a/src/dmap/grl-dpap-compat.h b/src/dmap/grl-dpap-compat.h
+new file mode 100644
+index 0000000..b996464
+--- /dev/null
++++ b/src/dmap/grl-dpap-compat.h
+@@ -0,0 +1,116 @@
++/*
++ * Copyright (C) 2019 W. Michael Petullo
++ * Copyright (C) 2019 Igalia S.L.
++ *
++ * Contact: W. Michael Petullo <mike@flyn.org>
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public License
++ * as published by the Free Software Foundation; version 2.1 of
++ * the License, or (at your option) any later version.
++ *
++ * This library 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
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with this library; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
++ * 02110-1301 USA
++ *
++ */
++
++#ifndef _GRL_DPAP_COMPAT_H_
++#define _GRL_DPAP_COMPAT_H_
++
++#include "grl-dmap-compat.h"
++
++#ifdef LIBDMAPSHARING_COMPAT
++
++DMAPRecord *grl_dpap_record_factory_create (DMAPRecordFactory *factory, gpointer user_data, GError **error);
++guint grl_dpap_db_add (DMAPDb *_db, DMAPRecord *_record, GError **error);
++
++/* Building against libdmapsharing 3 API. */
++
++#define dmap_image_connection_new dpap_connection_new
++#define DmapImageRecord DPAPRecord
++#define DmapImageRecordInterface DPAPRecordIface
++#define DMAP_IMAGE_RECORD DPAP_RECORD
++#define DMAP_TYPE_IMAGE_RECORD DPAP_TYPE_RECORD
++#define IS_DMAP_IMAGE_RECORD IS_DPAP_RECORD
++
++static inline DmapRecord *
++grl_dpap_record_factory_create_compat (DmapRecordFactory *factory, gpointer user_data)
++{
++ return grl_dpap_record_factory_create (factory, user_data, NULL);
++}
++
++static inline void
++set_thumbnail (GValue *value, GByteArray *thumbnail)
++{
++ g_value_set_pointer (value, thumbnail);
++}
++
++static inline GByteArray *
++get_thumbnail (GByteArray *thumbnail, const GValue *value)
++{
++ if (thumbnail)
++ g_byte_array_unref (thumbnail);
++ return g_byte_array_ref (g_value_get_pointer (value));
++}
++
++static inline void
++unref_thumbnail (GByteArray *thumbnail)
++{
++ g_byte_array_unref (thumbnail);
++}
++
++static inline guint
++grl_dpap_db_add_compat (DMAPDb *_db, DmapRecord *_record)
++{
++ return grl_dpap_db_add (_db, _record, NULL);
++}
++
++#else
++
++/* Building against libdmapsharing 4 API. */
++
++DmapRecord *grl_dpap_record_factory_create (DmapRecordFactory *factory, gpointer user_data, GError **error);
++guint grl_dpap_db_add (DmapDb *_db, DmapRecord *_record, GError **error);
++
++static inline void
++set_thumbnail (GValue *value, GArray *thumbnail)
++{
++ g_value_set_boxed (value, thumbnail);
++}
++
++static inline GArray *
++get_thumbnail (GArray *thumbnail, const GValue *value)
++{
++ if (thumbnail)
++ g_array_unref (thumbnail);
++ return g_value_get_boxed (value);
++}
++
++static inline void
++unref_thumbnail (GArray *thumbnail)
++{
++ g_array_unref (thumbnail);
++}
++
++static inline DmapRecord *
++grl_dpap_record_factory_create_compat (DmapRecordFactory *factory, gpointer user_data, GError **error)
++{
++ return grl_dpap_record_factory_create (factory, user_data, error);
++}
++
++static inline guint
++grl_dpap_db_add_compat (DmapDb *_db, DmapRecord *_record, GError **error)
++{
++ return grl_dpap_db_add (_db, _record, error);
++}
++
++#endif
++
++#endif /* _GRL_DPAP_COMPAT_H_ */
+diff --git a/src/dmap/grl-dpap-db.c b/src/dmap/grl-dpap-db.c
+index 8be278b..cd647ee 100644
+--- a/src/dmap/grl-dpap-db.c
++++ b/src/dmap/grl-dpap-db.c
+@@ -24,12 +24,16 @@
+ #include "config.h"
+ #endif
+
++#include <grilo.h>
+ #include <glib/gi18n-lib.h>
+ #include <sys/stat.h>
+ #include <sys/types.h>
+ #include <glib.h>
+ #include <string.h>
++#include <libdmapsharing/dmap.h>
+
++#include "grl-dpap-compat.h"
++#include "grl-common.h"
+ #include "grl-dpap-db.h"
+
+ #define PHOTOS_ID "photos"
+@@ -71,23 +75,23 @@ grl_dpap_db_new (void)
+ return db;
+ }
+
+-static DMAPRecord *
+-grl_dpap_db_lookup_by_id (const DMAPDb *db, guint id)
++static DmapRecord *
++grl_dpap_db_lookup_by_id (const DmapDb *db, guint id)
+ {
+ g_warning ("Not implemented");
+ return NULL;
+ }
+
+ static void
+-grl_dpap_db_foreach (const DMAPDb *db,
+- GHFunc func,
++grl_dpap_db_foreach (const DmapDb *db,
++ DmapIdRecordFunc func,
+ gpointer data)
+ {
+ g_warning ("Not implemented");
+ }
+
+ static gint64
+-grl_dpap_db_count (const DMAPDb *db)
++grl_dpap_db_count (const DmapDb *db)
+ {
+ g_warning ("Not implemented");
+ return 0;
+@@ -118,21 +122,21 @@ set_insert (GHashTable *category, const char *category_name, char *set_name, Grl
+ g_object_unref (container);
+ }
+
+-static guint
+-grl_dpap_db_add (DMAPDb *_db, DMAPRecord *_record)
++guint
++grl_dpap_db_add (DmapDb *_db, DmapRecord *_record, GError **error)
+ {
+ g_assert (IS_GRL_DPAP_DB (_db));
+- g_assert (IS_DPAP_RECORD (_record));
++ g_assert (IS_DMAP_IMAGE_RECORD (_record));
+
+ GrlDPAPDb *db = GRL_DPAP_DB (_db);
+- DPAPRecord *record = DPAP_RECORD (_record);
++ DmapImageRecord *record = DMAP_IMAGE_RECORD (_record);
+
+ gint height = 0,
+ width = 0,
+ largefilesize = 0,
+ creationdate = 0,
+ rating = 0;
+- GByteArray *thumbnail = NULL;
++ GArray *thumbnail = NULL;
+ gchar *id_s = NULL,
+ *filename = NULL,
+ *aspectratio = NULL,
+@@ -177,12 +181,12 @@ grl_dpap_db_add (DMAPDb *_db, DMAPRecord *_record)
+
+ g_free (id_s);
+ g_object_unref (media);
+- g_free(filename);
+- g_free(aspectratio);
+- g_free(format);
+- g_free(comments);
+- g_free(url);
+- g_byte_array_unref(thumbnail);
++ g_free (filename);
++ g_free (aspectratio);
++ g_free (format);
++ g_free (comments);
++ g_free (url);
++ g_array_unref (thumbnail);
+
+ return --nextid;
+ }
+@@ -298,11 +302,11 @@ grl_dpap_db_search (GrlDPAPDb *db,
+ static void
+ dmap_db_interface_init (gpointer iface, gpointer data)
+ {
+- DMAPDbIface *dpap_db = iface;
++ DmapDbInterface *dpap_db = iface;
+
+ g_assert (G_TYPE_FROM_INTERFACE (dpap_db) == DMAP_TYPE_DB);
+
+- dpap_db->add = grl_dpap_db_add;
++ dpap_db->add = grl_dpap_db_add_compat;
+ dpap_db->lookup_by_id = grl_dpap_db_lookup_by_id;
+ dpap_db->foreach = grl_dpap_db_foreach;
+ dpap_db->count = grl_dpap_db_count;
+diff --git a/src/dmap/grl-dpap-db.h b/src/dmap/grl-dpap-db.h
+index d3abcba..a21ad7a 100644
+--- a/src/dmap/grl-dpap-db.h
++++ b/src/dmap/grl-dpap-db.h
+@@ -24,6 +24,8 @@
+ #include <libdmapsharing/dmap.h>
+ #include <grilo.h>
+
++#include "grl-dpap-compat.h"
++
+ G_BEGIN_DECLS
+
+ #define TYPE_GRL_DPAP_DB (grl_dpap_db_get_type ())
+diff --git a/src/dmap/grl-dpap-record-factory.c b/src/dmap/grl-dpap-record-factory.c
+index 3d0c87a..860d957 100644
+--- a/src/dmap/grl-dpap-record-factory.c
++++ b/src/dmap/grl-dpap-record-factory.c
+@@ -18,11 +18,18 @@
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
++#include <grilo.h>
++#include <libdmapsharing/dmap.h>
++
++#include "grl-dpap-compat.h"
++#include "grl-common.h"
+ #include "grl-dpap-record-factory.h"
+ #include "grl-dpap-record.h"
+
+-DMAPRecord *
+-grl_dpap_record_factory_create (DMAPRecordFactory *factory, gpointer user_data)
++DmapRecord *
++grl_dpap_record_factory_create (DmapRecordFactory *factory,
++ gpointer user_data,
++ GError **error)
+ {
+ return DMAP_RECORD (grl_dpap_record_new ());
+ }
+@@ -40,11 +47,11 @@ grl_dpap_record_factory_class_init (GrlDPAPRecordFactoryClass *klass)
+ static void
+ grl_dpap_record_factory_interface_init (gpointer iface, gpointer data)
+ {
+- DMAPRecordFactoryIface *factory = iface;
++ DmapRecordFactoryInterface *factory = iface;
+
+ g_assert (G_TYPE_FROM_INTERFACE (factory) == DMAP_TYPE_RECORD_FACTORY);
+
+- factory->create = grl_dpap_record_factory_create;
++ factory->create = grl_dpap_record_factory_create_compat;
+ }
+
+ G_DEFINE_TYPE_WITH_CODE (GrlDPAPRecordFactory, grl_dpap_record_factory, G_TYPE_OBJECT,
+diff --git a/src/dmap/grl-dpap-record-factory.h b/src/dmap/grl-dpap-record-factory.h
+index 3f4ca54..899fd0a 100644
+--- a/src/dmap/grl-dpap-record-factory.h
++++ b/src/dmap/grl-dpap-record-factory.h
+@@ -23,6 +23,8 @@
+
+ #include <libdmapsharing/dmap.h>
+
++#include "grl-dpap-compat.h"
++
+ G_BEGIN_DECLS
+
+ #define TYPE_SIMPLE_DPAP_RECORD_FACTORY (grl_dpap_record_factory_get_type ())
+@@ -64,7 +66,7 @@ GType grl_dpap_record_factory_get_type (void);
+
+ GrlDPAPRecordFactory *grl_dpap_record_factory_new (void);
+
+-DMAPRecord *grl_dpap_record_factory_create (DMAPRecordFactory *factory, gpointer user_data);
++DmapRecord *grl_dpap_record_factory_create (DmapRecordFactory *factory, gpointer user_data, GError **error);
+
+ #endif /* __SIMPLE_DPAP_RECORD_FACTORY */
+
+diff --git a/src/dmap/grl-dpap-record.c b/src/dmap/grl-dpap-record.c
+index 14eb1de..0afb2b8 100644
+--- a/src/dmap/grl-dpap-record.c
++++ b/src/dmap/grl-dpap-record.c
+@@ -20,6 +20,11 @@
+ *
+ */
+
++#include <grilo.h>
++#include <libdmapsharing/dmap.h>
++
++#include "grl-dpap-compat.h"
++#include "grl-common.h"
+ #include "grl-dpap-record.h"
+
+ struct GrlDPAPRecordPrivate {
+@@ -28,7 +33,7 @@ struct GrlDPAPRecordPrivate {
+ gint creationdate;
+ gint rating;
+ char *filename;
+- GByteArray *thumbnail;
++ void *thumbnail; /* GByteArray or GArray, depending on libdmapsharing ver. */
+ char *aspectratio;
+ gint height;
+ gint width;
+@@ -56,7 +61,7 @@ static void grl_dpap_record_dpap_iface_init (gpointer iface, gpointer data);
+
+ G_DEFINE_TYPE_WITH_CODE (GrlDPAPRecord, grl_dpap_record, G_TYPE_OBJECT,
+ G_ADD_PRIVATE (GrlDPAPRecord)
+- G_IMPLEMENT_INTERFACE (DPAP_TYPE_RECORD, grl_dpap_record_dpap_iface_init)
++ G_IMPLEMENT_INTERFACE (DMAP_TYPE_IMAGE_RECORD, grl_dpap_record_dpap_iface_init)
+ G_IMPLEMENT_INTERFACE (DMAP_TYPE_RECORD, grl_dpap_record_dmap_iface_init))
+
+ static void
+@@ -104,9 +109,7 @@ grl_dpap_record_set_property (GObject *object,
+ record->priv->comments = g_value_dup_string (value);
+ break;
+ case PROP_THUMBNAIL:
+- if (record->priv->thumbnail)
+- g_byte_array_unref (record->priv->thumbnail);
+- record->priv->thumbnail = g_byte_array_ref (g_value_get_pointer (value));
++ record->priv->thumbnail = get_thumbnail (record->priv->thumbnail, value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+@@ -154,7 +157,7 @@ grl_dpap_record_get_property (GObject *object,
+ g_value_set_static_string (value, record->priv->comments);
+ break;
+ case PROP_THUMBNAIL:
+- g_value_set_pointer (value, record->priv->thumbnail);
++ set_thumbnail (value, record->priv->thumbnail);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+@@ -169,7 +172,7 @@ grl_dpap_record_new (void)
+ }
+
+ GInputStream *
+-grl_dpap_record_read (DPAPRecord *record, GError **error)
++grl_dpap_record_read (DmapImageRecord *record, GError **error)
+ {
+ GFile *file;
+ GInputStream *stream;
+@@ -215,9 +218,9 @@ grl_dpap_record_class_init (GrlDPAPRecordClass *klass)
+ static void
+ grl_dpap_record_dpap_iface_init (gpointer iface, gpointer data)
+ {
+- DPAPRecordIface *dpap_record = iface;
++ DmapImageRecordInterface *dpap_record = iface;
+
+- g_assert (G_TYPE_FROM_INTERFACE (dpap_record) == DPAP_TYPE_RECORD);
++ g_assert (G_TYPE_FROM_INTERFACE (dpap_record) == DMAP_TYPE_IMAGE_RECORD);
+
+ dpap_record->read = grl_dpap_record_read;
+ }
+@@ -225,7 +228,7 @@ grl_dpap_record_dpap_iface_init (gpointer iface, gpointer data)
+ static void
+ grl_dpap_record_dmap_iface_init (gpointer iface, gpointer data)
+ {
+- DMAPRecordIface *dmap_record = iface;
++ DmapRecordInterface *dmap_record = iface;
+
+ g_assert (G_TYPE_FROM_INTERFACE (dmap_record) == DMAP_TYPE_RECORD);
+ }
+@@ -242,7 +245,7 @@ grl_dpap_record_finalize (GObject *object)
+ g_free (record->priv->comments);
+
+ if (record->priv->thumbnail)
+- g_byte_array_unref (record->priv->thumbnail);
++ unref_thumbnail (record->priv->thumbnail);
+
+ G_OBJECT_CLASS (grl_dpap_record_parent_class)->finalize (object);
+ }
+diff --git a/src/dmap/grl-dpap-record.h b/src/dmap/grl-dpap-record.h
+index 203e57e..77eece0 100644
+--- a/src/dmap/grl-dpap-record.h
++++ b/src/dmap/grl-dpap-record.h
+@@ -23,6 +23,8 @@
+
+ #include <libdmapsharing/dmap.h>
+
++#include "grl-dpap-compat.h"
++
+ G_BEGIN_DECLS
+
+ #define TYPE_SIMPLE_DPAP_RECORD (grl_dpap_record_get_type ())
+@@ -69,8 +71,8 @@ typedef struct {
+ GType grl_dpap_record_get_type (void);
+
+ GrlDPAPRecord *grl_dpap_record_new (void);
+-GInputStream *grl_dpap_record_read (DPAPRecord *record, GError **error);
+-gint grl_dpap_record_get_id (DPAPRecord *record);
++GInputStream *grl_dpap_record_read (DmapImageRecord *record, GError **error);
++gint grl_dpap_record_get_id (DmapImageRecord *record);
+
+ #endif /* __SIMPLE_DPAP_RECORD */
+
+diff --git a/src/dmap/grl-dpap.c b/src/dmap/grl-dpap.c
+index 9829ec2..6339654 100644
+--- a/src/dmap/grl-dpap.c
++++ b/src/dmap/grl-dpap.c
+@@ -33,6 +33,7 @@
+ #include <stdlib.h>
+ #include <libdmapsharing/dmap.h>
+
++#include "grl-dpap-compat.h"
+ #include "grl-common.h"
+ #include "grl-dpap.h"
+ #include "grl-dpap-db.h"
+@@ -57,12 +58,12 @@ GRL_LOG_DOMAIN_STATIC (dmap_log_domain);
+ GrlDpapSourcePrivate))
+
+ struct _GrlDpapSourcePrivate {
+- DMAPMdnsBrowserService *service;
++ DmapMdnsService *service;
+ };
+
+ /* --- Data types --- */
+
+-static GrlDpapSource *grl_dpap_source_new (DMAPMdnsBrowserService *service);
++static GrlDpapSource *grl_dpap_source_new (DmapMdnsService *service);
+
+ static void grl_dpap_source_finalize (GObject *object);
+
+@@ -79,16 +80,16 @@ static void grl_dpap_source_search (GrlSource *source,
+ GrlSourceSearchSpec *ss);
+
+
+-static void grl_dpap_service_added_cb (DMAPMdnsBrowser *browser,
+- DMAPMdnsBrowserService *service,
++static void grl_dpap_service_added_cb (DmapMdnsBrowser *browser,
++ DmapMdnsService *service,
+ GrlPlugin *plugin);
+
+-static void grl_dpap_service_removed_cb (DMAPMdnsBrowser *browser,
++static void grl_dpap_service_removed_cb (DmapMdnsBrowser *browser,
+ const gchar *service_name,
+ GrlPlugin *plugin);
+
+ /* ===================== Globals ======================= */
+-static DMAPMdnsBrowser *browser;
++static DmapMdnsBrowser *browser;
+ /* Maps URIs to DBs */
+ static GHashTable *connections;
+ /* Map DPAP services to Grilo media sources */
+@@ -111,7 +112,7 @@ grl_dpap_plugin_init (GrlRegistry *registry,
+ bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
+ bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
+
+- browser = dmap_mdns_browser_new (DMAP_MDNS_BROWSER_SERVICE_TYPE_DPAP);
++ browser = dmap_mdns_browser_new (DMAP_MDNS_SERVICE_TYPE_DPAP);
+ connections = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);
+ sources = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);
+
+@@ -158,8 +159,10 @@ GRL_PLUGIN_DEFINE (GRL_MAJOR,
+ G_DEFINE_TYPE_WITH_PRIVATE (GrlDpapSource, grl_dpap_source, GRL_TYPE_SOURCE)
+
+ static GrlDpapSource *
+-grl_dpap_source_new (DMAPMdnsBrowserService *service)
++grl_dpap_source_new (DmapMdnsService *service)
+ {
++ gchar *name;
++ gchar *service_name;
+ gchar *source_desc;
+ gchar *source_id;
+
+@@ -167,12 +170,14 @@ grl_dpap_source_new (DMAPMdnsBrowserService *service)
+
+ GRL_DEBUG ("grl_dpap_source_new");
+
+- source_desc = g_strdup_printf (SOURCE_DESC_TEMPLATE, service->name);
+- source_id = g_strdup_printf (SOURCE_ID_TEMPLATE, service->name);
++ name = grl_dmap_service_get_name (service);
++ service_name = grl_dmap_service_get_service_name (service);
++ source_desc = g_strdup_printf (SOURCE_DESC_TEMPLATE, name);
++ source_id = g_strdup_printf (SOURCE_ID_TEMPLATE, name);
+
+ source = g_object_new (GRL_DPAP_SOURCE_TYPE,
+ "source-id", source_id,
+- "source-name", service->name,
++ "source-name", service_name,
+ "source-desc", source_desc,
+ "supported-media", GRL_SUPPORTED_MEDIA_IMAGE,
+ NULL);
+@@ -181,6 +186,8 @@ grl_dpap_source_new (DMAPMdnsBrowserService *service)
+
+ g_free (source_desc);
+ g_free (source_id);
++ g_free (service_name);
++ g_free (name);
+
+ return source;
+ }
+@@ -241,7 +248,7 @@ grl_dpap_do_search (ResultCbAndArgsAndDb *cb_and_db)
+ }
+
+ static void
+-browse_connected_cb (DMAPConnection *connection,
++browse_connected_cb (DmapConnection *connection,
+ gboolean result,
+ const char *reason,
+ ResultCbAndArgsAndDb *cb_and_db)
+@@ -266,7 +273,7 @@ browse_connected_cb (DMAPConnection *connection,
+ }
+
+ static void
+-search_connected_cb (DMAPConnection *connection,
++search_connected_cb (DmapConnection *connection,
+ gboolean result,
+ const char *reason,
+ ResultCbAndArgsAndDb *cb_and_db)
+@@ -291,8 +298,8 @@ search_connected_cb (DMAPConnection *connection,
+ }
+
+ static void
+-grl_dpap_service_added_cb (DMAPMdnsBrowser *browser,
+- DMAPMdnsBrowserService *service,
++grl_dpap_service_added_cb (DmapMdnsBrowser *browser,
++ DmapMdnsService *service,
+ GrlPlugin *plugin)
+ {
+ GrlRegistry *registry = grl_registry_get_default ();
+@@ -306,13 +313,16 @@ grl_dpap_service_added_cb (DMAPMdnsBrowser *browser,
+ GRL_SOURCE (source),
+ NULL);
+ if (source != NULL) {
+- g_hash_table_insert (sources, g_strdup (service->name), g_object_ref (source));
++ gchar *name;
++ name = grl_dmap_service_get_name (service);
++ g_hash_table_insert (sources, g_strdup (name), g_object_ref (source));
+ g_object_remove_weak_pointer (G_OBJECT (source), (gpointer *) &source);
++ g_free (name);
+ }
+ }
+
+ static void
+-grl_dpap_service_removed_cb (DMAPMdnsBrowser *browser,
++grl_dpap_service_removed_cb (DmapMdnsBrowser *browser,
+ const gchar *service_name,
+ GrlPlugin *plugin)
+ {
+@@ -328,14 +338,14 @@ grl_dpap_service_removed_cb (DMAPMdnsBrowser *browser,
+ }
+
+ static void
+-grl_dpap_connect (gchar *name, gchar *host, guint port, ResultCbAndArgsAndDb *cb_and_db, DMAPConnectionCallback callback)
++grl_dpap_connect (gchar *name, gchar *host, guint port, ResultCbAndArgsAndDb *cb_and_db, DmapConnectionFunc callback)
+ {
+- DMAPRecordFactory *factory;
+- DMAPConnection *connection;
++ DmapRecordFactory *factory;
++ DmapConnection *connection;
+
+ factory = DMAP_RECORD_FACTORY (grl_dpap_record_factory_new ());
+- connection = DMAP_CONNECTION (dpap_connection_new (name, host, port, DMAP_DB (cb_and_db->db), factory));
+- dmap_connection_connect (connection, (DMAPConnectionCallback) callback, cb_and_db);
++ connection = DMAP_CONNECTION (dmap_image_connection_new (name, host, port, DMAP_DB (cb_and_db->db), factory));
++ dmap_connection_start (connection, (DmapConnectionFunc) callback, cb_and_db);
+ }
+
+ static gboolean
+@@ -396,15 +406,25 @@ grl_dpap_source_browse (GrlSource *source,
+ browse_connected_cb (NULL, TRUE, NULL, cb_and_db);
+ } else {
+ /* Connect */
++ gchar *name, *host;
++ guint port;
++
+ cb_and_db->db = DMAP_DB (grl_dpap_db_new ());
+
+- grl_dpap_connect (dmap_source->priv->service->name,
+- dmap_source->priv->service->host,
+- dmap_source->priv->service->port,
++ name = grl_dmap_service_get_name (dmap_source->priv->service);
++ host = grl_dmap_service_get_host (dmap_source->priv->service);
++ port = grl_dmap_service_get_port (dmap_source->priv->service);
++
++ grl_dpap_connect (name,
++ host,
++ port,
+ cb_and_db,
+- (DMAPConnectionCallback) browse_connected_cb);
++ (DmapConnectionFunc) browse_connected_cb);
+
+ g_hash_table_insert (connections, g_strdup (url), cb_and_db->db);
++
++ g_free (name);
++ g_free (host);
+ }
+
+ g_free (url);
+@@ -416,7 +436,7 @@ static void grl_dpap_source_search (GrlSource *source,
+ GrlDpapSource *dmap_source = GRL_DPAP_SOURCE (source);
+
+ ResultCbAndArgsAndDb *cb_and_db;
+- DMAPMdnsBrowserService *service = dmap_source->priv->service;
++ DmapMdnsService *service = dmap_source->priv->service;
+ gchar *url = grl_dmap_build_url (service);
+
+ cb_and_db = g_new (ResultCbAndArgsAndDb, 1);
+@@ -434,9 +454,25 @@ static void grl_dpap_source_search (GrlSource *source,
+ search_connected_cb (NULL, TRUE, NULL, cb_and_db);
+ } else {
+ /* Connect */
++ gchar *name, *host;
++ guint port;
++
+ cb_and_db->db = DMAP_DB (grl_dpap_db_new ());
+- grl_dpap_connect (service->name, service->host, service->port, cb_and_db, (DMAPConnectionCallback) search_connected_cb);
++
++ name = grl_dmap_service_get_name (dmap_source->priv->service);
++ host = grl_dmap_service_get_host (dmap_source->priv->service);
++ port = grl_dmap_service_get_port (dmap_source->priv->service);
++
++ grl_dpap_connect (name,
++ host,
++ port,
++ cb_and_db,
++ (DmapConnectionFunc) search_connected_cb);
++
+ g_hash_table_insert (connections, g_strdup (url), cb_and_db->db);
++
++ g_free (name);
++ g_free (host);
+ }
+
+ g_free (url);
+diff --git a/src/dmap/grl-dpap.h b/src/dmap/grl-dpap.h
+index ee596b5..30cd61e 100644
+--- a/src/dmap/grl-dpap.h
++++ b/src/dmap/grl-dpap.h
+@@ -26,6 +26,8 @@
+
+ #include <grilo.h>
+
++#include "grl-dpap-compat.h"
++
+ #define GRL_DPAP_SOURCE_TYPE (grl_dpap_source_get_type ())
+
+ #define GRL_DPAP_SOURCE(obj) \
+diff --git a/src/dmap/meson.build b/src/dmap/meson.build
+index 2907a80..817ff5d 100644
+--- a/src/dmap/meson.build
++++ b/src/dmap/meson.build
+@@ -31,6 +31,15 @@ dpap_sources = [
+ 'grl-dpap.h',
+ ]
+
++args = [
++ '-DG_LOG_DOMAIN="GrlDmap"',
++ '-DHAVE_CONFIG_H',
++]
++
++if not libdmapsharing4_dep.found()
++ args += '-DLIBDMAPSHARING_COMPAT'
++endif
++
+ configure_file(output: 'config.h',
+ configuration: cdata)
+
+@@ -39,17 +48,11 @@ shared_library('grldaap',
+ install: true,
+ install_dir: pluginsdir,
+ dependencies: must_deps + plugins[dmap_idx][REQ_DEPS] + plugins[dmap_idx][OPT_DEPS],
+- c_args: [
+- '-DG_LOG_DOMAIN="GrlDmap"',
+- '-DHAVE_CONFIG_H',
+- ])
++ c_args: args)
+
+ shared_library('grldpap',
+ sources: dpap_sources,
+ install: true,
+ install_dir: pluginsdir,
+ dependencies: must_deps + plugins[dmap_idx][REQ_DEPS] + plugins[dmap_idx][OPT_DEPS],
+- c_args: [
+- '-DG_LOG_DOMAIN="GrlDmap"',
+- '-DHAVE_CONFIG_H',
+- ])
++ c_args: args)
include $(TOPDIR)/rules.mk
PKG_NAME:=minidlna
-PKG_RELEASE:=3
+PKG_RELEASE:=5
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://git.code.sf.net/p/minidlna/git
{ [ -z "$interface" ] || [ -t "$port" ]; } && return 1
mkdir -p /var/etc
- {
echo "# this file is generated automatically, don't edit"
echo "port=$port"
minidlna_cfg_addstr "$cfg" root_container '.'
minidlna_cfg_addstr "$cfg" uuid '019f9a56-ff60-44c0-9edc-eae88d09fa05'
config_list_foreach "$cfg" "media_dir" minidlna_cfg_add_media_dir
- } > "$MINIDLNA_CONFIG_FILE"
return 0
-}
+} > "$MINIDLNA_CONFIG_FILE"
start_service() {
local enabled
procd_set_param respawn
procd_close_instance
}
-
-reload_service() {
- procd_send_signal "$PROG"
-}
-
-service_triggers() {
- procd_add_reload_trigger "minidlna"
-}
+++ /dev/null
-From aae49f0f80e73d1b52f23b89b0d314e9b9f89425 Mon Sep 17 00:00:00 2001
-From: Daniel Kamil Kozar <dkk089@gmail.com>
-Date: Sat, 15 Dec 2018 22:55:44 +0100
-Subject: [PATCH] Add an option to disable cover art resizing
-
-Imported from
-https://sourceforge.net/p/minidlna/patches/_discuss/thread/9825a1a0/4c28/attachment/minidlna-1.1.2-no-cover-resize.patch
----
- albumart.c | 3 +++
- minidlna.c | 4 ++++
- options.c | 1 +
- options.h | 1 +
- upnpglobalvars.h | 1 +
- 5 files changed, 10 insertions(+)
-
-diff --git a/albumart.c b/albumart.c
-index de026ec..04fa8f2 100644
---- a/albumart.c
-+++ b/albumart.c
-@@ -67,6 +67,9 @@ save_resized_album_art(image_s *imsrc, const char *path)
- strncpyt(cache_dir, cache_file, sizeof(cache_dir));
- make_dir(dirname(cache_dir), S_IRWXU|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH);
-
-+ if( GETFLAG(NO_COVER_RESIZE_MASK) )
-+ return image_save_to_jpeg_file(imsrc, cache_file);
-+
- if( imsrc->width > imsrc->height )
- {
- dstw = 160;
-diff --git a/minidlna.c b/minidlna.c
-index 7cce301..a1dd08b 100644
---- a/minidlna.c
-+++ b/minidlna.c
-@@ -735,6 +735,10 @@ init(int argc, char **argv)
- if (strtobool(ary_options[i].value))
- SETFLAG(DLNA_STRICT_MASK);
- break;
-+ case RESIZE_COVER_ART:
-+ if((strcmp(ary_options[i].value, "no") == 0) || !atoi(ary_options[i].value))
-+ SETFLAG(NO_COVER_RESIZE_MASK);
-+ break;
- case ROOT_CONTAINER:
- switch (ary_options[i].value[0]) {
- case '.':
-diff --git a/options.c b/options.c
-index cee3dff..cacbdfb 100644
---- a/options.c
-+++ b/options.c
-@@ -68,6 +68,7 @@ static const struct {
- { WIDE_LINKS, "wide_links" },
- { TIVO_DISCOVERY, "tivo_discovery" },
- { ENABLE_SUBTITLES, "enable_subtitles" },
-+ { RESIZE_COVER_ART, "resize_covers" },
- };
-
- int
-diff --git a/options.h b/options.h
-index 1ff5b22..ec5ea68 100644
---- a/options.h
-+++ b/options.h
-@@ -61,6 +61,7 @@ enum upnpconfigoptions {
- WIDE_LINKS, /* allow following symlinks outside the defined media_dirs */
- TIVO_DISCOVERY, /* TiVo discovery protocol: bonjour or beacon. Defaults to bonjour if supported */
- ENABLE_SUBTITLES, /* Enable generic subtitle support for all clients by default */
-+ RESIZE_COVER_ART, /* resize cover art to comply with DLNA spec */
- };
-
- /* readoptionsfile()
-diff --git a/upnpglobalvars.h b/upnpglobalvars.h
-index 1a2fb5e..7e3a1ba 100644
---- a/upnpglobalvars.h
-+++ b/upnpglobalvars.h
-@@ -205,6 +205,7 @@ extern uint32_t runtime_flags;
- #define RESCAN_MASK 0x0200
- #define SUBTITLES_MASK 0x0400
- #define FORCE_ALPHASORT_MASK 0x0800
-+#define NO_COVER_RESIZE_MASK 0x1000
-
- #define SETFLAG(mask) runtime_flags |= mask
- #define GETFLAG(mask) (runtime_flags & mask)
include $(TOPDIR)/rules.mk
PKG_NAME:=youtube-dl
-PKG_VERSION:=2020.2.16
+PKG_VERSION:=2020.3.8
PKG_RELEASE:=1
PYPI_NAME:=youtube_dl
-PKG_HASH:=b98d240c928a1bd0412b270ccf0d776aae5448672ea374e0af45f6daa3984009
+PKG_HASH:=1b098b7ae41551f46dbae70e56dbabdf39c8faf50e072d0c0b42c44d64afebf8
PKG_MAINTAINER:=Adrian Panella <ianchi74@outlook.com>, Josef Schlehofer <pepe.schlehofer@gmail.com>
PKG_LICENSE:=Unlicense
include $(TOPDIR)/rules.mk
PKG_NAME:=proto-bonding
-PKG_VERSION:=2018-06-11
+PKG_VERSION:=2020-03-03
PKG_RELEASE:=1
PKG_LICENSE:=GPL-2.0
set_driver_values primary primary_reselect lp_interval tlb_dynamic_lb resend_igmp xmit_hash_policy
;;
+ balance-xor)
+ echo "$bonding_policy" > /sys/class/net/"$link"/bonding/mode
+ set_driver_values xmit_hash_policy
+ ;;
+
+ broadcast)
+ echo "$bonding_policy" > /sys/class/net/"$link"/bonding/mode
+ ;;
+
active-backup)
echo "$bonding_policy" > /sys/class/net/"$link"/bonding/mode
set_driver_values primary primary_reselect fail_over_mac num_grat_arp__num_unsol_na xmit_hash_policy
include $(TOPDIR)/rules.mk
PKG_NAME:=git
-PKG_VERSION:=2.25.0
+PKG_VERSION:=2.25.1
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=@KERNEL/software/scm/git/
-PKG_HASH:=c060291a3ffb43d7c99f4aa5c4d37d3751cf6bca683e7344ea407ea504d9a8d0
+PKG_HASH:=222796cc6e3bf2f9fd765f8f097daa3c3999bb7865ac88a8c974d98182e29f26
PKG_INSTALL:=1
PKG_FIXUP:=autoreconf
PKG_NAME:=https-dns-proxy
PKG_VERSION:=2019-12-03
-PKG_RELEASE=3
+PKG_RELEASE=4
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/aarond10/https_dns_proxy
option listen_addr '127.0.0.1'
option listen_port '5054'
option user 'nobody'
- option group 'nogroup'```
+ option group 'nogroup'
```
The ```update_dnsmasq_config``` option can be set to dash (set to ```'-'``` to not change ```DNSMASQ``` server settings on start/stop), can be set to ```'*'``` to affect all ```DNSMASQ``` instance server settings or have a space-separated list of ```DNSMASQ``` instances to affect (like ```'0 4 5'```). If this option is omitted, the default setting is ```'*'```.
|user|String|nobody|Local user to run instance under.|
|group|String|nogroup|Local group to run instance under.|
|use_http1|Boolean|0|If set to 1, use HTTP/1 on installations with broken/outdated ```curl``` package. Included for posterity reasons, you will most likely not ever need it on OpenWrt.|
-|verbosity|Integer||Use setting between 1 to 4 to control the logging verbosity level.|String
+|verbosity|Integer|0|logging verbosity level. fatal = 0, error = 1, warning = 2, info = 3, debug = 4|
+|use_ipv6_resolvers_only|Boolean|0|If set to 1, Forces IPv6 DNS resolvers instead of IPv4|
## Thanks
xappend "$switch $_loctmp"
}
-append_match() {
- local section="$1"
- local option="$2"
- local value="$3"
- local match="$4"
- local _loctmp
- config_get_bool _loctmp "$section" "$option"
- [ "$_loctmp" = "$match" ] && xappend "$value"
-}
-
start_instance() {
local cfg="$1" param listen_addr listen_port i
append_parm "$cfg" 'proxy_server' '-t'
append_parm "$cfg" 'logfile' '-l'
append_bool "$cfg" 'use_http1' '-x'
- append_match "$cfg" 'verbosity' '-v' '1'
- append_match "$cfg" 'verbosity' '-vv' '2'
- append_match "$cfg" 'verbosity' '-vvv' '3'
- append_match "$cfg" 'verbosity' '-vvvv' '4'
+
+ config_get verbosity "$cfg" 'verbosity' "0"
+# shellcheck disable=SC2086,SC2154
+ for i in $(seq 1 $verbosity); do
+ xappend "-v"
+ done
+
+ config_get_bool ipv6_resolvers_only "$cfg" 'use_ipv6_resolvers_only' '0'
+# shellcheck disable=SC2154
+ if [ "$ipv6_resolvers_only" = 0 ]; then
+ xappend "-4"
+ fi
procd_open_instance
# shellcheck disable=SC2086
- procd_set_param command ${PROG} -4 ${param}
+ procd_set_param command ${PROG} ${param}
+ procd_set_param stderr 1
+ procd_set_param stdout 1
procd_set_param respawn
procd_close_instance
config_get listen_addr "$cfg" 'listen_addr' '127.0.0.1'
config_get listen_port "$cfg" 'listen_port' "$p"
+
if [ "$dnsmasqConfig" = "*" ]; then
config_load 'dhcp'
- config_foreach dnsmasq_add_doh_server 'dnsmasq' "${listen_addr}#${listen_port}"
+ config_foreach dnsmasq_add_doh_server 'dnsmasq' "${listen_addr}" "${listen_port}"
elif [ -n "$dnsmasqConfig" ]; then
for i in $dnsmasqConfig; do
- dnsmasq_add_doh_server "@dnsmasq[${i}]" "${listen_addr}#${listen_port}"
+ dnsmasq_add_doh_server "@dnsmasq[${i}]" "${listen_addr}" "${listen_port}"
done
fi
p="$((p+1))"
}
dnsmasq_add_doh_server() {
- local cfg="$1" value="$2"
- uci -q del_list dhcp."$cfg".server="$value"
- uci -q add_list dhcp."$cfg".server="$value"
+ local cfg="$1" address="$2" port="$3"
+
+ # Don't add the any address to dnsmasq
+ case $address in
+ 0.0.0.0|::ffff:0.0.0.0)
+ address='127.0.0.1'
+ ;;
+ ::)
+ address='::1'
+ ;;
+ esac
+
+ uci -q del_list "dhcp.$cfg.server=${address}#${port}"
+ uci -q add_list "dhcp.$cfg.server=${address}#${port}"
}
dnsmasq_create_server_backup() {
for i in $(uci -q get "dhcp.$cfg.server"); do
uci -q add_list dhcp."$cfg".doh_backup_server="$i"
if [ "$i" = "${i//127.0.0.1}" ] && [ "$i" = "$(echo "$i" | tr -d /)" ]; then
- uci -q del_list dhcp."$cfg".server="$i"
+ uci -q del_list "dhcp.$cfg.server=$i"
fi
done
}
if uci -q get "dhcp.$cfg.doh_backup_server" >/dev/null; then
uci -q del "dhcp.$cfg.server"
for i in $(uci -q get "dhcp.$cfg.doh_backup_server"); do
- uci -q add_list dhcp."$cfg".server="$i"
+ uci -q add_list "dhcp.$cfg.server=$i"
done
uci -q del "dhcp.$cfg.doh_backup_server"
fi
include $(INCLUDE_DIR)/kernel.mk
PKG_NAME:=jool
-PKG_VERSION:=4.0.6
-PKG_RELEASE:=4
+PKG_VERSION:=4.0.7
+PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://github.com/NICMx/Jool/releases/download/v$(PKG_VERSION)
-PKG_HASH:=d9314c9de421c1fa854be83ab8ad6b4ad5062a01a9865a97bb87c5850d1c2b2a
+PKG_HASH:=3ea1b8ab7435de4776405ccf83c936b2028f20f860b7d0a462d39e4524564363
PKG_MAINTAINER:=
PKG_LICENSE:=GPL-2.0-only
KERNEL_DIR="$(LINUX_DIR)" \
ARCH="$(LINUX_KARCH)" \
CROSS_COMPILE="$(TARGET_CROSS)" \
- SUBDIRS="$(PKG_BUILD_DIR)/src/mod/common" \
+ M="$(PKG_BUILD_DIR)/src/mod/common" \
V="$(V)" \
modules
$(MAKE) -C "$(LINUX_DIR)" \
KERNEL_DIR="$(LINUX_DIR)" \
ARCH="$(LINUX_KARCH)" \
CROSS_COMPILE="$(TARGET_CROSS)" \
- SUBDIRS="$(PKG_BUILD_DIR)/src/mod/nat64" \
+ M="$(PKG_BUILD_DIR)/src/mod/nat64" \
V="$(V)" \
modules
$(MAKE) -C "$(LINUX_DIR)" \
KERNEL_DIR="$(LINUX_DIR)" \
ARCH="$(LINUX_KARCH)" \
CROSS_COMPILE="$(TARGET_CROSS)" \
- SUBDIRS="$(PKG_BUILD_DIR)/src/mod/siit" \
+ M="$(PKG_BUILD_DIR)/src/mod/siit" \
V="$(V)" \
modules
$(call Build/Compile/Default)
PKG_NAME:=keepalived
PKG_VERSION:=2.0.20
-PKG_RELEASE:=1
+PKG_RELEASE:=2
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://www.keepalived.org/software
--- /dev/null
+From 42c020aab6e51d09f22a2e4a33ce6fd73009e2dc Mon Sep 17 00:00:00 2001
+From: Quentin Armitage <quentin@armitage.org.uk>
+Date: Wed, 4 Mar 2020 12:21:43 +0000
+Subject: [PATCH] Fix building with --disable-libipvs-dynamic
+
+Issue #1516 reported by the OpenWRT project identified that
+keepalived_modprobe() was not defined if --disable-libipvs-dynamic
+was specified.
+
+Signed-off-by: Quentin Armitage <quentin@armitage.org.uk>
+---
+ lib/utils.c | 4 ++--
+ lib/utils.h | 2 +-
+ 2 files changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/lib/utils.c b/lib/utils.c
+index 009da0ce..7f16f444 100644
+--- a/lib/utils.c
++++ b/lib/utils.c
+@@ -34,7 +34,7 @@
+ #include <stdint.h>
+ #include <errno.h>
+ #include <sys/prctl.h>
+-#if defined _WITH_LVS_ || defined _LIBIPSET_DYNAMIC_
++#if defined _WITH_LVS_ || defined _HAVE_LIBIPSET_
+ #include <sys/wait.h>
+ #endif
+ #ifdef _WITH_PERF_
+@@ -1097,7 +1097,7 @@ memcmp_constant_time(const void *s1, const void *s2, size_t n)
+ * Utility functions coming from Wensong code
+ */
+
+-#if defined _WITH_LVS_ || defined _LIBIPSET_DYNAMIC_
++#if defined _WITH_LVS_ || defined _HAVE_LIBIPSET_
+ static char*
+ get_modprobe(void)
+ {
+diff --git a/lib/utils.h b/lib/utils.h
+index 66d64d9f..22325023 100644
+--- a/lib/utils.h
++++ b/lib/utils.h
+@@ -263,7 +263,7 @@ extern int open_pipe(int [2]);
+ #endif
+ extern int memcmp_constant_time(const void *, const void *, size_t);
+
+-#if defined _WITH_LVS_ || defined _LIBIPSET_DYNAMIC_
++#if defined _WITH_LVS_ || defined _HAVE_LIBIPSET_
+ extern bool keepalived_modprobe(const char *);
+ #endif
+
+--
+2.20.1
+
include $(TOPDIR)/rules.mk
PKG_NAME:=knot
-PKG_VERSION:=2.9.2
+PKG_VERSION:=2.9.3
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=https://secure.nic.cz/files/knot-dns/
-PKG_HASH:=298cdf33aa7589b50df7e5833694b24cd2de8b6d17cee7e1673873fe576db6ee
+PKG_HASH:=f2adf137d70955a4a20df90c5409e10be8e1127204a98b27d626ac090531a07e
PKG_MAINTAINER:=Daniel Salzman <daniel.salzman@nic.cz>
PKG_LICENSE:=GPL-3.0 LGPL-2.0 0BSD BSD-3-Clause OLDAP-2.8
include $(TOPDIR)/rules.mk
PKG_NAME:=linknx
-PKG_VERSION:=0.0.1.37
-PKG_RELEASE:=3
+PKG_VERSION:=0.0.1.38
+PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-${PKG_VERSION}.tar.gz
PKG_SOURCE_URL:=https://codeload.github.com/linknx/linknx/tar.gz/$(PKG_VERSION)?
-PKG_HASH:=3c3aaf8c409538153b15f5fb975a4485e58c4820cfea289a3f20777ba69782ab
+PKG_HASH:=00c53776c2e871295459ede922402d8ad0208367d2364781fdb92ddafad94d3d
PKG_MAINTAINER:=Othmar Truniger <github@truniger.ch>
PKG_LICENSE:=GPL-2.0-or-later
--with-libcurl \
--without-mysql
-EXTRA_LDFLAGS+= \
- -fno-builtin
-
define Package/linknx/install
$(INSTALL_DIR) $(1)/usr/bin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/src/linknx $(1)/usr/bin/
-config daemon args
- # daemon is started as 'linknx --config=$conf $options'
- # use 'linknx --help' to get all possible options'
- #
- # typical example
+config args
option conf '/etc/linknx.xml'
- option options '-w --daemon=/tmp/linknx/linknx.log --pid-file=/var/run/linknx.pid'
START=98
STOP=10
+USE_PROCD=1
NAME=linknx
PROG=/usr/bin/$NAME
. /lib/functions.sh
-start() {
- local conf options
+start_service() {
+ local conf
config_load "$NAME"
config_get conf args conf '/etc/linknx.xml'
- config_get options args options ''
- test -f $conf || cp -p /etc/linknx.xml.dist $conf
+ [ -f "$conf" ] || cp -p /etc/linknx.xml.dist "$conf"
mkdir -p /tmp/$NAME/persist
- service_start $PROG --config=$conf $options
-}
-stop() {
- service_stop $PROG
+ procd_open_instance
+ procd_set_param command "$PROG"
+ procd_append_param command --config="$conf" -w
+ procd_set_param file "$conf"
+ procd_set_param pidfile /var/run/linknx.pid
+ procd_set_param stdout 1
+ procd_set_param stderr 1
+ procd_close_instance
}
+++ /dev/null
-From 8c025865f7cc57761d2227b897ba3980090391c2 Mon Sep 17 00:00:00 2001
-From: Rosen Penev <rosenp@gmail.com>
-Date: Mon, 24 Jun 2019 14:13:34 -0700
-Subject: [PATCH] Use AM_ICONV for properly supporting libiconv
-
-AM_ICONV does multiple things like checking the function parameters to
-avoid const problems.
----
- configure.ac | 1 +
- src/Makefile.am | 2 +-
- src/objectcontroller.cpp | 2 +-
- 3 files changed, 3 insertions(+), 2 deletions(-)
-
-diff --git a/configure.ac b/configure.ac
-index 22f242c..23582cb 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -10,6 +10,7 @@ PKG_CONFIG=`which pkg-config`
- AC_PROG_CXX
- AC_PROG_CC
- AC_PROG_RANLIB
-+AM_ICONV
- AC_CHECK_PTHSEM(2.0.4,yes,yes,no)
- AC_CHECK_HEADER(argp.h,,[AC_MSG_ERROR([argp_parse not found])])
- AC_SEARCH_LIBS(argp_parse,argp,,[AC_MSG_ERROR([argp_parse not found])])
-diff --git a/src/Makefile.am b/src/Makefile.am
-index 6a4f493..6e0dc03 100644
---- a/src/Makefile.am
-+++ b/src/Makefile.am
-@@ -7,5 +7,5 @@ B64_CFLAGS=
- B64_LIBS=
- endif
- AM_CPPFLAGS=-I$(top_srcdir)/include -I$(top_srcdir)/ticpp $(B64_CFLAGS) $(PTH_CPPFLAGS) $(LIBCURL_CPPFLAGS) $(LOG4CPP_CFLAGS) $(LUA_CFLAGS) $(MYSQL_CFLAGS) $(ESMTP_CFLAGS)
--linknx_LDADD=$(top_srcdir)/ticpp/libticpp.a $(B64_LIBS) $(PTH_LDFLAGS) $(PTH_LIBS) $(LIBCURL) $(LOG4CPP_LIBS) $(LUA_LIBS) $(MYSQL_LIBS) $(ESMTP_LIBS) -lm
-+linknx_LDADD=$(top_srcdir)/ticpp/libticpp.a $(LIBICONV) $(B64_LIBS) $(PTH_LDFLAGS) $(PTH_LIBS) $(LIBCURL) $(LOG4CPP_LIBS) $(LUA_LIBS) $(MYSQL_LIBS) $(ESMTP_LIBS) -lm
- linknx_SOURCES=linknx.cpp logger.cpp ruleserver.cpp objectcontroller.cpp eibclient.c threads.cpp timermanager.cpp persistentstorage.cpp xmlserver.cpp smsgateway.cpp emailgateway.cpp knxconnection.cpp services.cpp suncalc.cpp luacondition.cpp ioport.cpp ruleserver.h objectcontroller.h threads.h timermanager.h persistentstorage.h xmlserver.h smsgateway.h emailgateway.h knxconnection.h services.h suncalc.h luacondition.h ioport.h logger.h
-diff --git a/src/objectcontroller.cpp b/src/objectcontroller.cpp
-index fb2fc3a..7622491 100644
---- a/src/objectcontroller.cpp
-+++ b/src/objectcontroller.cpp
-@@ -2925,7 +2925,7 @@ std::string StringObjectValue::transcode(const std::string &source, const std::s
- iconv_t conversionDescriptor = iconv_open((targetEncoding + "//TRANSLIT").c_str(), sourceEncoding.c_str());
- char cSource[source.size()];
- memcpy(cSource, source.c_str(), source.size() + 1);
-- char *sourceStart = &cSource[0];
-+ ICONV_CONST char *sourceStart = &cSource[0];
- size_t sourceLength = source.size();
- const size_t targetLength = source.size() * 5; // Should be pretty enough even in worst cases.
- char targetChars[targetLength];
-
include $(TOPDIR)/rules.mk
PKG_NAME:=mosquitto
-PKG_VERSION:=1.6.8
+PKG_VERSION:=1.6.9
PKG_RELEASE:=1
PKG_LICENSE:=BSD-3-Clause
PKG_LICENSE_FILES:=LICENSE.txt
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://mosquitto.org/files/source/
-PKG_HASH:=7df23c81ca37f0e070574fe74414403cf25183016433d07add6134366fb45df6
+PKG_HASH:=412979b2db0a0020bd02fa64f0a0de9e7000b84462586e32b67f29bb1f6c1685
include $(INCLUDE_DIR)/package.mk
include $(TOPDIR)/rules.mk
PKG_NAME:=mwan3
-PKG_VERSION:=2.8.2
+PKG_VERSION:=2.8.3
PKG_RELEASE:=2
PKG_MAINTAINER:=Florian Eckert <fe@dev.tdt.de>
PKG_LICENSE:=GPL-2.0
if [ $host_up_count -lt $reliability ]; then
case "$track_method" in
ping)
+ # pinging IPv6 hosts with an interface is troublesome
+ # https://bugs.openwrt.org/index.php?do=details&task_id=2897
+ # so get the IP address of the interface and use that instead
+ if echo $track_ip | grep -q ':'; then
+ ADDR=$(ip -6 addr ls dev "$DEVICE" | sed -ne 's/ *inet6 \([^ \/]*\).* scope global.*/\1/p')
+ fi
if [ $check_quality -eq 0 ]; then
- ping -I $DEVICE -c $count -W $timeout -s $size -t $max_ttl -q $track_ip &> /dev/null
+ ping -I ${ADDR:-$DEVICE} -c $count -W $timeout -s $size -t $max_ttl -q $track_ip &> /dev/null
result=$?
else
- ping_result="$(ping -I $DEVICE -c $count -W $timeout -s $size -t $max_ttl -q $track_ip | tail -2)"
+ ping_result="$(ping -I ${ADDR:-$DEVICE} -c $count -W $timeout -s $size -t $max_ttl -q $track_ip | tail -2)"
loss="$(echo "$ping_result" | grep "packet loss" | cut -d "," -f3 | awk '{print $1}' | sed -e 's/%//')"
if [ "$loss" -eq 100 ]; then
latency=999999
PKG_NAME:=shorewall-core
PKG_MAJOR_MINOR_VERSION:=5.2
PKG_BUGFIX_MAJOR_VERSION:=3
-PKG_BUGFIX_MINOR_VERSION:=.6
+PKG_BUGFIX_MINOR_VERSION:=.7
PKG_VERSION:=$(PKG_MAJOR_MINOR_VERSION).$(PKG_BUGFIX_MAJOR_VERSION)$(PKG_BUGFIX_MINOR_VERSION)
PKG_DIRECTORY:=$(PKG_MAJOR_MINOR_VERSION).$(PKG_BUGFIX_MAJOR_VERSION)
-PKG_RELEASE:=2
+PKG_RELEASE:=1
PKG_SOURCE_URL:=http://www.shorewall.net/pub/shorewall/$(PKG_MAJOR_MINOR_VERSION)/shorewall-$(PKG_DIRECTORY)/ \
http://www1.shorewall.net/pub/shorewall/$(PKG_MAJOR_MINOR_VERSION)/shorewall-$(PKG_DIRECTORY)/ \
http://shorewall.de/pub/shorewall/$(PKG_MAJOR_MINOR_VERSION)/shorewall-$(PKG_DIRECTORY)/ \
http://www.shorewall.com.au/$(PKG_MAJOR_MINOR_VERSION)/shorewall-$(PKG_DIRECTORY)/
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
-PKG_HASH:=e177d43d06be8db53008d736e0153d5c50a8ce6bd2171836f2f669c6a3233918
+PKG_HASH:=9c713ecb67603bd1b46648e31ff3f9e8a7af40187b4853feb6170738b1fd613a
PKG_MAINTAINER:=Willem van den Akker <wvdakker@wilsoft.nl>
PKG_LICENSE:=GPL-2.0-or-later
PKG_NAME:=shorewall-lite
PKG_MAJOR_MINOR_VERSION:=5.2
PKG_BUGFIX_MAJOR_VERSION:=3
-PKG_BUGFIX_MINOR_VERSION:=.6
+PKG_BUGFIX_MINOR_VERSION:=.7
PKG_VERSION:=$(PKG_MAJOR_MINOR_VERSION).$(PKG_BUGFIX_MAJOR_VERSION)$(PKG_BUGFIX_MINOR_VERSION)
PKG_DIRECTORY:=$(PKG_MAJOR_MINOR_VERSION).$(PKG_BUGFIX_MAJOR_VERSION)
-PKG_RELEASE:=2
+PKG_RELEASE:=1
PKG_SOURCE_URL:=http://www.shorewall.net/pub/shorewall/$(PKG_MAJOR_MINOR_VERSION)/shorewall-$(PKG_DIRECTORY)/ \
http://www1.shorewall.net/pub/shorewall/$(PKG_MAJOR_MINOR_VERSION)/shorewall-$(PKG_DIRECTORY)/ \
http://shorewall.de/pub/shorewall/$(PKG_MAJOR_MINOR_VERSION)/shorewall-$(PKG_DIRECTORY)/ \
http://www.shorewall.com.au/$(PKG_MAJOR_MINOR_VERSION)/shorewall-$(PKG_DIRECTORY)/
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
-PKG_HASH:=29e00965f4f3d5b27a917c6dc94b487a72fbd69ee1430b24d8eeedce8f79ebc6
+PKG_HASH:=2ba1000f46b959d87ce2ae1c841dda1fb89698e7e85fafade1a8752648c44dea
PKG_MAINTAINER:=Willem van den Akker <wvdakker@wilsoft.nl>
PKG_LICENSE:=GPL-2.0-or-later
PKG_NAME:=shorewall
PKG_MAJOR_MINOR_VERSION:=5.2
PKG_BUGFIX_MAJOR_VERSION:=3
-PKG_BUGFIX_MINOR_VERSION:=.6
+PKG_BUGFIX_MINOR_VERSION:=.7
PKG_VERSION:=$(PKG_MAJOR_MINOR_VERSION).$(PKG_BUGFIX_MAJOR_VERSION)$(PKG_BUGFIX_MINOR_VERSION)
PKG_DIRECTORY:=$(PKG_MAJOR_MINOR_VERSION).$(PKG_BUGFIX_MAJOR_VERSION)
-PKG_RELEASE:=2
+PKG_RELEASE:=1
PKG_SOURCE_URL:=http://www.shorewall.net/pub/shorewall/$(PKG_MAJOR_MINOR_VERSION)/shorewall-$(PKG_DIRECTORY)/ \
http://www1.shorewall.net/pub/shorewall/$(PKG_MAJOR_MINOR_VERSION)/shorewall-$(PKG_DIRECTORY)/ \
http://shorewall.de/pub/shorewall/$(PKG_MAJOR_MINOR_VERSION)/shorewall-$(PKG_DIRECTORY)/ \
http://www.shorewall.com.au/$(PKG_MAJOR_MINOR_VERSION)/shorewall-$(PKG_DIRECTORY)/
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
-PKG_HASH:=897110c803ededb873aa59af98f97a42a07968c29fd636e1a01f84e33b32e9d3
+PKG_HASH:=1d2f412d2189b01742d8837baa3a9de27ab84ab657eace34840312fb7ca3b4a7
PKG_MAINTAINER:=Willem van den Akker <wvdakker@wilsoft.nl>
PKG_LICENSE:=GPL-2.0-or-later
PKG_NAME:=shorewall6-lite
PKG_MAJOR_MINOR_VERSION:=5.2
PKG_BUGFIX_MAJOR_VERSION:=3
-PKG_BUGFIX_MINOR_VERSION:=.6
+PKG_BUGFIX_MINOR_VERSION:=.7
PKG_VERSION:=$(PKG_MAJOR_MINOR_VERSION).$(PKG_BUGFIX_MAJOR_VERSION)$(PKG_BUGFIX_MINOR_VERSION)
PKG_DIRECTORY:=$(PKG_MAJOR_MINOR_VERSION).$(PKG_BUGFIX_MAJOR_VERSION)
-PKG_RELEASE:=2
+PKG_RELEASE:=1
PKG_SOURCE_URL:=http://www.shorewall.net/pub/shorewall/$(PKG_MAJOR_MINOR_VERSION)/shorewall-$(PKG_DIRECTORY)/ \
http://www1.shorewall.net/pub/shorewall/$(PKG_MAJOR_MINOR_VERSION)/shorewall-$(PKG_DIRECTORY)/ \
http://shorewall.de/pub/shorewall/$(PKG_MAJOR_MINOR_VERSION)/shorewall-$(PKG_DIRECTORY)/ \
http://www.shorewall.com.au/$(PKG_MAJOR_MINOR_VERSION)/shorewall-$(PKG_DIRECTORY)/
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
-PKG_HASH:=6c3e0f76814be703bec1c78052abc191b1f47161a683fbdeaab0b12c37e11cc2
+PKG_HASH:=14d603222b434980fbe3776f028e0bef7873196c23f8070563320bcd9d508659
PKG_MAINTAINER:=Willem van den Akker <wvdakker@wilsoft.nl>
PKG_LICENSE:=GPL-2.0-or-later
PKG_NAME:=shorewall6
PKG_MAJOR_MINOR_VERSION:=5.2
PKG_BUGFIX_MAJOR_VERSION:=3
-PKG_BUGFIX_MINOR_VERSION:=.6
+PKG_BUGFIX_MINOR_VERSION:=.7
PKG_VERSION:=$(PKG_MAJOR_MINOR_VERSION).$(PKG_BUGFIX_MAJOR_VERSION)$(PKG_BUGFIX_MINOR_VERSION)
PKG_DIRECTORY:=$(PKG_MAJOR_MINOR_VERSION).$(PKG_BUGFIX_MAJOR_VERSION)
-PKG_RELEASE:=2
+PKG_RELEASE:=1
PKG_SOURCE_URL:=http://www.shorewall.net/pub/shorewall/$(PKG_MAJOR_MINOR_VERSION)/shorewall-$(PKG_DIRECTORY)/ \
http://www1.shorewall.net/pub/shorewall/$(PKG_MAJOR_MINOR_VERSION)/shorewall-$(PKG_DIRECTORY)/ \
http://shorewall.de/pub/shorewall/$(PKG_MAJOR_MINOR_VERSION)/shorewall-$(PKG_DIRECTORY)/ \
http://www.shorewall.com.au/$(PKG_MAJOR_MINOR_VERSION)/shorewall-$(PKG_DIRECTORY)/
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
-PKG_HASH:=83dcad18aef2872904dd95d3cd882a926d2162ad870eb582fa7158c0d12f369d
+PKG_HASH:=a74379e0ddabe263a12945cdfc21f615930a5f258b55efb2b9a50fb035e84d87
PKG_MAINTAINER:=Willem van den Akker <wvdakker@wilsoft.nl>
PKG_LICENSE:=GPL-2.0-or-later
endef
define Build/Compile
- $(MAKE) $(KERNEL_MAKEOPTS) SUBDIRS="$(PKG_BUILD_DIR)" modules
+ $(MAKE) $(KERNEL_MAKEOPTS) M="$(PKG_BUILD_DIR)" modules
endef
$(eval $(call KernelPackage,siit))
PKG_VERSION:=4.29-9680
PKG_VERREL:=rtm
PKG_VERDATE:=2019.02.28
-PKG_RELEASE:=2
+PKG_RELEASE:=3
PKG_SOURCE:=softether-src-v$(PKG_VERSION)-$(PKG_VERREL).tar.gz
PKG_SOURCE_URL:=http://www.softether-download.com/files/softether/v$(PKG_VERSION)-$(PKG_VERREL)-$(PKG_VERDATE)-tree/Source_Code/
PKG_HASH:=e6035fa7d9aaf59bdb342cd7ab5ecfdff89811a875f62a3230208cdc8a4e26e4
-PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)/v$(PKG_VERSION)
-HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/$(PKG_NAME)/v$(PKG_VERSION)
-
-PKG_LICENSE:=GPL-2.0
+PKG_MAINTAINER:=Federico Di Marco <fededim@gmail.com>
+PKG_LICENSE:=GPL-2.0-or-later
PKG_LICENSE_FILES:=COPYING
+PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)/v$(PKG_VERSION)
+HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/$(PKG_NAME)/v$(PKG_VERSION)
PKG_BUILD_DEPENDS:=softethervpn/host
HOST_BUILD_DEPENDS:=readline/host libiconv/host
+PKG_ASLR_PIE:=0
HAMCORE_SE2:=$(STAGING_DIR_HOST)/share/softethervpn/hamcore.se2
include $(INCLUDE_DIR)/nls.mk
SUBMENU:=VPN
TITLE:=Free Cross-platform Multi-protocol VPN server and client
URL:=http://www.softether.org/
- MAINTAINER:=Federico Di Marco <fededim@gmail.com>
endef
define Package/softethervpn/description
PKG_NAME:=sqm-scripts
PKG_SOURCE_VERSION:=ab763cba8b1516b3afa99760e0ca884f8b8d93b8
PKG_VERSION:=1.4.0
-PKG_RELEASE:=4
+PKG_RELEASE:=5
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/tohojo/sqm-scripts
endef
define Package/luci-app-sqm/install
- make -C $(PKG_BUILD_DIR) DESTDIR=$(1) PLATFORM=openwrt install-luci
-endef
-
-define Package/luci-app-sqm/postinst
-#!/bin/sh
-which uci > /dev/null || exit 0
-uci -q get ucitrack.@sqm[0] > /dev/null || {
- uci add ucitrack sqm > /dev/null
- uci set ucitrack.@sqm[0].init=sqm
- uci add_list ucitrack.@firewall[0].affects=sqm
- uci commit
-}
+ $(MAKE) -C $(PKG_BUILD_DIR) DESTDIR=$(1) PLATFORM=openwrt install-luci
+ $(INSTALL_DIR) $(1)/etc/uci-defaults
+ $(INSTALL_BIN) ./files/luci-app-sqm.defaults $(1)/etc/uci-defaults
endef
define Package/luci-app-sqm/postrm
--- /dev/null
+#!/bin/sh
+
+uci -q get ucitrack.@sqm[0] >/dev/null || {
+ uci add ucitrack sqm > /dev/null
+ uci set ucitrack.@sqm[0].init=sqm
+ uci add_list ucitrack.@firewall[0].affects=sqm
+ uci commit
+}
PKG_NAME:=squid
PKG_VERSION:=4.6
-PKG_RELEASE:=2
+PKG_RELEASE:=3
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=http://www3.us.squid-cache.org/Versions/v4/ \
acl localnet src 0.0.0.1-0.255.255.255 # RFC 1122 "this" network (LAN)
acl localnet src 10.0.0.0/8 # RFC 1918 local private network (LAN)
acl localnet src 100.64.0.0/10 # RFC 6598 shared address space (CGN)
-acl localhet src 169.254.0.0/16 # RFC 3927 link-local (directly plugged) machines
+acl localnet src 169.254.0.0/16 # RFC 3927 link-local (directly plugged) machines
acl localnet src 172.16.0.0/12 # RFC 1918 local private network (LAN)
acl localnet src 192.168.0.0/16 # RFC 1918 local private network (LAN)
acl localnet src fc00::/7 # RFC 4193 local private network range
PKG_NAME:=transmission
PKG_VERSION:=2.94
-PKG_RELEASE:=12
+PKG_RELEASE:=15
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=@GITHUB/transmission/transmission-releases/master
{
"whitelist": [
+ "accept",
"accept4",
"access",
"arm_fadvise64_64",
"getpid",
"getsockname",
"getsockopt",
+ "getuid32",
"ioctl",
"listen",
"_llseek",
"mmap",
"mmap2",
"mprotect",
+ "mremap",
"munmap",
"nanosleep",
"_newselect",
"pread64",
"prlimit64",
"pwrite64",
+ "quotactl",
"read",
"readlink",
"readv",
"socket",
"stat",
"stat64",
+ "socketpair",
"umask",
"uname",
"unlink",
+ "statfs64",
+ "umask",
"write",
"writev"
],
include $(INCLUDE_DIR)/kernel-defaults.mk
define Build/Compile
- $(MAKE) $(KERNEL_MAKEOPTS) SUBDIRS="$(PKG_BUILD_DIR)" modules
+ $(MAKE) $(KERNEL_MAKEOPTS) M="$(PKG_BUILD_DIR)" modules
endef
$(eval $(call BuildPackage,wifidog-ng-nossl))
include $(INCLUDE_DIR)/kernel.mk
PKG_NAME:=xtables-addons
-PKG_VERSION:=3.7
-PKG_RELEASE:=2
-PKG_HASH:=045ee3fcfe5d6edb95483cf49e2446ff8cab4bb79411018b18354138b70c5eb5
+PKG_VERSION:=3.9
+PKG_RELEASE:=1
+PKG_HASH:=064dd68937d98e6cfcbdf51ef459310d9810c17ab31b21285bc7a76cdcef7c49
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=@SF/xtables-addons
extensions/pknock/xt_pknock.c | 16 ++++++++++++++++
3 files changed, 19 insertions(+), 3 deletions(-)
-diff --git a/configure.ac b/configure.ac
-index 7631f6b..0d3aa72 100644
--- a/configure.ac
+++ b/configure.ac
@@ -61,7 +61,7 @@ if test -n "$kbuilddir"; then
echo "WARNING: That kernel version is not officially supported yet. Continue at own luck.";
elif test "$kmajor" -eq 5 -a "$kminor" -ge 0; then
:
-- elif test "$kmajor" -eq 4 -a "$kminor" -ge 18; then
+- elif test "$kmajor" -eq 4 -a "$kminor" -ge 15; then
+ elif test "$kmajor" -eq 4 -a "$kminor" -ge 14; then
:
else
echo "WARNING: That kernel version is not officially supported.";
-diff --git a/extensions/compat_xtables.h b/extensions/compat_xtables.h
-index d08354a..faf5dd8 100644
--- a/extensions/compat_xtables.h
+++ b/extensions/compat_xtables.h
@@ -8,8 +8,8 @@
#endif
#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
-diff --git a/extensions/pknock/xt_pknock.c b/extensions/pknock/xt_pknock.c
-index c76901a..7be0345 100644
--- a/extensions/pknock/xt_pknock.c
+++ b/extensions/pknock/xt_pknock.c
-@@ -357,10 +357,18 @@ has_logged_during_this_minute(const struct peer *peer)
+@@ -356,10 +356,18 @@ has_logged_during_this_minute(const stru
*
* @r: rule
*/
struct peer *peer;
struct list_head *pos, *n;
-@@ -467,7 +475,15 @@ add_rule(struct xt_pknock_mtinfo *info)
+@@ -466,7 +474,15 @@ add_rule(struct xt_pknock_mtinfo *info)
rule->peer_head = alloc_hashtable(peer_hashsize);
if (rule->peer_head == NULL)
goto out;
rule->status_proc = proc_create_data(info->rule_name, 0, pde,
&pknock_proc_ops, rule);
if (rule->status_proc == NULL)
---
-2.21.0
-
+obj-m += nf_conntrack_rtsp.o
--- /dev/null
+++ b/extensions/rtsp/netfilter_helpers.h
-@@ -0,0 +1,133 @@
+@@ -0,0 +1,144 @@
+/*
+ * Helpers for netfiler modules. This file provides implementations for basic
+ * functions such as strncasecmp(), etc.
+/* Only include these functions for kernel code. */
+#ifdef __KERNEL__
+
++#include <net/netfilter/nf_conntrack_expect.h>
++
+#include <linux/ctype.h>
+#define iseol(c) ( (c) == '\r' || (c) == '\n' )
+
+}
+#endif /* NF_NEED_NEXTLINE */
+
++static inline int rtsp_nf_ct_expect_related(struct nf_conntrack_expect *expect)
++{
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,3,0)
++ return nf_ct_expect_related(expect, 0);
++#else
++ return nf_ct_expect_related(expect);
++#endif
++}
++
+#endif /* __KERNEL__ */
+
+#endif /* _NETFILTER_HELPERS_H */
+#endif /* _NETFILTER_MIME_H */
--- /dev/null
+++ b/extensions/rtsp/nf_conntrack_rtsp.c
-@@ -0,0 +1,761 @@
+@@ -0,0 +1,756 @@
+/*
+ * RTSP extension for IP connection tracking
+ * (C) 2003 by Tom Marshall <tmarshall at real.com>
+#include <net/tcp.h>
+
+#include <net/netfilter/nf_conntrack.h>
-+#include <net/netfilter/nf_conntrack_expect.h>
+#include <net/netfilter/nf_conntrack_helper.h>
+#include <net/netfilter/nf_conntrack_zones.h>
+#include "nf_conntrack_rtsp.h"
+MODULE_PARM_DESC(ports, "port numbers of RTSP servers");
+module_param(max_outstanding, int, 0400);
+MODULE_PARM_DESC(max_outstanding, "max number of outstanding SETUP requests per RTSP session");
-+module_param(setup_timeout, int, 0400);
++module_param(setup_timeout, uint, 0400);
+MODULE_PARM_DESC(setup_timeout, "timeout on for unestablished data channels");
+
+static char *rtsp_buffer;
+ &expinfo, rtp_exp, rtcp_exp);
+#endif
+ else {
-+ if (nf_ct_expect_related(rtp_exp) == 0) {
-+ if (rtcp_exp && nf_ct_expect_related(rtcp_exp) != 0) {
++ if (rtsp_nf_ct_expect_related(rtp_exp) == 0) {
++ if (rtcp_exp && rtsp_nf_ct_expect_related(rtcp_exp) != 0) {
+ nf_ct_unexpect_related(rtp_exp);
+ pr_info("nf_conntrack_expect_related failed for rtcp\n");
+ ret = NF_DROP;
+ printk("nf_conntrack_rtsp: max_outstanding must be a positive integer\n");
+ return -EBUSY;
+ }
-+ if (setup_timeout < 0) {
-+ printk("nf_conntrack_rtsp: setup_timeout must be a positive integer\n");
-+ return -EBUSY;
-+ }
+
+ rtsp_exp_policy.max_expected = max_outstanding;
+ rtsp_exp_policy.timeout = setup_timeout;
+#endif /* _IP_CONNTRACK_RTSP_H */
--- /dev/null
+++ b/extensions/rtsp/nf_nat_rtsp.c
-@@ -0,0 +1,636 @@
+@@ -0,0 +1,635 @@
+/*
+ * RTSP extension for TCP NAT alteration
+ * (C) 2003 by Tom Marshall <tmarshall at real.com>
+#endif
+#include <net/netfilter/nf_nat_helper.h>
+#include "nf_conntrack_rtsp.h"
-+#include <net/netfilter/nf_conntrack_expect.h>
+
+#include <linux/inet.h>
+#include <linux/ctype.h>
+ case pb_single:
+ for (loport = prtspexp->loport; loport != 0; loport++) { /* XXX: improper wrap? */
+ rtp_t->dst.u.udp.port = htons(loport);
-+ if (nf_ct_expect_related(rtp_exp) == 0) {
++ if (rtsp_nf_ct_expect_related(rtp_exp) == 0) {
+ pr_debug("using port %hu\n", loport);
+ break;
+ }
+ case pb_range:
+ for (loport = prtspexp->loport; loport != 0; loport += 2) { /* XXX: improper wrap? */
+ rtp_t->dst.u.udp.port = htons(loport);
-+ if (nf_ct_expect_related(rtp_exp) != 0) {
++ if (rtsp_nf_ct_expect_related(rtp_exp) != 0) {
+ continue;
+ }
+ hiport = loport + 1;
+ rtcp_exp->tuple.dst.u.udp.port = htons(hiport);
-+ if (nf_ct_expect_related(rtcp_exp) != 0) {
++ if (rtsp_nf_ct_expect_related(rtcp_exp) != 0) {
+ nf_ct_unexpect_related(rtp_exp);
+ continue;
+ }
+ case pb_discon:
+ for (loport = prtspexp->loport; loport != 0; loport++) { /* XXX: improper wrap? */
+ rtp_t->dst.u.udp.port = htons(loport);
-+ if (nf_ct_expect_related(rtp_exp) == 0) {
++ if (rtsp_nf_ct_expect_related(rtp_exp) == 0) {
+ pr_debug("using port %hu (1 of 2)\n", loport);
+ break;
+ }
+ }
+ for (hiport = prtspexp->hiport; hiport != 0; hiport++) { /* XXX: improper wrap? */
+ rtp_t->dst.u.udp.port = htons(hiport);
-+ if (nf_ct_expect_related(rtp_exp) == 0) {
++ if (rtsp_nf_ct_expect_related(rtp_exp) == 0) {
+ pr_debug("using port %hu (2 of 2)\n", hiport);
+ break;
+ }
{
uint32_t verdict;
lua_packet_segment *p;
+@@ -79,7 +79,7 @@ lua_tg(struct sk_buff *pskb, const struc
+
+ L = lua_envs[info->state_id]->L;
+
+- if (!skb_make_writable(pskb, pskb->len))
++ if (skb_ensure_writable(pskb, pskb->len))
+ return NF_DROP;
+
+ /* call the function provided by --function parameter or the default 'process_packet' defined in Lua */
@@ -88,11 +88,11 @@ lua_tg(struct sk_buff *pskb, const struc
/* push the lua_packet_segment as a parameter */
p = (lua_packet_segment *)lua_newuserdata(L, sizeof(lua_packet_segment));
include $(TOPDIR)/rules.mk
PKG_NAME:=squeezelite
-PKG_VERSION:=1.9.1-1130
-PKG_RELEASE:=2
+PKG_VERSION:=1.9.6-1210
+PKG_RELEASE:=1
+
+PKG_SOURCE_PROTO:=git
+PKG_SOURCE_URL:=https://github.com/ralph-irving/squeezelite
+PKG_SOURCE_VERSION:=1b7a17616cd2bbd9935c710dc33cda11cd0de45e
+PKG_MIRROR_HASH:=5993fa5fcacd1640962bc60f88a93faa4fcac74a767fbf820b40a27c338a9062
-PKG_LICENSE:=GPL-3.0
-PKG_LICENSE_FILES:=LICENSE.txt
PKG_MAINTAINER:=Ted Hess <thess@kitschensync.net>
+PKG_LICENSE:=GPL-3.0-or-later
+PKG_LICENSE_FILES:=LICENSE.txt
-PKG_SOURCE_PROTO:=git
-PKG_SOURCE_URL:=https://github.com/ralph-irving/squeezelite.git
-PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
-PKG_SOURCE_VERSION:=451cad8da651073d18118fb9ca39faef550825ff
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
-PKG_MIRROR_HASH:=e6082b486e364c8cbd7db96fc06dc5243242a3ac786113e42e3061c06ea8889e
+PKG_BUILD_PARALLEL:=1
include $(INCLUDE_DIR)/package.mk
MAKE_FLAGS+=OPTS="$(opts)"
-# Squeezelite uses functions which are deprecated in recent ffmpeg versions.
-# See https://github.com/ralph-irving/squeezelite/issues/60
-TARGET_CFLAGS+=-Wno-deprecated-declarations
-
define Package/squeezelite/install
$(INSTALL_DIR) $(1)/usr/bin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/squeezelite $(1)/usr/bin
# Check if a codec is disabled in the configuration (ie "decode_<codec> 0")
checkcodec() {
+ local codec
config_get_bool codec options "$1" 1
- if [ $codec -eq 0 ] ; then
+ if [ "$codec" -eq 0 ] ; then
if [ -z "$3" ] ; then
echo "-e $2"
else
make_cmdline() {
cmdline=""
+ local name
config_get name options name "SqueezeWrt"
cmdline="$cmdline -n $name"
+ local model_name
config_get model_name options model_name "SqueezeLite"
cmdline="$cmdline -M $model_name"
+ local interface
config_get interface options interface ""
[ -n "$interface" ] && cmdline="$cmdline -I $interface"
+ local device
config_get device options device ""
[ -n "$device" ] && cmdline="$cmdline -o $device"
+ local alsa_buffer
config_get alsa_buffer options alsa_buffer 200
- [ $alsa_buffer -eq 0 ] && alsa_buffer="200"
+ [ "$alsa_buffer" -eq 0 ] && alsa_buffer="200"
+ local alsa_period
config_get alsa_period options alsa_period 4
- [ $alsa_period -eq 0 ] && alsa_period="4"
+ [ "$alsa_period" -eq 0 ] && alsa_period="4"
+ local alsa_format
config_get alsa_format options alsa_format 16
- [ $alsa_format = "0" ] && alsa_format="16"
+ [ "$alsa_format" = "0" ] && alsa_format="16"
+ local alsa_mmap
config_get alsa_mmap options alsa_mmap 0
cmdline="$cmdline -a $alsa_buffer:$alsa_period:$alsa_format:$alsa_mmap"
+ local stream_bufsiz
+ local out_bufsiz
config_get stream_bufsiz options stream_bufsiz 2048
config_get out_bufsiz options out_bufsiz 3763
cmdline="$cmdline -b $stream_bufsiz:$out_bufsiz"
+ local max_sr
config_get max_sr options max_sr 0
- if [ $max_sr -ne 0 ] ; then
+ [ "$max_sr" -ne 0 ] && {
max_sr="-r $max_sr"
+ local sr_delay
config_get sr_delay options sr_delay 0
- [ $sr_delay -ne 0 ] && max_sr="$max_sr:$sr_delay"
+ [ "$sr_delay" -ne 0 ] && max_sr="$max_sr:$sr_delay"
cmdline="$cmdline $max_sr"
- fi
-
+ }
+ local close_delay
config_get close_delay options close_delay 0
- [ $close_delay -ne 0 ] && cmdline="$cmdline -C $close_delay"
+ [ "$close_delay" -ne 0 ] && cmdline="$cmdline -C $close_delay"
+ local server_addr
config_get server_addr options server_addr ""
- if [ -n "$server_addr" ] ; then
+ [ -n "$server_addr" ] && {
+ local server_port
config_get server_port options server_port 3483
cmdline="$cmdline -s $server_addr:$server_port"
- fi
+ }
+ local priority
config_get priority options priority 0
- [ $priority -ne 0 ] && cmdline="$cmdline -p $priority"
+ [ "$priority" -ne 0 ] && cmdline="$cmdline -p $priority"
local excl_codecs=""
excl_codecs=$(checkcodec decode_flac flac "$excl_codecs")
excl_codecs=$(checkcodec decode_wma_alac wma,alac "$excl_codecs")
cmdline="$cmdline $excl_codecs"
+ local dop
config_get dop options dsd_over_pcm 0
- [ $dop -eq 1 ] && cmdline="$cmdline -D"
+ [ "$dop" -eq 1 ] && cmdline="$cmdline -D"
}
start_service() {
config_load squeezelite
+ local enabled
config_get_bool enabled options 'enabled' 0
- [ $enabled -eq 0 ] && return
+ [ "$enabled" -eq 0 ] && return
# Build command params
make_cmdline
-Index: squeezelite-1.9.1-1130/main.c
-===================================================================
---- squeezelite-1.9.1-1130.orig/main.c
-+++ squeezelite-1.9.1-1130/main.c
-@@ -84,6 +84,7 @@ static void usage(const char *argv0) {
+--- a/main.c
++++ b/main.c
+@@ -93,6 +93,7 @@ static void usage(const char *argv0) {
#if IR
" -i [<filename>]\tEnable lirc remote control support (lirc config file ~/.lircrc used if filename not specified)\n"
#endif
" -m <mac addr>\t\tSet mac address, format: ab:cd:ef:12:34:56\n"
" -M <modelname>\tSet the squeezelite player model name sent to the server (default: " MODEL_NAME_STRING ")\n"
" -n <name>\t\tSet the player name\n"
-@@ -267,6 +268,8 @@ int main(int argc, char **argv) {
+@@ -285,6 +286,8 @@ int main(int argc, char **argv) {
extern bool user_rates;
char *logfile = NULL;
u8_t mac[6];
unsigned stream_buf_size = STREAMBUF_SIZE;
unsigned output_buf_size = 0; // set later
unsigned rates[MAX_SUPPORTED_SAMPLERATES] = { 0 };
-@@ -307,6 +310,7 @@ int main(int argc, char **argv) {
+@@ -325,6 +328,7 @@ int main(int argc, char **argv) {
int maxSampleRate = 0;
char *optarg = NULL;
int optind = 1;
int i;
-@@ -314,8 +318,6 @@ int main(int argc, char **argv) {
+@@ -332,8 +336,6 @@ int main(int argc, char **argv) {
#define MAXCMDLINE 512
char cmdline[MAXCMDLINE] = "";
for (i = 0; i < argc && (strlen(argv[i]) + strlen(cmdline) + 2 < MAXCMDLINE); i++) {
strcat(cmdline, argv[i]);
strcat(cmdline, " ");
-@@ -323,7 +325,7 @@ int main(int argc, char **argv) {
+@@ -341,7 +343,7 @@ int main(int argc, char **argv) {
while (optind < argc && strlen(argv[optind]) >= 2 && argv[optind][0] == '-') {
char *opt = argv[optind] + 1;
#if ALSA
"UVO"
#endif
-@@ -424,6 +426,9 @@ int main(int argc, char **argv) {
+@@ -442,6 +444,9 @@ int main(int argc, char **argv) {
case 'f':
logfile = optarg;
break;
case 'm':
{
int byte = 0;
-@@ -733,6 +738,11 @@ int main(int argc, char **argv) {
+@@ -755,6 +760,11 @@ int main(int argc, char **argv) {
winsock_init();
#endif
stream_init(log_stream, stream_buf_size);
if (!strcmp(output_device, "-")) {
-@@ -776,7 +786,7 @@ int main(int argc, char **argv) {
+@@ -798,7 +808,7 @@ int main(int argc, char **argv) {
exit(1);
}
decode_close();
stream_close();
-Index: squeezelite-1.9.1-1130/squeezelite.h
-===================================================================
---- squeezelite-1.9.1-1130.orig/squeezelite.h
-+++ squeezelite-1.9.1-1130/squeezelite.h
-@@ -414,7 +414,7 @@ typedef enum { EVENT_TIMEOUT = 0, EVENT_
-
- char *next_param(char *src, char c);
- u32_t gettime_ms(void);
--void get_mac(u8_t *mac);
-+in_addr_t get_iface_info(log_level level, char *iface, u8_t *mac);
- void set_nonblock(sockfd s);
- int connect_timeout(sockfd sock, const struct sockaddr *addr, socklen_t addrlen, int timeout);
- void server_addr(char *server, in_addr_t *ip_ptr, unsigned *port_ptr);
-@@ -470,7 +470,7 @@ void buf_init(struct buffer *buf, size_t
- void buf_destroy(struct buffer *buf);
-
- // slimproto.c
--void slimproto(log_level level, char *server, u8_t mac[6], const char *name, const char *namefile, const char *modelname, int maxSampleRate);
-+void slimproto(log_level level, char *server, in_addr_t bcast_addr, u8_t mac[6], const char *name, const char *namefile, const char *modelname, int maxSampleRate);
- void slimproto_stop(void);
- void wake_controller(void);
-
-Index: squeezelite-1.9.1-1130/slimproto.c
-===================================================================
---- squeezelite-1.9.1-1130.orig/slimproto.c
-+++ squeezelite-1.9.1-1130/slimproto.c
-@@ -113,7 +113,7 @@ void send_packet(u8_t *packet, size_t le
+--- a/slimproto.c
++++ b/slimproto.c
+@@ -113,7 +113,7 @@ void send_packet(u8_t *packet, size_t len) {
}
}
-static void sendHELO(bool reconnect, const char *fixed_cap, const char *var_cap, u8_t mac[6]) {
+static void sendHELO(bool reconnect, const char *fixed_cap, const char *var_cap, u8_t *mac) {
- const char *base_cap = "Model=squeezelite,AccuratePlayPoints=1,HasDigitalOut=1,HasPolarityInversion=1,Firmware=" VERSION;
- struct HELO_packet pkt;
-
-@@ -757,7 +757,7 @@ void wake_controller(void) {
+ #define BASE_CAP "Model=squeezelite,AccuratePlayPoints=1,HasDigitalOut=1,HasPolarityInversion=1,Firmware=" VERSION
+ #define SSL_CAP "CanHTTPS=1"
+ const char *base_cap;
+@@ -761,7 +761,7 @@ void wake_controller(void) {
wake_signal(wake_e);
}
struct sockaddr_in d;
struct sockaddr_in s;
char *buf;
-@@ -774,7 +774,7 @@ in_addr_t discover_server(char *default_
+@@ -778,7 +778,7 @@ in_addr_t discover_server(char *default_server) {
memset(&d, 0, sizeof(d));
d.sin_family = AF_INET;
d.sin_port = htons(PORT);
pollinfo.fd = disc_sock;
pollinfo.events = POLLIN;
-@@ -809,7 +809,7 @@ in_addr_t discover_server(char *default_
+@@ -813,7 +813,7 @@ in_addr_t discover_server(char *default_server) {
#define FIXED_CAP_LEN 256
#define VAR_CAP_LEN 128
struct sockaddr_in serv_addr;
static char fixed_cap[FIXED_CAP_LEN], var_cap[VAR_CAP_LEN] = "";
bool reconnect = false;
-@@ -830,7 +830,7 @@ void slimproto(log_level level, char *se
+@@ -834,7 +834,7 @@ void slimproto(log_level level, char *server, u8_t mac[6], const char *name, con
}
if (!slimproto_ip) {
}
if (!slimproto_port) {
-@@ -911,7 +911,7 @@ void slimproto(log_level level, char *se
+@@ -915,7 +915,7 @@ void slimproto(log_level level, char *server, u8_t mac[6], const char *name, con
// rediscover server if it was not set at startup
if (!server && ++failed_connect > 5) {
}
} else {
-Index: squeezelite-1.9.1-1130/utils.c
-===================================================================
---- squeezelite-1.9.1-1130.orig/utils.c
-+++ squeezelite-1.9.1-1130/utils.c
+--- a/squeezelite.h
++++ b/squeezelite.h
+@@ -455,7 +455,7 @@ char* strcasestr(const char *haystack, const char *needle);
+
+ char *next_param(char *src, char c);
+ u32_t gettime_ms(void);
+-void get_mac(u8_t *mac);
++in_addr_t get_iface_info(log_level level, char *iface, u8_t *mac);
+ void set_nonblock(sockfd s);
+ int connect_timeout(sockfd sock, const struct sockaddr *addr, socklen_t addrlen, int timeout);
+ void server_addr(char *server, in_addr_t *ip_ptr, unsigned *port_ptr);
+@@ -511,7 +511,7 @@ void buf_init(struct buffer *buf, size_t size);
+ void buf_destroy(struct buffer *buf);
+
+ // slimproto.c
+-void slimproto(log_level level, char *server, u8_t mac[6], const char *name, const char *namefile, const char *modelname, int maxSampleRate);
++void slimproto(log_level level, char *server, in_addr_t bcast_addr, u8_t mac[6], const char *name, const char *namefile, const char *modelname, int maxSampleRate);
+ void slimproto_stop(void);
+ void wake_controller(void);
+
+--- a/utils.c
++++ b/utils.c
@@ -22,11 +22,11 @@
#include "squeezelite.h"
#include <net/if_dl.h>
#include <net/if_types.h>
#endif
-@@ -44,15 +44,11 @@
- #if WIN
- #include <iphlpapi.h>
+@@ -49,15 +49,11 @@
+ #include <ctype.h>
+ #endif
#endif
-#if OSX
-#include <net/if_dl.h>
// logging functions
const char *logtime(void) {
static char buf[100];
-@@ -114,58 +110,94 @@ u32_t gettime_ms(void) {
+@@ -119,58 +115,94 @@ u32_t gettime_ms(void) {
#endif
}
+ unsigned char *ptr;
+ in_addr_t bcast_addr = 0;
+ int have_mac = 0, have_ifname = 0;
-+
+
+- }
+ loglevel = level;
-+
+
+- mac[0] = mac[1] = mac[2] = mac[3] = mac[4] = mac[5] = 0;
+ // Check for non-zero MAC
+ if (mac[0] | mac[1] | mac[2] != 0)
+ have_mac = 1;
-+
+
+- int s = socket(AF_INET, SOCK_DGRAM, 0);
+ // Copy interface name, if it was provided.
+ if (iface != NULL) {
+ if (strlen(iface) > sizeof(ifname))
+ return -1;
-+ strncpy(ifname, iface, sizeof(ifname));
+- ifc.ifc_len = sizeof(ifs);
+- ifc.ifc_req = ifs;
++ strncpy(ifname, iface, sizeof(ifname) - 1);
+ have_ifname = 1;
- }
++ }
-- mac[0] = mac[1] = mac[2] = mac[3] = mac[4] = mac[5] = 0;
+- if (ioctl(s, SIOCGIFCONF, &ifc) == 0) {
+- ifend = ifs + (ifc.ifc_len / sizeof(struct ifreq));
+ if (getifaddrs(&addrs) == 0) {
+ //iterate to find corresponding ethernet address
+ for (ifa = addrs; ifa; ifa = ifa->ifa_next) {
+ || !ifa->ifa_flags & IFF_BROADCAST) {
+ continue;
+ }
-
-- int s = socket(AF_INET, SOCK_DGRAM, 0);
++
+ if (!have_ifname) {
+ // We have found a valid interface name. Keep it.
-+ strncpy(ifname, ifa->ifa_name, sizeof(ifname));
++ strncpy(ifname, ifa->ifa_name, sizeof(ifname) - 1);
+ have_ifname = 1;
+ } else {
+ if (strncmp(ifname, ifa->ifa_name, sizeof(ifname)) != 0) {
+ }
+ }
-- ifc.ifc_len = sizeof(ifs);
-- ifc.ifc_req = ifs;
+- for (ifr = ifc.ifc_req; ifr < ifend; ifr++) {
+- if (ifr->ifr_addr.sa_family == AF_INET) {
-- if (ioctl(s, SIOCGIFCONF, &ifc) == 0) {
-- ifend = ifs + (ifc.ifc_len / sizeof(struct ifreq));
+- strncpy(ifreq.ifr_name, ifr->ifr_name, sizeof(ifreq.ifr_name) - 1);
+- if (ioctl (s, SIOCGIFHWADDR, &ifreq) == 0) {
+- memcpy(mac, ifreq.ifr_hwaddr.sa_data, 6);
+- if (mac[0]+mac[1]+mac[2] != 0) {
+- break;
+- }
+ // Check address family.
+ if (ifa->ifa_addr && ifa->ifa_addr->sa_family == AF_INET &&
+ ((struct sockaddr_in *)ifa->ifa_broadaddr)->sin_addr.s_addr != 0) {
+ have_ifname = 0;
+ }
+ }
-
-- for (ifr = ifc.ifc_req; ifr < ifend; ifr++) {
-- if (ifr->ifr_addr.sa_family == AF_INET) {
--
-- strncpy(ifreq.ifr_name, ifr->ifr_name, sizeof(ifreq.ifr_name));
-- if (ioctl (s, SIOCGIFHWADDR, &ifreq) == 0) {
-- memcpy(mac, ifreq.ifr_hwaddr.sa_data, 6);
-- if (mac[0]+mac[1]+mac[2] != 0) {
-- break;
-- }
++
+ // Find MAC address matching interface
+ if (!have_mac && bcast_addr != 0) {
+ for (ifa = addrs; ifa; ifa = ifa->ifa_next) {
#if SUN
void get_mac(u8_t mac[]) {
struct arpreq parpreq;
-@@ -232,30 +264,6 @@ void get_mac(u8_t mac[]) {
+@@ -237,30 +269,6 @@ void get_mac(u8_t mac[]) {
}
#endif
-Index: squeezelite-1.9.1-1130/Makefile
-===================================================================
---- squeezelite-1.9.1-1130.orig/Makefile
-+++ squeezelite-1.9.1-1130/Makefile
-@@ -17,7 +17,7 @@ OPT_NO_FAAD = -DNO_FAAD
+--- a/Makefile
++++ b/Makefile
+@@ -22,7 +22,7 @@ OPT_OPUS = -DOPUS
SOURCES = \
main.c slimproto.c buffer.c stream.c utils.c \
output.c output_alsa.c output_pa.c output_stdout.c output_pack.c decode.c \
SOURCES_DSD = dsd.c dop.c dsd2pcm/dsd2pcm.c
SOURCES_FF = ffmpeg.c
-@@ -30,7 +30,7 @@ SOURCES_FAAD = faad.c
- LINK_LINUX = -ldl
- LINK_RPI = -lwiringPi
+@@ -40,7 +40,7 @@ LINK_LINUX = -ldl
+ LINK_SSL = -lssl -lcrypto
+ LINK_ALAC = -lalac
--LINKALL = -lFLAC -lmad -lvorbisfile -lmpg123
-+LINKALL = -lFLAC -lvorbisfile -lmpg123
- LINKALL_FF = -lavcodec -lavformat -lavutil
+-LINKALL = -lmad -lmpg123 -lFLAC -lvorbisfile -lvorbis -logg
++LINKALL = -lmpg123 -lFLAC -lvorbisfile -lvorbis -logg
+ LINKALL_FF = -lavformat -lavcodec -lavutil
LINKALL_RESAMPLE = -lsoxr
LINKALL_IR = -llirc_client
-Index: squeezelite-1.9.1-1130/decode.c
-===================================================================
---- squeezelite-1.9.1-1130.orig/decode.c
-+++ squeezelite-1.9.1-1130/decode.c
-@@ -176,11 +176,7 @@ void decode_init(log_level level, const
+--- a/decode.c
++++ b/decode.c
+@@ -184,11 +184,7 @@ void decode_init(log_level level, const char *include_codecs, const char *exclud
if (!strstr(exclude_codecs, "pcm") && (!include_codecs || (order_codecs = strstr(include_codecs, "pcm"))))
sort_codecs((include_codecs ? order_codecs - include_codecs : i), register_pcm());
(!include_codecs || (order_codecs = strstr(include_codecs, "mp3")) || (order_codecs = strstr(include_codecs, "mpg"))))
sort_codecs((include_codecs ? order_codecs - include_codecs : i), register_mpg());
-Index: squeezelite-1.9.1-1130/main.c
-===================================================================
---- squeezelite-1.9.1-1130.orig/main.c
-+++ squeezelite-1.9.1-1130/main.c
-@@ -44,7 +44,7 @@
+--- a/main.c
++++ b/main.c
+@@ -51,7 +51,7 @@
#else
#define CODECS_DSD ""
#endif
-#define CODECS_MP3 " (mad,mpg for specific mp3 codec)"
+#define CODECS_MP3 ""
- #define CODECS CODECS_BASE CODECS_AAC CODECS_FF CODECS_DSD CODECS_MP3
+ #define CODECS CODECS_BASE CODECS_AAC CODECS_FF CODECS_OPUS CODECS_DSD CODECS_MP3
-Index: squeezelite-1.9.1-1130/squeezelite.h
-===================================================================
---- squeezelite-1.9.1-1130.orig/squeezelite.h
-+++ squeezelite-1.9.1-1130/squeezelite.h
-@@ -163,7 +163,6 @@
+--- a/squeezelite.h
++++ b/squeezelite.h
+@@ -190,7 +190,6 @@
#if LINUX
#define LIBFLAC "libFLAC.so.8"
-#define LIBMAD "libmad.so.0"
#define LIBMPG "libmpg123.so.0"
#define LIBVORBIS "libvorbisfile.so.3"
- #define LIBTREMOR "libvorbisidec.so.1"
-@@ -177,7 +176,6 @@
+ #define LIBOPUS "libopusfile.so.0"
+@@ -205,7 +204,6 @@
#if OSX
#define LIBFLAC "libFLAC.8.dylib"
#define LIBMPG "libmpg123.0.dylib"
#define LIBVORBIS "libvorbisfile.3.dylib"
#define LIBTREMOR "libvorbisidec.1.dylib"
-@@ -190,7 +188,6 @@
+@@ -219,7 +217,6 @@
#if WIN
#define LIBFLAC "libFLAC.dll"
-#define LIBMAD "libmad-0.dll"
#define LIBMPG "libmpg123-0.dll"
#define LIBVORBIS "libvorbisfile.dll"
- #define LIBTREMOR "libvorbisidec.dll"
-@@ -203,7 +200,6 @@
+ #define LIBOPUS "libopusfile-0.dll"
+@@ -233,7 +230,6 @@
#if FREEBSD
- #define LIBFLAC "libFLAC.so.11"
--#define LIBMAD "libmad.so.2"
+ #define LIBFLAC "libFLAC.so.8"
+-#define LIBMAD "libmad.so.0"
#define LIBMPG "libmpg123.so.0"
- #define LIBVORBIS "libvorbisfile.so.6"
+ #define LIBVORBIS "libvorbisfile.so.3"
#define LIBTREMOR "libvorbisidec.so.1"
--- /dev/null
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=antfs-mount
+PKG_RELEASE:=1
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/antfs-mount
+ SECTION:=utils
+ CATEGORY:=Utilities
+ SUBMENU:=Filesystem
+ TITLE:=NTFS mount script for AVM NTFS driver
+ PKGARCH:=all
+ DEPENDS:=+kmod-fs-antfs
+endef
+
+define Build/Configure
+endef
+
+define Build/Compile
+endef
+
+define Package/antfs-mount/install
+ $(INSTALL_DIR) $(1)/sbin
+ $(INSTALL_BIN) ./files/mount.ntfs $(1)/sbin
+endef
+
+$(eval $(call BuildPackage,antfs-mount))
--- /dev/null
+#!/bin/sh
+mount -t antfs "$@"
PKG_NAME:=btrfs-progs
PKG_VERSION:=5.4.1
-PKG_RELEASE:=2
+PKG_RELEASE:=3
PKG_SOURCE:=$(PKG_NAME)-v$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=@KERNEL/linux/kernel/people/kdave/btrfs-progs
#!/bin/sh
preinit_btrfs_scan() {
- grep -vq btrfs /proc/filesystems || btrfs device scan
+ if grep -q btrfs /proc/filesystems; then
+ btrfs device scan
+ fi
}
boot_hook_add preinit_main preinit_btrfs_scan
PKG_NAME:=collectd
PKG_VERSION:=5.10.0
-PKG_RELEASE:=3
+PKG_RELEASE:=4
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL:=https://collectd.org/files/ \
$(eval $(call BuildPlugin,filecount,file count input,filecount,))
$(eval $(call BuildPlugin,fscache,file-system based caching framework input,fscache,))
$(eval $(call BuildPlugin,interface,network interfaces input,interface,))
-$(eval $(call BuildPlugin,iptables,iptables status input,iptables,+PACKAGE_collectd-mod-iptables:iptables +libiptc))
+$(eval $(call BuildPlugin,iptables,iptables status input,iptables,+PACKAGE_collectd-mod-iptables:iptables +libip4tc +libip6tc))
$(eval $(call BuildPlugin,irq,interrupt usage input,irq,))
$(eval $(call BuildPlugin,iwinfo,libiwinfo wireless statistics,iwinfo,+PACKAGE_collectd-mod-iwinfo:libiwinfo))
$(eval $(call BuildPlugin,load,system load input,load,))
include $(TOPDIR)/rules.mk
PKG_NAME:=containerd
-PKG_VERSION:=1.2.10
-PKG_RELEASE:=4
+PKG_VERSION:=1.2.13
+PKG_RELEASE:=1
PKG_LICENSE:=Apache-2.0
PKG_LICENSE_FILES:=LICENSE
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://codeload.github.com/containerd/containerd/tar.gz/v${PKG_VERSION}?
-PKG_HASH:=a0965e1492fca558629826f1aa89a9675de3d451cec67540400b30c0bf6ac387
-PKG_SOURCE_VERSION:=b34a5c8af56e510852c35414db4c1f4fa6172339
+PKG_HASH:=0811057ab67b78ce911416e793edaeb14b3f1e105d67b8e67b6302e0eab572e4
+PKG_SOURCE_VERSION:=7ad184331fa3e55e52b890ea95e65ba581ae3429
PKG_MAINTAINER:=Gerard Ryan <G.M0N3Y.2503@gmail.com>
include $(TOPDIR)/rules.mk
PKG_NAME:=cryptsetup
-PKG_VERSION:=2.2.2
+PKG_VERSION:=2.3.0
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
-PKG_SOURCE_URL:=@KERNEL/linux/utils/cryptsetup/v2.2
-PKG_HASH:=2af0ec9551ab9c870074cae9d3f68d82cab004f4095fa89db0e4413713424a46
+PKG_SOURCE_URL:=@KERNEL/linux/utils/cryptsetup/v2.3
+PKG_HASH:=395690de99509428354d3cd15cf023bed01487e6f1565b2181e013dc847bbc85
PKG_MAINTAINER:=Daniel Golle <daniel@makrotopia.org>
PKG_LICENSE:=GPL-2.0-or-later LGPL-2.1-or-later
PKG_LICENSE_FILES:=COPYING COPYING.LGPL
+PKG_INSTALL:=1
+PKG_BUILD_PARALLEL:=1
+
include $(INCLUDE_DIR)/package.mk
define Package/cryptsetup
--disable-veritysetup \
--disable-udev \
--with-default-luks-format=LUKS2 \
+ --with-luks2-lock-path=/var/run/cryptsetup \
--with-crypto_backend=kernel
define Package/cryptsetup/install
$(INSTALL_DIR) $(1)/usr/sbin
- $(CP) $(PKG_BUILD_DIR)/.libs/cryptsetup $(1)/usr/sbin
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/cryptsetup $(1)/usr/sbin
$(INSTALL_DIR) $(1)/usr/lib
- $(CP) $(PKG_BUILD_DIR)/.libs/libcryptsetup.so* $(1)/usr/lib
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/libcryptsetup.so* $(1)/usr/lib
endef
$(eval $(call BuildPackage,cryptsetup))
include $(TOPDIR)/rules.mk
PKG_NAME:=docker-ce
-PKG_VERSION:=19.03.5
+PKG_VERSION:=19.03.8
PKG_RELEASE:=2
PKG_LICENSE:=Apache-2.0
PKG_LICENSE_FILES:=components/cli/LICENSE components/engine/LICENSE
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://codeload.github.com/docker/docker-ce/tar.gz/v$(PKG_VERSION)?
-PKG_HASH:=d7948256e32bb4c104285d78e652ba9ead898c2e4dcee05f05ede2eaba719919
-PKG_SOURCE_VERSION:=633a0ea838 # SHA1 used within the docker executables
+PKG_HASH:=781c69e00e98f64fb167ee61de764882bd4926a873d98ce6f370d3cd3435b501
+PKG_SOURCE_VERSION:=afacb8b7f0 # SHA1 used within the docker executables
PKG_MAINTAINER:=Gerard Ryan <G.M0N3Y.2503@gmail.com>
endef
# values from respective '.installer' files at https://github.com/docker/docker-ce/blob/v$(PKG_VERSION)/components/engine/hack/dockerfile/install/
-$(eval $(call CheckExpectedSrcVer,../containerd/Makefile,b34a5c8af56e510852c35414db4c1f4fa6172339))
-$(eval $(call CheckExpectedSrcVer,../libnetwork/Makefile,3eb39382bfa6a3c42f83674ab080ae13b0e34e5d))
-$(eval $(call CheckExpectedSrcVer,../runc/Makefile,3e425f80a8c931f88e6d94a8c831b9d5aa481657))
+$(eval $(call CheckExpectedSrcVer,../containerd/Makefile,7ad184331fa3e55e52b890ea95e65ba581ae3429))
+$(eval $(call CheckExpectedSrcVer,../libnetwork/Makefile,9fd385be8302dbe1071a3ce124891893ff27f90f))
+$(eval $(call CheckExpectedSrcVer,../runc/Makefile,dc9208a3303feef5b3839f4323d9beb36df0a9dd))
$(eval $(call CheckExpectedSrcVer,../tini/Makefile,fec3683b971d9c3ef73f284f176672c44b448662))
PKG_BUILD_DEPENDS:=golang/host
include $(TOPDIR)/rules.mk
PKG_NAME:=gptfdisk
-PKG_VERSION:=1.0.4
-PKG_RELEASE:=2
+PKG_VERSION:=1.0.5
+PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=@SF/$(PKG_NAME)
-PKG_HASH:=b663391a6876f19a3cd901d862423a16e2b5ceaa2f4a3b9bb681e64b9c7ba78d
+PKG_HASH:=0e7d3987cd0488ecaf4b48761bc97f40b1dc089e5ff53c4b37abe30bc67dcb2f
PKG_MAINTAINER:=Alif M. Ahmad <alive4ever@live.com>
PKG_LICENSE:=GPL-2.0-or-later
+++ /dev/null
-From 9e6016b07ff6d1de5143d3dfefb58fb4268a78e1 Mon Sep 17 00:00:00 2001
-From: Rosen Penev <rosenp@gmail.com>
-Date: Mon, 7 Oct 2019 15:34:43 -0700
-Subject: [PATCH 1/4] gptcurses: Add missing header
-
-Needed with uClibc++ as it doesn't implicitly include it.
-
-Signed-off-by: Rosen Penev <rosenp@gmail.com>
----
- gptcurses.cc | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/gptcurses.cc b/gptcurses.cc
-index 3e9b240..4ebfde1 100644
---- a/gptcurses.cc
-+++ b/gptcurses.cc
-@@ -19,6 +19,7 @@
- *
- */
-
-+#include <clocale>
- #include <iostream>
- #include <string>
- #include <sstream>
---
-2.17.1
-
+++ /dev/null
-From 5542b160fa73e5e81e83c2d8dd1b79c3023094ee Mon Sep 17 00:00:00 2001
-From: Rosen Penev <rosenp@gmail.com>
-Date: Mon, 7 Oct 2019 15:36:31 -0700
-Subject: [PATCH 2/4] support: Flush cout in GetYN
-
-uClibc++ does not implicitly flush cout before getline.
-
-Signed-off-by: Rosen Penev <rosenp@gmail.com>
----
- support.cc | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/support.cc b/support.cc
-index d47965a..5ab8a23 100644
---- a/support.cc
-+++ b/support.cc
-@@ -101,7 +101,7 @@ char GetYN(void) {
- do {
- if ( again ) { cout << "Your option? " ; }
- again = 1 ;
-- cout << "(Y/N): ";
-+ cout << "(Y/N): " << flush;
- line = ReadString();
- response = toupper(line[0]);
- } while ((response != 'Y') && (response != 'N'));
---
-2.17.1
-
+++ /dev/null
-From 31d1f45cd63ec142fc559ea4f8a70bd4a1151c42 Mon Sep 17 00:00:00 2001
-From: Rosen Penev <rosenp@gmail.com>
-Date: Mon, 7 Oct 2019 15:39:14 -0700
-Subject: [PATCH 3/4] support: flush cout in GetNumber
-
-uClibc++ does not implicitly do this before getline.
-
-Signed-off-by: Rosen Penev <rosenp@gmail.com>
----
- support.cc | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/support.cc b/support.cc
-index 5ab8a23..1107993 100644
---- a/support.cc
-+++ b/support.cc
-@@ -73,7 +73,7 @@ uint64_t GetNumber(uint64_t low, uint64_t high, uint64_t def, const string & pro
-
- if (low != high) { // bother only if low and high differ...
- do {
-- cout << prompt;
-+ cout << prompt << flush;
- cin.getline(line, 255);
- if (!cin.good())
- exit(5);
---
-2.17.1
-
+++ /dev/null
-From 185f73b1084936f85beddd4523a302cb1f906234 Mon Sep 17 00:00:00 2001
-From: Rosen Penev <rosenp@gmail.com>
-Date: Mon, 7 Oct 2019 15:41:53 -0700
-Subject: [PATCH 4/4] support: flush cout in ReadString
-
-uClibc++ does not implicitly do this.
-
-Signed-off-by: Rosen Penev <rosenp@gmail.com>
----
- support.cc | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/support.cc b/support.cc
-index 1107993..891caad 100644
---- a/support.cc
-+++ b/support.cc
-@@ -55,6 +55,7 @@ string ReadString(void) {
- string ReadString(void) {
- string inString;
-
-+ cout << flush;
- getline(cin, inString);
- if (!cin.good())
- exit(5);
---
-2.17.1
-
index 4ebfde1..ca6f4ea 100644
--- a/gptcurses.cc
+++ b/gptcurses.cc
-@@ -418,7 +418,7 @@ void GPTDataCurses::Verify(void) {
+@@ -422,7 +422,7 @@ void GPTDataCurses::Verify(void) {
def_prog_mode();
endwin();
GPTData::Verify();
cin.get(junk);
reset_prog_mode();
refresh();
-@@ -816,7 +816,7 @@ void ShowTypes(void) {
+@@ -820,7 +820,7 @@ void ShowTypes(void) {
def_prog_mode();
endwin();
tempType.ShowAllTypes(LINES - 3);
index cd225d1..6c2c8c6 100644
--- a/parttypes.cc
+++ b/parttypes.cc
-@@ -524,7 +524,7 @@ void PartType::ShowAllTypes(int maxLines) const {
- if (thisType->next) {
- cout << "\n";
- if ((maxLines > 0) && (lineCount++ % maxLines) == 0) {
-- cout << "Press the <Enter> key to see more codes: ";
-+ cout << "Press the <Enter> key to see more codes: " << flush;
- getline(cin, line);
- } // if reached screen line limit
- } // if there's another entry following this one
+@@ -530,7 +530,7 @@ void PartType::ShowAllTypes(int maxLines) const {
+
+ cout.unsetf(ios::uppercase);
+ if (maxLines > 0) {
+- cout << "Type search string, or <Enter> to show all codes: ";
++ cout << "Type search string, or <Enter> to show all codes: " << flush;
+ matchString = ToLower(ReadString());
+ } // if
+ while (thisType != NULL) {
diff --git a/support.cc b/support.cc
index 891caad..645ef5d 100644
--- a/support.cc
+++ b/support.cc
-@@ -123,7 +123,7 @@ uint64_t GetSectorNum(uint64_t low, uint64_t high, uint64_t def, uint64_t sSize,
+@@ -127,7 +127,7 @@ uint64_t GetSectorNum(uint64_t low, uint64_t high, uint64_t def, uint64_t sSize,
char line[255];
do {
PKG_NAME:=haveged
PKG_VERSION:=1.9.8
-PKG_RELEASE:=2
+PKG_RELEASE:=3
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://codeload.github.com/jirka-h/haveged/tar.gz/v$(PKG_VERSION)?
#!/bin/sh /etc/rc.common
-START=13
+START=01
USE_PROCD=1
HAVEGED_THRESHOLD=1024
PKG_NAME:=irqbalance
PKG_VERSION:=1.6.0
-PKG_RELEASE:=6
+PKG_RELEASE:=7
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_PROTO:=git
#!/bin/sh /etc/rc.common
-START=11
+START=90
+STOP=10
+
USE_PROCD=1
+service_triggers()
+{
+ procd_add_reload_trigger "irqbalance"
+}
+
start_service() {
local enabled
config_load 'irqbalance'
procd_set_param respawn
procd_close_instance
}
-
include $(TOPDIR)/rules.mk
PKG_NAME:=libnetwork
-PKG_RELEASE:=3
+PKG_RELEASE:=1
PKG_LICENSE:=Apache-2.0
PKG_LICENSE_FILES:=LICENSE
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://$(GO_PKG)
-PKG_SOURCE_VERSION:=3eb39382bfa6a3c42f83674ab080ae13b0e34e5d
-PKG_SOURCE_DATE:=2019-10-22
-PKG_MIRROR_HASH:=0c2e3c83559b9ac27d2ef953911400957c8634847038c9da83a1fd8769a37a8d
+PKG_SOURCE_VERSION:=9fd385be8302dbe1071a3ce124891893ff27f90f
+PKG_SOURCE_DATE:=2020-01-03
+PKG_MIRROR_HASH:=16cea9d9978b11869029bc9ae0da533c2d7fdf4b9c1f7905bf6c98f443347831
PKG_MAINTAINER:=Gerard Ryan <G.M0N3Y.2503@gmail.com>
include $(TOPDIR)/rules.mk
PKG_NAME:=LVM2
-PKG_VERSION:=2.03.05
+PKG_VERSION:=2.03.08
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME).$(PKG_VERSION).tgz
PKG_SOURCE_URL:=https://sourceware.org/pub/lvm2
-PKG_HASH:=ca52815c999b20c6d25e3192f142f081b93d01f07b9d787e99664b169dba2700
+PKG_HASH:=6e0261dc9f6ab0ef1fc4a63d105a73e06eb536a273a9d6c2ccc414548c8e1ec8
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME).$(PKG_VERSION)
PKG_MAINTAINER:=Daniel Golle <daniel@makrotopia.org>
PKG_LICENSE_FILES:=COPYING COPYING.lib
PKG_CPE_ID:=cpe:/a:heinz_mauelshagen:lvm2
+PKG_BUILD_PARALLEL:=1
+
include $(INCLUDE_DIR)/package.mk
define Package/libdevmapper
endef
CONFIGURE_ARGS += \
- --disable-o_direct \
- --with-default-pid-dir=/var/run \
- --with-default-dm-run-dir=/var/run \
- --with-default-run-dir=/var/run/lvm \
- --with-default-locking-dir=/var/lock/lvm
+ --disable-o_direct \
+ --with-default-pid-dir=/var/run \
+ --with-default-dm-run-dir=/var/run \
+ --with-default-run-dir=/var/run/lvm \
+ --with-default-locking-dir=/var/lock/lvm
define Build/Compile
$(MAKE) -C $(PKG_BUILD_DIR) \
+++ /dev/null
---- a/make.tmpl.in
-+++ b/make.tmpl.in
-@@ -29,7 +29,7 @@ SHELL = @SHELL@
-
- # Allow environment to override any built-in default value for CC.
- # If there is a built-in default, CC is NOT set to @CC@ here.
--CC ?= @CC@
-+CC = @CC@
-
- # If $(CC) holds the usual built-in default value of 'cc' then replace it with
- # the configured value.
+++ /dev/null
---- a/lib/device/dev-type.c
-+++ b/lib/device/dev-type.c
-@@ -25,7 +25,7 @@
- #include <ctype.h>
-
- #ifdef BLKID_WIPING_SUPPORT
--#include <blkid.h>
-+#include <blkid/blkid.h>
- #endif
-
- #ifdef UDEV_SYNC_SUPPORT
--- a/lib/commands/toolcontext.c
+++ b/lib/commands/toolcontext.c
-@@ -1649,7 +1649,7 @@ struct cmd_context *create_toolcontext(unsigned is_clvmd,
+@@ -1599,7 +1599,7 @@ struct cmd_context *create_toolcontext(unsigned is_clvmd,
/* FIXME Make this configurable? */
reset_lvm_errno(1);
/* Set in/out stream buffering before glibc */
if (set_buffering
#ifdef SYS_gettid
-@@ -2031,7 +2031,7 @@ void destroy_toolcontext(struct cmd_context *cmd)
- if (cmd->libmem)
- dm_pool_destroy(cmd->libmem);
+@@ -1980,7 +1980,7 @@ void destroy_toolcontext(struct cmd_context *cmd)
+ if (cmd->pending_delete_mem)
+ dm_pool_destroy(cmd->pending_delete_mem);
-#ifndef VALGRIND_POOL
+#if defined(__GLIBC__) && !defined(VALGRIND_POOL)
if (cmd->linebuffer) {
if (is_valid_fd(STDIN_FILENO) &&
--- a/tools/lvmcmdline.c
+++ b/tools/lvmcmdline.c
-@@ -3055,6 +3055,7 @@ int lvm_split(char *str, int *argc, char **argv, int max)
+@@ -3230,6 +3230,7 @@ int lvm_split(char *str, int *argc, char **argv, int max)
/* Make sure we have always valid filedescriptors 0,1,2 */
static int _check_standard_fds(void)
{
int err = is_valid_fd(STDERR_FILENO);
if (!is_valid_fd(STDIN_FILENO) &&
-@@ -3081,6 +3082,12 @@ static int _check_standard_fds(void)
+@@ -3256,6 +3257,12 @@ static int _check_standard_fds(void)
strerror(errno));
return 0;
}
--- a/lib/device/dev-io.c
+++ b/lib/device/dev-io.c
-@@ -564,7 +564,7 @@ int dev_open_flags(struct device *dev, int flags, int direct, int quiet)
+@@ -374,7 +374,7 @@ int dev_open_flags(struct device *dev, int flags, int direct, int quiet)
return 0;
}
include $(TOPDIR)/rules.mk
PKG_NAME:=runc
-PKG_VERSION:=1.0.0-rc8+91-3e425f80
-PKG_RELEASE:=4
+PKG_VERSION:=1.0.0-rc10
+PKG_RELEASE:=1
PKG_LICENSE:=Apache-2.0
PKG_LICENSE_FILES:=LICENSE
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://github.com/opencontainers/runc
-PKG_MIRROR_HASH:=11dce499b6fbdb159d2ef64b0e9b719ccdf6c59ca1cc7ac0026b1d58547fc187
-PKG_SOURCE_VERSION:=3e425f80a8c931f88e6d94a8c831b9d5aa481657
-PKG_SOURCE_PROTO:=git
-PKG_SOURCE_DATE:=2019-10-15
+PKG_SOURCE_URL:=https://codeload.github.com/opencontainers/runc/tar.gz/v${PKG_VERSION}?
+PKG_HASH:=6b44985023347fb9c5a2cc6f761df8c41cc2c84a7a68a6e6acf834dff6653a9a
+PKG_SOURCE_VERSION:=dc9208a3303feef5b3839f4323d9beb36df0a9dd
PKG_MAINTAINER:=Gerard Ryan <G.M0N3Y.2503@gmail.com>
--- /dev/null
+#
+# Copyright (C) 2010-2016 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:=sed
+PKG_VERSION:=4.8
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
+PKG_SOURCE_URL:=@GNU/sed
+PKG_HASH:=f79b0cfea71b37a8eeec8490db6c5f7ae7719c35587f21edb0617f370eeff633
+
+PKG_MAINTAINER:=Russell Senior <russell@personaltelco.net>
+PKG_LICENSE:=GPL-3.0-or-later
+PKG_LICENSE_FILES:=COPYING
+PKG_CPE_ID:=cpe:/a:gnu:sed
+
+PKG_INSTALL:=1
+PKG_BUILD_PARALLEL:=1
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/sed
+ SECTION:=utils
+ CATEGORY:=Utilities
+ TITLE:=sed stream editor utility - full version
+ DEPENDS:=+libpcre
+ URL:=https://www.gnu.org/software/sed/
+endef
+
+define Package/sed/description
+sed (stream editor) is a non-interactive command-line text editor. sed is commonly
+used to filter text, i.e., it takes text input, performs some operation (or set of
+operations) on it, and outputs the modified text. sed is typically used for
+extracting part of a file using pattern matching or substituting multiple
+occurrences of a string within a file.
+endef
+
+define Package/sed/install
+ $(INSTALL_DIR) $(1)/usr/bin
+ $(CP) $(PKG_INSTALL_DIR)/usr/bin/* $(1)/usr/bin
+endef
+
+CONFIGURE_ARGS+= --disable-acl
+
+define Package/sed/postinst
+#!/bin/sh
+[ -L "$${IPKG_INSTROOT}/bin/sed" ] && rm -f "$${IPKG_INSTROOT}/bin/sed"
+exit 0
+endef
+
+define Package/sed/prerm
+$${IPKG_INSTROOT}/bin/busybox sed -h 2>&1 | grep -q BusyBox && \
+ln -sf busybox $${IPKG_INSTROOT}/bin/sed
+exit 0
+endef
+
+$(eval $(call BuildPackage,sed))
+++ /dev/null
-#
-# Copyright (C) 2019 Jeffery To
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=shinit
-PKG_VERSION:=0.1.0
-PKG_RELEASE:=1
-
-PKG_LICENSE:=GPL-2.0-only
-PKG_MAINTAINER:=Jeffery To <jeffery.to@gmail.com>
-
-include $(INCLUDE_DIR)/package.mk
-
-define Package/shinit
- SECTION:=utils
- CATEGORY:=Utilities
- TITLE:=Initialization for all interactive shells (login or not)
- PKGARCH:=all
-endef
-
-define Package/shinit/description
- This package adds support for /etc/shinit and ~/.shinit files, which
- contain commands to be run at the start of all interactive shells.
- (/etc/profile and ~/.profile are read for login shells only.)
-
- This is useful for those who regularly open non-login, interactive
- shells, for example users of GNU Screen or tmux.
-endef
-
-define Package/shinit/conffiles
-/etc/shinit
-endef
-
-Build/Prepare:=:
-Build/Configure:=:
-Build/Compile:=:
-
-define Package/shinit/install
- $(INSTALL_DIR) $(1)/etc
- $(INSTALL_DATA) ./files/etc/shinit $(1)/etc
-
- $(INSTALL_DIR) $(1)/etc/profile.d
- $(INSTALL_DATA) ./files/etc/profile.d/shinit.sh $(1)/etc/profile.d
-endef
-
-$(eval $(call BuildPackage,shinit))
+++ /dev/null
-export ENV=/etc/shinit
+++ /dev/null
-[ -x /bin/more ] || alias more=less
-[ -x /usr/bin/vim ] && alias vi=vim || alias vim=vi
-
-alias ll='ls -alF --color=auto'
-
-# If you use mksh and want to source /etc/mkshrc for all interactive shells,
-# uncomment the following line and comment out the same line in /etc/profile.
-#[ -z "$KSH_VERSION" -o \! -s /etc/mkshrc ] || . /etc/mkshrc
-
-[ -x /usr/bin/arp -o -x /sbin/arp ] || arp() { cat /proc/net/arp; }
-[ -x /usr/bin/ldd ] || ldd() { LD_TRACE_LOADED_OBJECTS=1 $*; }
-
-service() {
- [ -f "/etc/init.d/$1" ] || {
- echo "service "'"'"$1"'"'" not found, the following services are available:"
- ls "/etc/init.d"
- return 1
- }
- /etc/init.d/$@
-}
-
-[ -n "$KSH_VERSION" -o \! -s "$HOME/.shinit" ] || . "$HOME/.shinit"
-[ -z "$KSH_VERSION" -o \! -s "$HOME/.mkshrc" ] || . "$HOME/.mkshrc"
include $(TOPDIR)/rules.mk
PKG_NAME:=sispmctl
-PKG_VERSION:=4.2
-PKG_RELEASE:=2
+PKG_VERSION:=4.4
+PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=@SF/$(PKG_NAME)
-PKG_HASH:=300adc32ab35a4f9260705f8f57ccd83c3c6601fc493dbe7d259335938819aaf
+PKG_HASH:=824a2317205c34693e989a9958d72eef61f72aa331ffb3ca2c2c45dc880984ad
PKG_MAINTAINER:=Rosen Penev <rosenp@gmail.com>
PKG_LICENSE:=GPL-2.0-or-later
PKG_NAME:=smartmontools
PKG_VERSION:=7.1
-PKG_RELEASE:=2
+PKG_RELEASE:=3
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=@SF/smartmontools
START=95
-start() {
- service_start /usr/sbin/smartd -q never
-}
+USE_PROCD=1
+PROG=/usr/sbin/smartd
-stop() {
- service_stop /usr/sbin/smartd
+start_service() {
+ procd_open_instance
+ procd_set_param command "$PROG"
+ procd_append_param command -n -q never
+ procd_close_instance
}
-reload() {
- service_reload /usr/sbin/smartd
+reload_service() {
+ procd_send_signal smartd
}
PKG_NAME:=syncthing
PKG_VERSION:=1.3.4
-PKG_RELEASE:=1
+PKG_RELEASE:=2
PKG_SOURCE:=syncthing-source-v$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://github.com/syncthing/syncthing/releases/download/v$(PKG_VERSION)
+
config syncthing 'syncthing'
- option gui_address 'http://127.0.0.1:8384'
- option home '/etc/syncthing/'
+ option enabled '0'
+
+ option gui_address 'http://127.0.0.1:8384'
+ option home '/etc/syncthing/'
+
#!/bin/sh /etc/rc.common
-START=99
+START=90
+STOP=10
+
+USE_PROCD=1
+NICEPRIO=19
PROG=/usr/bin/syncthing
start_service() {
[ -d /var/syncthing/ ] || mkdir /var/syncthing/
- local gui_address home
+ local gui_address home enabled
config_load "syncthing"
+
+ # The first version had the service enabled by default,
+ # so preserving the old behaviour
+ config_get_bool enabled syncthing enabled 1
+ [ "$enabled" -gt 0 ] || return 0
+
config_get gui_address syncthing gui_address "http://127.0.0.1:8384"
config_get home syncthing home "/etc/syncthing/"
procd_append_param command -gui-address="$gui_address"
procd_append_param command -home="$home"
procd_set_param respawn
+ procd_set_param nice "$NICEPRIO"
procd_close_instance
}