git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@1728 0c269be4-1314-0410-8aa9-9f06e86f4224tags/0.69
@@ -21,6 +21,8 @@ | |||||
import os | import os | ||||
from string import Template | from string import Template | ||||
platform = ARGUMENTS.get('OS', Platform()) | |||||
build_dir = ARGUMENTS.get('BUILDDIR', "") | build_dir = ARGUMENTS.get('BUILDDIR', "") | ||||
if build_dir: | if build_dir: | ||||
build_base=build_dir+'/' | build_base=build_dir+'/' | ||||
@@ -79,7 +81,8 @@ else: | |||||
buildenv['LD_LIBRARY_PATH']='' | buildenv['LD_LIBRARY_PATH']='' | ||||
env = Environment( tools=['default','scanreplace','pkgconfig', 'doxygen'], toolpath=['admin'], ENV=buildenv, options=opts ) | |||||
env = Environment( tools=['default','scanreplace','pkgconfig', 'doxygen'], toolpath=['admin'], | |||||
ENV=buildenv, PLATFORM = platform, options=opts ) | |||||
Help( """ | Help( """ | ||||
For building jackdmp you can set different options as listed below. You have to | For building jackdmp you can set different options as listed below. You have to | ||||
@@ -186,8 +189,8 @@ if env['DEBUG']: | |||||
env.AppendUnique( CCFLAGS=["-DDEBUG","-Wall","-g"] ) | env.AppendUnique( CCFLAGS=["-DDEBUG","-Wall","-g"] ) | ||||
env.AppendUnique( CFLAGS=["-DDEBUG","-Wall","-g"] ) | env.AppendUnique( CFLAGS=["-DDEBUG","-Wall","-g"] ) | ||||
else: | else: | ||||
env.AppendUnique( CCFLAGS=["-O2","-DNDEBUG"] ) | |||||
env.AppendUnique( CFLAGS=["-O2","-DNDEBUG"] ) | |||||
env.AppendUnique( CCFLAGS=["-O3","-DNDEBUG"] ) | |||||
env.AppendUnique( CFLAGS=["-O3","-DNDEBUG"] ) | |||||
env.AppendUnique( CCFLAGS=["-fPIC", "-DSOCKET_RPC_FIFO_SEMA", "-D__SMP__"] ) | env.AppendUnique( CCFLAGS=["-fPIC", "-DSOCKET_RPC_FIFO_SEMA", "-D__SMP__"] ) | ||||
env.AppendUnique( CFLAGS=["-fPIC", "-DUSE_POSIX_SHM"] ) | env.AppendUnique( CFLAGS=["-fPIC", "-DUSE_POSIX_SHM"] ) | ||||
@@ -236,260 +239,14 @@ if env['BUILD_DOXYGEN_DOCS']: | |||||
env.Doxygen("doxyfile") | env.Doxygen("doxyfile") | ||||
subdirs=['common'] | subdirs=['common'] | ||||
if build_for_linux: | |||||
if env['PLATFORM'] == 'posix': | |||||
subdirs.append('linux') | subdirs.append('linux') | ||||
if env['BUILD_EXAMPLES']: | |||||
subdirs.append('example-clients') | |||||
if env['BUILD_TESTS']: | |||||
subdirs.append('tests') | |||||
if build_base: | |||||
env.SConscript( dirs=subdirs, exports="env", build_dir=build_base+subdir ) | |||||
else: | |||||
env.SConscript( dirs=subdirs, exports="env" ) | |||||
# | |||||
# Copyright (C) 2007 Arnold Krille | |||||
# Copyright (C) 2007 Pieter Palmers | |||||
# | |||||
# This file originates from FFADO (www.ffado.org) | |||||
# | |||||
# This program is free software: you can redistribute it and/or modify | |||||
# it under the terms of the GNU General Public License as published by | |||||
# the Free Software Foundation, either version 3 of the License, or | |||||
# (at your option) any later version. | |||||
# | |||||
# This program 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 General Public License for more details. | |||||
# | |||||
# You should have received a copy of the GNU General Public License | |||||
# along with this program. If not, see <http://www.gnu.org/licenses/>. | |||||
# | |||||
import os | |||||
from string import Template | |||||
build_dir = ARGUMENTS.get('BUILDDIR', "") | |||||
if build_dir: | |||||
build_base=build_dir+'/' | |||||
if not os.path.isdir( build_base ): | |||||
os.makedirs( build_base ) | |||||
print "Building into: " + build_base | |||||
else: | |||||
build_base='' | |||||
if not os.path.isdir( "cache" ): | |||||
os.makedirs( "cache" ) | |||||
opts = Options( "cache/"+build_base+"options.cache" ) | |||||
# make this into a command line option and/or a detected value | |||||
build_for_linux = True | |||||
# | |||||
# If this is just to display a help-text for the variable used via ARGUMENTS, then its wrong... | |||||
opts.Add( "BUILDDIR", "Path to place the built files in", "") | |||||
opts.AddOptions( | |||||
# BoolOption( "DEBUG", """\ | |||||
#Toggle debug-build. DEBUG means \"-g -Wall\" and more, otherwise we will use | |||||
# \"-O2\" to optimise.""", True ), | |||||
PathOption( "PREFIX", "The prefix where jackdmp will be installed to.", "/usr/local", PathOption.PathAccept ), | |||||
PathOption( "BINDIR", "Overwrite the directory where apps are installed to.", "$PREFIX/bin", PathOption.PathAccept ), | |||||
PathOption( "LIBDIR", "Overwrite the directory where libs are installed to.", "$PREFIX/lib", PathOption.PathAccept ), | |||||
PathOption( "INCLUDEDIR", "Overwrite the directory where headers are installed to.", "$PREFIX/include", PathOption.PathAccept ), | |||||
PathOption( "SHAREDIR", "Overwrite the directory where misc shared files are installed to.", "$PREFIX/share/libffado", PathOption.PathAccept ), | |||||
BoolOption( "ENABLE_ALSA", "Enable/Disable the ALSA backend.", True ), | |||||
BoolOption( "ENABLE_FREEBOB", "Enable/Disable the FreeBoB backend.", True ), | |||||
BoolOption( "ENABLE_FIREWIRE", "Enable/Disable the FireWire backend.", True ), | |||||
BoolOption( "DEBUG", """Do a debug build.""", True ), | |||||
BoolOption( "BUILD_TESTS", """Build tests where applicable.""", True ), | |||||
BoolOption( "BUILD_EXAMPLES", """Build the example clients in their directory.""", True ), | |||||
BoolOption( "INSTALL_EXAMPLES", """Install the example clients in the BINDIR directory.""", True ), | |||||
BoolOption( "BUILD_DOXYGEN_DOCS", """Build doxygen documentation.""", True ), | |||||
) | |||||
## Load the builders in config | |||||
buildenv={} | |||||
if os.environ.has_key('PATH'): | |||||
buildenv['PATH']=os.environ['PATH'] | |||||
else: | |||||
buildenv['PATH']='' | |||||
if os.environ.has_key('PKG_CONFIG_PATH'): | |||||
buildenv['PKG_CONFIG_PATH']=os.environ['PKG_CONFIG_PATH'] | |||||
else: | |||||
buildenv['PKG_CONFIG_PATH']='' | |||||
if os.environ.has_key('LD_LIBRARY_PATH'): | |||||
buildenv['LD_LIBRARY_PATH']=os.environ['LD_LIBRARY_PATH'] | |||||
else: | |||||
buildenv['LD_LIBRARY_PATH']='' | |||||
env = Environment( tools=['default','scanreplace','pkgconfig', 'doxygen'], toolpath=['admin'], ENV=buildenv, options=opts ) | |||||
Help( """ | |||||
For building jackdmp you can set different options as listed below. You have to | |||||
specify them only once, scons will save the last value you used and re-use | |||||
that. | |||||
To really undo your settings and return to the factory defaults, remove the | |||||
"cache"-folder and the file ".sconsign.dblite" from this directory. | |||||
For example with: "rm -Rf .sconsign.dblite cache" | |||||
""" ) | |||||
Help( opts.GenerateHelpText( env ) ) | |||||
# make sure the necessary dirs exist | |||||
if not os.path.isdir( "cache/" + build_base ): | |||||
os.makedirs( "cache/" + build_base ) | |||||
if not os.path.isdir( 'cache/objects' ): | |||||
os.makedirs( 'cache/objects' ) | |||||
if build_base: | |||||
env['build_base']="#/"+build_base | |||||
else: | |||||
env['build_base']="#/" | |||||
CacheDir( 'cache/objects' ) | |||||
opts.Save( 'cache/' + build_base + "options.cache", env ) | |||||
tests = {} | |||||
tests.update( env['PKGCONFIG_TESTS'] ) | |||||
if not env.GetOption('clean'): | |||||
conf = Configure( env, | |||||
custom_tests = tests, | |||||
conf_dir = "cache/" + build_base, | |||||
log_file = "cache/" + build_base + 'config.log' ) | |||||
# | |||||
# Check if the environment can actually compile c-files by checking for a | |||||
# header shipped with gcc. | |||||
# | |||||
if not conf.CheckHeader( "stdio.h" ): | |||||
print "It seems as if stdio.h is missing. This probably means that your build environment is broken, please make sure you have a working c-compiler and libstdc installed and usable." | |||||
Exit( 1 ) | |||||
# | |||||
# The following checks are for headers and libs and packages we need. | |||||
# | |||||
allpresent = 1; | |||||
if build_for_linux: | |||||
allpresent &= conf.CheckForPKGConfig(); | |||||
# example on how to check for additional libs | |||||
# pkgs = { | |||||
# 'alsa' : '1.0.0', | |||||
# } | |||||
# for pkg in pkgs: | |||||
# name2 = pkg.replace("+","").replace(".","").replace("-","").upper() | |||||
# env['%s_FLAGS' % name2] = conf.GetPKGFlags( pkg, pkgs[pkg] ) | |||||
# if env['%s_FLAGS'%name2] == 0: | |||||
# allpresent &= 0 | |||||
if not allpresent: | |||||
print """ | |||||
(At least) One of the dependencies is missing. I can't go on without it, please | |||||
install the needed packages (remember to also install the *-devel packages) | |||||
""" | |||||
Exit( 1 ) | |||||
# jack doesn't have to be present, but it would be nice to know if it is | |||||
env['JACK_FLAGS'] = conf.GetPKGFlags( 'jack', '0.100.0' ) | |||||
if env['JACK_FLAGS']: | |||||
env['JACK_PREFIX'] = conf.GetPKGPrefix( 'jack' ) | |||||
env['JACK_EXEC_PREFIX'] = conf.GetPKGExecPrefix( 'jack' ) | |||||
env['JACK_LIBDIR'] = conf.GetPKGLibdir( 'jack' ) | |||||
env['JACK_INCLUDEDIR'] = conf.GetPKGIncludedir( 'jack' ) | |||||
# | |||||
# Optional checks follow: | |||||
# | |||||
if build_for_linux and env['ENABLE_ALSA']: | |||||
env['ALSA_FLAGS'] = conf.GetPKGFlags( 'ALSA', '1.0.0' ) | |||||
if env['ALSA_FLAGS'] == 0: | |||||
print " Disabling 'alsa' backend since no useful ALSA installation found." | |||||
env['ENABLE_ALSA'] = False | |||||
if build_for_linux and env['ENABLE_FREEBOB']: | |||||
env['FREEBOB_FLAGS'] = conf.GetPKGFlags( 'libfreebob', '1.0.0' ) | |||||
if env['FREEBOB_FLAGS'] == 0: | |||||
print " Disabling 'freebob' backend since no useful FreeBoB installation found." | |||||
env['ENABLE_FREEBOB'] = False | |||||
if build_for_linux and env['ENABLE_FIREWIRE']: | |||||
env['FFADO_FLAGS'] = conf.GetPKGFlags( 'libffado', '1.999.7' ) | |||||
if env['FFADO_FLAGS'] == 0: | |||||
print " Disabling 'firewire' backend since no useful FFADO installation found." | |||||
env['ENABLE_FIREWIRE'] = False | |||||
env = conf.Finish() | |||||
if env['DEBUG']: | |||||
print "Doing a DEBUG build" | |||||
# -Werror could be added to, which would force the devs to really remove all the warnings :-) | |||||
env.AppendUnique( CCFLAGS=["-DDEBUG","-Wall","-g"] ) | |||||
env.AppendUnique( CFLAGS=["-DDEBUG","-Wall","-g"] ) | |||||
else: | |||||
env.AppendUnique( CCFLAGS=["-O2","-DNDEBUG"] ) | |||||
env.AppendUnique( CFLAGS=["-O2","-DNDEBUG"] ) | |||||
env.AppendUnique( CCFLAGS=["-fPIC", "-DSOCKET_RPC_FIFO_SEMA", "-D__SMP__"] ) | |||||
env.AppendUnique( CFLAGS=["-fPIC", "-DUSE_POSIX_SHM"] ) | |||||
# | |||||
# XXX: Maybe we can even drop these lower-case variables and only use the uppercase ones? | |||||
# | |||||
env['prefix'] = Template( os.path.join( env['PREFIX'] ) ).safe_substitute( env ) | |||||
env['bindir'] = Template( os.path.join( env['BINDIR'] ) ).safe_substitute( env ) | |||||
env['libdir'] = Template( os.path.join( env['LIBDIR'] ) ).safe_substitute( env ) | |||||
env['includedir'] = Template( os.path.join( env['INCLUDEDIR'] ) ).safe_substitute( env ) | |||||
env['sharedir'] = Template( os.path.join( env['SHAREDIR'] ) ).safe_substitute( env ) | |||||
env.Alias( "install", env['libdir'] ) | |||||
env.Alias( "install", env['includedir'] ) | |||||
env.Alias( "install", env['sharedir'] ) | |||||
env.Alias( "install", env['bindir'] ) | |||||
# for config.h.in | |||||
env['ADDON_DIR']='%s' % env['prefix'] | |||||
env['LIB_DIR']='lib' | |||||
env['JACK_LOCATION']='%s' % env['bindir'] | |||||
# | |||||
# To have the top_srcdir as the doxygen-script is used from auto* | |||||
# | |||||
env['top_srcdir'] = env.Dir( "." ).abspath | |||||
#subprojects = env.Split('common common/jack tests example-clients linux/alsa linux/freebob linux/firewire') | |||||
#for subproject in subprojects: | |||||
#env.AppendUnique( CCFLAGS=["-I%s" % subproject] ) | |||||
#env.AppendUnique( CFLAGS=["-I%s" % subproject] ) | |||||
env.ScanReplace( "config.h.in" ) | |||||
# ensure that the config.h is always updated, since it | |||||
# sometimes fails to pick up the changes | |||||
# note: this still doesn't seem to cause dependent files to be rebuilt. | |||||
NoCache("config.h") | |||||
AlwaysBuild("config.h") | |||||
if env['PLATFORM'] == 'macosx': # FIXME FOR SLETZ: check macosx/SConscript | |||||
subdirs.append('macosx') | |||||
# | |||||
# Start building | |||||
# | |||||
if env['BUILD_DOXYGEN_DOCS']: | |||||
env.Doxygen("doxyfile") | |||||
subdirs=['common'] | |||||
if build_for_linux: | |||||
subdirs.append('linux') | |||||
if env['PLATFORM'] == 'windows': # FIXME FOR SLETZ: create/check macosx/SConscript | |||||
subdirs.append('windows') | |||||
if env['BUILD_EXAMPLES']: | if env['BUILD_EXAMPLES']: | ||||
subdirs.append('example-clients') | subdirs.append('example-clients') | ||||
@@ -502,27 +259,3 @@ if build_base: | |||||
else: | else: | ||||
env.SConscript( dirs=subdirs, exports="env" ) | env.SConscript( dirs=subdirs, exports="env" ) | ||||
# -*- python -*- | |||||
import os | |||||
import sys | |||||
import re | |||||
import shutil | |||||
import glob | |||||
import errno | |||||
import time | |||||
import platform | |||||
import string | |||||
import commands | |||||
platform = ARGUMENTS.get('OS', Platform()) | |||||
env = Environment(PLATFORM = platform, | |||||
CPPPATH = ['macosx', 'common']) | |||||
Export('env') | |||||
print platform | |||||
env.SConscript(['common/SConscript']) | |||||
@@ -23,8 +23,10 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |||||
#endif | #endif | ||||
#ifdef __linux__ | #ifdef __linux__ | ||||
#ifndef ADDON_DIR | |||||
#include "config.h" | #include "config.h" | ||||
#endif | #endif | ||||
#endif | |||||
#include "JackDriverLoader.h" | #include "JackDriverLoader.h" | ||||
#include "JackError.h" | #include "JackError.h" | ||||
@@ -18,9 +18,11 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | |||||
*/ | */ | ||||
#ifdef __linux__ | |||||
#ifdef __linux__ | |||||
#ifndef ADDON_DIR | |||||
#include "config.h" | #include "config.h" | ||||
#endif | #endif | ||||
#endif | |||||
#include "JackChannel.h" | #include "JackChannel.h" | ||||
#include "JackLibGlobals.h" | #include "JackLibGlobals.h" | ||||
@@ -27,123 +27,8 @@ Import( 'env' ) | |||||
# paths where include files can be found | # paths where include files can be found | ||||
env.AppendUnique( CPPPATH=["#/", "#/common", "#/common/jack"] ) | env.AppendUnique( CPPPATH=["#/", "#/common", "#/common/jack"] ) | ||||
# | |||||
# Define the source files | |||||
# | |||||
srcfiles_common_serverlib = env.Split( '\ | |||||
JackActivationCount.cpp JackAPI.cpp JackAudioDriver.cpp JackClient.cpp JackConnectionManager.cpp \ | |||||
JackDriver.cpp JackEngine.cpp JackEngineControl.cpp JackError.c JackExternalClient.cpp JackFrameTimer.cpp \ | |||||
JackFreewheelDriver.cpp JackGlobalsServer.cpp JackGraphManager.cpp JackInternalClient.cpp JackPort.cpp JackPosixSemaphore.cpp \ | |||||
JackPosixThread.cpp JackFifo.cpp JackLoopbackDriver.cpp JackPortType.cpp JackAudioPort.cpp JackMidiPort.cpp \ | |||||
JackServer.cpp JackShmMem.cpp JackThreadedDriver.cpp shm.c JackSocket.cpp JackSocketServerChannel.cpp JackSocketNotifyChannel.cpp \ | |||||
JackSocketServerNotifyChannel.cpp JackTime.c JackServerAPI.cpp JackGlobals.cpp JackDriverLoader.cpp JackDebugClient.cpp \ | |||||
JackTransportEngine.cpp JackServerGlobals.cpp JackServerLaunch.cpp timestamps.c JackTools.cpp \ | |||||
') | |||||
# FIXME: this is not pretty | |||||
srcfiles_common_serverlib.append('#/example-clients/internal_metro.cpp') | |||||
srcfiles_common_clientlib = env.Split( '\ | |||||
JackActivationCount.cpp JackAPI.cpp JackClient.cpp JackConnectionManager.cpp ringbuffer.c JackServerLaunch.cpp\ | |||||
JackError.c JackFrameTimer.cpp JackGlobalsClient.cpp JackGraphManager.cpp JackLibClient.cpp JackLibAPI.cpp JackPort.cpp JackPosixSemaphore.cpp \ | |||||
JackFifo.cpp JackPortType.cpp JackAudioPort.cpp JackMidiPort.cpp JackMidiAPI.cpp JackEngineControl.cpp JackPosixThread.cpp JackShmMem.cpp \ | |||||
shm.c JackSocket.cpp JackSocketClientChannel.cpp JackTime.c JackGlobals.cpp JackDebugClient.cpp JackTransportEngine.cpp timestamps.c JackTools.cpp \ | |||||
') | |||||
srcfiles_common_wrapperlib = ['JackAPIWrapper.cpp', 'ringbuffer.c'] | |||||
jack_headers = env.Split( 'intclient.h jack.h midiport.h ringbuffer.h \ | |||||
statistics.h thread.h transport.h types.h') | |||||
# | |||||
# Start building | |||||
# | |||||
#pkgconfig = env.ScanReplace( "libjackmp.pc.in" ) | |||||
#env.Install( env['libdir'] + '/pkgconfig', pkgconfig ) | |||||
env.AppendUnique( LIBS=["rt", "pthread"] ) | |||||
# build the common stuff | |||||
clientlib = env.SharedLibrary( "jackmp", srcfiles_common_clientlib ) | |||||
env.Install( "$libdir", clientlib ) | |||||
serverlib = env.SharedLibrary( "jackdmp", srcfiles_common_serverlib ) | |||||
env.Install( "$libdir", serverlib ) | |||||
wrapperlib = env.SharedLibrary( "jackwrapper", srcfiles_common_wrapperlib ) | |||||
env.Install( "$libdir", wrapperlib ) | |||||
# install the headers | |||||
#if env['JACK_FLAGS']: | |||||
#jack_include_dir = env['JACK_INCLUDEDIR'] | |||||
#if 'install' in COMMAND_LINE_TARGETS and os.path.isdir( jack_include_dir ): | |||||
#if env.GetOption('clean'): | |||||
#pass | |||||
#else: | |||||
#jack_old_includes_dir = env['includedir'] + '/jack_up' | |||||
#print "moving old jack includes to %s..." % jack_old_includes_dir | |||||
#env.Command(jack_old_includes_dir, jack_include_dir, Move("$TARGET", "$SOURCE")) | |||||
for header in jack_headers: | |||||
env.Alias("install", env.Install( env['includedir'] + '/jack', 'jack/' + header )) | |||||
# install the libs | |||||
env.Alias("install", env.Install(env['libdir'], serverlib)) | |||||
env.Alias("install", env.Install(env['libdir'], clientlib)) | |||||
env.Alias("install", env.Install(env['libdir'], wrapperlib)) | |||||
#jack_libdir = env['JACK_LIBDIR'] | |||||
#libjackdmp_location = env['libdir'] + '/libjackmp.so' | |||||
#if 'install' in COMMAND_LINE_TARGETS and os.path.isdir( jack_libdir ): | |||||
#if env.GetOption('clean'): | |||||
##note: is this executed before the actual uninstall? | |||||
#lib_files = glob.glob(jack_libdir + '/libjack.so.*.up') | |||||
#for old_name in lib_files: | |||||
#new_name = old_name[:-3] | |||||
#print "restoring old jack lib %s to %s..." % (old_name, new_name) | |||||
#env.Command(Delete(new_name)) | |||||
#env.Command(new_name, old_name, Move("$TARGET", "$SOURCE")) | |||||
#else: | |||||
#lib_files = glob.glob(jack_libdir + '/libjack.so.*') | |||||
#env.Alias("install", env.Install(env['libdir'], serverlib)) | |||||
#env.Alias("install", env.Install(env['libdir'], clientlib)) | |||||
#for old_name in lib_files: | |||||
#new_name = old_name + '.up' | |||||
#print "moving old jack lib %s to %s..." % (old_name, new_name) | |||||
#env.Command(new_name, old_name, Move("$TARGET", "$SOURCE")) | |||||
#print " linking to %s..." % (libjackdmp_location) | |||||
#env.Command(old_name, libjackdmp_location, "ln -s $TARGET $SOURCE") | |||||
# | |||||
# Copyright (C) 2007 Arnold Krille | |||||
# Copyright (C) 2007 Pieter Palmers | |||||
# | |||||
# This file originally was part of FFADO | |||||
# | |||||
# This program is free software: you can redistribute it and/or modify | |||||
# it under the terms of the GNU General Public License as published by | |||||
# the Free Software Foundation, either version 3 of the License, or | |||||
# (at your option) any later version. | |||||
# | |||||
# This program 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 General Public License for more details. | |||||
# | |||||
# You should have received a copy of the GNU General Public License | |||||
# along with this program. If not, see <http://www.gnu.org/licenses/>. | |||||
# | |||||
import os | |||||
import glob | |||||
from string import Template | |||||
Import( 'env' ) | |||||
# paths where include files can be found | |||||
env.AppendUnique( CPPPATH=["#/", "#/common", "#/common/jack"] ) | |||||
#HACK: this should not be here ideally | |||||
env.AppendUnique( CPPPATH=["#/linux","#/macosx"] ) | |||||
# | # | ||||
# Define the source files | # Define the source files | ||||
@@ -234,80 +119,3 @@ env.Alias("install", env.Install(env['libdir'], wrapperlib)) | |||||
#env.Command(new_name, old_name, Move("$TARGET", "$SOURCE")) | #env.Command(new_name, old_name, Move("$TARGET", "$SOURCE")) | ||||
#print " linking to %s..." % (libjackdmp_location) | #print " linking to %s..." % (libjackdmp_location) | ||||
#env.Command(old_name, libjackdmp_location, "ln -s $TARGET $SOURCE") | #env.Command(old_name, libjackdmp_location, "ln -s $TARGET $SOURCE") | ||||
# -*- python -*- | |||||
import os | |||||
import os.path | |||||
import glob | |||||
#Import('env') | |||||
#CPPPATH = ['macosx', 'common'] | |||||
objects_common_server_lib=Split(""" | |||||
JackActivationCount.cpp | |||||
JackAPI.cpp | |||||
JackAudioDriver.cpp | |||||
JackClient.cpp | |||||
JackConnectionManager.cpp | |||||
JackDriver.cpp | |||||
JackEngine.cpp | |||||
JackEngineTiming.cpp | |||||
JackError.cpp | |||||
JackExternalClient.cpp | |||||
JackFrameTimer.cpp | |||||
JackFreewheelDriver.o | |||||
JackGlobalsServer.cpp | |||||
JackGraphManager.cpp | |||||
JackInternalClient.cpp | |||||
JackPort.cpp | |||||
JackPosixSemaphore.cpp | |||||
JackPosixThread.cpp | |||||
JackFifo.cpp | |||||
JackLoopbackDriver.cpp | |||||
JackServer.cpp | |||||
JackShmMem.cpp | |||||
JackThreadedDriver.cpp | |||||
shm.c | |||||
JackSocket.cpp | |||||
JackSocketServerChannel.cpp | |||||
JackSocketNotifyChannel.cpp | |||||
JackSocketServerNotifyChannel.cpp | |||||
JackTime.cpp | |||||
JackServerAPI.cpp | |||||
JackGlobals.cpp | |||||
JackDriverLoader.cpp | |||||
internal_metro.cpp | |||||
JackDebugClient.cpp | |||||
JackTransportEngine.cpp | |||||
JackServerGlobals.o | |||||
""") | |||||
objects_common_client_lib =Split(""" | |||||
JackActivationCount.cpp | |||||
JackAPI.cpp | |||||
JackClient.cpp | |||||
JackConnectionManager.cpp | |||||
ringbuffer.cpp | |||||
JackError.cpp | |||||
JackFrameTimer.cpp | |||||
JackGlobalsClient.cpp | |||||
JackGraphManager.cpp | |||||
JackLibClient.cpp | |||||
JackLibAPI.cpp | |||||
JackPort.cpp | |||||
JackPosixSemaphore.cpp | |||||
JackFifo.cpp | |||||
JackPosixThread.cpp | |||||
JackShmMem.cpp | |||||
shm.c | |||||
JackSocket.cpp | |||||
JackSocketClientChannel.cpp | |||||
JackTime.cpp | |||||
JackGlobals.cpp | |||||
JackDebugClient.cpp | |||||
JackTransportEngine.cpp | |||||
""") | |||||
SharedLibrary('libjackdmp', objects_common_server_lib, CPPPATH = ['.','../macosx','jack'], CXXFLAGS=["-O3"]) | |||||
SharedLibrary('libjackmp', objects_common_client_lib, CPPPATH = ['.','../macosx','jack'], CXXFLAGS=["-O3"]) |
@@ -66,92 +66,6 @@ if env['HAS_READLINE']: | |||||
# Start building | # Start building | ||||
# | # | ||||
# build the example clients | |||||
if env['BUILD_EXAMPLES']: | |||||
clientenv = env.Copy() | |||||
clientenv.PrependUnique( LIBPATH=env['build_base'] ) | |||||
for example_client_program in example_client_programs.keys(): | |||||
clientenv.Program(target=example_client_program, | |||||
source=env.Split( example_client_programs[example_client_program]), | |||||
LIBS=extra_libs[example_client_program] ) | |||||
if env['INSTALL_EXAMPLES']: | |||||
clientenv.Install( "$bindir", example_client_program ) | |||||
for example_client_lib in example_client_libs.keys(): | |||||
clientenv.SharedLibrary(target=example_client_lib, | |||||
source=env.Split( example_client_libs[example_client_lib] ) ) | |||||
if env['INSTALL_EXAMPLES']: | |||||
#clientenv.Install( "$libdir", example_client_lib ) | |||||
pass | |||||
# | |||||
# Copyright (C) 2007 Arnold Krille | |||||
# Copyright (C) 2007 Pieter Palmers | |||||
# | |||||
# This file originates from FFADO (www.ffado.org) | |||||
# | |||||
# This program is free software: you can redistribute it and/or modify | |||||
# it under the terms of the GNU General Public License as published by | |||||
# the Free Software Foundation, either version 3 of the License, or | |||||
# (at your option) any later version. | |||||
# | |||||
# This program 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 General Public License for more details. | |||||
# | |||||
# You should have received a copy of the GNU General Public License | |||||
# along with this program. If not, see <http://www.gnu.org/licenses/>. | |||||
# | |||||
import os | |||||
from string import Template | |||||
Import( 'env' ) | |||||
# paths where include files can be found | |||||
env.AppendUnique( CPPPATH=["#/", "#/common"] ) | |||||
# | |||||
# Define the source files | |||||
# | |||||
example_client_programs = { | |||||
"jack_freewheel" : "freewheel.c", | |||||
"jack_connect" : "connect.c", | |||||
"jack_lsp" : "lsp.c", | |||||
"jack_metro" : "metro.c", | |||||
#"jack_midiseq" : "midiseq.c", | |||||
#"jack_midisine" : "midisine.c", | |||||
"jack_showtime" : "showtime.c", | |||||
"jack_simple_client" : "simple_client.c", | |||||
"jack_zombie" : "zombie.c", | |||||
"jack_load" : "ipload.c", | |||||
"jack_unload" : "ipunload.c", | |||||
} | |||||
example_client_libs = { | |||||
"inprocess" : "inprocess.c", | |||||
} | |||||
# link extra libs? | |||||
extra_libs = {} | |||||
for example_client_program in example_client_programs.keys(): | |||||
extra_libs[example_client_program] = ["jackdmp", "dl"] | |||||
# special cases | |||||
extra_libs["jack_load"] = ["jackmp"] | |||||
extra_libs["jack_unload"] = ["jackmp"] | |||||
env['HAS_READLINE']=True | |||||
if env['HAS_READLINE']: | |||||
extra_libs["jack_transport"] = ["readline", "jackdmp", "dl"] | |||||
example_client_programs["jack_transport"] = "transport.c" | |||||
# | |||||
# Start building | |||||
# | |||||
# build the example clients | # build the example clients | ||||
if env['BUILD_EXAMPLES']: | if env['BUILD_EXAMPLES']: | ||||
clientenv = env.Copy() | clientenv = env.Copy() | ||||
@@ -5,7 +5,7 @@ prefix := /usr | |||||
prefix := ${DESTDIR}${prefix} | prefix := ${DESTDIR}${prefix} | ||||
libdir := lib | libdir := lib | ||||
subprojects := ../common ../common/jack ../tests ../example-clients alsa freebob firewire | |||||
subprojects := ../common ../common/jack ../tests ../example-clients alsa freebob firewire ../linux .. | |||||
sources := $(wildcard *.cpp) $(wildcard */*.cpp) $(wildcard ../common/*.cpp) $(wildcard ../tests/*.cpp) | sources := $(wildcard *.cpp) $(wildcard */*.cpp) $(wildcard ../common/*.cpp) $(wildcard ../tests/*.cpp) | ||||
@@ -121,7 +121,6 @@ $(TARGET_LINUX_FIREWIRE) : $(objects_linux_firewire) | |||||
$(TARGET_LINUX_DUMMY) : $(objects_linux_dummy) | $(TARGET_LINUX_DUMMY) : $(objects_linux_dummy) | ||||
$(CXX) $(CXXFLAGS) -shared $(objects_linux_dummy) $(LIB_LINUX) libjackdmp.so -o $(TARGET_LINUX_DUMMY) | $(CXX) $(CXXFLAGS) -shared $(objects_linux_dummy) $(LIB_LINUX) libjackdmp.so -o $(TARGET_LINUX_DUMMY) | ||||
# Install jackdmp and overwrite jack installation | # Install jackdmp and overwrite jack installation | ||||
install: | install: | ||||
cp jackdmp $(prefix)/bin | cp jackdmp $(prefix)/bin | ||||
@@ -59,84 +59,6 @@ serverenv.Install( env['bindir'], server ) | |||||
drv = serverenv.SharedLibrary( "jack_dummy", srcfiles_linux_dummy ) | drv = serverenv.SharedLibrary( "jack_dummy", srcfiles_linux_dummy ) | ||||
serverenv.InstallAs( env['libdir']+ "/jackmp/jack_dummy.so", drv ) | serverenv.InstallAs( env['libdir']+ "/jackmp/jack_dummy.so", drv ) | ||||
if env['ENABLE_ALSA']: | |||||
if not env.GetOption('clean'): | |||||
serverenv.MergeFlags( env['ALSA_FLAGS'] ) | |||||
drv = serverenv.SharedLibrary( "jack_alsa", srcfiles_linux_alsa ) | |||||
serverenv.InstallAs( env['libdir']+ "/jackmp/jack_alsa.so", drv ) | |||||
if env['ENABLE_FREEBOB']: | |||||
if not env.GetOption('clean'): | |||||
serverenv.MergeFlags( env['FREEBOB_FLAGS'] ) | |||||
drv = serverenv.SharedLibrary( "jack_freebob", srcfiles_linux_freebob ) | |||||
serverenv.InstallAs( env['libdir']+ "/jackmp/jack_freebob.so", drv ) | |||||
if env['ENABLE_FIREWIRE']: | |||||
if not env.GetOption('clean'): | |||||
serverenv.MergeFlags( env['FFADO_FLAGS'] ) | |||||
drv = serverenv.SharedLibrary( "jack_firewire", srcfiles_linux_ffado ) | |||||
serverenv.InstallAs( env['libdir']+ "/jackmp/jack_firewire.so", drv ) | |||||
# | |||||
# Copyright (C) 2007 Arnold Krille | |||||
# Copyright (C) 2007 Pieter Palmers | |||||
# | |||||
# This file originates from FFADO (www.ffado.org) | |||||
# | |||||
# This program is free software: you can redistribute it and/or modify | |||||
# it under the terms of the GNU General Public License as published by | |||||
# the Free Software Foundation, either version 3 of the License, or | |||||
# (at your option) any later version. | |||||
# | |||||
# This program 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 General Public License for more details. | |||||
# | |||||
# You should have received a copy of the GNU General Public License | |||||
# along with this program. If not, see <http://www.gnu.org/licenses/>. | |||||
# | |||||
import os | |||||
from string import Template | |||||
Import( 'env' ) | |||||
# paths where include files can be found | |||||
env.AppendUnique( CPPPATH=["#/", "#/common", "#/common/jack", "#/linux"] ) | |||||
# | |||||
# Define the source files | |||||
# | |||||
srcfiles_linux_server = ['#/common/Jackdmp.cpp'] | |||||
srcfiles_linux_alsa = env.Split( '\ | |||||
JackAlsaDriver.cpp memops.c generic_hw.c hdsp.c hammerfall.c ice1712.c') | |||||
for i in range(len(srcfiles_linux_alsa)): | |||||
srcfiles_linux_alsa[i] = 'alsa/%s' % srcfiles_linux_alsa[i] | |||||
srcfiles_linux_freebob = ['freebob/JackFreebobDriver.cpp'] | |||||
srcfiles_linux_ffado = ['firewire/JackFFADODriver.cpp'] | |||||
srcfiles_linux_dummy = ['#/common/JackDummyDriver.cpp'] | |||||
# | |||||
# Start building | |||||
# | |||||
#pkgconfig = env.ScanReplace( "libjackmp.pc.in" ) | |||||
#env.Install( env['libdir'] + '/pkgconfig', pkgconfig ) | |||||
# build the server and its backends | |||||
serverenv = env.Copy() | |||||
serverenv.PrependUnique( LIBPATH=env['build_base'] ) | |||||
serverenv.PrependUnique( LIBS=["jackdmp", "dl"] ) | |||||
server = serverenv.Program("jackdmp", srcfiles_linux_server) | |||||
serverenv.Install( env['bindir'], server ) | |||||
drv = serverenv.SharedLibrary( "jack_dummy", srcfiles_linux_dummy ) | |||||
serverenv.InstallAs( env['libdir']+ "/jackmp/jack_dummy.so", drv ) | |||||
if env['ENABLE_ALSA']: | if env['ENABLE_ALSA']: | ||||
if not env.GetOption('clean'): | if not env.GetOption('clean'): | ||||
serverenv.MergeFlags( env['ALSA_FLAGS'] ) | serverenv.MergeFlags( env['ALSA_FLAGS'] ) | ||||
@@ -1,311 +0,0 @@ | |||||
/* | |||||
Copyright (C) 2001 Paul Davis | |||||
This program is free software; you can redistribute it and/or modify | |||||
it under the terms of the GNU General Public License as published by | |||||
the Free Software Foundation; either version 2 of the License, or | |||||
(at your option) any later version. | |||||
This program 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 General Public License for more details. | |||||
You should have received a copy of the GNU General Public License | |||||
along with this program; if not, write to the Free Software | |||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |||||
$Id: driver.h,v 1.2 2005/11/23 11:24:29 letz Exp $ | |||||
*/ | |||||
#ifndef __jack_driver_h__ | |||||
#define __jack_driver_h__ | |||||
#include <pthread.h> | |||||
#include "types.h" | |||||
#include "jslist.h" | |||||
#include "driver_interface.h" | |||||
typedef float gain_t; | |||||
typedef long channel_t; | |||||
typedef enum { | |||||
Lock = 0x1, | |||||
NoLock = 0x2, | |||||
Sync = 0x4, | |||||
NoSync = 0x8 | |||||
} ClockSyncStatus; | |||||
typedef void (*ClockSyncListenerFunction)(channel_t, ClockSyncStatus, void*); | |||||
typedef struct | |||||
{ | |||||
unsigned long id; | |||||
ClockSyncListenerFunction function; | |||||
void *arg; | |||||
} | |||||
ClockSyncListener; | |||||
struct _jack_engine; | |||||
struct _jack_driver; | |||||
typedef int (*JackDriverAttachFunction)(struct _jack_driver *, | |||||
struct _jack_engine *); | |||||
typedef int (*JackDriverDetachFunction)(struct _jack_driver *, | |||||
struct _jack_engine *); | |||||
typedef int (*JackDriverReadFunction)(struct _jack_driver *, | |||||
jack_nframes_t nframes); | |||||
typedef int (*JackDriverWriteFunction)(struct _jack_driver *, | |||||
jack_nframes_t nframes); | |||||
typedef int (*JackDriverNullCycleFunction)(struct _jack_driver *, | |||||
jack_nframes_t nframes); | |||||
typedef int (*JackDriverStopFunction)(struct _jack_driver *); | |||||
typedef int (*JackDriverStartFunction)(struct _jack_driver *); | |||||
typedef int (*JackDriverBufSizeFunction)(struct _jack_driver *, | |||||
jack_nframes_t nframes); | |||||
/* | |||||
Call sequence summary: | |||||
1) engine loads driver via runtime dynamic linking | |||||
- calls jack_driver_load | |||||
- we call dlsym for "driver_initialize" and execute it | |||||
2) engine attaches to driver | |||||
3) engine starts driver | |||||
4) driver runs its own thread, calling | |||||
while () { | |||||
driver->wait (); | |||||
driver->engine->run_cycle () | |||||
} | |||||
5) engine stops driver | |||||
6) engine detaches from driver | |||||
7) engine calls driver `finish' routine | |||||
Note that stop/start may be called multiple times in the event of an | |||||
error return from the `wait' function. | |||||
*/ | |||||
typedef struct _jack_driver | |||||
{ | |||||
/* The _jack_driver structure fields are included at the beginning of | |||||
each driver-specific structure using the JACK_DRIVER_DECL macro, | |||||
which is defined below. The comments that follow describe each | |||||
common field. | |||||
The driver should set this to be the interval it expects to elapse | |||||
between returning from the `wait' function. if set to zero, it | |||||
implies that the driver does not expect regular periodic wakeups. | |||||
jack_time_t period_usecs; | |||||
The driver should set this within its "wait" function to indicate | |||||
the UST of the most recent determination that the engine cycle | |||||
should run. it should not be set if the "extra_fd" argument of | |||||
the wait function is set to a non-zero value. | |||||
jack_time_t last_wait_ust; | |||||
These are not used by the driver. They should not be written to or | |||||
modified in any way | |||||
void *handle; | |||||
struct _jack_internal_client *internal_client; | |||||
This should perform any cleanup associated with the driver. it will | |||||
be called when jack server process decides to get rid of the | |||||
driver. in some systems, it may not be called at all, so the driver | |||||
should never rely on a call to this. it can set it to NULL if | |||||
it has nothing do do. | |||||
void (*finish)(struct _jack_driver *); | |||||
The JACK engine will call this when it wishes to attach itself to | |||||
the driver. the engine will pass a pointer to itself, which the driver | |||||
may use in anyway it wishes to. the driver may assume that this | |||||
is the same engine object that will make `wait' calls until a | |||||
`detach' call is made. | |||||
JackDriverAttachFunction attach; | |||||
The JACK engine will call this when it is finished using a driver. | |||||
JackDriverDetachFunction detach; | |||||
The JACK engine will call this when it wants to wait until the | |||||
driver decides that its time to process some data. the driver returns | |||||
a count of the number of audioframes that can be processed. | |||||
it should set the variable pointed to by `status' as follows: | |||||
zero: the wait completed normally, processing may begin | |||||
negative: the wait failed, and recovery is not possible | |||||
positive: the wait failed, and the driver stopped itself. | |||||
a call to `start' will return the driver to | |||||
a correct and known state. | |||||
the driver should also fill out the `delayed_usecs' variable to | |||||
indicate any delay in its expected periodic execution. for example, | |||||
if it discovers that its return from poll(2) is later than it | |||||
expects it to be, it would place an estimate of the delay | |||||
in this variable. the engine will use this to decide if it | |||||
plans to continue execution. | |||||
JackDriverWaitFunction wait; | |||||
The JACK engine will call this to ask the driver to move | |||||
data from its inputs to its output port buffers. it should | |||||
return 0 to indicate successful completion, negative otherwise. | |||||
This function will always be called after the wait function (above). | |||||
JackDriverReadFunction read; | |||||
The JACK engine will call this to ask the driver to move | |||||
data from its input port buffers to its outputs. it should | |||||
return 0 to indicate successful completion, negative otherwise. | |||||
this function will always be called after the read function (above). | |||||
JackDriverWriteFunction write; | |||||
The JACK engine will call this after the wait function (above) has | |||||
been called, but for some reason the engine is unable to execute | |||||
a full "cycle". the driver should do whatever is necessary to | |||||
keep itself running correctly, but cannot reference ports | |||||
or other JACK data structures in any way. | |||||
JackDriverNullCycleFunction null_cycle; | |||||
The engine will call this when it plans to stop calling the `wait' | |||||
function for some period of time. the driver should take | |||||
appropriate steps to handle this (possibly no steps at all). | |||||
NOTE: the driver must silence its capture buffers (if any) | |||||
from within this function or the function that actually | |||||
implements the change in state. | |||||
JackDriverStopFunction stop; | |||||
The engine will call this to let the driver know that it plans | |||||
to start calling the `wait' function on a regular basis. the driver | |||||
should take any appropriate steps to handle this (possibly no steps | |||||
at all). NOTE: The driver may wish to silence its playback buffers | |||||
(if any) from within this function or the function that actually | |||||
implements the change in state. | |||||
JackDriverStartFunction start; | |||||
The engine will call this to let the driver know that some client | |||||
has requested a new buffer size. The stop function will be called | |||||
prior to this, and the start function after this one has returned. | |||||
JackDriverBufSizeFunction bufsize; | |||||
*/ | |||||
/* define the fields here... */ | |||||
#define JACK_DRIVER_DECL \ | |||||
jack_time_t period_usecs; \ | |||||
jack_time_t last_wait_ust; \ | |||||
void *handle; \ | |||||
struct _jack_client_internal * internal_client; \ | |||||
void (*finish)(struct _jack_driver *);\ | |||||
JackDriverAttachFunction attach; \ | |||||
JackDriverDetachFunction detach; \ | |||||
JackDriverReadFunction read; \ | |||||
JackDriverWriteFunction write; \ | |||||
JackDriverNullCycleFunction null_cycle; \ | |||||
JackDriverStopFunction stop; \ | |||||
JackDriverStartFunction start; \ | |||||
JackDriverBufSizeFunction bufsize; | |||||
JACK_DRIVER_DECL /* expand the macro */ | |||||
} | |||||
jack_driver_t; | |||||
typedef jack_driver_desc_t * (*JackDriverDescFunction) (); | |||||
void jack_driver_init (jack_driver_t *); | |||||
void jack_driver_release (jack_driver_t *); | |||||
jack_driver_t *jack_driver_load (int argc, char **argv); | |||||
void jack_driver_unload (jack_driver_t *); | |||||
/**************************** | |||||
*** Non-Threaded Drivers *** | |||||
****************************/ | |||||
/* | |||||
Call sequence summary: | |||||
1) engine loads driver via runtime dynamic linking | |||||
- calls jack_driver_load | |||||
- we call dlsym for "driver_initialize" and execute it | |||||
- driver_initialize calls jack_driver_nt_init | |||||
2) nt layer attaches to driver | |||||
3) nt layer starts driver | |||||
4) nt layer runs a thread, calling | |||||
while () { | |||||
driver->nt_run_ctcle(); | |||||
} | |||||
5) nt layer stops driver | |||||
6) nt layer detaches driver | |||||
7) engine calls driver `finish' routine which calls jack_driver_nt_finish | |||||
Note that stop/start may be called multiple times in the event of an | |||||
error return from the `wait' function. | |||||
*/ | |||||
struct _jack_driver_nt; | |||||
typedef int (*JackDriverNTAttachFunction)(struct _jack_driver_nt *); | |||||
typedef int (*JackDriverNTDetachFunction)(struct _jack_driver_nt *); | |||||
typedef int (*JackDriverNTStopFunction)(struct _jack_driver_nt *); | |||||
typedef int (*JackDriverNTStartFunction)(struct _jack_driver_nt *); | |||||
typedef int (*JackDriverNTBufSizeFunction)(struct _jack_driver_nt *, | |||||
jack_nframes_t nframes); | |||||
typedef int (*JackDriverNTRunCycleFunction)(struct _jack_driver_nt *); | |||||
typedef struct _jack_driver_nt | |||||
{ | |||||
#define JACK_DRIVER_NT_DECL \ | |||||
JACK_DRIVER_DECL \ | |||||
struct _jack_engine * engine; \ | |||||
volatile int nt_run; \ | |||||
pthread_t nt_thread; \ | |||||
pthread_mutex_t nt_run_lock; \ | |||||
JackDriverNTAttachFunction nt_attach; \ | |||||
JackDriverNTDetachFunction nt_detach; \ | |||||
JackDriverNTStopFunction nt_stop; \ | |||||
JackDriverNTStartFunction nt_start; \ | |||||
JackDriverNTBufSizeFunction nt_bufsize; \ | |||||
JackDriverNTRunCycleFunction nt_run_cycle; | |||||
#define nt_read read | |||||
#define nt_write write | |||||
#define nt_null_cycle null_cycle | |||||
JACK_DRIVER_NT_DECL | |||||
} | |||||
jack_driver_nt_t; | |||||
void jack_driver_nt_init (jack_driver_nt_t * driver); | |||||
void jack_driver_nt_finish (jack_driver_nt_t * driver); | |||||
#endif /* __jack_driver_h__ */ |
@@ -282,10 +282,17 @@ OSStatus JackCoreAudioDriver::DeviceNotificationCallback(AudioDeviceID inDevice, | |||||
break; | break; | ||||
case kAudioDevicePropertyNominalSampleRate: { | case kAudioDevicePropertyNominalSampleRate: { | ||||
OSStatus err; | |||||
/* | |||||
err = AudioOutputUnitStop(driver->fAUHAL); | |||||
if (err != noErr) | |||||
jack_error("Error calling AudioOutputUnitStop"); | |||||
*/ | |||||
UInt32 outSize = sizeof(Float64); | UInt32 outSize = sizeof(Float64); | ||||
Float64 sampleRate; | Float64 sampleRate; | ||||
AudioStreamBasicDescription srcFormat, dstFormat; | AudioStreamBasicDescription srcFormat, dstFormat; | ||||
OSStatus err = AudioDeviceGetProperty(driver->fDeviceID, 0, kAudioDeviceSectionGlobal, kAudioDevicePropertyNominalSampleRate, &outSize, &sampleRate); | |||||
err = AudioDeviceGetProperty(driver->fDeviceID, 0, kAudioDeviceSectionGlobal, kAudioDevicePropertyNominalSampleRate, &outSize, &sampleRate); | |||||
if (err != noErr) { | if (err != noErr) { | ||||
jack_error("Cannot get current sample rate"); | jack_error("Cannot get current sample rate"); | ||||
printError(err); | printError(err); | ||||
@@ -319,6 +326,11 @@ OSStatus JackCoreAudioDriver::DeviceNotificationCallback(AudioDeviceID inDevice, | |||||
jack_error("Error calling AudioUnitSetProperty - kAudioUnitProperty_StreamFormat kAudioUnitScope_Output"); | jack_error("Error calling AudioUnitSetProperty - kAudioUnitProperty_StreamFormat kAudioUnitScope_Output"); | ||||
printError(err); | printError(err); | ||||
} | } | ||||
/* | |||||
err = AudioOutputUnitStart(driver->fAUHAL); | |||||
if (err != noErr) | |||||
jack_error("Error calling AudioOutputUnitStart"); | |||||
*/ | |||||
break; | break; | ||||
} | } | ||||
} | } | ||||
@@ -47,58 +47,6 @@ testenv = env.Copy() | |||||
testenv.PrependUnique( LIBPATH=env['build_base'] ) | testenv.PrependUnique( LIBPATH=env['build_base'] ) | ||||
testenv.PrependUnique( LIBS="jackmp" ) | testenv.PrependUnique( LIBS="jackmp" ) | ||||
for test_program in test_programs.keys(): | |||||
testenv.Program(target=test_program, | |||||
source=env.Split( test_programs[test_program] ) ) | |||||
# | |||||
# Copyright (C) 2007 Arnold Krille | |||||
# Copyright (C) 2007 Pieter Palmers | |||||
# | |||||
# This file originates from FFADO (www.ffado.org) | |||||
# | |||||
# This program is free software: you can redistribute it and/or modify | |||||
# it under the terms of the GNU General Public License as published by | |||||
# the Free Software Foundation, either version 3 of the License, or | |||||
# (at your option) any later version. | |||||
# | |||||
# This program 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 General Public License for more details. | |||||
# | |||||
# You should have received a copy of the GNU General Public License | |||||
# along with this program. If not, see <http://www.gnu.org/licenses/>. | |||||
# | |||||
import os | |||||
from string import Template | |||||
Import( 'env' ) | |||||
# paths where include files can be found | |||||
env.AppendUnique( CPPPATH=["#/", "#/common"] ) | |||||
# | |||||
# Define the source files | |||||
# | |||||
test_programs = { | |||||
"synchroClient" : "testSynchroClient.cpp #/common/JackPosixSemaphore.cpp #/common/JackPosixThread.cpp #/common/JackError.c #/common/JackFifo.cpp", | |||||
"synchroServer" : "testSynchroServer.cpp #/common/JackPosixSemaphore.cpp #/common/JackPosixThread.cpp #/common/JackError.c #/common/JackFifo.cpp", | |||||
"synchroServerClient" : "testSynchroServerClient.cpp #/common/JackPosixSemaphore.cpp #/common/JackPosixThread.cpp #/common/JackError.c #/common/JackFifo.cpp #/common/JackPthreadCond.cpp", | |||||
"testSem" : "testSem.cpp #/common/JackPosixSemaphore.cpp #/common/JackPosixThread.cpp #/common/JackError.c #/common/JackFifo.cpp", | |||||
"jack_test" : "jack_test.cpp", | |||||
} | |||||
# | |||||
# Start building | |||||
# | |||||
# build the tests | |||||
testenv = env.Copy() | |||||
testenv.PrependUnique( LIBPATH=env['build_base'] ) | |||||
testenv.PrependUnique( LIBS="jackmp" ) | |||||
for test_program in test_programs.keys(): | for test_program in test_programs.keys(): | ||||
testenv.Program(target=test_program, | testenv.Program(target=test_program, | ||||
source=env.Split( test_programs[test_program] ) ) | source=env.Split( test_programs[test_program] ) ) |