jack2 codebase
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

268 lines
9.3KB

  1. #! /usr/bin/env python
  2. # encoding: utf-8
  3. import re
  4. import os
  5. def configure(conf):
  6. conf.check_tool('misc')
  7. e = conf.create_header_configurator()
  8. e.name = 'samplerate.h'
  9. e.define = 'HAVE_SAMPLERATE'
  10. e.run()
  11. if conf.is_defined('HAVE_SAMPLERATE'):
  12. conf.env['LIB_SAMPLERATE'] = ['samplerate']
  13. conf.env['BUILD_ADAPTER'] = conf.is_defined('HAVE_SAMPLERATE')
  14. # by default waf subst tool uses @VAR@ while scons legacy is ${VAR}
  15. # so we use same template as scons for now
  16. def subst_func(tsk):
  17. "Substitutes variables in a .in file"
  18. m4_re = re.compile('\$\{(\w+)\}', re.M)
  19. env = tsk.env()
  20. infile = tsk.m_inputs[0].abspath(env)
  21. outfile = tsk.m_outputs[0].abspath(env)
  22. file = open(infile, 'r')
  23. code = file.read()
  24. file.close()
  25. s = m4_re.sub(r'%(\1)s', code)
  26. dict = tsk.dict
  27. if not dict:
  28. names = m4_re.findall(code)
  29. for i in names:
  30. if env[i] and type(env[i]) is types.ListType :
  31. dict[i] = " ".join(env[i])
  32. else: dict[i] = env[i]
  33. file = open(outfile, 'w')
  34. file.write(s % dict)
  35. file.close()
  36. return 0
  37. def create_jack_process_obj(bld, target, sources, uselib = None):
  38. process = bld.create_obj('cpp', 'shlib')
  39. process.env['shlib_PATTERN'] = '%s.so'
  40. process.defines = ['HAVE_CONFIG_H','SERVER_SIDE']
  41. if bld.env()['IS_MACOSX']:
  42. env_includes = ['../macosx', '../posix', '../macosx/coreaudio']
  43. if bld.env()['IS_LINUX']:
  44. env_includes = ['../linux', '../posix', '../linux/alsa']
  45. process.includes = ['.'] + env_includes + ['jack', '..']
  46. process.name = target
  47. process.target = target
  48. process.source = sources
  49. process.env.append_value("CPPFLAGS", "-fvisibility=hidden")
  50. if bld.env()['IS_MACOSX']:
  51. process.env.append_value("CPPFLAGS", "-mmacosx-version-min=10.4 -arch i386 -arch ppc")
  52. #process.env.append_value("LINKFLAGS", "-arch i386 -arch ppc")
  53. process.env.append_value("LINKFLAGS", "")
  54. process.inst_var = bld.env()['ADDON_DIR']
  55. process.inst_dir = '/'
  56. process.uselib_local = uselib.name
  57. return process
  58. def build(bld):
  59. common_libsources = [
  60. 'JackActivationCount.cpp',
  61. 'JackAPI.cpp',
  62. 'JackClient.cpp',
  63. 'JackConnectionManager.cpp',
  64. 'ringbuffer.c',
  65. 'JackError.cpp',
  66. 'JackFrameTimer.cpp',
  67. 'JackGraphManager.cpp',
  68. 'JackPort.cpp',
  69. 'JackPortType.cpp',
  70. 'JackAudioPort.cpp',
  71. 'JackMidiPort.cpp',
  72. 'JackMidiAPI.cpp',
  73. 'JackEngineControl.cpp',
  74. 'JackShmMem.cpp',
  75. 'shm.c',
  76. 'JackGlobals.cpp',
  77. 'JackDebugClient.cpp',
  78. 'JackTransportEngine.cpp',
  79. 'timestamps.c',
  80. 'JackTools.cpp',
  81. 'JackMessageBuffer.cpp',
  82. ]
  83. includes = ['.', './jack', '..']
  84. uselib = ["PTHREAD"]
  85. if bld.env()['IS_LINUX']:
  86. common_libsources += [
  87. '../posix/JackPosixThread.cpp',
  88. '../posix/JackPosixSemaphore.cpp',
  89. '../posix/JackFifo.cpp',
  90. '../posix/JackProcessSync.cpp',
  91. '../posix/JackSocket.cpp',
  92. '../linux/JackLinuxTime.c',
  93. ]
  94. includes = ['../linux', '../posix'] + includes
  95. uselib.append('RT')
  96. uselib.append('DL')
  97. if bld.env()['IS_MACOSX']:
  98. common_libsources += [
  99. '../posix/JackProcessSync.cpp',
  100. '../posix/JackPosixThread.cpp',
  101. '../macosx/JackMachThread.cpp',
  102. '../macosx/JackMachSemaphore.cpp',
  103. '../macosx/JackMachPort.cpp',
  104. '../macosx/JackMachTime.c',
  105. ]
  106. includes = ['../macosx', '../macosx/RPC', '../posix'] + includes
  107. serverlib = bld.create_obj('cpp', 'shlib')
  108. serverlib.features.append('cc')
  109. serverlib.defines = ['HAVE_CONFIG_H','SERVER_SIDE']
  110. serverlib.includes = includes
  111. serverlib.name = 'serverlib'
  112. serverlib.target = 'jackserver'
  113. serverlib.uselib = uselib
  114. serverlib.source = [] + common_libsources
  115. serverlib.source += [
  116. 'JackAudioDriver.cpp',
  117. 'JackDriver.cpp',
  118. 'JackEngine.cpp',
  119. 'JackExternalClient.cpp',
  120. 'JackFreewheelDriver.cpp',
  121. 'JackInternalClient.cpp',
  122. 'JackLoopbackDriver.cpp',
  123. 'JackServer.cpp',
  124. 'JackThreadedDriver.cpp',
  125. 'JackRestartThreadedDriver.cpp',
  126. 'JackWaitThreadedDriver.cpp',
  127. 'JackServerAPI.cpp',
  128. 'JackDriverLoader.cpp',
  129. 'JackServerGlobals.cpp',
  130. 'JackControlAPI.cpp',
  131. 'JackNetTool.cpp',
  132. 'JackNetInterface.cpp',
  133. ]
  134. if bld.env()['IS_LINUX']:
  135. serverlib.source += [
  136. '../posix/JackSocketServerChannel.cpp',
  137. '../posix/JackSocketNotifyChannel.cpp',
  138. '../posix/JackSocketServerNotifyChannel.cpp',
  139. '../posix/JackNetUnixSocket.cpp',
  140. ]
  141. if bld.env()['IS_MACOSX']:
  142. serverlib.source += [
  143. '../macosx/JackMachServerChannel.cpp',
  144. '../macosx/JackMachNotifyChannel.cpp',
  145. '../macosx/JackMachServerNotifyChannel.cpp',
  146. '../macosx/JackMacEngineRPC.cpp',
  147. '../macosx/RPC/JackRPCClientUser.c',
  148. '../posix/JackNetUnixSocket.cpp',
  149. ]
  150. serverlib.vnum = bld.env()['JACK_API_VERSION']
  151. serverlib.env.append_value("CPPFLAGS", "-fvisibility=hidden")
  152. if bld.env()['IS_MACOSX']:
  153. serverlib.env.append_value("CPPFLAGS", "-mmacosx-version-min=10.4 -arch i386 -arch ppc")
  154. #serverlib.env.append_value("LINKFLAGS", "-framework CoreAudio -framework vecLib -single_module -arch i386 -arch ppc")
  155. serverlib.env.append_value("LINKFLAGS", "-framework CoreAudio -framework vecLib -single_module")
  156. serverlib.env.append_value("LINKFLAGS", "-compatibility_version 1 -current_version 1")
  157. clientlib = bld.create_obj('cpp', 'shlib')
  158. clientlib.features.append('cc')
  159. clientlib.defines = 'HAVE_CONFIG_H'
  160. clientlib.uselib = uselib
  161. if bld.env()['BUILD_JACKDBUS'] == True:
  162. clientlib.uselib.append('DBUS-1')
  163. clientlib.includes = includes
  164. clientlib.name = 'clientlib'
  165. clientlib.target = 'jack'
  166. clientlib.source = [] + common_libsources
  167. clientlib.source += [
  168. 'JackLibClient.cpp',
  169. 'JackLibAPI.cpp',
  170. ]
  171. if bld.env()['IS_LINUX']:
  172. clientlib.source += [
  173. '../posix/JackSocketClientChannel.cpp',
  174. '../posix/JackPosixServerLaunch.cpp',
  175. ]
  176. if bld.env()['IS_MACOSX']:
  177. clientlib.source += [
  178. '../macosx/JackMachClientChannel.cpp',
  179. '../macosx/RPC/JackRPCEngineUser.c',
  180. '../macosx/JackMacLibClientRPC.cpp',
  181. '../posix/JackPosixServerLaunch.cpp',
  182. ]
  183. clientlib.vnum = bld.env()['JACK_API_VERSION']
  184. clientlib.env.append_value("CPPFLAGS", "-fvisibility=hidden")
  185. if bld.env()['IS_MACOSX']:
  186. clientlib.env.append_value("CPPFLAGS", "-mmacosx-version-min=10.4 -arch i386 -arch ppc")
  187. #clientlib.env.append_value("LINKFLAGS", "-framework CoreAudio -framework vecLib -single_module -arch i386 -arch ppc")
  188. clientlib.env.append_value("LINKFLAGS", "-framework CoreAudio -framework vecLib -single_module")
  189. clientlib.env.append_value("LINKFLAGS", "-compatibility_version 1 -current_version 1")
  190. create_jack_process_obj(bld, 'netmanager', 'JackNetManager.cpp', serverlib)
  191. net_adapter_sources = [
  192. 'JackResampler.cpp',
  193. 'JackLibSampleRateResampler.cpp',
  194. 'JackAudioAdapter.cpp',
  195. 'JackAudioAdapterInterface.cpp',
  196. 'JackNetAdapter.cpp',
  197. ]
  198. if bld.env()['BUILD_ADAPTER'] == True:
  199. process = create_jack_process_obj(bld, 'netadapter', net_adapter_sources, serverlib)
  200. process.uselib = 'SAMPLERATE'
  201. audio_adapter_sources = [
  202. 'JackResampler.cpp',
  203. 'JackLibSampleRateResampler.cpp',
  204. 'JackAudioAdapter.cpp',
  205. 'JackAudioAdapterInterface.cpp',
  206. 'JackAudioAdapterFactory.cpp',
  207. ]
  208. if bld.env()['BUILD_ADAPTER'] and bld.env()['IS_MACOSX']:
  209. audio_adapter_sources += ['../macosx/coreaudio/JackCoreAudioAdapter.cpp']
  210. process = create_jack_process_obj(bld, 'audioadapter', audio_adapter_sources, serverlib)
  211. process.env.append_value("LINKFLAGS", "-framework CoreAudio -framework AudioUnit -framework AudioToolbox -framework CoreServices")
  212. process.uselib = 'SAMPLERATE'
  213. if bld.env()['BUILD_ADAPTER'] and bld.env()['IS_LINUX']:
  214. audio_adapter_sources += ['../linux/alsa/JackAlsaAdapter.cpp']
  215. process = create_jack_process_obj(bld, 'audioadapter', audio_adapter_sources, serverlib)
  216. process.uselib = ['ALSA', 'SAMPLERATE']
  217. #audio_adapter_sources += ['../windows/JackPortAudioAdapter.cpp']
  218. #process = create_jack_process_obj(bld, 'audioadapter', audio_adapter_sources, serverlib)
  219. install_files('PREFIX', 'include/jack', 'jack/*.h')
  220. # process jack.pc.in -> jack.pc
  221. obj = bld.create_obj('subst')
  222. obj.source = '../jack.pc.in'
  223. obj.target = 'jack.pc'
  224. obj.dict = {'PREFIX': bld.env()['PREFIX'],
  225. 'LIBDIR': os.path.normpath(bld.env()['PREFIX'] + '/lib'),
  226. 'INCLUDEDIR': os.path.normpath(bld.env()['PREFIX'] + '/include'),
  227. 'SERVERLIB': serverlib.target,
  228. 'JACK_VERSION': bld.env()['JACK_VERSION'],
  229. }
  230. obj.inst_var = bld.env()['PREFIX']
  231. obj.inst_dir = '/lib/pkgconfig/'
  232. obj.fun = subst_func # @VAR@ -> ${VAR}