From e68f87191d2765c3686883b4763ba811e6826ec8 Mon Sep 17 00:00:00 2001
From: James Meyer <james.meyer@operamail.com>
Date: Tue, 7 Aug 2012 14:55:12 -0500
Subject: libffado 2.0.1

---
 abs/extra/libffado/60-ffado.rules              | 27 +++++++++++
 abs/extra/libffado/PKGBUILD                    | 35 +++++++++-----
 abs/extra/libffado/fix-segfault-on-close.patch | 64 ++++++++++++++++++++++++++
 abs/extra/libffado/libffado-gcc47.patch        | 55 ++++++++++++++++++++++
 4 files changed, 170 insertions(+), 11 deletions(-)
 create mode 100644 abs/extra/libffado/60-ffado.rules
 create mode 100644 abs/extra/libffado/fix-segfault-on-close.patch
 create mode 100644 abs/extra/libffado/libffado-gcc47.patch

diff --git a/abs/extra/libffado/60-ffado.rules b/abs/extra/libffado/60-ffado.rules
new file mode 100644
index 0000000..6ab8ef8
--- /dev/null
+++ b/abs/extra/libffado/60-ffado.rules
@@ -0,0 +1,27 @@
+SUBSYSTEM!="firewire", GOTO="ffado_end"
+
+ATTR{vendor}=="0x000166", GROUP="audio", ENV{ID_FFADO}="1" # TC GROUP A/S
+ATTR{vendor}=="0x0001f2", GROUP="audio", ENV{ID_FFADO}="1" # Mark of the Unicorn, Inc.
+ATTR{vendor}=="0x0003db", GROUP="audio", ENV{ID_FFADO}="1" # Apogee Electronics Corp.
+ATTR{vendor}=="0x000595", GROUP="audio", ENV{ID_FFADO}="1" # Alesis Corporation
+ATTR{vendor}=="0x0007f5", GROUP="audio", ENV{ID_FFADO}="1" # Bridgeco Co AG
+ATTR{vendor}=="0x000a92", GROUP="audio", ENV{ID_FFADO}="1" # Presonus Corporation
+ATTR{vendor}=="0x000aac", GROUP="audio", ENV{ID_FFADO}="1" # TerraTec Electronic GmbH
+ATTR{vendor}=="0x000d6c", GROUP="audio", ENV{ID_FFADO}="1" # M-Audio
+ATTR{vendor}=="0x000f1b", GROUP="audio", ENV{ID_FFADO}="1" # Ego Systems Inc.
+ATTR{vendor}=="0x000ff2", GROUP="audio", ENV{ID_FFADO}="1" # Loud Technologies Inc.
+ATTR{vendor}=="0x001260", GROUP="audio", ENV{ID_FFADO}="1" # Stanton Magnetics,inc.
+ATTR{vendor}=="0x00130e", GROUP="audio", ENV{ID_FFADO}="1" # Focusrite Audio Engineering Limited
+ATTR{vendor}=="0x001486", GROUP="audio", ENV{ID_FFADO}="1" # Echo Digital Audio Corporation
+ATTR{vendor}=="0x001564", GROUP="audio", ENV{ID_FFADO}="1" # BEHRINGER Spezielle Studiotechnik GmbH
+ATTR{vendor}=="0x001c2d", GROUP="audio", ENV{ID_FFADO}="1" # FlexRadio Systems
+ATTR{vendor}=="0x001c6a", GROUP="audio", ENV{ID_FFADO}="1" # Weiss Engineering Ltd.
+ATTR{vendor}=="0x0040ab", GROUP="audio", ENV{ID_FFADO}="1" # ROLAND DG CORPORATION
+
+# The devices below abuse another Vendor's ID, and therefore we need more advanced rules for those.
+
+ATTR{vendor}=="0x00000a", ATTR{model}=="0x030000", ATTR{units}=="*0x00a02d:0x010001*", GROUP="audio", ENV{ID_FFADO}="1" # CME, Matrix K FW
+ATTR{vendor}=="0x00000f", ATTR{model}=="0x01006?", ATTR{units}=="*0x00a02d:0x010001*", GROUP="audio", ENV{ID_FFADO}="1" # Mackie, Onyx Firewire
+ATTR{vendor}=="0x000a35", ATTR{units}=="0x000a35:0x00000[12]", GROUP="audio", ENV{ID_FFADO}="1" # RME
+
+LABEL="ffado_end"
diff --git a/abs/extra/libffado/PKGBUILD b/abs/extra/libffado/PKGBUILD
index 4111264..772ebec 100644
--- a/abs/extra/libffado/PKGBUILD
+++ b/abs/extra/libffado/PKGBUILD
@@ -1,26 +1,34 @@
-# $Id: PKGBUILD 96817 2010-10-24 22:17:33Z schiv $
-# Maintainer: Ray Rashif <schivmeister@gmail.com>
+# $Id: PKGBUILD 157813 2012-04-30 03:19:10Z heftig $
+# Maintainer: Ray Rashif <schiv@archlinux.org>
 # Contributor: galiyosha@gmail.com
 # Contributor: Jon Kristian Nilsen <jokr.nilsen@gmail.com>
 
 pkgname=libffado
 pkgver=2.0.1
