From 6c033da96a2aeecda86e0f18f62c1c8eb8101e4c Mon Sep 17 00:00:00 2001 From: Christoph Kuhr Date: Wed, 17 Apr 2019 15:41:07 +0200 Subject: [PATCH] changed subdir linux/avb to linux/avbmcl, modified wscript, added linux/if_packet and igb checks to wscript --- linux/{avb => avbmcl}/JackAVBDriver.cpp | 0 linux/{avb => avbmcl}/JackAVBDriver.h | 0 linux/{avb => avbmcl}/OpenAvnu | 0 linux/{avb => avbmcl}/avb.c | 0 linux/{avb => avbmcl}/avb.h | 0 linux/{avb => avbmcl}/avb_definitions.h | 0 linux/{avb => avbmcl}/avb_sockets.c | 0 linux/{avb => avbmcl}/avb_sockets.h | 0 linux/{avb => avbmcl}/media_clock_listener.c | 0 linux/{avb => avbmcl}/media_clock_listener.h | 0 .../mrp_client_control_socket.c | 0 .../mrp_client_control_socket.h | 0 linux/{avb => avbmcl}/mrp_client_interface.c | 0 linux/{avb => avbmcl}/mrp_client_interface.h | 0 linux/{avb => avbmcl}/mrp_client_send_msg.c | 0 linux/{avb => avbmcl}/mrp_client_send_msg.h | 0 .../start_jackd_avtp_backend.sh | 0 wscript | 62 +- wscript(bak) | 866 ++++++++++++++++++ xxx.lock-waf_linux2_build | 9 + 20 files changed, 899 insertions(+), 38 deletions(-) rename linux/{avb => avbmcl}/JackAVBDriver.cpp (100%) rename linux/{avb => avbmcl}/JackAVBDriver.h (100%) rename linux/{avb => avbmcl}/OpenAvnu (100%) rename linux/{avb => avbmcl}/avb.c (100%) rename linux/{avb => avbmcl}/avb.h (100%) rename linux/{avb => avbmcl}/avb_definitions.h (100%) rename linux/{avb => avbmcl}/avb_sockets.c (100%) rename linux/{avb => avbmcl}/avb_sockets.h (100%) rename linux/{avb => avbmcl}/media_clock_listener.c (100%) rename linux/{avb => avbmcl}/media_clock_listener.h (100%) rename linux/{avb => avbmcl}/mrp_client_control_socket.c (100%) rename linux/{avb => avbmcl}/mrp_client_control_socket.h (100%) rename linux/{avb => avbmcl}/mrp_client_interface.c (100%) rename linux/{avb => avbmcl}/mrp_client_interface.h (100%) rename linux/{avb => avbmcl}/mrp_client_send_msg.c (100%) rename linux/{avb => avbmcl}/mrp_client_send_msg.h (100%) rename linux/{avb => avbmcl}/start_jackd_avtp_backend.sh (100%) create mode 100644 wscript(bak) create mode 100644 xxx.lock-waf_linux2_build diff --git a/linux/avb/JackAVBDriver.cpp b/linux/avbmcl/JackAVBDriver.cpp similarity index 100% rename from linux/avb/JackAVBDriver.cpp rename to linux/avbmcl/JackAVBDriver.cpp diff --git a/linux/avb/JackAVBDriver.h b/linux/avbmcl/JackAVBDriver.h similarity index 100% rename from linux/avb/JackAVBDriver.h rename to linux/avbmcl/JackAVBDriver.h diff --git a/linux/avb/OpenAvnu b/linux/avbmcl/OpenAvnu similarity index 100% rename from linux/avb/OpenAvnu rename to linux/avbmcl/OpenAvnu diff --git a/linux/avb/avb.c b/linux/avbmcl/avb.c similarity index 100% rename from linux/avb/avb.c rename to linux/avbmcl/avb.c diff --git a/linux/avb/avb.h b/linux/avbmcl/avb.h similarity index 100% rename from linux/avb/avb.h rename to linux/avbmcl/avb.h diff --git a/linux/avb/avb_definitions.h b/linux/avbmcl/avb_definitions.h similarity index 100% rename from linux/avb/avb_definitions.h rename to linux/avbmcl/avb_definitions.h diff --git a/linux/avb/avb_sockets.c b/linux/avbmcl/avb_sockets.c similarity index 100% rename from linux/avb/avb_sockets.c rename to linux/avbmcl/avb_sockets.c diff --git a/linux/avb/avb_sockets.h b/linux/avbmcl/avb_sockets.h similarity index 100% rename from linux/avb/avb_sockets.h rename to linux/avbmcl/avb_sockets.h diff --git a/linux/avb/media_clock_listener.c b/linux/avbmcl/media_clock_listener.c similarity index 100% rename from linux/avb/media_clock_listener.c rename to linux/avbmcl/media_clock_listener.c diff --git a/linux/avb/media_clock_listener.h b/linux/avbmcl/media_clock_listener.h similarity index 100% rename from linux/avb/media_clock_listener.h rename to linux/avbmcl/media_clock_listener.h diff --git a/linux/avb/mrp_client_control_socket.c b/linux/avbmcl/mrp_client_control_socket.c similarity index 100% rename from linux/avb/mrp_client_control_socket.c rename to linux/avbmcl/mrp_client_control_socket.c diff --git a/linux/avb/mrp_client_control_socket.h b/linux/avbmcl/mrp_client_control_socket.h similarity index 100% rename from linux/avb/mrp_client_control_socket.h rename to linux/avbmcl/mrp_client_control_socket.h diff --git a/linux/avb/mrp_client_interface.c b/linux/avbmcl/mrp_client_interface.c similarity index 100% rename from linux/avb/mrp_client_interface.c rename to linux/avbmcl/mrp_client_interface.c diff --git a/linux/avb/mrp_client_interface.h b/linux/avbmcl/mrp_client_interface.h similarity index 100% rename from linux/avb/mrp_client_interface.h rename to linux/avbmcl/mrp_client_interface.h diff --git a/linux/avb/mrp_client_send_msg.c b/linux/avbmcl/mrp_client_send_msg.c similarity index 100% rename from linux/avb/mrp_client_send_msg.c rename to linux/avbmcl/mrp_client_send_msg.c diff --git a/linux/avb/mrp_client_send_msg.h b/linux/avbmcl/mrp_client_send_msg.h similarity index 100% rename from linux/avb/mrp_client_send_msg.h rename to linux/avbmcl/mrp_client_send_msg.h diff --git a/linux/avb/start_jackd_avtp_backend.sh b/linux/avbmcl/start_jackd_avtp_backend.sh similarity index 100% rename from linux/avb/start_jackd_avtp_backend.sh rename to linux/avbmcl/start_jackd_avtp_backend.sh diff --git a/wscript b/wscript index c00960ff..0c0cb68f 100644 --- a/wscript +++ b/wscript @@ -126,7 +126,12 @@ def options(opt): winmme.check( header_name=['windows.h', 'mmsystem.h'], msg='Checking for header mmsystem.h') - + avbmcl = opt.add_auto_option( + 'avbmcl', + help='Enable AVB Media Clock Listener driver', + conf_dest='BUILD_DRIVER_AVBMCL') + avbmcl.check(header_name='linux/if_packet.h') + avbmcl.check(lib='igb') celt = opt.add_auto_option( 'celt', help='Build with CELT') @@ -520,6 +525,17 @@ def create_driver_obj(bld, **kw): def build_drivers(bld): # Non-hardware driver sources. Lexically sorted. + + avbmcl_src = [ + 'linux/avbmcl/JackAVBDriver.cpp', + 'linux/avbmcl/avb.c', + 'linux/avbmcl/avb_sockets.c', + 'linux/avbmcl/media_clock_listener.c', + 'linux/avbmcl/mrp_client_control_socket.c', + 'linux/avbmcl/mrp_client_interface.c', + 'linux/avbmcl/mrp_client_send_msg.c' + ] + dummy_src = [ 'common/JackDummyDriver.cpp' ] @@ -538,30 +554,6 @@ def build_drivers(bld): 'common/netjack_packet.c' ] - - - - - - - - avb_src = [ - 'linux/avb/JackAVBDriver.cpp', - 'linux/avb/avb.c', - 'linux/avb/avb_sockets.c', - 'linux/avb/media_clock_listener.c', - 'linux/avb/mrp_client_control_socket.c', - 'linux/avb/mrp_client_interface.c', - 'linux/avb/mrp_client_send_msg.c' - ] - - - - - - - - proxy_src = [ 'common/JackProxyDriver.cpp' ] @@ -642,6 +634,13 @@ def build_drivers(bld): ] # Create non-hardware driver objects. Lexically sorted. + + if bld.env['BUILD_DRIVER_AVBMCL']: + create_driver_obj( + bld, + target = 'avbmcl', + source = avbmcl_src) + create_driver_obj( bld, target = 'dummy', @@ -663,19 +662,6 @@ def build_drivers(bld): source = netone_src, use = ['SAMPLERATE', 'CELT']) - - - - - create_driver_obj( - bld, - target = 'avb', - source = avb_src) - - - - - create_driver_obj( bld, target = 'proxy', diff --git a/wscript(bak) b/wscript(bak) new file mode 100644 index 00000000..c00960ff --- /dev/null +++ b/wscript(bak) @@ -0,0 +1,866 @@ +#! /usr/bin/env python +# encoding: utf-8 +from __future__ import print_function + +import os +import subprocess +import shutil +import re +import sys + +from waflib import Logs, Options, Task, Utils +from waflib.Build import BuildContext, CleanContext, InstallContext, UninstallContext + +VERSION='1.9.12' +APPNAME='jack' +JACK_API_VERSION = '0.1.0' + +# these variables are mandatory ('/' are converted automatically) +top = '.' +out = 'build' + +# lib32 variant name used when building in mixed mode +lib32 = 'lib32' + +def display_feature(conf, msg, build): + if build: + conf.msg(msg, 'yes', color='GREEN') + else: + conf.msg(msg, 'no', color='YELLOW') + +def check_for_celt(conf): + found = False + for version in ['11', '8', '7', '5']: + define = 'HAVE_CELT_API_0_' + version + if not found: + try: + conf.check_cfg( + package='celt >= 0.%s.0' % version, + args='--cflags --libs') + found = True + conf.define(define, 1) + continue + except conf.errors.ConfigurationError: + pass + conf.define(define, 0) + + if not found: + raise conf.errors.ConfigurationError + +def options(opt): + # options provided by the modules + opt.load('compiler_cxx') + opt.load('compiler_c') + opt.load('autooptions'); + + opt.load('xcode6') + + opt.recurse('compat') + + # install directories + opt.add_option('--htmldir', type='string', default=None, help='HTML documentation directory [Default: /share/jack-audio-connection-kit/reference/html/') + opt.add_option('--libdir', type='string', help='Library directory [Default: /lib]') + opt.add_option('--libdir32', type='string', help='32bit Library directory [Default: /lib32]') + opt.add_option('--mandir', type='string', help='Manpage directory [Default: /share/man/man1]') + + # options affecting binaries + opt.add_option('--platform', type='string', default=sys.platform, help='Target platform for cross-compiling, e.g. cygwin or win32') + opt.add_option('--mixed', action='store_true', default=False, help='Build with 32/64 bits mixed mode') + opt.add_option('--debug', action='store_true', default=False, dest='debug', help='Build debuggable binaries') + + # options affecting general jack functionality + opt.add_option('--classic', action='store_true', default=False, help='Force enable standard JACK (jackd) even if D-Bus JACK (jackdbus) is enabled too') + opt.add_option('--dbus', action='store_true', default=False, help='Enable D-Bus JACK (jackdbus)') + opt.add_option('--autostart', type='string', default='default', help='Autostart method. Possible values: "default", "classic", "dbus", "none"') + opt.add_option('--profile', action='store_true', default=False, help='Build with engine profiling') + opt.add_option('--clients', default=64, type='int', dest='clients', help='Maximum number of JACK clients') + opt.add_option('--ports-per-application', default=768, type='int', dest='application_ports', help='Maximum number of ports per application') + + opt.set_auto_options_define('HAVE_%s') + opt.set_auto_options_style('yesno_and_hack') + + # options with third party dependencies + doxygen = opt.add_auto_option( + 'doxygen', + help='Build doxygen documentation', + conf_dest='BUILD_DOXYGEN_DOCS', + default=False) + doxygen.find_program('doxygen') + alsa = opt.add_auto_option( + 'alsa', + help='Enable ALSA driver', + conf_dest='BUILD_DRIVER_ALSA') + alsa.check_cfg( + package='alsa >= 1.0.18', + args='--cflags --libs') + firewire = opt.add_auto_option( + 'firewire', + help='Enable FireWire driver (FFADO)', + conf_dest='BUILD_DRIVER_FFADO') + firewire.check_cfg( + package='libffado >= 1.999.17', + args='--cflags --libs') + iio = opt.add_auto_option( + 'iio', + help='Enable IIO driver', + conf_dest='BUILD_DRIVER_IIO') + iio.check_cfg( + package='gtkIOStream >= 1.4.0', + args='--cflags --libs') + iio.check_cfg( + package='eigen3 >= 3.1.2', + args='--cflags --libs') + portaudio = opt.add_auto_option( + 'portaudio', + help='Enable Portaudio driver', + conf_dest='BUILD_DRIVER_PORTAUDIO') + portaudio.check(header_name='windows.h') # only build portaudio on windows + portaudio.check_cfg( + package='portaudio-2.0 >= 19', + uselib_store='PORTAUDIO', + args='--cflags --libs') + winmme = opt.add_auto_option( + 'winmme', + help='Enable WinMME driver', + conf_dest='BUILD_DRIVER_WINMME') + winmme.check( + header_name=['windows.h', 'mmsystem.h'], + msg='Checking for header mmsystem.h') + + celt = opt.add_auto_option( + 'celt', + help='Build with CELT') + celt.add_function(check_for_celt) + + # Suffix _PKG to not collide with HAVE_OPUS defined by the option. + opus = opt.add_auto_option( + 'opus', + help='Build Opus netjack2') + opus.check(header_name='opus/opus_custom.h') + opus.check_cfg( + package='opus >= 0.9.0', + args='--cflags --libs', + define_name='HAVE_OPUS_PKG') + + samplerate = opt.add_auto_option( + 'samplerate', + help='Build with libsamplerate') + samplerate.check_cfg( + package='samplerate', + args='--cflags --libs') + sndfile = opt.add_auto_option( + 'sndfile', + help='Build with libsndfile') + sndfile.check_cfg( + package='sndfile', + args='--cflags --libs') + readline = opt.add_auto_option( + 'readline', + help='Build with readline') + readline.check(lib='readline') + readline.check( + header_name=['stdio.h', 'readline/readline.h'], + msg='Checking for header readline/readline.h') + sd = opt.add_auto_option( + 'systemd', + help='Use systemd notify') + sd.check(header_name='systemd/sd-daemon.h') + sd.check(lib='systemd') + db = opt.add_auto_option( + 'db', + help='Use Berkeley DB (metadata)') + db.check(header_name='db.h') + db.check(lib='db') + + # dbus options + opt.recurse('dbus') + + # this must be called before the configure phase + opt.apply_auto_options_hack() + +def detect_platform(conf): + # GNU/kFreeBSD and GNU/Hurd are treated as Linux + platforms = [ + # ('KEY, 'Human readable name', ['strings', 'to', 'check', 'for']) + ('IS_LINUX', 'Linux', ['gnu0', 'gnukfreebsd', 'linux', 'posix']), + ('IS_MACOSX', 'MacOS X', ['darwin']), + ('IS_SUN', 'SunOS', ['sunos']), + ('IS_WINDOWS', 'Windows', ['cygwin', 'msys', 'win32']) + ] + + for key,name,strings in platforms: + conf.env[key] = False + + conf.start_msg('Checking platform') + platform = Options.options.platform + for key,name,strings in platforms: + for s in strings: + if platform.startswith(s): + conf.env[key] = True + conf.end_msg(name, color='CYAN') + break + +def configure(conf): + conf.load('compiler_cxx') + conf.load('compiler_c') + + detect_platform(conf) + + if conf.env['IS_WINDOWS']: + conf.env.append_unique('CCDEFINES', '_POSIX') + conf.env.append_unique('CXXDEFINES', '_POSIX') + + conf.env.append_unique('CXXFLAGS', '-Wall') + conf.env.append_unique('CXXFLAGS', '-std=gnu++11') + conf.env.append_unique('CFLAGS', '-Wall') + + if conf.env['IS_MACOSX']: + conf.check(lib='aften', uselib='AFTEN', define_name='AFTEN') + + conf.load('autooptions') + + conf.recurse('compat') + + # Check for functions. + conf.check( + fragment='' + + '#define _GNU_SOURCE\n' + + '#include \n' + + '#include \n' + + '#include \n' + + 'int\n' + + 'main(void)\n' + + '{\n' + + ' ppoll(NULL, 0, NULL, NULL);\n' + + '}\n', + msg='Checking for ppoll', + define_name='HAVE_PPOLL', + mandatory=False) + + # Check for backtrace support + conf.check( + header_name='execinfo.h', + define_name='HAVE_EXECINFO_H', + mandatory=False) + + conf.recurse('common') + if Options.options.dbus: + conf.recurse('dbus') + if conf.env['BUILD_JACKDBUS'] != True: + conf.fatal('jackdbus was explicitly requested but cannot be built') + + conf.recurse('example-clients') + + # test for the availability of ucontext, and how it should be used + for t in ['gp_regs', 'uc_regs', 'mc_gregs', 'gregs']: + fragment = '#include \n' + fragment += 'int main() { ucontext_t *ucontext; return (int) ucontext->uc_mcontext.%s[0]; }' % t + confvar = 'HAVE_UCONTEXT_%s' % t.upper() + conf.check_cc(fragment=fragment, define_name=confvar, mandatory=False, + msg='Checking for ucontext->uc_mcontext.%s' % t) + if conf.is_defined(confvar): + conf.define('HAVE_UCONTEXT', 1) + + fragment = '#include \n' + fragment += 'int main() { return NGREG; }' + conf.check_cc(fragment=fragment, define_name='HAVE_NGREG', mandatory=False, + msg='Checking for NGREG') + + conf.env['LIB_PTHREAD'] = ['pthread'] + conf.env['LIB_DL'] = ['dl'] + conf.env['LIB_RT'] = ['rt'] + conf.env['LIB_M'] = ['m'] + conf.env['LIB_STDC++'] = ['stdc++'] + conf.env['JACK_API_VERSION'] = JACK_API_VERSION + conf.env['JACK_VERSION'] = VERSION + + conf.env['BUILD_WITH_PROFILE'] = Options.options.profile + conf.env['BUILD_WITH_32_64'] = Options.options.mixed + conf.env['BUILD_CLASSIC'] = Options.options.classic + conf.env['BUILD_DEBUG'] = Options.options.debug + + if conf.env['BUILD_JACKDBUS']: + conf.env['BUILD_JACKD'] = conf.env['BUILD_CLASSIC'] + else: + conf.env['BUILD_JACKD'] = True + + conf.env['BINDIR'] = conf.env['PREFIX'] + '/bin' + + if Options.options.htmldir: + conf.env['HTMLDIR'] = Options.options.htmldir + else: + # set to None here so that the doxygen code can find out the highest + # directory to remove upon install + conf.env['HTMLDIR'] = None + + if Options.options.libdir: + conf.env['LIBDIR'] = Options.options.libdir + else: + conf.env['LIBDIR'] = conf.env['PREFIX'] + '/lib' + + if Options.options.mandir: + conf.env['MANDIR'] = Options.options.mandir + else: + conf.env['MANDIR'] = conf.env['PREFIX'] + '/share/man/man1' + + if conf.env['BUILD_DEBUG']: + conf.env.append_unique('CXXFLAGS', '-g') + conf.env.append_unique('CFLAGS', '-g') + conf.env.append_unique('LINKFLAGS', '-g') + + if not Options.options.autostart in ['default', 'classic', 'dbus', 'none']: + conf.fatal('Invalid autostart value "' + Options.options.autostart + '"') + + if Options.options.autostart == 'default': + if conf.env['BUILD_JACKD']: + conf.env['AUTOSTART_METHOD'] = 'classic' + else: + conf.env['AUTOSTART_METHOD'] = 'dbus' + else: + conf.env['AUTOSTART_METHOD'] = Options.options.autostart + + if conf.env['AUTOSTART_METHOD'] == 'dbus' and not conf.env['BUILD_JACKDBUS']: + conf.fatal('D-Bus autostart mode was specified but jackdbus will not be built') + if conf.env['AUTOSTART_METHOD'] == 'classic' and not conf.env['BUILD_JACKD']: + conf.fatal('Classic autostart mode was specified but jackd will not be built') + + if conf.env['AUTOSTART_METHOD'] == 'dbus': + conf.define('USE_LIBDBUS_AUTOLAUNCH', 1) + elif conf.env['AUTOSTART_METHOD'] == 'classic': + conf.define('USE_CLASSIC_AUTOLAUNCH', 1) + + conf.define('CLIENT_NUM', Options.options.clients) + conf.define('PORT_NUM_FOR_CLIENT', Options.options.application_ports) + + if conf.env['IS_WINDOWS']: + # we define this in the environment to maintain compatability with + # existing install paths that use ADDON_DIR rather than have to + # have special cases for windows each time. + conf.env['ADDON_DIR'] = conf.env['BINDIR'] + '/jack' + # don't define ADDON_DIR in config.h, use the default 'jack' defined in + # windows/JackPlatformPlug_os.h + else: + conf.env['ADDON_DIR'] = os.path.normpath(os.path.join(conf.env['LIBDIR'], 'jack')) + conf.define('ADDON_DIR', conf.env['ADDON_DIR']) + conf.define('JACK_LOCATION', os.path.normpath(os.path.join(conf.env['PREFIX'], 'bin'))) + + if not conf.env['IS_WINDOWS']: + conf.define('USE_POSIX_SHM', 1) + conf.define('JACKMP', 1) + if conf.env['BUILD_JACKDBUS']: + conf.define('JACK_DBUS', 1) + if conf.env['BUILD_WITH_PROFILE']: + conf.define('JACK_MONITOR', 1) + conf.write_config_header('config.h', remove=False) + + svnrev = None + try: + f = open('svnversion.h') + data = f.read() + m = re.match(r'^#define SVN_VERSION "([^"]*)"$', data) + if m != None: + svnrev = m.group(1) + f.close() + except IOError: + pass + + if Options.options.mixed: + conf.setenv(lib32, env=conf.env.derive()) + conf.env.append_unique('CXXFLAGS', '-m32') + conf.env.append_unique('CFLAGS', '-m32') + conf.env.append_unique('LINKFLAGS', '-m32') + if Options.options.libdir32: + conf.env['LIBDIR'] = Options.options.libdir32 + else: + conf.env['LIBDIR'] = conf.env['PREFIX'] + '/lib32' + conf.write_config_header('config.h') + + print() + print('==================') + version_msg = 'JACK ' + VERSION + if svnrev: + version_msg += ' exported from r' + svnrev + else: + version_msg += ' svn revision will checked and eventually updated during build' + print(version_msg) + + conf.msg('Maximum JACK clients', Options.options.clients, color='NORMAL') + conf.msg('Maximum ports per application', Options.options.application_ports, color='NORMAL') + + conf.msg('Install prefix', conf.env['PREFIX'], color='CYAN') + conf.msg('Library directory', conf.all_envs['']['LIBDIR'], color='CYAN') + if conf.env['BUILD_WITH_32_64']: + conf.msg('32-bit library directory', conf.all_envs[lib32]['LIBDIR'], color='CYAN') + conf.msg('Drivers directory', conf.env['ADDON_DIR'], color='CYAN') + display_feature(conf, 'Build debuggable binaries', conf.env['BUILD_DEBUG']) + + tool_flags = [ + ('C compiler flags', ['CFLAGS', 'CPPFLAGS']), + ('C++ compiler flags', ['CXXFLAGS', 'CPPFLAGS']), + ('Linker flags', ['LINKFLAGS', 'LDFLAGS']) + ] + for name,vars in tool_flags: + flags = [] + for var in vars: + flags += conf.all_envs[''][var] + conf.msg(name, repr(flags), color='NORMAL') + + if conf.env['BUILD_WITH_32_64']: + conf.msg('32-bit C compiler flags', repr(conf.all_envs[lib32]['CFLAGS'])) + conf.msg('32-bit C++ compiler flags', repr(conf.all_envs[lib32]['CXXFLAGS'])) + conf.msg('32-bit linker flags', repr(conf.all_envs[lib32]['LINKFLAGS'])) + display_feature(conf, 'Build with engine profiling', conf.env['BUILD_WITH_PROFILE']) + display_feature(conf, 'Build with 32/64 bits mixed mode', conf.env['BUILD_WITH_32_64']) + + display_feature(conf, 'Build standard JACK (jackd)', conf.env['BUILD_JACKD']) + display_feature(conf, 'Build D-Bus JACK (jackdbus)', conf.env['BUILD_JACKDBUS']) + conf.msg('Autostart method', conf.env['AUTOSTART_METHOD']) + + if conf.env['BUILD_JACKDBUS'] and conf.env['BUILD_JACKD']: + print(Logs.colors.RED + 'WARNING !! mixing both jackd and jackdbus may cause issues:' + Logs.colors.NORMAL) + print(Logs.colors.RED + 'WARNING !! jackdbus does not use .jackdrc nor qjackctl settings' + Logs.colors.NORMAL) + + conf.summarize_auto_options() + + if conf.env['BUILD_JACKDBUS']: + conf.msg('D-Bus service install directory', conf.env['DBUS_SERVICES_DIR'], color='CYAN') + + if conf.env['DBUS_SERVICES_DIR'] != conf.env['DBUS_SERVICES_DIR_REAL']: + print() + print(Logs.colors.RED + 'WARNING: D-Bus session services directory as reported by pkg-config is') + print(Logs.colors.RED + 'WARNING:', end=' ') + print(Logs.colors.CYAN + conf.env['DBUS_SERVICES_DIR_REAL']) + print(Logs.colors.RED + 'WARNING: but service file will be installed in') + print(Logs.colors.RED + 'WARNING:', end=' ') + print(Logs.colors.CYAN + conf.env['DBUS_SERVICES_DIR']) + print(Logs.colors.RED + 'WARNING: You may need to adjust your D-Bus configuration after installing jackdbus') + print('WARNING: You can override dbus service install directory') + print('WARNING: with --enable-pkg-config-dbus-service-dir option to this script') + print(Logs.colors.NORMAL, end=' ') + print() + +def init(ctx): + for y in (BuildContext, CleanContext, InstallContext, UninstallContext): + name = y.__name__.replace('Context','').lower() + class tmp(y): + cmd = name + '_' + lib32 + variant = lib32 + +def obj_add_includes(bld, obj): + if bld.env['BUILD_JACKDBUS']: + obj.includes += ['dbus'] + + if bld.env['IS_LINUX']: + obj.includes += ['linux', 'posix'] + + if bld.env['IS_MACOSX']: + obj.includes += ['macosx', 'posix'] + + if bld.env['IS_SUN']: + obj.includes += ['posix', 'solaris'] + + if bld.env['IS_WINDOWS']: + obj.includes += ['windows'] + +# FIXME: Is SERVER_SIDE needed? +def build_jackd(bld): + jackd = bld( + features = ['cxx', 'cxxprogram'], + defines = ['HAVE_CONFIG_H','SERVER_SIDE'], + includes = ['.', 'common', 'common/jack'], + target = 'jackd', + source = ['common/Jackdmp.cpp'], + use = ['serverlib', 'SYSTEMD'] + ) + + if bld.env['BUILD_JACKDBUS']: + jackd.source += ['dbus/audio_reserve.c', 'dbus/reserve.c'] + jackd.use += ['DBUS-1'] + + if bld.env['IS_LINUX']: + jackd.use += ['DL', 'M', 'PTHREAD', 'RT', 'STDC++'] + + if bld.env['IS_MACOSX']: + jackd.use += ['DL', 'PTHREAD'] + jackd.framework = ['CoreFoundation'] + + if bld.env['IS_SUN']: + jackd.use += ['DL', 'PTHREAD'] + + obj_add_includes(bld, jackd) + + return jackd + +# FIXME: Is SERVER_SIDE needed? +def create_driver_obj(bld, **kw): + if bld.env['IS_MACOSX'] or bld.env['IS_WINDOWS']: + # On MacOSX this is necessary. + # I do not know if this is necessary on Windows. + # Note added on 2015-12-13 by karllinden. + if 'use' in kw: + kw['use'] += ['serverlib'] + else: + kw['use'] = ['serverlib'] + + driver = bld( + features = ['c', 'cxx', 'cshlib', 'cxxshlib'], + defines = ['HAVE_CONFIG_H', 'SERVER_SIDE'], + includes = ['.', 'common', 'common/jack'], + install_path = '${ADDON_DIR}/', + **kw) + + if bld.env['IS_WINDOWS']: + driver.env['cxxshlib_PATTERN'] = 'jack_%s.dll' + else: + driver.env['cxxshlib_PATTERN'] = 'jack_%s.so' + + obj_add_includes(bld, driver) + + return driver + +def build_drivers(bld): + # Non-hardware driver sources. Lexically sorted. + dummy_src = [ + 'common/JackDummyDriver.cpp' + ] + + loopback_src = [ + 'common/JackLoopbackDriver.cpp' + ] + + net_src = [ + 'common/JackNetDriver.cpp' + ] + + netone_src = [ + 'common/JackNetOneDriver.cpp', + 'common/netjack.c', + 'common/netjack_packet.c' + ] + + + + + + + + + avb_src = [ + 'linux/avb/JackAVBDriver.cpp', + 'linux/avb/avb.c', + 'linux/avb/avb_sockets.c', + 'linux/avb/media_clock_listener.c', + 'linux/avb/mrp_client_control_socket.c', + 'linux/avb/mrp_client_interface.c', + 'linux/avb/mrp_client_send_msg.c' + ] + + + + + + + + + proxy_src = [ + 'common/JackProxyDriver.cpp' + ] + + # Hardware driver sources. Lexically sorted. + alsa_src = [ + 'common/memops.c', + 'linux/alsa/JackAlsaDriver.cpp', + 'linux/alsa/alsa_rawmidi.c', + 'linux/alsa/alsa_seqmidi.c', + 'linux/alsa/alsa_midi_jackmp.cpp', + 'linux/alsa/generic_hw.c', + 'linux/alsa/hdsp.c', + 'linux/alsa/alsa_driver.c', + 'linux/alsa/hammerfall.c', + 'linux/alsa/ice1712.c' + ] + + alsarawmidi_src = [ + 'linux/alsarawmidi/JackALSARawMidiDriver.cpp', + 'linux/alsarawmidi/JackALSARawMidiInputPort.cpp', + 'linux/alsarawmidi/JackALSARawMidiOutputPort.cpp', + 'linux/alsarawmidi/JackALSARawMidiPort.cpp', + 'linux/alsarawmidi/JackALSARawMidiReceiveQueue.cpp', + 'linux/alsarawmidi/JackALSARawMidiSendQueue.cpp', + 'linux/alsarawmidi/JackALSARawMidiUtil.cpp' + ] + + boomer_src = [ + 'common/memops.c', + 'solaris/oss/JackBoomerDriver.cpp' + ] + + coreaudio_src = [ + 'macosx/coreaudio/JackCoreAudioDriver.mm', + 'common/JackAC3Encoder.cpp' + ] + + coremidi_src = [ + 'macosx/coremidi/JackCoreMidiInputPort.mm', + 'macosx/coremidi/JackCoreMidiOutputPort.mm', + 'macosx/coremidi/JackCoreMidiPhysicalInputPort.mm', + 'macosx/coremidi/JackCoreMidiPhysicalOutputPort.mm', + 'macosx/coremidi/JackCoreMidiVirtualInputPort.mm', + 'macosx/coremidi/JackCoreMidiVirtualOutputPort.mm', + 'macosx/coremidi/JackCoreMidiPort.mm', + 'macosx/coremidi/JackCoreMidiUtil.mm', + 'macosx/coremidi/JackCoreMidiDriver.mm' + ] + + ffado_src = [ + 'linux/firewire/JackFFADODriver.cpp', + 'linux/firewire/JackFFADOMidiInputPort.cpp', + 'linux/firewire/JackFFADOMidiOutputPort.cpp', + 'linux/firewire/JackFFADOMidiReceiveQueue.cpp', + 'linux/firewire/JackFFADOMidiSendQueue.cpp' + ] + + iio_driver_src = [ + 'linux/iio/JackIIODriver.cpp' + ] + + oss_src = [ + 'common/memops.c', + 'solaris/oss/JackOSSDriver.cpp' + ] + + portaudio_src = [ + 'windows/portaudio/JackPortAudioDevices.cpp', + 'windows/portaudio/JackPortAudioDriver.cpp', + ] + + winmme_src = [ + 'windows/winmme/JackWinMMEDriver.cpp', + 'windows/winmme/JackWinMMEInputPort.cpp', + 'windows/winmme/JackWinMMEOutputPort.cpp', + 'windows/winmme/JackWinMMEPort.cpp', + ] + + # Create non-hardware driver objects. Lexically sorted. + create_driver_obj( + bld, + target = 'dummy', + source = dummy_src) + + create_driver_obj( + bld, + target = 'loopback', + source = loopback_src) + + create_driver_obj( + bld, + target = 'net', + source = net_src) + + create_driver_obj( + bld, + target = 'netone', + source = netone_src, + use = ['SAMPLERATE', 'CELT']) + + + + + + create_driver_obj( + bld, + target = 'avb', + source = avb_src) + + + + + + create_driver_obj( + bld, + target = 'proxy', + source = proxy_src) + + # Create hardware driver objects. Lexically sorted after the conditional, + # e.g. BUILD_DRIVER_ALSA. + if bld.env['BUILD_DRIVER_ALSA']: + create_driver_obj( + bld, + target = 'alsa', + source = alsa_src, + use = ['ALSA']) + create_driver_obj( + bld, + target = 'alsarawmidi', + source = alsarawmidi_src, + use = ['ALSA']) + + if bld.env['BUILD_DRIVER_FFADO']: + create_driver_obj( + bld, + target = 'firewire', + source = ffado_src, + use = ['LIBFFADO']) + + if bld.env['BUILD_DRIVER_IIO']: + create_driver_obj( + bld, + target = 'iio', + source = iio_src, + use = ['GTKIOSTREAM', 'EIGEN3']) + + if bld.env['BUILD_DRIVER_PORTAUDIO']: + create_driver_obj( + bld, + target = 'portaudio', + source = portaudio_src, + use = ['PORTAUDIO']) + + if bld.env['BUILD_DRIVER_WINMME']: + create_driver_obj( + bld, + target = 'winmme', + source = winmme_src, + use = ['WINMME']) + + if bld.env['IS_MACOSX']: + create_driver_obj( + bld, + target = 'coreaudio', + source = coreaudio_src, + use = ['AFTEN'], + framework = ['AudioUnit', 'CoreAudio', 'CoreServices']) + + create_driver_obj( + bld, + target = 'coremidi', + source = coremidi_src, + use = ['serverlib'], # FIXME: Is this needed? + framework = ['AudioUnit', 'CoreMIDI', 'CoreServices', 'Foundation']) + + if bld.env['IS_SUN']: + create_driver_obj( + bld, + target = 'boomer', + source = boomer_src) + create_driver_obj( + bld, + target = 'oss', + source = oss_src) + +def build(bld): + if not bld.variant and bld.env['BUILD_WITH_32_64']: + Options.commands.append(bld.cmd + '_' + lib32) + + # process subfolders from here + bld.recurse('common') + + if bld.variant: + # only the wscript in common/ knows how to handle variants + return + + bld.recurse('compat') + + if not os.access('svnversion.h', os.R_OK): + def post_run(self): + sg = Utils.h_file(self.outputs[0].abspath(self.env)) + #print sg.encode('hex') + Build.bld.node_sigs[self.env.variant()][self.outputs[0].id] = sg + + script = bld.path.find_resource('svnversion_regenerate.sh') + script = script.abspath() + + bld( + rule = '%s ${TGT}' % script, + name = 'svnversion', + runnable_status = Task.RUN_ME, + before = 'c cxx', + color = 'BLUE', + post_run = post_run, + source = ['svnversion_regenerate.sh'], + target = [bld.path.find_or_declare('svnversion.h')] + ) + + if bld.env['BUILD_JACKD']: + build_jackd(bld) + + build_drivers(bld) + + bld.recurse('example-clients') + if bld.env['IS_LINUX']: + bld.recurse('man') + if not bld.env['IS_WINDOWS']: + bld.recurse('tests') + if bld.env['BUILD_JACKDBUS']: + bld.recurse('dbus') + + if bld.env['BUILD_DOXYGEN_DOCS']: + html_build_dir = bld.path.find_or_declare('html').abspath() + + bld( + features = 'subst', + source = 'doxyfile.in', + target = 'doxyfile', + HTML_BUILD_DIR = html_build_dir, + SRCDIR = bld.srcnode.abspath(), + VERSION = VERSION + ) + + # There are two reasons for logging to doxygen.log and using it as + # target in the build rule (rather than html_build_dir): + # (1) reduce the noise when running the build + # (2) waf has a regular file to check for a timestamp. If the directory + # is used instead waf will rebuild the doxygen target (even upon + # install). + def doxygen(task): + doxyfile = task.inputs[0].abspath() + logfile = task.outputs[0].abspath() + cmd = '%s %s &> %s' % (task.env['DOXYGEN'][0], doxyfile, logfile) + return task.exec_command(cmd) + + bld( + rule = doxygen, + source = 'doxyfile', + target = 'doxygen.log' + ) + + # Determine where to install HTML documentation. Since share_dir is the + # highest directory the uninstall routine should remove, there is no + # better candidate for share_dir, but the requested HTML directory if + # --htmldir is given. + if bld.env['HTMLDIR']: + html_install_dir = bld.options.destdir + bld.env['HTMLDIR'] + share_dir = html_install_dir + else: + share_dir = bld.options.destdir + bld.env['PREFIX'] + '/share/jack-audio-connection-kit' + html_install_dir = share_dir + '/reference/html/' + + if bld.cmd == 'install': + if os.path.isdir(html_install_dir): + Logs.pprint('CYAN', 'Removing old doxygen documentation installation...') + shutil.rmtree(html_install_dir) + Logs.pprint('CYAN', 'Removing old doxygen documentation installation done.') + Logs.pprint('CYAN', 'Installing doxygen documentation...') + shutil.copytree(html_build_dir, html_install_dir) + Logs.pprint('CYAN', 'Installing doxygen documentation done.') + elif bld.cmd =='uninstall': + Logs.pprint('CYAN', 'Uninstalling doxygen documentation...') + if os.path.isdir(share_dir): + shutil.rmtree(share_dir) + Logs.pprint('CYAN', 'Uninstalling doxygen documentation done.') + elif bld.cmd =='clean': + if os.access(html_build_dir, os.R_OK): + Logs.pprint('CYAN', 'Removing doxygen generated documentation...') + shutil.rmtree(html_build_dir) + Logs.pprint('CYAN', 'Removing doxygen generated documentation done.') + +def dist(ctx): + # This code blindly assumes it is working in the toplevel source directory. + if not os.path.exists('svnversion.h'): + os.system('./svnversion_regenerate.sh svnversion.h') + +from waflib import TaskGen +@TaskGen.extension('.mm') +def mm_hook(self, node): + """Alias .mm files to be compiled the same as .cpp files, gcc will do the right thing.""" + return self.create_compiled_task('cxx', node) diff --git a/xxx.lock-waf_linux2_build b/xxx.lock-waf_linux2_build new file mode 100644 index 00000000..281f7a94 --- /dev/null +++ b/xxx.lock-waf_linux2_build @@ -0,0 +1,9 @@ +argv = ['./waf', 'configure'] +config_cmd = 'configure' +environ = {'LC_NUMERIC': 'de_DE.UTF-8', 'MANDATORY_PATH': '/usr/share/gconf/mate.mandatory.path', 'MATE_DESKTOP_SESSION_ID': 'this-is-deprecated', 'XDG_GREETER_DATA_DIR': '/var/lib/lightdm-data/christoph', 'LESSOPEN': '| /usr/bin/lesspipe %s', 'XDG_VTNR': '7', 'LOGNAME': 'christoph', 'USER': 'christoph', 'PATH': '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games', 'LC_PAPER': 'de_DE.UTF-8', 'HOME': '/home/christoph', 'DISPLAY': ':0.0', 'SSH_AGENT_PID': '1788', 'LANG': 'en_US.UTF-8', 'TERM': 'vt100', 'SHELL': '/bin/bash', 'XDG_SESSION_PATH': '/org/freedesktop/DisplayManager/Session0', 'QT_STYLE_OVERRIDE': 'gtk', 'LANGUAGE': 'en_US', 'SESSION_MANAGER': 'local/workstation:@/tmp/.ICE-unix/1493,unix/workstation:/tmp/.ICE-unix/1493', 'LC_MEASUREMENT': 'de_DE.UTF-8', 'QT_LINUX_ACCESSIBILITY_ALWAYS_ON': '1', 'INSIDE_CAJA_PYTHON': '', 'COMPIZ_CONFIG_PROFILE': 'mate', 'QT_ACCESSIBILITY': '1', 'WINDOWID': '54525958', 'GTK_OVERLAY_SCROLLING': '0', 'CLUTTER_BACKEND': 'x11', 'XDG_SESSION_DESKTOP': 'mate', 'SHLVL': '1', 'XDG_RUNTIME_DIR': '/run/user/1000', 'LC_ADDRESS': 'de_DE.UTF-8', 'SSH_AUTH_SOCK': '/run/user/1000/keyring/ssh', 'VTE_VERSION': '4205', 'GDMSESSION': 'mate', 'XDG_DATA_DIRS': '/usr/share/mate:/usr/local/share/:/usr/share/', 'XDG_SEAT_PATH': '/org/freedesktop/DisplayManager/Seat0', 'LESSCLOSE': '/usr/bin/lesspipe %s %s', 'XDG_CURRENT_DESKTOP': 'MATE', 'XDG_SESSION_ID': 'c2', 'DBUS_SESSION_BUS_ADDRESS': 'unix:abstract=/tmp/dbus-nbrBUqObDQ,guid=43053f11db846f1304d782d45cb08acf', '_': './waf', 'DEFAULTS_PATH': '/usr/share/gconf/mate.default.path', 'LC_IDENTIFICATION': 'de_DE.UTF-8', 'DESKTOP_SESSION': 'mate', 'XDG_CONFIG_DIRS': '/etc/xdg/xdg-mate:/etc/xdg', 'GTK_MODULES': 'gail:atk-bridge', 'XDG_SESSION_TYPE': 'x11', 'OLDPWD': '/home/christoph/source_code/github-kuhr', 'GDM_LANG': 'en_US', 'LC_TELEPHONE': 'de_DE.UTF-8', 'XAUTHORITY': '/home/christoph/.Xauthority', 'LC_MONETARY': 'de_DE.UTF-8', 'PWD': '/home/christoph/source_code/github-kuhr/jack2.git', 'COLORTERM': 'mate-terminal', 'LC_NAME': 'de_DE.UTF-8', 'LS_COLORS': 'rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:', 'XDG_SEAT': 'seat0'} +files = ['/home/christoph/source_code/github-kuhr/jack2.git/compat/alloca/wscript', '/home/christoph/source_code/github-kuhr/jack2.git/compat/wscript', '/home/christoph/source_code/github-kuhr/jack2.git/common/wscript', '/home/christoph/source_code/github-kuhr/jack2.git/example-clients/wscript', '/home/christoph/source_code/github-kuhr/jack2.git/wscript'] +hash = '\x91a,\x03\xf9\xabn\xc4\xde\xe4\x05@J\xb9FK' +options = {'profile': False, 'force': False, 'verbose': 0, 'auto_option_portaudio': 'auto', 'classic': False, 'no_lock_in_out': '', 'whelp': 0, 'auto_option_firewire': 'auto', 'destdir': '', 'zones': '', 'prefix': '/usr/local', 'jobs': 4, 'auto_option_opus': 'auto', 'targets': '', 'application_ports': 768, 'out': '', 'auto_option_iio': 'auto', 'auto_option_celt': 'auto', 'progress_bar': 0, 'auto_option_doxygen': 'auto', 'top': '', 'libdir': None, 'libdir32': None, 'platform': 'linux2', 'auto_option_sndfile': 'auto', 'autostart': 'default', 'mandir': None, 'check_cxx_compiler': None, 'enable_pkg_config_dbus_service_dir': False, 'bindir': None, 'no_lock_in_top': '', 'files': '', 'no_lock_in_run': '', 'colors': 'auto', 'htmldir': None, 'auto_option_readline': 'auto', 'distcheck_args': None, 'auto_option_winmme': 'auto', 'mixed': False, 'auto_option_samplerate': 'auto', 'auto_option_db': 'auto', 'dbus': False, 'clients': 64, 'auto_option_systemd': 'auto', 'auto_option_alsa': 'auto', 'keep': 0, 'debug': False, 'pdb': 0, 'check_c_compiler': None} +out_dir = '/home/christoph/source_code/github-kuhr/jack2.git/build' +run_dir = '/home/christoph/source_code/github-kuhr/jack2.git' +top_dir = '/home/christoph/source_code/github-kuhr/jack2.git'