diff --git a/community/jack2/40-hpet-permissions.rules b/community/jack2/40-hpet-permissions.rules new file mode 100644 index 000000000..7af3780f9 --- /dev/null +++ b/community/jack2/40-hpet-permissions.rules @@ -0,0 +1,2 @@ +KERNEL=="rtc0", GROUP="audio" +KERNEL=="hpet", GROUP="audio" diff --git a/community/jack2/99-audio.conf b/community/jack2/99-audio.conf new file mode 100644 index 000000000..eb76ef920 --- /dev/null +++ b/community/jack2/99-audio.conf @@ -0,0 +1,2 @@ +@audio - rtprio 99 +@audio - memlock unlimited diff --git a/community/jack2/PKGBUILD b/community/jack2/PKGBUILD new file mode 100644 index 000000000..ebbeb9ce0 --- /dev/null +++ b/community/jack2/PKGBUILD @@ -0,0 +1,151 @@ +# $Id$ +# Maintainer: Ray Rashif +# Contributor: Daniele Paolella +# Contributor: Philipp Überbacher +# Contributor: Thomas Bahn + +# ALARM: Kevin Mihelich +# - modified upstream patch for AArch64: +# https://github.com/jackaudio/jack2/commit/693451c36106542c5c5b5ba46d5d89aec783252e + +pkgbase=jack2 +pkgname=('jack2' 'jack2-dbus') +#pkgname= # single build (overrides split) +_tarname=jack +pkgver=1.9.10 +pkgrel=6.1 +arch=('i686' 'x86_64') +url="http://jackaudio.org/" +backup=(etc/security/limits.d/99-audio.conf) +license=('GPL') +makedepends=('python2-dbus' 'libffado' 'celt' 'opus' 'libsamplerate') +source=("https://dl.dropbox.com/u/28869550/jack-$pkgver.tar.bz2" + '99-audio.conf' + '40-hpet-permissions.rules' + 'jack1compat.diff' + 'gcc6.patch' + 'aarch64.patch') +md5sums=('4aeb91d7ae0cabce98355436ed4f217a' + 'ae65b7c9ebe0fff6c918ba9d97ae342d' + '471aad533ff56c5d3cbbf65ce32cadef' + '8c367d60a6375ebacf0d53ad651a0486' + '2a28b64d7672f9c38dd777e380b81291' + 'bc182b43d293c066293a65e950894249') + +_isbuild() { + printf "%s\n" ${pkgname[@]} | grep -qx $1 +} + +_pyfix() { + sed -i 's:bin/env python:bin/env python2:' \ + "$pkgdir/usr/bin/jack_control" +} + +_wafconf() { + python2 waf configure --prefix=/usr \ + --alsa \ + --firewire $@ + + # not building with doxygen + # see https://github.com/jackaudio/jack2/issues/22 +} + +prepare() { + cd "$srcdir" + + # Some optimisation bug exists for current GCC + # see http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53663 + #export CFLAGS="${CFLAGS/-O[0-9]/-O0}" + #export CXXFLAGS="$CFLAGS" + + # fix doxygen building + # TODO: report upstream, but redundant until github issue 22 resolves + #sed -i 's:build/default/html:html:' $_tarname-$pkgver/wscript + + + ( + cd $_tarname-$pkgver + patch -Np1 -i $srcdir/gcc6.patch + + # see https://bugs.archlinux.org/task/47839 + patch -Np1 -i $srcdir/jack1compat.diff + + # upstream AArch64 patch + patch -Np1 -i $srcdir/aarch64.patch + ) + + # we may do 2 different builds + cp -r $_tarname-$pkgver $_tarname-dbus-$pkgver + +} + +build() { + cd "$srcdir" + + # mixed dbus/classic build + if _isbuild jack2; then + cd $_tarname-$pkgver + msg2 "Running Mixed D-Bus/Classic build" + _wafconf --classic --dbus + python2 waf build $MAKEFLAGS + cd .. + fi + + # dbus-ONLY build + if _isbuild jack2-dbus; then + cd $_tarname-dbus-$pkgver + msg2 "Running D-Bus-only build" + _wafconf --dbus + python2 waf build $MAKEFLAGS + cd .. + fi +} + +package_jack2() { + ! _isbuild jack2 && return 0 + + pkgdesc="The next-generation JACK with SMP support" + depends=('libsamplerate' 'celt' 'opus' 'libffado') + optdepends=('python2-dbus: jack_control') + conflicts=('jack') + provides=('jack' 'jackmp' 'jackdmp' 'jackdbus') + + cd "$srcdir/$_tarname-$pkgver" + + python2 waf install --destdir="$pkgdir" + + # fix for major python transition + _pyfix + + # configure realtime access/scheduling + # see https://bugs.archlinux.org/task/26343 + install -Dm644 "$srcdir/99-audio.conf" \ + "$pkgdir/etc/security/limits.d/99-audio.conf" + + install -Dm644 "$srcdir/40-hpet-permissions.rules" \ + "$pkgdir/usr/lib/udev/rules.d/40-hpet-permissions.rules" +} + +package_jack2-dbus() { + ! _isbuild jack2-dbus && return 0 + + pkgdesc="The next-generation JACK with SMP support (for D-BUS interaction only)" + depends=('libsamplerate' 'celt' 'opus' 'libffado') + optdepends=('python2-dbus: jack_control') + conflicts=('jack' 'jack2') + provides=('jack' 'jack2' 'jackmp' 'jackdmp' 'jackdbus') + + cd "$srcdir/$_tarname-dbus-$pkgver" + + python2 waf install --destdir="$pkgdir" + + _pyfix + + install -Dm644 "$srcdir/99-audio.conf" \ + "$pkgdir/etc/security/limits.d/99-audio.conf" + + install -Dm644 "$srcdir/40-hpet-permissions.rules" \ + "$pkgdir/usr/lib/udev/rules.d/40-hpet-permissions.rules" +} + +# vim:set ts=2 sw=2 et: diff --git a/community/jack2/aarch64.patch b/community/jack2/aarch64.patch new file mode 100644 index 000000000..4e0fe8c2c --- /dev/null +++ b/community/jack2/aarch64.patch @@ -0,0 +1,15 @@ +diff -urN a/common/jack/systemdeps.h b/common/jack/systemdeps.h +--- a/common/jack/systemdeps.h 2014-07-18 06:28:12.000000000 -0600 ++++ b/common/jack/systemdeps.h 2017-02-26 20:45:07.087664517 -0700 +@@ -120,9 +120,9 @@ + + #endif /* __APPLE__ || __linux__ || __sun__ || sun */ + +-#if defined(__arm__) ++#if defined(__arm__) || defined(__aarch64__) + #undef POST_PACKED_STRUCTURE + #define POST_PACKED_STRUCTURE +-#endif /* __arm__ */ ++#endif /* __arm__ || __aarch64__ */ + + #endif /* __jack_systemdeps_h__ */ diff --git a/community/jack2/gcc6.patch b/community/jack2/gcc6.patch new file mode 100644 index 000000000..ba7778ba5 --- /dev/null +++ b/community/jack2/gcc6.patch @@ -0,0 +1,62 @@ +From ff1ed2c4524095055140370c1008a2d9cccc5645 Mon Sep 17 00:00:00 2001 +From: Adrian Knoth +Date: Sat, 11 Jun 2016 05:35:07 +0200 +Subject: [PATCH] Fix initialization in test/iodelay.cpp + +jack_latency_range_t is + +struct _jack_latency_range { + jack_nframes_t min; + jack_nframes_t max; +}; + +and jack_nframes_t is + +typedef uint32_t jack_nframes_t; + +so it's unsigned. Initialising it with -1 is invalid (at least in C++14). We cannot use {0, 0}, because latency_cb has + + jack_latency_range_t range; + range.min = range.max = 0; + if ((range.min != capture_latency.min) || (range.max != + capture_latency.max)) { + capture_latency = range; + } + +so we must not have {0, 0}, otherwise the condition would never be true. + +Using UINT32_MAX should be equivalent to the previous -1. +--- + tests/iodelay.cpp | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +diff --git a/tests/iodelay.cpp b/tests/iodelay.cpp +index e1ba63f..1ef470f 100644 +--- a/tests/iodelay.cpp ++++ b/tests/iodelay.cpp +@@ -20,6 +20,7 @@ + + #include + #include ++#include + #include + #include + #include +@@ -167,8 +168,8 @@ static jack_client_t *jack_handle; + static jack_port_t *jack_capt; + static jack_port_t *jack_play; + +-jack_latency_range_t capture_latency = {-1, -1}; +-jack_latency_range_t playback_latency = {-1, -1}; ++jack_latency_range_t capture_latency = {UINT32_MAX, UINT32_MAX}; ++jack_latency_range_t playback_latency = {UINT32_MAX, UINT32_MAX}; + + void + latency_cb (jack_latency_callback_mode_t mode, void *arg) +@@ -266,4 +267,4 @@ int main (int ac, char *av []) + return 0; + } + +-// -------------------------------------------------------------------------------- +\ No newline at end of file ++// -------------------------------------------------------------------------------- diff --git a/community/jack2/jack1compat.diff b/community/jack2/jack1compat.diff new file mode 100644 index 000000000..d14b3e1dc --- /dev/null +++ b/community/jack2/jack1compat.diff @@ -0,0 +1,33 @@ +diff --git a/common/jack/types.h b/common/jack/types.h +index 094d407..2dccf34 100644 +--- a/common/jack/types.h ++++ b/common/jack/types.h +@@ -403,10 +403,8 @@ typedef void (*JackPortConnectCallback)(jack_port_id_t a, jack_port_id_t b, int + * @param port the port that has been renamed + * @param new_name the new name + * @param arg pointer to a client supplied structure +- * +- * @return zero on success, non-zero on error + */ +-typedef int (*JackPortRenameCallback)(jack_port_id_t port, const char* old_name, const char* new_name, void *arg); ++typedef void (*JackPortRenameCallback)(jack_port_id_t port, const char* old_name, const char* new_name, void *arg); + + /** + * Prototype for the client supplied function that is called +diff --git a/tests/test.cpp b/tests/test.cpp +index 750d152..8a8a811 100644 +--- a/tests/test.cpp ++++ b/tests/test.cpp +@@ -186,11 +186,10 @@ void Jack_Client_Registration_Callback(const char* name, int val, void *arg) + client_register--; + } + +-int Jack_Port_Rename_Callback(jack_port_id_t port, const char* old_name, const char* new_name, void *arg) ++void Jack_Port_Rename_Callback(jack_port_id_t port, const char* old_name, const char* new_name, void *arg) + { + Log("Rename callback has been successfully called with old_name '%s' and new_name '%s'. (msg from callback)\n", old_name, new_name); + port_rename_clbk = 1; +- return 0; + } + + int Jack_Update_Buffer_Size(jack_nframes_t nframes, void *arg)