-pkgrel=2
+pkgrel=7
 pkgdesc="Driver for FireWire audio devices"
 arch=('i686' 'x86_64')
 url="http://www.ffado.org/"
 license=('GPL')
 depends=('libiec61883' 'libavc1394' 'libsigc++'
-          'libxml++' 'alsa-lib' 'dbus')
-makedepends=('scons' 'pyqt')
-optdepends=('pyqt: mixer applet')
+         'libxml++' 'alsa-lib' 'dbus')
+makedepends=('scons' 'python2-pyqt')
+optdepends=('python2: ffado-diag'
+            'python2-pyqt: mixer applet')
 provides=('ffado')
-source=(http://www.ffado.org/files/$pkgname-$pkgver.tar.gz)
-md5sums=('786f31facd417e6207e429f50af0e15e')
+source=("http://www.ffado.org/files/$pkgname-$pkgver.tar.gz"
+        "libffado-gcc47.patch" "fix-segfault-on-close.patch" '60-ffado.rules')
+md5sums=('786f31facd417e6207e429f50af0e15e'
+         '287bb3f506e31626c4b8f91f0e1d9407'
+         'ac9763cb2dc2f3eb4e1894e30645c6f1'
+         'f03a3e950801c4405b8934084651bca8')
 
 build() {
   cd "$srcdir/$pkgname-$pkgver"
 
+  patch -p1 -i "$srcdir"/libffado-gcc47.patch
+  patch -p3 -i "$srcdir"/fix-segfault-on-close.patch
+
   # hack to use CFLAGS without optimising
   sed -i 's/-O2//g' SConstruct
 
@@ -35,13 +43,18 @@ build() {
   sed -i 's:python support/tools:python2 support/tools:' \
     support/tools/SConscript
 
-  scons PREFIX=/usr #ENABLE_OPTIMIZATIONS=True
+  scons PREFIX=/usr
 }
 
 package() {
   cd "$srcdir/$pkgname-$pkgver"
 
-  scons DESTDIR="$pkgdir/" WILL_DEAL_WITH_XDG_MYSELF="True" install
+  scons DESTDIR="$pkgdir" WILL_DEAL_WITH_XDG_MYSELF="True" install
+
+  # add audio device rules
+  # see https://bugs.archlinux.org/task/26342
+  install -Dm644 "$srcdir/60-ffado.rules" \
+    "$pkgdir/usr/lib/udev/rules.d/60-ffado.rules"
 
   # python2 fix
   for i in $(grep '^#!.*bin.*python' -R "$pkgdir" | sed 's/:.*//'); do
@@ -53,7 +66,7 @@ package() {
     "$pkgdir/usr/share/applications/ffadomixer.desktop"
 
   install -Dm644 support/xdg/hi64-apps-ffado.png \
-	      "$pkgdir/usr/share/pixmaps/$pkgname.png"
+    "$pkgdir/usr/share/pixmaps/$pkgname.png"
 }
 
 # vim:set ts=2 sw=2 et:
diff --git a/abs/extra/libffado/fix-segfault-on-close.patch b/abs/extra/libffado/fix-segfault-on-close.patch
new file mode 100644
index 0000000..c81b97e
--- /dev/null
+++ b/abs/extra/libffado/fix-segfault-on-close.patch
@@ -0,0 +1,64 @@
+Index: /trunk/libffado/src/debugmodule/debugmodule.h
+===================================================================
+--- /trunk/libffado/src/debugmodule/debugmodule.h (revision 1763)
++++ /trunk/libffado/src/debugmodule/debugmodule.h (revision 1999)
+@@ -283,6 +283,10 @@
+ void hexDumpQuadlets( quadlet_t *data_start, unsigned int length );
+ 
++class DebugModuleManager;
++
+ class DebugModule {
+ public:
++    friend class DebugModuleManager;
++
+     enum {
+         eDL_Message      = DEBUG_LEVEL_MESSAGE,
+@@ -333,4 +337,5 @@
+     std::string   m_name;
+     debug_level_t m_level;
++    DebugModuleManager* m_manager;
+ };
+ 
+Index: /trunk/libffado/src/debugmodule/debugmodule.cpp
+===================================================================
+--- /trunk/libffado/src/debugmodule/debugmodule.cpp (revision 1763)
++++ /trunk/libffado/src/debugmodule/debugmodule.cpp (revision 1999)
+@@ -84,5 +84,6 @@
+ //              << endl;
+ //     }
+-    if ( !DebugModuleManager::instance()->unregisterModule( *this ) ) {
++
++    if (m_manager && !m_manager->unregisterModule( *this ) ) {
+         cerr << "Could not unregister DebugModule at DebugModuleManager"
+              << endl;
+@@ -263,12 +264,9 @@
+ DebugModuleManager::~DebugModuleManager()
+ {
+-    // cleanin up leftover modules
+-    for ( DebugModuleVectorIterator it = m_debugModules.begin();
+-          it != m_debugModules.end();
+-          ++it )
++    // cleaning up leftover modules
++    while (!m_debugModules.empty())
+     {
+-        fprintf(stderr,"Cleaning up leftover debug module: %s\n",(*it)->getName().c_str());
+-        m_debugModules.erase( it );
+-        delete *it;
++        DebugModule *mod = m_debugModules.back();
++        unregisterModule(*mod);
+     }
+ 
+@@ -455,4 +453,6 @@
+     } else {
+         m_debugModules.push_back( &debugModule );
++        if (debugModule.m_manager == NULL)
++                debugModule.m_manager = this;
+     }
+     return true;
+@@ -469,4 +469,6 @@
+         if ( *it == &debugModule ) {
+             m_debugModules.erase( it );
++            if (debugModule.m_manager == this)
++                debugModule.m_manager = NULL;
+             return true;
+         }
diff --git a/abs/extra/libffado/libffado-gcc47.patch b/abs/extra/libffado/libffado-gcc47.patch
new file mode 100644
index 0000000..f296956
--- /dev/null
+++ b/abs/extra/libffado/libffado-gcc47.patch
@@ -0,0 +1,55 @@
+diff -Naur libffado-2.0.1-old/src/bebob/bebob_dl_mgr.cpp libffado-2.0.1/src/bebob/bebob_dl_mgr.cpp
+--- libffado-2.0.1-old/src/bebob/bebob_dl_mgr.cpp	2009-05-17 23:42:38.000000000 +1000
++++ libffado-2.0.1/src/bebob/bebob_dl_mgr.cpp	2012-04-29 15:26:29.011454798 +1000
+@@ -35,6 +35,7 @@
+ 
+ #include <cstdio>
+ #include <cstring>
++#include <unistd.h>
+ 
+ namespace BeBoB {
+     enum {
+diff -Naur libffado-2.0.1-old/src/ffadodevice.cpp libffado-2.0.1/src/ffadodevice.cpp
+--- libffado-2.0.1-old/src/ffadodevice.cpp	2008-11-23 21:25:32.000000000 +1000
++++ libffado-2.0.1/src/ffadodevice.cpp	2012-04-29 15:26:54.883998052 +1000
+@@ -34,6 +34,7 @@
+ 
+ #include <iostream>
+ #include <sstream>
++#include <unistd.h>
+ 
+ #include <assert.h>
+ 
+diff -Naur libffado-2.0.1-old/src/fireworks/fireworks_device.cpp libffado-2.0.1/src/fireworks/fireworks_device.cpp
+--- libffado-2.0.1-old/src/fireworks/fireworks_device.cpp	2009-11-23 00:40:08.000000000 +1000
++++ libffado-2.0.1/src/fireworks/fireworks_device.cpp	2012-04-29 15:27:24.123105334 +1000
+@@ -44,6 +44,7 @@
+ #define FIREWORKS_MIN_FIRMWARE_VERSION 0x04080000
+ 
+ #include <sstream>
++#include <unistd.h>
+ using namespace std;
+ 
+ // FireWorks is the platform used and developed by ECHO AUDIO
+diff -Naur libffado-2.0.1-old/src/libieee1394/IsoHandlerManager.cpp libffado-2.0.1/src/libieee1394/IsoHandlerManager.cpp
+--- libffado-2.0.1-old/src/libieee1394/IsoHandlerManager.cpp	2010-04-18 05:15:54.000000000 +1000
++++ libffado-2.0.1/src/libieee1394/IsoHandlerManager.cpp	2012-04-29 15:27:44.515816147 +1000
+@@ -34,6 +34,7 @@
+ #include "libutil/Configuration.h"
+ 
+ #include <cstring>
++#include <unistd.h>
+ #include <assert.h>
+ 
+ IMPL_DEBUG_MODULE( IsoHandlerManager, IsoHandlerManager, DEBUG_LEVEL_NORMAL );
+diff -Naur libffado-2.0.1-old/support/dbus/test-dbus.cpp libffado-2.0.1/support/dbus/test-dbus.cpp
+--- libffado-2.0.1-old/support/dbus/test-dbus.cpp	2008-04-27 03:30:41.000000000 +1000
++++ libffado-2.0.1/support/dbus/test-dbus.cpp	2012-04-29 15:28:31.531047923 +1000
+@@ -24,6 +24,7 @@
+ #include <argp.h>
+ #include <stdlib.h>
+ #include <iostream>
++#include <unistd.h>
+ #include <signal.h>
+ 
+ #include "controlclient.h"
-- 
cgit v0.12