8 conf.env['BUILD_NETLIB'] = conf.env['SAMPLERATE']
9 conf.env['BUILD_ADAPTER'] = conf.env['SAMPLERATE']
11 if conf.env['IS_WINDOWS']:
13 conf.check(header_name='regex.h', lib='regex', uselib_store='REGEX', define_name='HAVE_REGEX_H')
15 conf.check(header_name='tre/regex.h', lib='tre', uselib_store='REGEX', define_name='HAVE_TRE_REGEX_H')
16 conf.check(header_name='winsock2.h', lib='ws2_32', uselib_store='WS2_32', define_name='HAVE_WINSOCK2_H')
17 conf.check(header_name=['windows.h', 'mmsystem.h'], lib='winmm', uselib_store='WINMM', define_name='HAVE_MMSYSTEM_H')
18 conf.check(header_name=['windows.h', 'psapi.h'], lib='psapi', uselib_store='PSAPI', define_name='HAVE_PSAPI_H')
20 def create_jack_process_obj(bld, target, sources, uselib = None, framework = None):
21 process = bld(features = ['cxx', 'cxxshlib'])
22 if not bld.env['IS_WINDOWS']:
23 process.env['cxxshlib_PATTERN'] = '%s.so'
24 process.defines = ['HAVE_CONFIG_H','SERVER_SIDE']
25 if bld.env['IS_MACOSX']:
27 process.framework = framework
28 env_includes = ['../macosx', '../posix', '../macosx/coreaudio']
29 if bld.env['IS_LINUX']:
30 env_includes = ['../linux', '../posix', '../linux/alsa']
32 env_includes = ['../solaris', '../posix', '../solaris/oss']
33 if bld.env['IS_WINDOWS']:
34 env_includes = ['../windows', '../windows/portaudio']
35 process.includes = ['.'] + env_includes + ['jack', '..']
37 process.target = target
38 process.source = sources
39 if bld.env['IS_LINUX'] or bld.env['IS_MACOSX']:
40 process.env.append_value('CPPFLAGS', '-fvisibility=hidden')
41 process.install_path = '${ADDON_DIR}/'
42 process.use = [uselib.name]
47 'JackActivationCount.cpp',
50 'JackConnectionManager.cpp',
55 'JackGraphManager.cpp',
61 'JackEngineControl.cpp',
63 'JackGenericClientChannel.cpp',
66 'JackTransportEngine.cpp',
68 'JackMessageBuffer.cpp',
69 'JackEngineProfiling.cpp',
72 includes = ['.', './jack']
76 includes.append('../..')
77 uselib = ['CELT', 'OPUS', 'DB', 'PTHREAD']
79 if bld.env['IS_LINUX']:
80 common_libsources += [
81 'JackDebugClient.cpp',
84 '../posix/JackPosixThread.cpp',
85 '../posix/JackPosixProcessSync.cpp',
86 '../posix/JackPosixMutex.cpp',
87 '../posix/JackSocket.cpp',
88 '../linux/JackLinuxFutex.cpp',
89 '../linux/JackLinuxTime.c',
91 includes = ['../linux', '../posix'] + includes
96 common_libsources += [
97 'JackDebugClient.cpp',
100 '../posix/JackPosixThread.cpp',
101 '../posix/JackFifo.cpp',
102 '../posix/JackPosixProcessSync.cpp',
103 '../posix/JackPosixMutex.cpp',
104 '../posix/JackSocket.cpp',
105 '../solaris/JackSolarisTime.c',
107 includes = ['../solaris', '../posix'] + includes
110 if bld.env['IS_MACOSX']:
111 common_libsources += [
112 'JackDebugClient.cpp',
115 '../posix/JackPosixProcessSync.cpp',
116 '../posix/JackPosixThread.cpp',
117 '../posix/JackPosixMutex.cpp',
118 '../macosx/JackMachThread.mm',
119 '../macosx/JackMachSemaphore.mm',
120 '../posix/JackSocket.cpp',
121 '../macosx/JackMachTime.c',
123 includes = ['../macosx', '../macosx/RPC', '../posix'] + includes
125 if bld.env['IS_WINDOWS']:
126 common_libsources += [
127 '../windows/JackWinMutex.cpp',
128 '../windows/JackWinProcessSync.cpp',
129 '../windows/JackWinSemaphore.cpp',
130 '../windows/JackWinThread.cpp',
131 '../windows/JackWinTime.c',
133 includes = ['../windows' ] + includes
134 libsuffix = "64" if (bld.env['DEST_CPU'] == "x86_64" and not bld.variant) else ""
135 buildbindir = os.path.join('..', bld.path.get_bld().srcpath().rstrip(bld.path.srcpath()))
136 staticbuild = bool('BUILD_STATIC' in bld.env and bld.env['BUILD_STATIC'])
137 uselib.append('REGEX')
138 uselib.append('WS2_32')
139 uselib.append('PSAPI')
140 uselib.append('WINMM')
145 clientlib = bld(features = ['c', 'cxx', 'cxxshlib', 'cshlib'])
146 if bld.env['IS_MACOSX']:
147 clientlib.framework = ['CoreAudio', 'Accelerate']
148 clientlib.defines = 'HAVE_CONFIG_H'
149 clientlib.includes = includes
150 clientlib.name = 'clientlib'
151 clientlib.target = 'jack'+libsuffix
152 clientlib.install_path = '${LIBDIR}'
153 clientlib.use = uselib
154 if bld.env['IS_WINDOWS']:
155 clientlib.env['cxxshlib_PATTERN'] = 'lib%s.dll'
156 clientlib.env['cxxstlib_PATTERN'] = 'lib%s.a'
157 clientlib.env['implib_PATTERN'] = 'lib%s.dll.a'
159 clientlib.env['SHLIB_MARKER'] = ''
160 clientlib.env.append_value('LINKFLAGS', ['-static-libstdc++', '--disable-auto-import'])
161 clientlib.env.append_value('LINKFLAGS', ['-Wl,--output-def,lib%s.def' % clientlib.target])
162 bld.install_files(clientlib.install_path, [os.path.join(buildbindir, 'lib%s.def' % clientlib.target)])
164 if bld.env['AUTOSTART_METHOD'] == 'dbus':
165 clientlib.use.append('DBUS-1')
166 clientlib.source = [] + common_libsources
167 clientlib.source += [
173 if bld.env['IS_LINUX']:
174 clientlib.source += [
175 '../posix/JackSocketClientChannel.cpp',
176 '../posix/JackPosixServerLaunch.cpp',
179 if bld.env['IS_SUN']:
180 clientlib.source += [
181 '../posix/JackSocketClientChannel.cpp',
182 '../posix/JackPosixServerLaunch.cpp',
185 if bld.env['IS_MACOSX']:
186 clientlib.source += [
187 '../posix/JackSocketClientChannel.cpp',
188 '../posix/JackPosixServerLaunch.cpp',
191 if bld.env['IS_WINDOWS']:
192 clientlib.source += [
193 '../windows/JackWinNamedPipe.cpp',
194 '../windows/JackWinNamedPipeClientChannel.cpp',
195 '../windows/JackWinServerLaunch.cpp',
196 '../windows/JackMMCSS.cpp',
199 if bld.env['IS_MACOSX']:
200 clientlib.cnum = bld.env['JACK_API_VERSION']
201 clientlib.vnum = bld.env['JACK_VERSION']
202 elif not bld.env['IS_WINDOWS']:
203 clientlib.vnum = bld.env['JACK_API_VERSION']
205 if bld.env['IS_LINUX']:
206 clientlib.env.append_value('CPPFLAGS', '-fvisibility=hidden')
208 if bld.env['IS_MACOSX']:
209 clientlib.env.append_value('CPPFLAGS', '-fvisibility=hidden')
210 clientlib.env.append_value('LINKFLAGS', '-single_module')
212 if bld.env['IS_SUN']:
213 clientlib.env.append_value('LINKFLAGS', '-lnsl -lsocket')
216 # if there is variant defined, we expect it to be the 32bit client lib one
217 # we don't want to build other stuff in this variant
220 serverlib = bld(features = ['c', 'cxx', 'cxxshlib', 'cshlib'])
221 if bld.env['IS_MACOSX']:
222 serverlib.framework = ['CoreAudio', 'CoreFoundation', 'Accelerate']
223 serverlib.defines = ['HAVE_CONFIG_H','SERVER_SIDE']
224 serverlib.includes = includes
225 serverlib.name = 'serverlib'
226 serverlib.target = 'jackserver'+libsuffix
227 serverlib.install_path = '${LIBDIR}'
228 serverlib.use = uselib
229 if bld.env['IS_WINDOWS']:
230 serverlib.env['cxxshlib_PATTERN'] = 'lib%s.dll'
231 serverlib.env['cxxstlib_PATTERN'] = 'lib%s.a'
232 serverlib.env['implib_PATTERN'] = 'lib%s.dll.a'
234 serverlib.env['SHLIB_MARKER'] = ''
235 serverlib.env.append_value('LINKFLAGS', ['-static-libstdc++', '--disable-auto-import'])
236 serverlib.env.append_value('LINKFLAGS', ['-Wl,--output-def,lib%s.def' % serverlib.target])
237 bld.install_files(serverlib.install_path, [os.path.join(buildbindir, 'lib%s.def' % serverlib.target)])
238 serverlib.source = [] + common_libsources
239 serverlib.source += [
240 'JackAudioDriver.cpp',
241 'JackTimedDriver.cpp',
242 'JackMidiDriver.cpp',
245 'JackExternalClient.cpp',
246 'JackFreewheelDriver.cpp',
247 'JackInternalClient.cpp',
248 'JackInternalSessionLoader.cpp',
250 'JackThreadedDriver.cpp',
251 'JackRestartThreadedDriver.cpp',
252 'JackWaitThreadedDriver.cpp',
253 'JackWaitCallbackDriver.cpp',
255 'JackDriverLoader.cpp',
256 'JackServerGlobals.cpp',
257 'JackControlAPI.cpp',
259 'JackNetInterface.cpp',
261 'JackRequestDecoder.cpp',
262 'JackMidiAsyncQueue.cpp',
263 'JackMidiAsyncWaitQueue.cpp',
264 'JackMidiBufferReadQueue.cpp',
265 'JackMidiBufferWriteQueue.cpp',
266 'JackMidiRawInputWriteQueue.cpp',
267 'JackMidiRawOutputWriteQueue.cpp',
268 'JackMidiReadQueue.cpp',
269 'JackMidiReceiveQueue.cpp',
270 'JackMidiSendQueue.cpp',
272 'JackMidiWriteQueue.cpp',
276 if bld.env['IS_LINUX']:
277 serverlib.source += [
278 '../posix/JackSocketServerChannel.cpp',
279 '../posix/JackSocketNotifyChannel.cpp',
280 '../posix/JackSocketServerNotifyChannel.cpp',
281 '../posix/JackNetUnixSocket.cpp',
284 if bld.env['IS_SUN']:
285 serverlib.source += [
286 '../posix/JackSocketServerChannel.cpp',
287 '../posix/JackSocketNotifyChannel.cpp',
288 '../posix/JackSocketServerNotifyChannel.cpp',
289 '../posix/JackNetUnixSocket.cpp',
292 if bld.env['IS_MACOSX']:
293 serverlib.source += [
294 '../posix/JackSocketServerChannel.cpp',
295 '../posix/JackSocketNotifyChannel.cpp',
296 '../posix/JackSocketServerNotifyChannel.cpp',
297 '../posix/JackNetUnixSocket.cpp',
300 if bld.env['IS_WINDOWS']:
301 serverlib.source += [
302 '../windows/JackMMCSS.cpp',
303 '../windows/JackWinNamedPipe.cpp',
304 '../windows/JackWinNamedPipeServerChannel.cpp',
305 '../windows/JackWinNamedPipeServerNotifyChannel.cpp',
306 '../windows/JackWinNamedPipeNotifyChannel.cpp',
307 '../windows/JackNetWinSocket.cpp',
310 if bld.env['IS_MACOSX']:
311 serverlib.cnum = bld.env['JACK_API_VERSION']
312 serverlib.vnum = bld.env['JACK_VERSION']
313 elif not bld.env['IS_WINDOWS']:
314 serverlib.vnum = bld.env['JACK_API_VERSION']
316 if bld.env['IS_LINUX']:
317 serverlib.env.append_value('CPPFLAGS', '-fvisibility=hidden')
319 if bld.env['IS_MACOSX']:
320 serverlib.env.append_value('CPPFLAGS', '-fvisibility=hidden')
321 serverlib.env.append_value('LINKFLAGS', '-single_module')
323 if bld.env['IS_SUN']:
324 serverlib.env.append_value('LINKFLAGS', '-lnsl -lsocket')
326 if bld.env['BUILD_NETLIB']:
327 netlib = bld(features = ['c', 'cxx', 'cxxshlib', 'cshlib'])
328 if bld.env['IS_MACOSX']:
329 netlib.framework = ['CoreAudio']
330 netlib.defines = ['HAVE_CONFIG_H','SERVER_SIDE']
331 netlib.includes = includes
332 netlib.name = 'netlib'
333 netlib.target = 'jacknet'+libsuffix
334 netlib.install_path = '${LIBDIR}'
335 netlib.use = ['SAMPLERATE', 'CELT', 'OPUS', 'PTHREAD']
336 if bld.env['IS_WINDOWS']:
337 netlib.use += ['WS2_32', 'WINMM']
338 netlib.env['cxxshlib_PATTERN'] = 'lib%s.dll'
339 netlib.env['cxxstlib_PATTERN'] = 'lib%s.a'
340 netlib.env['implib_PATTERN'] = 'lib%s.dll.a'
342 netlib.env['SHLIB_MARKER'] = ''
343 netlib.env.append_value('LINKFLAGS', ['-static-libstdc++', '--disable-auto-import'])
344 netlib.env.append_value('LINKFLAGS', ['-Wl,--output-def,lib%s.def' % netlib.target])
345 bld.install_files(netlib.install_path, [os.path.join(buildbindir, 'lib%s.def' % netlib.target)])
346 elif not bld.env['IS_MACOSX']:
350 'JackNetInterface.cpp',
353 'JackAudioAdapterInterface.cpp',
354 'JackLibSampleRateResampler.cpp',
359 if bld.env['IS_LINUX']:
360 netlib.source += ['../posix/JackNetUnixSocket.cpp','../posix/JackPosixThread.cpp', '../posix/JackPosixMutex.cpp', '../linux/JackLinuxTime.c']
361 netlib.env.append_value('CPPFLAGS', '-fvisibility=hidden')
363 if bld.env['IS_SUN']:
364 netlib.source += ['../posix/JackNetUnixSocket.cpp','../posix/JackPosixThread.cpp', '../posix/JackPosixMutex.cpp', '../solaris/JackSolarisTime.c']
365 netlib.env.append_value('CPPFLAGS', '-fvisibility=hidden')
368 if bld.env['IS_MACOSX']:
369 netlib.source += ['../posix/JackNetUnixSocket.cpp','../posix/JackPosixThread.cpp', '../posix/JackPosixMutex.cpp', '../macosx/JackMachThread.mm', '../macosx/JackMachTime.c']
370 netlib.env.append_value('LINKFLAGS', '-single_module')
372 if bld.env['IS_WINDOWS']:
373 netlib.source += ['../windows/JackNetWinSocket.cpp','../windows/JackWinThread.cpp', '../windows/JackMMCSS.cpp', '../windows/JackWinTime.c']
375 if bld.env['IS_MACOSX']:
376 netlib.cnum = bld.env['JACK_API_VERSION']
377 netlib.vnum = bld.env['JACK_VERSION']
378 elif not bld.env['IS_WINDOWS']:
379 netlib.vnum = bld.env['JACK_API_VERSION']
381 create_jack_process_obj(bld, 'netmanager', 'JackNetManager.cpp', serverlib)
383 create_jack_process_obj(bld, 'profiler', 'JackProfiler.cpp', serverlib)
385 net_adapter_sources = [
387 'JackLibSampleRateResampler.cpp',
388 'JackAudioAdapter.cpp',
389 'JackAudioAdapterInterface.cpp',
390 'JackNetAdapter.cpp',
393 if bld.env['BUILD_ADAPTER']:
394 process = create_jack_process_obj(bld, 'netadapter', net_adapter_sources, serverlib)
395 process.use += ['SAMPLERATE']
397 audio_adapter_sources = [
399 'JackLibSampleRateResampler.cpp',
400 'JackAudioAdapter.cpp',
401 'JackAudioAdapterInterface.cpp',
402 'JackAudioAdapterFactory.cpp',
405 if bld.env['BUILD_ADAPTER'] and bld.env['IS_MACOSX']:
406 audio_adapter_sources += ['../macosx/coreaudio/JackCoreAudioAdapter.mm']
407 process = create_jack_process_obj(bld,
409 audio_adapter_sources,
418 process.use += ['SAMPLERATE']
420 if bld.env['BUILD_ADAPTER'] and bld.env['IS_LINUX'] and bld.env['BUILD_DRIVER_ALSA']:
421 audio_adapter_sources += ['../linux/alsa/JackAlsaAdapter.cpp']
422 process = create_jack_process_obj(bld, 'audioadapter', audio_adapter_sources, serverlib)
423 process.use += ['ALSA', 'SAMPLERATE']
425 if bld.env['BUILD_ADAPTER'] and bld.env['IS_SUN']:
426 audio_adapter_sources += ['../solaris/oss/JackOSSAdapter.cpp', 'memops.c']
427 process = create_jack_process_obj(bld, 'audioadapter', audio_adapter_sources, serverlib)
428 process.use += 'SAMPLERATE'
430 if bld.env['BUILD_ADAPTER'] and bld.env['IS_WINDOWS']:
431 audio_adapter_sources += ['../windows/portaudio/JackPortAudioAdapter.cpp', '../windows/portaudio/JackPortAudioDevices.cpp']
432 process = create_jack_process_obj(bld, 'audioadapter', audio_adapter_sources, serverlib)
433 process.use += ['SAMPLERATE', 'PORTAUDIO']
436 bld.install_files('${PREFIX}/include/jack', bld.path.ant_glob('jack/*.h'))
438 # process jack.pc.in -> jack.pc
440 features = 'subst_pc',
441 source = '../jack.pc.in',
443 install_path = '${PKGCONFDIR}',
444 INCLUDEDIR = os.path.normpath(bld.env['PREFIX'] + '/include'),
445 CLIENTLIB = clientlib.target,
446 SERVERLIB = serverlib.target,