#! /usr/bin/env python # encoding: utf-8 import re import os # 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', 'JackPosixSemaphore.cpp', 'JackFifo.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', ] serverlib = bld.create_obj('cpp', 'shlib') serverlib.features.append('cc') serverlib.defines = 'HAVE_CONFIG_H' serverlib.includes = ['.', './jack', '..', '../linux'] serverlib.name = 'serverlib' serverlib.target = 'jackserver' serverlib.uselib = ['RT', "PTHREAD"] serverlib.source = [] + common_libsources serverlib.source += [ 'JackAudioDriver.cpp', 'JackDriver.cpp', 'JackEngine.cpp', 'JackExternalClient.cpp', 'JackFreewheelDriver.cpp', 'JackInternalClient.cpp', 'JackLoopbackDriver.cpp', 'JackServer.cpp', 'JackThreadedDriver.cpp', 'JackSocketServerChannel.cpp', 'JackSocketNotifyChannel.cpp', 'JackSocketServerNotifyChannel.cpp', 'JackServerAPI.cpp', 'JackDriverLoader.cpp', 'JackServerGlobals.cpp', 'JackControl.cpp', 'JackNetTool.cpp', ] serverlib.vnum = bld.env()['JACK_API_VERSION'] clientlib = bld.create_obj('cpp', 'shlib') clientlib.features.append('cc') clientlib.defines = 'HAVE_CONFIG_H' clientlib.uselib = ['RT', "PTHREAD"] if bld.env()['BUILD_JACKDBUS'] == True: clientlib.uselib.append('DBUS-1') clientlib.includes = ['.', './jack', '..', '../linux'] clientlib.name = 'clientlib' clientlib.target = 'jack' clientlib.source = [] + common_libsources clientlib.source += [ 'JackLibClient.cpp', 'JackLibAPI.cpp', 'JackSocketClientChannel.cpp', 'JackServerLaunch.cpp', ] clientlib.vnum = bld.env()['JACK_API_VERSION'] netmanager_lib = bld.create_obj('cpp', 'shlib') netmanager_lib.env['shlib_PATTERN'] = '%s.so' netmanager_lib.includes = ['./jack', '.'] netmanager_lib.name = 'netmanager' netmanager_lib.target = 'netmanager' netmanager_lib.source = 'JackNetManager.cpp' install_files('PREFIX', '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}