#! /usr/bin/env python # encoding: utf-8 import re import os def configure(conf): conf.check_tool('misc') # by default waf subst tool uses @VAR@ while scons legacy is ${VAR} # so we use same template as scons for now def subst_func(tsk): "Substitutes variables in a .in file" m4_re = re.compile('\$\{(\w+)\}', re.M) env = tsk.env() infile = tsk.m_inputs[0].abspath(env) outfile = tsk.m_outputs[0].abspath(env) file = open(infile, 'r') code = file.read() file.close() s = m4_re.sub(r'%(\1)s', code) dict = tsk.dict if not dict: names = m4_re.findall(code) for i in names: if env[i] and type(env[i]) is types.ListType : dict[i] = " ".join(env[i]) else: dict[i] = env[i] file = open(outfile, 'w') file.write(s % dict) file.close() return 0 def build(bld): common_libsources = [ 'JackActivationCount.cpp', 'JackAPI.cpp', 'JackClient.cpp', 'JackConnectionManager.cpp', 'ringbuffer.c', 'JackError.cpp', 'JackFrameTimer.cpp', 'JackGraphManager.cpp', 'JackPort.cpp', 'JackPortType.cpp', 'JackAudioPort.cpp', 'JackMidiPort.cpp', 'JackMidiAPI.cpp', 'JackEngineControl.cpp', 'JackPosixThread.cpp', 'JackShmMem.cpp', 'shm.c', 'JackSocket.cpp', 'JackTime.c', 'JackGlobals.cpp', 'JackDebugClient.cpp', 'JackTransportEngine.cpp', 'timestamps.c', 'JackTools.cpp', 'JackMessageBuffer.cpp', 'JackProcessSync.cpp', ] includes = ['.', './jack', '..'] uselib = ["PTHREAD"] if bld.env()['IS_LINUX']: common_libsources += [ 'JackPosixSemaphore.cpp', 'JackFifo.cpp', ] includes.append('../linux') uselib.append('RT') if bld.env()['IS_MACOSX']: common_libsources += [ '../macosx/JackMachSemaphore.cpp', '../macosx/JackMachThread.cpp', '../macosx/JackMachPort.cpp', ] includes += ['../macosx', '../macosx/RPC'] serverlib = bld.create_obj('cpp', 'shlib') serverlib.features.append('cc') serverlib.defines = 'HAVE_CONFIG_H' serverlib.includes = includes serverlib.name = 'serverlib' serverlib.target = 'jackserver' serverlib.uselib = uselib serverlib.source = [] + common_libsources serverlib.source += [ 'JackAudioDriver.cpp', 'JackDriver.cpp', 'JackEngine.cpp', 'JackExternalClient.cpp', 'JackFreewheelDriver.cpp', 'JackInternalClient.cpp', 'JackLoopbackDriver.cpp', 'JackServer.cpp', 'JackThreadedDriver.cpp', 'JackWaitThreadedDriver.cpp', 'JackServerAPI.cpp', 'JackDriverLoader.cpp', 'JackServerGlobals.cpp', 'JackControl.cpp', 'JackNetTool.cpp', ] if bld.env()['IS_LINUX']: serverlib.source += [ 'JackSocketServerChannel.cpp', 'JackSocketNotifyChannel.cpp', 'JackSocketServerNotifyChannel.cpp', ] if bld.env()['IS_MACOSX']: serverlib.source += [ '../macosx/JackMachServerChannel.cpp', '../macosx/JackMachNotifyChannel.cpp', '../macosx/JackMachServerNotifyChannel.cpp', '../macosx/JackMacEngineRPC.cpp', '../macosx/RPC/JackRPCClientUser.c', ] serverlib.vnum = bld.env()['JACK_API_VERSION'] serverlib.env.append_value("CPPFLAGS", "-fvisibility=hidden") if bld.env()['IS_MACOSX']: serverlib.env.append_value("LINKFLAGS", "-framework CoreAudio -framework vecLib") clientlib = bld.create_obj('cpp', 'shlib') clientlib.features.append('cc') clientlib.defines = 'HAVE_CONFIG_H' clientlib.uselib = uselib if bld.env()['BUILD_JACKDBUS'] == True: clientlib.uselib.append('DBUS-1') clientlib.includes = includes clientlib.name = 'clientlib' clientlib.target = 'jack' clientlib.source = [] + common_libsources clientlib.source += [ 'JackLibClient.cpp', 'JackLibAPI.cpp', 'JackServerLaunch.cpp', ] if bld.env()['IS_LINUX']: clientlib.source += [ 'JackSocketClientChannel.cpp', ] if bld.env()['IS_MACOSX']: clientlib.source += [ '../macosx/JackMachClientChannel.cpp', '../macosx/RPC/JackRPCEngineUser.c', '../macosx/JackMacLibClientRPC.cpp', ] clientlib.vnum = bld.env()['JACK_API_VERSION'] clientlib.env.append_value("CPPFLAGS", "-fvisibility=hidden") if bld.env()['IS_MACOSX']: clientlib.env.append_value("LINKFLAGS", "-framework CoreAudio -framework vecLib") netmanagerlib = bld.create_obj('cpp', 'shlib') netmanagerlib.env['shlib_PATTERN'] = '%s.so' netmanagerlib.includes = ['./jack', '.'] netmanagerlib.name = 'netmanager' netmanagerlib.target = 'netmanager' netmanagerlib.source = 'JackNetManager.cpp' netmanagerlib.env.append_value("CPPFLAGS", "-fvisibility=hidden") netmanagerlib.inst_var = bld.env()['ADDON_DIR'] netmanagerlib.inst_dir = '/' if bld.env()['IS_MACOSX']: # is this really macosx sepcific? netmanagerlib.uselib_local = serverlib.name install_files('PREFIX', 'include/jack', 'jack/*.h') # process jack.pc.in -> jack.pc obj = bld.create_obj('subst') obj.source = '../jack.pc.in' obj.target = 'jack.pc' obj.dict = {'PREFIX': bld.env()['PREFIX'], 'LIBDIR': os.path.normpath(bld.env()['PREFIX'] + '/lib'), 'INCLUDEDIR': os.path.normpath(bld.env()['PREFIX'] + '/include'), 'SERVERLIB': serverlib.target, 'JACK_VERSION': bld.env()['JACK_VERSION'], } obj.inst_var = bld.env()['PREFIX'] obj.inst_dir = '/lib/pkgconfig/' obj.fun = subst_func # @VAR@ -> ${VAR}