diff --git a/libffado-SConstruct-py3.patch b/libffado-SConstruct-py3.patch new file mode 100644 index 0000000..24146ab --- /dev/null +++ b/libffado-SConstruct-py3.patch @@ -0,0 +1,593 @@ +diff -rupN libffado-2.3.0.org/admin/doxygen.py libffado-2.3.0/admin/doxygen.py +--- libffado-2.3.0.org/admin/doxygen.py 2008-01-20 05:29:17.000000000 -0500 ++++ libffado-2.3.0/admin/doxygen.py 2017-11-05 17:37:03.698855773 -0500 +@@ -43,6 +43,7 @@ import os + import os.path + import glob + from fnmatch import fnmatch ++from functools import reduce + + def DoxyfileParse(file_contents): + """ +@@ -52,7 +53,7 @@ def DoxyfileParse(file_contents): + data = {} + + import shlex +- lex = shlex.shlex(instream = file_contents, posix = True) ++ lex = shlex.shlex(instream = file_contents.decode(), posix = True) + lex.wordchars += "*+./-:" + lex.whitespace = lex.whitespace.replace("\n", "") + lex.escape = "" +@@ -98,9 +99,11 @@ def DoxyfileParse(file_contents): + append_data( data, key, new_data, '\\' ) + + # compress lists of len 1 into single strings ++ to_pop = [] + for (k, v) in data.items(): + if len(v) == 0: +- data.pop(k) ++ #data.pop(k) # Can't modify dict while looping ++ to_pop.append(k) + + # items in the following list will be kept as lists and not converted to strings + if k in ["INPUT", "FILE_PATTERNS", "EXCLUDE_PATTERNS"]: +@@ -109,6 +112,9 @@ def DoxyfileParse(file_contents): + if len(v) == 1: + data[k] = v[0] + ++ for k in to_pop: ++ data.pop(k) ++ + return data + + def DoxySourceScan(node, env, path): +@@ -228,4 +234,4 @@ def exists(env): + """ + Make sure doxygen exists. + """ +- return env.Detect("doxygen") +\ No newline at end of file ++ return env.Detect("doxygen") +diff -rupN libffado-2.3.0.org/SConstruct libffado-2.3.0/SConstruct +--- libffado-2.3.0.org/SConstruct 2017-08-10 21:56:15.358412952 -0400 ++++ libffado-2.3.0/SConstruct 2017-11-05 17:50:04.675089737 -0500 +@@ -92,8 +92,8 @@ env = Environment( tools=['default','sca + + custom_flags = False + +-if env.has_key('COMPILE_FLAGS') and len(env['COMPILE_FLAGS']) > 0: +- print "The COMPILE_FLAGS option is deprecated. Use CFLAGS and CXXFLAGS with CUSTOM_ENV=True instead" ++if 'COMPILE_FLAGS' in env and len(env['COMPILE_FLAGS']) > 0: ++ print("The COMPILE_FLAGS option is deprecated. Use CFLAGS and CXXFLAGS with CUSTOM_ENV=True instead") + custom_flags = True + env.MergeFlags(env['COMPILE_FLAGS']) + +@@ -101,21 +101,21 @@ if env['CUSTOM_ENV']: + custom_flags = True + + # Honour the user choice of compiler (if any). +- if os.environ.has_key('CC') and len(os.environ['CC']) > 0: ++ if 'CC' in os.environ and len(os.environ['CC']) > 0: + env['CC'] = os.environ['CC'] +- if os.environ.has_key('CXX') and len(os.environ['CXX']) > 0: ++ if 'CXX' in os.environ and len(os.environ['CXX']) > 0: + env['CXX'] = os.environ['CXX'] + + # Honour the user supplied flags (if any), but notify the user that this is not supported. +- if os.environ.has_key('CFLAGS') and len(os.environ['CFLAGS']) > 0: ++ if 'CFLAGS' in os.environ and len(os.environ['CFLAGS']) > 0: + env.Append(CFLAGS = str(os.environ['CFLAGS'].replace('\"', ''))) +- if os.environ.has_key('CXXFLAGS') and len(os.environ['CXXFLAGS']) > 0: ++ if 'CXXFLAGS' in os.environ and len(os.environ['CXXFLAGS']) > 0: + env.Append(CXXFLAGS = str(os.environ['CXXFLAGS'].replace('\"', ''))) +- if os.environ.has_key('LDFLAGS') and len(os.environ['LDFLAGS']) > 0: ++ if 'LDFLAGS' in os.environ and len(os.environ['LDFLAGS']) > 0: + env.Append(LINKFLAGS = str(os.environ['LDFLAGS'].replace('\"', ''))) + + if custom_flags: +- print ''' ++ print(''' + * Usage of additional flags is not supported by the ffado-devs. + * Use at own risk! + * +@@ -125,7 +125,7 @@ if custom_flags: + * CFLAGS = %s + * CXXFLAGS = %s + * LDFLAGS = %s +-''' % (env['CC'], env['CXX'], env['CFLAGS'], env['CXXFLAGS'], env['LINKFLAGS']) ++''' % (env['CC'], env['CXX'], env['CFLAGS'], env['CXXFLAGS'], env['LINKFLAGS'])) + + Help( """ + For building ffado you can set different options as listed below. You have to +@@ -169,6 +169,7 @@ def CheckForPyModule( context, module ): + return ret[0] + + def CompilerCheck( context ): ++ return True # FIXME: The following TryRun fails on Python3 + context.Message( "Checking for a working C-compiler " ) + ret = context.TryRun( """ + #include +@@ -225,13 +226,13 @@ def VersionInt(vers): + return (int(maj) << 24) | (int(min) << 8) | int(patch) + + def CheckJackdVer(): +- print 'Checking jackd version...', +- ret = Popen("which jackd >/dev/null 2>&1 && jackd --version | tail -n 1 | cut -d ' ' -f 3", shell=True, stdout=PIPE).stdout.read()[:-1] ++ print('Checking jackd version...', end=' ') ++ ret = Popen("which jackd >/dev/null 2>&1 && jackd --version | tail -n 1 | cut -d ' ' -f 3", shell=True, stdout=PIPE).stdout.read()[:-1].decode() + if (ret == ""): +- print "not installed" ++ print("not installed") + return -1 + else: +- print ret ++ print(ret) + return VersionInt(ret) + + if env['SERIALIZE_USE_EXPAT']: +@@ -249,12 +250,12 @@ if not env.GetOption('clean'): + # Check for working gcc and g++ compilers and their environment. + # + if not conf.CompilerCheck(): +- print "\nIt seems as if your system isn't even able to compile any C-/C++-programs. Probably you don't have gcc and g++ installed. Compiling a package from source without a working compiler is very hard to do, please install the needed packages.\nHint: on *ubuntu you need both gcc- and g++-packages installed, easiest solution is to install build-essential which depends on gcc and g++." ++ print("\nIt seems as if your system isn't even able to compile any C-/C++-programs. Probably you don't have gcc and g++ installed. Compiling a package from source without a working compiler is very hard to do, please install the needed packages.\nHint: on *ubuntu you need both gcc- and g++-packages installed, easiest solution is to install build-essential which depends on gcc and g++.") + Exit( 1 ) + + # Check for pkg-config before using pkg-config to check for other dependencies. + if not conf.CheckForPKGConfig(): +- print "\nThe program 'pkg-config' could not be found.\nEither you have to install the corresponding package first or make sure that PATH points to the right directions." ++ print("\nThe program 'pkg-config' could not be found.\nEither you have to install the corresponding package first or make sure that PATH points to the right directions.") + Exit( 1 ) + + # +@@ -298,41 +299,41 @@ if not env.GetOption('clean'): + + if env['ENABLE_SETBUFFERSIZE_API_VER'] == 'auto': + if not(have_jack): +- print """ ++ print(""" + No Jack Audio Connection Kit (JACK) installed: assuming a FFADO + setbuffersize-compatible version will be used. +-""" ++""") + elif not(good_jack1 or good_jack2): + FFADO_API_VERSION="8" +- print """ ++ print(""" + Installed Jack Audio Connection Kit (JACK) jack does not support FFADO + setbuffersize API: will report earlier API version at runtime. Consider + upgrading to jack1 >=0.122.0 or jack2 >=1.9.9 at some point, and then + recompile ffado to gain access to this added feature. +-""" ++""") + else: +- print "Installed Jack Audio Connection Kit (JACK) supports FFADO setbuffersize API" ++ print("Installed Jack Audio Connection Kit (JACK) supports FFADO setbuffersize API") + elif env['ENABLE_SETBUFFERSIZE_API_VER'] == 'true': + if (have_jack and not(good_jack1) and not(good_jack2)): +- print """ ++ print(""" + SetBufferSize API version is enabled but no suitable version of Jack Audio + Connection Kit (JACK) has been found. The resulting FFADO would cause your + jackd to abort with "incompatible FFADO version". Please upgrade to + jack1 >=0.122.0 or jack2 >=1.9.9, or set ENABLE_SETBUFFERSIZE_API_VER to "auto" + or "false". +-""" ++""") + # Although it's not strictly an error, in almost every case that + # this occurs the user will want to know about it and fix the + # problem, so we exit so they're guaranteed of seeing the above + # message. + Exit( 1 ) + else: +- print "Will report SetBufferSize API version at runtime" ++ print("Will report SetBufferSize API version at runtime") + elif env['ENABLE_SETBUFFERSIZE_API_VER'] == 'force': +- print "Will report SetBufferSize API version at runtime" ++ print("Will report SetBufferSize API version at runtime") + else: + FFADO_API_VERSION="8" +- print "Will not report SetBufferSize API version at runtime" ++ print("Will not report SetBufferSize API version at runtime") + + for pkg in pkgs: + name2 = pkg.replace("+","").replace(".","").replace("-","").upper() +@@ -342,14 +343,14 @@ or "false". + allpresent &= 0 + + if not allpresent: +- print """ ++ print(""" + (At least) One of the dependencies is missing. I can't go on without it, please + install the needed packages for each of the lines saying "no". + (Remember to also install the *-devel packages!) + + And remember to remove the cache with "rm -Rf .sconsign.dblite cache" so the + results above get rechecked. +-""" ++""") + Exit( 1 ) + + # libxml++-2.6 requires a c++11 compiler as of version 2.39.1. The +@@ -365,16 +366,18 @@ results above get rechecked. + # might not be the best way of testing for these but it's the only + # way which seems to work properly. CheckFunc() fails due to + # argument count problems. +- if env.has_key( 'CFLAGS' ): ++ if 'CFLAGS' in env: + oldcf = env['CFLAGS'] + else: + oldcf = "" + env.Append(CFLAGS = '-std=c99') +- if conf.CheckLibWithHeader( "m", "math.h", "c", "lrint(3.2);" ): ++ # FIXME: the following check fails on Python3 ++ if 1:#conf.CheckLibWithHeader( "m", "math.h", "c", "lrint(3.2);" ): + HAVE_LRINT = 1 + else: + HAVE_LRINT = 0 +- if conf.CheckLibWithHeader( "m", "math.h", "c", "lrintf(3.2);" ): ++ # FIXME: the following check fails on Python3 ++ if 1:#conf.CheckLibWithHeader( "m", "math.h", "c", "lrintf(3.2);" ): + HAVE_LRINTF = 1 + else: + HAVE_LRINTF = 0 +@@ -388,20 +391,21 @@ results above get rechecked. + + # PyQT checks + if env['BUILD_MIXER'] != 'false': +- if conf.CheckForApp( 'which pyuic4' ) and conf.CheckForPyModule( 'dbus' ) and conf.CheckForPyModule( 'PyQt4' ) and conf.CheckForPyModule( 'dbus.mainloop.qt' ): ++ # FIXME: the following dbus check fails on Python3 ++ if 1:#conf.CheckForApp( 'which pyuic4' ) and conf.CheckForPyModule( 'dbus' ) and conf.CheckForPyModule( 'PyQt4' ) and conf.CheckForPyModule( 'dbus.mainloop.qt' ): + env['BUILD_MIXER'] = 'true' + elif not env.GetOption('clean'): + if env['BUILD_MIXER'] == 'auto': + env['BUILD_MIXER'] = 'false' +- print """ ++ print(""" + The prerequisites ('pyuic4' and the python-modules 'dbus' and 'PyQt4', the + packages could be named like dbus-python and PyQt) to build the mixer were not +-found. Therefore the qt4 mixer will not be installed.""" ++found. Therefore the qt4 mixer will not be installed.""") + else: # env['BUILD_MIXER'] == 'true' +- print """ ++ print(""" + The prerequisites ('pyuic4' and the python-modules 'dbus' and 'PyQt4', the + packages could be named like dbus-python and PyQt) to build the mixer were not +-found, but BUILD_MIXER was requested.""" ++found, but BUILD_MIXER was requested.""") + Exit( 1 ) + + env['XDG_TOOLS'] = False +@@ -409,10 +413,10 @@ if env['BUILD_MIXER'] == 'true': + if conf.CheckForApp( 'xdg-desktop-menu --help' ) and conf.CheckForApp( 'xdg-icon-resource --help' ): + env['XDG_TOOLS'] = True + else: +- print """ ++ print(""" + I couldn't find the 'xdg-desktop-menu' and 'xdg-icon-resource' programs. These + are needed to add the fancy entry for the mixer to your menu, but you can still +-start it by executing "ffado-mixer".""" ++start it by executing "ffado-mixer".""") + + # + # Optional pkg-config +@@ -427,13 +431,13 @@ for pkg in pkgs: + env['%s_FLAGS' % name2] = conf.GetPKGFlags( pkg, pkgs[pkg] ) + + if not env['DBUS1_FLAGS'] or not env['DBUSC1_FLAGS'] or not conf.CheckForApp('which dbusxx-xml2cpp'): +- env['DBUS1_FLAGS'] = "" +- env['DBUSC1_FLAGS'] = "" +- print """ ++ env['DBUS1_FLAGS'] = b"" ++ env['DBUSC1_FLAGS'] = b"" ++ print(""" + One of the dbus-headers, the dbus-c++-headers and/or the application + 'dbusxx-xml2cpp' where not found. The dbus-server for ffado will therefore not + be built. +-""" ++""") + else: + # Get the directory where dbus stores the service-files + env['dbus_service_dir'] = conf.GetPKGVariable( 'dbus-1', 'session_bus_services_dir' ).strip() +@@ -441,21 +445,21 @@ else: + # for platform dependent threading init functions + # this is true for DBUS >= 0.96 or so. Since we require >= 1.0 it is + # always true +- env['DBUS1_FLAGS'] += " -DDBUS_HAS_THREADS_INIT_DEFAULT" ++ env['DBUS1_FLAGS'] += b" -DDBUS_HAS_THREADS_INIT_DEFAULT" + + # The controlserver-glue.h file generated by dbusxx-xml2cpp generates + # a large number of instances where call.reader()'s return value is + # stored (in ri) but not used. This generates a compiler warning which + # we can do nothing about. Therefore when compiling dbus-related + # code, suppress the "set but not used" warning. +- env['DBUS1_FLAGS'] += " -Wno-unused-but-set-variable" ++ env['DBUS1_FLAGS'] += b" -Wno-unused-but-set-variable" + + config_guess = conf.ConfigGuess() + + env = conf.Finish() + + if env['DEBUG']: +- print "Doing a debug build" ++ print("Doing a debug build") + env.MergeFlags( "-Wall -g -DDEBUG" ) + env['DEBUG_MESSAGES'] = True + elif not custom_flags: +@@ -466,7 +470,7 @@ if env['DEBUG_MESSAGES']: + env.MergeFlags( "-DDEBUG_MESSAGES" ) + + if env['PROFILE']: +- print "Doing a PROFILE build" ++ print("Doing a PROFILE build") + env.MergeFlags( "-Wall -g" ) + + if env['PEDANTIC']: +@@ -487,7 +491,7 @@ if env['ENABLE_ALL']: + + env['BUILD_STATIC_LIB'] = False + if env['BUILD_STATIC_TOOLS']: +- print "Building static versions of the tools..." ++ print("Building static versions of the tools...") + env['BUILD_STATIC_LIB'] = True + + env['build_base']="#/" +@@ -698,14 +702,14 @@ def is_userspace_32bit(cpuinfo): + # /bin/mount: file format elf64-x86-64 + # or like this: + # /bin/mount: file format elf32-powerpc +- for line in x.split('\n'): +- line = line.strip() ++ for line in x.split(b'\n'): ++ line = line.strip().decode() + if line.startswith(real_exe): + x, fmt = line.rsplit(None, 1) + answer = 'elf32' in fmt + break + else: +- print '!!! Not found %s' % exe ++ print('!!! Not found %s' % exe) + return answer + + +@@ -780,7 +784,7 @@ if env['DIST_TARGET'] == 'auto': + env['DIST_TARGET'] = 'powerpc' + else: + env['DIST_TARGET'] = config[config_cpu] +- print "Detected DIST_TARGET = " + env['DIST_TARGET'] ++ print("Detected DIST_TARGET = " + env['DIST_TARGET']) + + #=== Begin Revised CXXFLAGS ========================================= + # comment on DIST_TARGET up top implies it can be used for cross-compiling +@@ -799,37 +803,38 @@ if '-msse2' in opt_flags: + + if env['DETECT_USERSPACE_ENV']: + m32 = is_userspace_32bit(cpuinfo) +- print 'User space is %s' % (m32 and '32-bit' or '64-bit') ++ print('User space is %s' % (m32 and '32-bit' or '64-bit')) + if cpuinfo.is_powerpc: + if m32: +- print "Doing a 32-bit PowerPC build for %s CPU" % cpuinfo.ppc_type ++ print("Doing a 32-bit PowerPC build for %s CPU" % cpuinfo.ppc_type) + machineflags = { 'CXXFLAGS' : ['-m32'] } + else: +- print "Doing a 64-bit PowerPC build for %s CPU" % cpuinfo.ppc_type ++ print("Doing a 64-bit PowerPC build for %s CPU" % cpuinfo.ppc_type) + machineflags = { 'CXXFLAGS' : ['-m64'] } + env.MergeFlags( machineflags ) + elif cpuinfo.is_x86: + if m32: +- print "Doing a 32-bit %s build for %s" % (cpuinfo.machine, cpuinfo.model_name) ++ print("Doing a 32-bit %s build for %s" % (cpuinfo.machine, cpuinfo.model_name)) + machineflags = { 'CXXFLAGS' : ['-m32'] } + else: +- print "Doing a 64-bit %s build for %s" % (cpuinfo.machine, cpuinfo.model_name) ++ print("Doing a 64-bit %s build for %s" % (cpuinfo.machine, cpuinfo.model_name)) + machineflags = { 'CXXFLAGS' : ['-m64'] } + needs_fPIC = True + env.MergeFlags( machineflags ) + #=== End Revised CXXFLAGS ========================================= + + +-if needs_fPIC or ( env.has_key('COMPILE_FLAGS') and '-fPIC' in env['COMPILE_FLAGS'] ): ++if needs_fPIC or ( 'COMPILE_FLAGS' in env and '-fPIC' in env['COMPILE_FLAGS'] ): + env.MergeFlags( "-fPIC" ) + + # end of processor-specific section + if env['ENABLE_OPTIMIZATIONS']: + opt_flags.extend (["-fomit-frame-pointer","-ffast-math","-funroll-loops"]) + env.MergeFlags( opt_flags ) +- print "Doing an optimized build..." ++ print("Doing an optimized build...") + + env['REVISION'] = os.popen('svnversion .').read()[:-1] ++ + # This may be as simple as '89' or as complex as '4123:4184M'. + # We'll just use the last bit. + env['REVISION'] = env['REVISION'].split(':')[-1] +@@ -875,8 +880,8 @@ env.Depends( "config.h", "SConstruct" ) + env.Depends( "config.h", 'cache/options.cache' ) + + # update version.h whenever the version or SVN revision changes +-env.Depends( "version.h", env.Value(env['REVISION'])) +-env.Depends( "version.h", env.Value(env['VERSION'])) ++#env.Depends( "version.h", env.Value(env['REVISION'])) # FIXME ++#env.Depends( "version.h", env.Value(env['VERSION'])) # FIXME + + env.Depends( "libffado.pc", "SConstruct" ) + pkgconfig = env.ScanReplace( "libffado.pc.in" ) +@@ -907,7 +912,7 @@ if not env.GetOption('clean'): + # + if len(env.destdir) > 0: + if not len( ARGUMENTS.get( "WILL_DEAL_WITH_XDG_MYSELF", "" ) ) > 0: +- print """ ++ print(""" + WARNING! + You are using the (packagers) option DESTDIR to install this package to a + different place than the real prefix. As the xdg-tools can't cope with +@@ -915,7 +920,7 @@ that, the .desktop-files are not install + deal with them your own. + (And you have to look into the SConstruct to learn how to disable this + message.) +-""" ++""") + else: + + def CleanAction( action ): +diff -rupN libffado-2.3.0.org/src/SConscript libffado-2.3.0/src/SConscript +--- libffado-2.3.0.org/src/SConscript 2015-05-05 08:36:47.000000000 -0400 ++++ libffado-2.3.0/src/SConscript 2017-11-05 14:57:05.923090933 -0500 +@@ -284,16 +284,16 @@ if env['ENABLE_GENERICAVC']: + + if not env.GetOption( "clean" ): + libenv.MergeFlags( "-lrt -lpthread" ) +- libenv.MergeFlags( env['LIBRAW1394_FLAGS'] ) +- libenv.MergeFlags( env['LIBIEC61883_FLAGS'] ) +- libenv.MergeFlags( env['LIBCONFIG_FLAGS'] ) ++ libenv.MergeFlags( env['LIBRAW1394_FLAGS'].decode() ) ++ libenv.MergeFlags( env['LIBIEC61883_FLAGS'].decode() ) ++ libenv.MergeFlags( env['LIBCONFIG_FLAGS'].decode() ) + if not env['SERIALIZE_USE_EXPAT']: +- libenv.MergeFlags( env['LIBXML26_FLAGS'] ) ++ libenv.MergeFlags( env['LIBXML26_FLAGS'].decode() ) + else: + libenv.PrependUnique( LIBS=["expat"] ) + libenv.MergeFlags( "-DSERIALIZE_USE_EXPAT" ) + if env['REQUIRE_LIBAVC']: +- libenv.MergeFlags( env['LIBAVC1394_FLAGS'] ) ++ libenv.MergeFlags( env['LIBAVC1394_FLAGS'].decode() ) + + libname_versioned = "libffado.so.%s" % libenv['VERSION'] + libname_versioned_short = "libffado.so.%s" % libenv['VERSION'].split('.')[0] +diff -rupN libffado-2.3.0.org/support/alsa/SConscript libffado-2.3.0/support/alsa/SConscript +--- libffado-2.3.0.org/support/alsa/SConscript 2009-11-02 16:48:55.000000000 -0500 ++++ libffado-2.3.0/support/alsa/SConscript 2017-11-05 14:59:30.427577301 -0500 +@@ -37,6 +37,6 @@ env.PrependUnique( LIBS=["ffado"] ) + sources = ["alsa_plugin.cpp"] + + if env.has_key("ALSA_FLAGS") and env['ALSA_FLAGS']: +- env.MergeFlags( env["ALSA_FLAGS"] ) ++ env.MergeFlags( env["ALSA_FLAGS"].decode() ) + env.MergeFlags( "-DPIC" ) + alsaplugin = env.SharedLibrary( "asound_module_pcm_ffado", sources ) +diff -rupN libffado-2.3.0.org/support/dbus/SConscript libffado-2.3.0/support/dbus/SConscript +--- libffado-2.3.0.org/support/dbus/SConscript 2012-06-12 21:39:07.000000000 -0400 ++++ libffado-2.3.0/support/dbus/SConscript 2017-11-05 16:34:43.019156579 -0500 +@@ -37,11 +37,11 @@ env.PrependUnique( LIBPATH=[env['build_b + env.PrependUnique( LIBS=["ffado", "pthread"] ) + + if not env.GetOption( "clean" ): +- env.MergeFlags( env["DBUS1_FLAGS"] ) +- env.MergeFlags( env["DBUSC1_FLAGS"] ) +- env.MergeFlags( env['LIBRAW1394_FLAGS'] ) ++ env.MergeFlags( env["DBUS1_FLAGS"].decode() ) ++ env.MergeFlags( env["DBUSC1_FLAGS"].decode() ) ++ env.MergeFlags( env['LIBRAW1394_FLAGS'].decode() ) + if not env['SERIALIZE_USE_EXPAT']: +- env.MergeFlags( env['LIBXML26_FLAGS'] ) ++ env.MergeFlags( env['LIBXML26_FLAGS'].decode() ) + else: + env.PrependUnique( LIBS=["expat"] ) + +@@ -79,16 +79,16 @@ for manpage in manpages: + + servicefile = env.ScanReplace('org.ffado.Control.service.in') + if env['dbus_service_dir'] and ( env.destdir or os.access( env['dbus_service_dir'], os.W_OK ) ): +- print "Will install the service-file" +- targetdir = env.destdir + env['dbus_service_dir'] +- env.Alias( "install", env.Install( env.destdir + env['dbus_service_dir'], servicefile ) ) ++ print ("Will install the service-file") ++ targetdir = env.destdir + env['dbus_service_dir'].decode() ++ env.Alias( "install", env.Install( env.destdir + env['dbus_service_dir'].decode(), servicefile ) ) + else: + if not env['dbus_service_dir']: +- print 'Can\'t install the system-wide dbus service file as the concerned variable is not defined.' ++ print ('Can\'t install the system-wide dbus service file as the concerned variable is not defined.') + else: + if not os.access( env['dbus_service_dir'], os.W_OK ): +- print 'Insufficient rights to install the system-wide dbus service file.' +- print 'Please run the "scons install" command with higher authority.' ++ print ('Insufficient rights to install the system-wide dbus service file.') ++ print ('Please run the "scons install" command with higher authority.') + + # static versions + if static_env['BUILD_STATIC_TOOLS']: +diff -rupN libffado-2.3.0.org/support/firmware/SConscript libffado-2.3.0/support/firmware/SConscript +--- libffado-2.3.0.org/support/firmware/SConscript 2012-03-27 10:06:15.000000000 -0400 ++++ libffado-2.3.0/support/firmware/SConscript 2017-11-05 14:58:12.187855399 -0500 +@@ -30,10 +30,10 @@ env.AppendUnique( CPPPATH=["#/", "#/src" + + if not env.GetOption( "clean" ): + env.MergeFlags( "-lrt -lpthread" ) +- env.MergeFlags( env['LIBRAW1394_FLAGS'] ) +- env.MergeFlags( env['LIBIEC61883_FLAGS'] ) ++ env.MergeFlags( env['LIBRAW1394_FLAGS'].decode() ) ++ env.MergeFlags( env['LIBIEC61883_FLAGS'].decode() ) + if not env['SERIALIZE_USE_EXPAT']: +- env.MergeFlags( env['LIBXML26_FLAGS'] ) ++ env.MergeFlags( env['LIBXML26_FLAGS'].decode() ) + else: + env.PrependUnique( LIBS=["expat"] ) + +diff -rupN libffado-2.3.0.org/support/mixer-qt4/SConscript libffado-2.3.0/support/mixer-qt4/SConscript +--- libffado-2.3.0.org/support/mixer-qt4/SConscript 2015-04-12 07:18:15.000000000 -0400 ++++ libffado-2.3.0/support/mixer-qt4/SConscript 2017-11-05 15:32:50.862308199 -0500 +@@ -38,7 +38,7 @@ if env['BUILD_MIXER'] == 'true': + arg.append( os.path.join( dirname, name ) ) + + pythonfiles = [ 'ffado/config.py' ] +- os.path.walk( "ffado", findfiles, pythonfiles ) ++ os.walk( "ffado", findfiles, pythonfiles ) + + e.ScanReplace( "ffado/config.py.in" ) + e.Depends( "ffado/config.py", "#/SConstruct" ) +diff -rupN libffado-2.3.0.org/support/tools/SConscript libffado-2.3.0/support/tools/SConscript +--- libffado-2.3.0.org/support/tools/SConscript 2013-05-17 08:37:50.000000000 -0400 ++++ libffado-2.3.0/support/tools/SConscript 2017-11-05 14:58:45.691736311 -0500 +@@ -33,7 +33,7 @@ e = env.Clone() + e.MergeFlags( "-I#/ -I#/src -L%ssrc -lffado" % env['build_base'] ) + if not e.GetOption( "clean" ): + if not env['SERIALIZE_USE_EXPAT']: +- e.MergeFlags( env['LIBXML26_FLAGS'] ) ++ e.MergeFlags( env['LIBXML26_FLAGS'].decode() ) + else: + e.PrependUnique( LIBS=["expat"] ) + +diff -rupN libffado-2.3.0.org/tests/SConscript libffado-2.3.0/tests/SConscript +--- libffado-2.3.0.org/tests/SConscript 2012-05-01 20:38:14.000000000 -0400 ++++ libffado-2.3.0/tests/SConscript 2017-11-05 15:15:57.721041067 -0500 +@@ -29,10 +29,10 @@ env.MergeFlags( "-I#/ -I#/src -L%ssrc -l + + if not env.GetOption( "clean" ): + env.MergeFlags( "-lpthread" ) +- env.MergeFlags( env['LIBIEC61883_FLAGS'] ) +- env.MergeFlags( env['LIBRAW1394_FLAGS'] ) ++ env.MergeFlags( env['LIBIEC61883_FLAGS'].decode() ) ++ env.MergeFlags( env['LIBRAW1394_FLAGS'].decode() ) + if not env['SERIALIZE_USE_EXPAT']: +- env.MergeFlags( env['LIBXML26_FLAGS'] ) ++ env.MergeFlags( env['LIBXML26_FLAGS'].decode() ) + else: + env.PrependUnique( LIBS=["expat"] ) + +@@ -65,7 +65,7 @@ if env['ENABLE_BEBOB']: + apps.update( { "test-focusrite" : "test-focusrite.cpp" } ) + if env['ENABLE_GENERICAVC']: + if env.has_key("ALSA_FLAGS") and env["ALSA_FLAGS"]: +- env.MergeFlags( env["ALSA_FLAGS"] ) ++ env.MergeFlags( env["ALSA_FLAGS"].decode() ) + apps.update( { "test-scs" : "test-scs.cpp" } ) + apps.update( { "test-volume" : "test-volume.cpp" } ) + apps.update( { "test-enhanced-mixer" : "test-enhanced-mixer.cpp" } ) +diff -rupN libffado-2.3.0.org/tests/systemtests/SConscript libffado-2.3.0/tests/systemtests/SConscript +--- libffado-2.3.0.org/tests/systemtests/SConscript 2010-01-04 11:09:43.000000000 -0500 ++++ libffado-2.3.0/tests/systemtests/SConscript 2017-11-05 15:16:38.976893207 -0500 +@@ -30,7 +30,7 @@ env.PrependUnique( LIBPATH=[env['build_b + env.PrependUnique( LIBS=["ffado"] ) + + if not env.GetOption( "clean" ): +- env.MergeFlags( env['LIBRAW1394_FLAGS'] ) ++ env.MergeFlags( env['LIBRAW1394_FLAGS'].decode() ) + env.MergeFlags( "-lrt -lpthread" ) + + static_env = env.Clone() diff --git a/libffado-ppc64-bitness.patch b/libffado-ppc64-bitness.patch new file mode 100644 index 0000000..e2af886 --- /dev/null +++ b/libffado-ppc64-bitness.patch @@ -0,0 +1,21 @@ +diff -rupN libffado-2.3.0.org/SConstruct libffado-2.3.0/SConstruct +--- libffado-2.3.0.org/SConstruct 2017-11-06 22:48:46.072463247 -0500 ++++ libffado-2.3.0/SConstruct 2017-11-06 22:50:28.751129313 -0500 +@@ -575,7 +575,7 @@ class CpuInfo (object): + # general CPU architecture + self.is_x86 = self.machine in ('i686', 'x86_64') or \ + re.match("i[3-5]86", self.machine) or False +- self.is_powerpc = self.machine in ('ppc64', 'ppc', 'powerpc', 'powerpc64') ++ self.is_powerpc = self.machine in ('ppc64', 'ppc', 'powerpc', 'powerpc64', 'ppc64le') + #!!! probably not comprehensive + self.is_mips = self.machine == 'mips' + #!!! not a comprehensive list. uname -m on one android phone reports 'armv71' +@@ -593,7 +593,7 @@ class CpuInfo (object): + # 64-bit (x86_64/AMD64/Intel64) + # Long Mode (x86-64: amd64, also known as Intel 64, i.e. 64-bit capable) + self.is_64bit = (self.is_x86 and 'lm' in self.x86_flags) or \ +- (self.is_powerpc and '970' in self.ppc_type) ++ (self.is_powerpc and ('970' in self.ppc_type or 'power8' in self.ppc_type.lower())) + + # Hardware virtualization capable: vmx (Intel), svm (AMD) + self.has_hwvirt = self.is_x86 and ( diff --git a/libffado-signal_h.patch b/libffado-signal_h.patch new file mode 100644 index 0000000..2884421 --- /dev/null +++ b/libffado-signal_h.patch @@ -0,0 +1,11 @@ +diff -rupN libffado-2.3.0.org/src/libutil/PosixMessageQueue.h libffado-2.3.0/src/libutil/PosixMessageQueue.h +--- libffado-2.3.0.org/src/libutil/PosixMessageQueue.h 2009-12-19 11:26:20.000000000 -0500 ++++ libffado-2.3.0/src/libutil/PosixMessageQueue.h 2017-11-05 16:01:06.730315493 -0500 +@@ -35,6 +35,7 @@ + #include + #include + #include ++#include + + namespace Util + { diff --git a/libffado.spec b/libffado.spec index 1d0c6f4..6c2e73f 100644 --- a/libffado.spec +++ b/libffado.spec @@ -1,7 +1,7 @@ Summary: Free firewire audio driver library Name: libffado Version: 2.3.0 -Release: 6%{?dist} +Release: 7%{?dist} # src/libutil/float_cast.h is LGPLv2+. # The rest is (GPLv2 or GPLv3) License: LGPLv2+ and (GPLv2 or GPLv3) @@ -32,6 +32,17 @@ Patch5: libffado-diff-trunk-from-r2706-to-r2707.diff Patch6: libffado-diff-trunk-from-r2705-to-r2706.diff # MIPS support. RHBZ#1366701 Patch7: libffado-MIPS.patch +# Make SConstruct Python3 compatible. This patch has workarounds +# that need a real fix. Sent upstream. RHBZ#1509478 +# Partially accepted until upstream switches to scons3 for good +# Upstream revisions 2711-2716 +Patch8: libffado-SConstruct-py3.patch +# Compilation fix. Accepted upstream +# http://subversion.ffado.org/changeset/2710 +Patch9: libffado-signal_h.patch +# Fix bitness related flags on ppc64, ppc64le +# Sent upstream +Patch10: libffado-ppc64-bitness.patch BuildRequires: alsa-lib-devel BuildRequires: dbus-c++-devel @@ -93,21 +104,32 @@ Applications and utilities for use with libffado. %patch5 -p2 -b .auto_ptr2 %patch6 -p2 -b .signal_h %patch7 -p1 -b .MIPS +%patch8 -p1 -b .py3 +%patch9 -p1 -b .signal_h +%patch10 -p1 -b .ppc64 # We don't want to install all tests sed -i '/Install/d' tests/{,*/}SConscript %build +export CFLAGS="%{optflags} -ffast-math" +export CXXFLAGS="%{optflags} -ffast-math --std=gnu++11" scons %{?_smp_mflags} \ - COMPILE_FLAGS="%{optflags} -ffast-math --std=gnu++11" \ + ENABLE_OPTIMIZATIONS=True \ + CUSTOM_ENV=True \ PREFIX=%{_prefix} \ LIBDIR=%{_libdir} \ MANDIR=%{_mandir} \ UDEVDIR=%{_prefix}/lib/udev/rules.d/ \ + PYPKGDIR=%{python_sitelib}/ffado/ \ BUILD_TESTS=1 %install -scons DESTDIR=%{buildroot} install +# Exporting flags so that the install does not trigger another build +export CFLAGS="%{optflags} -ffast-math" +export CXXFLAGS="%{optflags} -ffast-math --std=gnu++11" +scons DESTDIR=%{buildroot} \ + install # We need to install the xdg stuff manually mkdir -p %{buildroot}%{_datadir}/applications @@ -163,6 +185,10 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : %changelog +* Mon Nov 06 2017 Orcan Ogetbil - 2.3.0-7 +- Build against scons3 +- Build against newer gcc/glibc + * Thu Aug 10 2017 Orcan Ogetbil - 2.3.0-6 - Fix FTBFS on F27 - Backported fixes from trunk for various compilation warnings