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 | |||
| from string import Template | |||
| platform = ARGUMENTS.get('OS', Platform()) | |||
| build_dir = ARGUMENTS.get('BUILDDIR', "") | |||
| if build_dir: | |||
| build_base=build_dir+'/' | |||
| @@ -79,7 +81,8 @@ else: | |||
| 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( """ | |||
| 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( CFLAGS=["-DDEBUG","-Wall","-g"] ) | |||
| 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( CFLAGS=["-fPIC", "-DUSE_POSIX_SHM"] ) | |||
| @@ -236,260 +239,14 @@ if env['BUILD_DOXYGEN_DOCS']: | |||
| env.Doxygen("doxyfile") | |||
| subdirs=['common'] | |||
| if build_for_linux: | |||
| if env['PLATFORM'] == 'posix': | |||
| 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']: | |||
| subdirs.append('example-clients') | |||
| @@ -502,27 +259,3 @@ if build_base: | |||
| else: | |||
| 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 | |||
| #ifdef __linux__ | |||
| #ifndef ADDON_DIR | |||
| #include "config.h" | |||
| #endif | |||
| #endif | |||
| #include "JackDriverLoader.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" | |||
| #endif | |||
| #endif | |||
| #include "JackChannel.h" | |||
| #include "JackLibGlobals.h" | |||
| @@ -27,123 +27,8 @@ Import( 'env' ) | |||
| # paths where include files can be found | |||
| 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 | |||
| @@ -234,80 +119,3 @@ env.Alias("install", env.Install(env['libdir'], wrapperlib)) | |||
| #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") | |||
| # -*- 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 | |||
| # | |||
| # 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 | |||
| if env['BUILD_EXAMPLES']: | |||
| clientenv = env.Copy() | |||
| @@ -5,7 +5,7 @@ prefix := /usr | |||
| prefix := ${DESTDIR}${prefix} | |||
| 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) | |||
| @@ -121,7 +121,6 @@ $(TARGET_LINUX_FIREWIRE) : $(objects_linux_firewire) | |||
| $(TARGET_LINUX_DUMMY) : $(objects_linux_dummy) | |||
| $(CXX) $(CXXFLAGS) -shared $(objects_linux_dummy) $(LIB_LINUX) libjackdmp.so -o $(TARGET_LINUX_DUMMY) | |||
| # Install jackdmp and overwrite jack installation | |||
| install: | |||
| cp jackdmp $(prefix)/bin | |||
| @@ -59,84 +59,6 @@ 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 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 not env.GetOption('clean'): | |||
| 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; | |||
| case kAudioDevicePropertyNominalSampleRate: { | |||
| OSStatus err; | |||
| /* | |||
| err = AudioOutputUnitStop(driver->fAUHAL); | |||
| if (err != noErr) | |||
| jack_error("Error calling AudioOutputUnitStop"); | |||
| */ | |||
| UInt32 outSize = sizeof(Float64); | |||
| Float64 sampleRate; | |||
| 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) { | |||
| jack_error("Cannot get current sample rate"); | |||
| printError(err); | |||
| @@ -319,6 +326,11 @@ OSStatus JackCoreAudioDriver::DeviceNotificationCallback(AudioDeviceID inDevice, | |||
| jack_error("Error calling AudioUnitSetProperty - kAudioUnitProperty_StreamFormat kAudioUnitScope_Output"); | |||
| printError(err); | |||
| } | |||
| /* | |||
| err = AudioOutputUnitStart(driver->fAUHAL); | |||
| if (err != noErr) | |||
| jack_error("Error calling AudioOutputUnitStart"); | |||
| */ | |||
| break; | |||
| } | |||
| } | |||
| @@ -47,58 +47,6 @@ testenv = env.Copy() | |||
| testenv.PrependUnique( LIBPATH=env['build_base'] ) | |||
| 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(): | |||
| testenv.Program(target=test_program, | |||
| source=env.Split( test_programs[test_program] ) ) | |||