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 skipshared = bool('HAVE_TRE_REGEX_H' in bld.env)
136 uselib.append('REGEX')
137 uselib.append('WS2_32')
138 uselib.append('PSAPI')
139 uselib.append('WINMM')
144 clientlib = bld(features = ['c', 'cxx', 'cxxshlib', 'cshlib'])
145 if bld.env['IS_MACOSX']:
146 clientlib.framework = ['CoreAudio', 'Accelerate']
147 clientlib.defines = 'HAVE_CONFIG_H'
148 clientlib.use = uselib
149 if bld.env['IS_WINDOWS']:
150 clientlib.env['cxxshlib_PATTERN'] = 'lib%s.dll'
151 clientlib.env['cxxstlib_PATTERN'] = 'lib%s.a'
152 clientlib.env['implib_PATTERN'] = 'lib%s.dll.a'
153 clientlib.install_path = '${LIBDIR}'
154 if bld.env['AUTOSTART_METHOD'] == 'dbus':
155 clientlib.use.append('DBUS-1')
156 clientlib.includes = includes
157 clientlib.name = 'clientlib'
158 clientlib.target = 'jack'+libsuffix
159 clientlib.source = [] + common_libsources
160 clientlib.source += [
166 if bld.env['IS_LINUX']:
167 clientlib.source += [
168 '../posix/JackSocketClientChannel.cpp',
169 '../posix/JackPosixServerLaunch.cpp',
172 if bld.env['IS_SUN']:
173 clientlib.source += [
174 '../posix/JackSocketClientChannel.cpp',
175 '../posix/JackPosixServerLaunch.cpp',
178 if bld.env['IS_MACOSX']:
179 clientlib.source += [
180 '../posix/JackSocketClientChannel.cpp',
181 '../posix/JackPosixServerLaunch.cpp',
184 if bld.env['IS_WINDOWS']:
185 clientlib.source += [
186 '../windows/JackWinNamedPipe.cpp',
187 '../windows/JackWinNamedPipeClientChannel.cpp',
188 '../windows/JackWinServerLaunch.cpp',
189 '../windows/JackMMCSS.cpp',
192 if not bld.env['IS_WINDOWS']:
193 clientlib.vnum = bld.env['JACK_API_VERSION']
195 if bld.env['IS_LINUX']:
196 clientlib.env.append_value('CPPFLAGS', '-fvisibility=hidden')
198 if bld.env['IS_MACOSX']:
199 clientlib.env.append_value('CPPFLAGS', '-fvisibility=hidden')
200 clientlib.env.append_value('LINKFLAGS', '-single_module')
202 if bld.env['IS_SUN']:
203 clientlib.env.append_value('LINKFLAGS', '-lnsl -lsocket')
205 if bld.env['IS_WINDOWS']:
206 # remove switch to shared binaries if possible, as we most likely want static builds on Windows
208 clientlib.env['SHLIB_MARKER'] = ''
209 # statically link libjack to libstdc++, some client apps like ardour come
210 # with a different version of libstdc++.dll that takes precedence and results
211 # in missing symbols during runtime
212 clientlib.env.append_value('LINKFLAGS', ['-static-libstdc++', '--disable-auto-import'])
215 # if there is variant defined, we expect it to be the 32bit client lib one
216 # we don't want to build other stuff in this variant
219 serverlib = bld(features = ['c', 'cxx', 'cxxshlib', 'cshlib'])
220 if bld.env['IS_MACOSX']:
221 serverlib.framework = ['CoreAudio', 'CoreFoundation', 'Accelerate']
222 serverlib.defines = ['HAVE_CONFIG_H','SERVER_SIDE']
223 serverlib.includes = includes
224 serverlib.name = 'serverlib'
225 serverlib.target = 'jackserver'+libsuffix
226 serverlib.use = uselib
227 if bld.env['IS_WINDOWS']:
228 serverlib.env['cxxshlib_PATTERN'] = 'lib%s.dll'
229 serverlib.env['cxxstlib_PATTERN'] = 'lib%s.a'
230 serverlib.env['implib_PATTERN'] = 'lib%s.dll.a'
232 serverlib.env['SHLIB_MARKER'] = ''
233 serverlib.env.append_value('LINKFLAGS', ['-static-libstdc++', '--disable-auto-import'])
234 serverlib.install_path = '${LIBDIR}'
235 serverlib.source = [] + common_libsources
236 serverlib.source += [
237 'JackAudioDriver.cpp',
238 'JackTimedDriver.cpp',
239 'JackMidiDriver.cpp',
242 'JackExternalClient.cpp',
243 'JackFreewheelDriver.cpp',
244 'JackInternalClient.cpp',
245 'JackInternalSessionLoader.cpp',
247 'JackThreadedDriver.cpp',
248 'JackRestartThreadedDriver.cpp',
249 'JackWaitThreadedDriver.cpp',
250 'JackWaitCallbackDriver.cpp',
252 'JackDriverLoader.cpp',
253 'JackServerGlobals.cpp',
254 'JackControlAPI.cpp',
256 'JackNetInterface.cpp',
258 'JackRequestDecoder.cpp',
259 'JackMidiAsyncQueue.cpp',
260 'JackMidiAsyncWaitQueue.cpp',
261 'JackMidiBufferReadQueue.cpp',
262 'JackMidiBufferWriteQueue.cpp',
263 'JackMidiRawInputWriteQueue.cpp',
264 'JackMidiRawOutputWriteQueue.cpp',
265 'JackMidiReadQueue.cpp',
266 'JackMidiReceiveQueue.cpp',
267 'JackMidiSendQueue.cpp',
269 'JackMidiWriteQueue.cpp',
273 if bld.env['IS_LINUX']:
274 serverlib.source += [
275 '../posix/JackSocketServerChannel.cpp',
276 '../posix/JackSocketNotifyChannel.cpp',
277 '../posix/JackSocketServerNotifyChannel.cpp',
278 '../posix/JackNetUnixSocket.cpp',
281 if bld.env['IS_SUN']:
282 serverlib.source += [
283 '../posix/JackSocketServerChannel.cpp',
284 '../posix/JackSocketNotifyChannel.cpp',
285 '../posix/JackSocketServerNotifyChannel.cpp',
286 '../posix/JackNetUnixSocket.cpp',
289 if bld.env['IS_MACOSX']:
290 serverlib.source += [
291 '../posix/JackSocketServerChannel.cpp',
292 '../posix/JackSocketNotifyChannel.cpp',
293 '../posix/JackSocketServerNotifyChannel.cpp',
294 '../posix/JackNetUnixSocket.cpp',
297 if bld.env['IS_WINDOWS']:
298 serverlib.source += [
299 '../windows/JackMMCSS.cpp',
300 '../windows/JackWinNamedPipe.cpp',
301 '../windows/JackWinNamedPipeServerChannel.cpp',
302 '../windows/JackWinNamedPipeServerNotifyChannel.cpp',
303 '../windows/JackWinNamedPipeNotifyChannel.cpp',
304 '../windows/JackNetWinSocket.cpp',
307 if not bld.env['IS_WINDOWS']:
308 serverlib.vnum = bld.env['JACK_API_VERSION']
310 if bld.env['IS_LINUX']:
311 serverlib.env.append_value('CPPFLAGS', '-fvisibility=hidden')
313 if bld.env['IS_MACOSX']:
314 serverlib.env.append_value('CPPFLAGS', '-fvisibility=hidden')
315 serverlib.env.append_value('LINKFLAGS', '-single_module')
317 if bld.env['IS_SUN']:
318 serverlib.env.append_value('LINKFLAGS', '-lnsl -lsocket')
320 if bld.env['BUILD_NETLIB']:
321 netlib = bld(features = ['c', 'cxx', 'cxxshlib', 'cshlib'])
322 if bld.env['IS_MACOSX']:
323 netlib.framework = ['CoreAudio']
324 netlib.defines = ['HAVE_CONFIG_H','SERVER_SIDE']
325 netlib.includes = includes
326 netlib.name = 'netlib'
327 netlib.target = 'jacknet'+libsuffix
328 netlib.use = ['SAMPLERATE', 'CELT', 'OPUS', 'PTHREAD']
329 if bld.env['IS_WINDOWS']:
330 netlib.env['cxxshlib_PATTERN'] = 'lib%s.dll'
331 netlib.env['cxxstlib_PATTERN'] = 'lib%s.a'
332 netlib.env['implib_PATTERN'] = 'lib%s.dll.a'
334 netlib.env['SHLIB_MARKER'] = ''
335 netlib.use += ['WS2_32', 'WINMM']
336 elif not bld.env['IS_MACOSX']:
338 netlib.install_path = '${LIBDIR}'
341 'JackNetInterface.cpp',
344 'JackAudioAdapterInterface.cpp',
345 'JackLibSampleRateResampler.cpp',
350 if bld.env['IS_LINUX']:
351 netlib.source += ['../posix/JackNetUnixSocket.cpp','../posix/JackPosixThread.cpp', '../posix/JackPosixMutex.cpp', '../linux/JackLinuxTime.c']
352 netlib.env.append_value('CPPFLAGS', '-fvisibility=hidden')
354 if bld.env['IS_SUN']:
355 netlib.source += ['../posix/JackNetUnixSocket.cpp','../posix/JackPosixThread.cpp', '../posix/JackPosixMutex.cpp', '../solaris/JackSolarisTime.c']
356 netlib.env.append_value('CPPFLAGS', '-fvisibility=hidden')
359 if bld.env['IS_MACOSX']:
360 netlib.source += ['../posix/JackNetUnixSocket.cpp','../posix/JackPosixThread.cpp', '../posix/JackPosixMutex.cpp', '../macosx/JackMachThread.mm', '../macosx/JackMachTime.c']
361 netlib.env.append_value('LINKFLAGS', '-single_module')
363 if bld.env['IS_WINDOWS']:
364 netlib.source += ['../windows/JackNetWinSocket.cpp','../windows/JackWinThread.cpp', '../windows/JackMMCSS.cpp', '../windows/JackWinTime.c']
366 if not bld.env['IS_WINDOWS']:
367 netlib.vnum = bld.env['JACK_API_VERSION']
369 create_jack_process_obj(bld, 'netmanager', 'JackNetManager.cpp', serverlib)
371 create_jack_process_obj(bld, 'profiler', 'JackProfiler.cpp', serverlib)
373 net_adapter_sources = [
375 'JackLibSampleRateResampler.cpp',
376 'JackAudioAdapter.cpp',
377 'JackAudioAdapterInterface.cpp',
378 'JackNetAdapter.cpp',
381 if bld.env['BUILD_ADAPTER']:
382 process = create_jack_process_obj(bld, 'netadapter', net_adapter_sources, serverlib)
383 process.use += ['SAMPLERATE']
385 audio_adapter_sources = [
387 'JackLibSampleRateResampler.cpp',
388 'JackAudioAdapter.cpp',
389 'JackAudioAdapterInterface.cpp',
390 'JackAudioAdapterFactory.cpp',
393 if bld.env['BUILD_ADAPTER'] and bld.env['IS_MACOSX']:
394 audio_adapter_sources += ['../macosx/coreaudio/JackCoreAudioAdapter.mm']
395 process = create_jack_process_obj(bld,
397 audio_adapter_sources,
406 process.use += ['SAMPLERATE']
408 if bld.env['BUILD_ADAPTER'] and bld.env['IS_LINUX'] and bld.env['BUILD_DRIVER_ALSA']:
409 audio_adapter_sources += ['../linux/alsa/JackAlsaAdapter.cpp']
410 process = create_jack_process_obj(bld, 'audioadapter', audio_adapter_sources, serverlib)
411 process.use += ['ALSA', 'SAMPLERATE']
413 if bld.env['BUILD_ADAPTER'] and bld.env['IS_SUN']:
414 audio_adapter_sources += ['../solaris/oss/JackOSSAdapter.cpp', 'memops.c']
415 process = create_jack_process_obj(bld, 'audioadapter', audio_adapter_sources, serverlib)
416 process.use += 'SAMPLERATE'
418 if bld.env['BUILD_ADAPTER'] and bld.env['IS_WINDOWS']:
419 audio_adapter_sources += ['../windows/portaudio/JackPortAudioAdapter.cpp', '../windows/portaudio/JackPortAudioDevices.cpp']
420 process = create_jack_process_obj(bld, 'audioadapter', audio_adapter_sources, serverlib)
421 process.use += ['SAMPLERATE', 'PORTAUDIO']
424 bld.install_files('${PREFIX}/include/jack', bld.path.ant_glob('jack/*.h'))
426 # process jack.pc.in -> jack.pc
428 features = 'subst_pc',
429 source = '../jack.pc.in',
431 install_path = '${PKGCONFDIR}',
432 INCLUDEDIR = os.path.normpath(bld.env['PREFIX'] + '/include'),
433 CLIENTLIB = clientlib.target,
434 SERVERLIB = serverlib.target,