X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fwscript;h=dfa05ba752ad60f64f65f17cd8552341bbf52801;hb=4ceac6311669d58390be0ebcc35401c25c148dde;hp=ffdf75a277af043ddb002aa7ee97319b34995303;hpb=f284d28d5306114e9badc9077835683e541420e0;p=ardour.git diff --git a/libs/ardour/wscript b/libs/ardour/wscript index ffdf75a277..dfa05ba752 100644 --- a/libs/ardour/wscript +++ b/libs/ardour/wscript @@ -2,6 +2,10 @@ import autowaf import os import glob +import Options +import re +import subprocess +from w18n import build_i18n # Version of this package (even if built as a child) MAJOR = '3' @@ -15,6 +19,9 @@ LIBARDOUR_VERSION = "%s.%s.%s" % (MAJOR, MINOR, MICRO) # micro increment <=> no interface changes LIBARDOUR_LIB_VERSION = '3.0.0' +# default state file version for this build +CURRENT_SESSION_FILE_VERSION = 3000 + # Variables for 'waf dist' APPNAME = 'libardour' VERSION = LIBARDOUR_VERSION @@ -25,20 +32,190 @@ blddir = 'build' path_prefix = 'libs/ardour/' +libardour_sources = [ + 'amp.cc', + 'analyser.cc', + 'audio_buffer.cc', + 'audio_diskstream.cc', + 'audio_library.cc', + 'audio_playlist.cc', + 'audio_playlist_importer.cc', + 'audio_port.cc', + 'audio_region_importer.cc', + 'audio_track.cc', + 'audio_track_importer.cc', + 'audioanalyser.cc', + 'audioengine.cc', + 'audiofile_tagger.cc', + 'audiofilesource.cc', + 'audioregion.cc', + 'audiosource.cc', + 'auditioner.cc', + 'automatable.cc', + 'automation.cc', + 'automation_control.cc', + 'automation_list.cc', + 'beats_frames_converter.cc', + 'broadcast_info.cc', + 'buffer.cc', + 'buffer_set.cc', + 'bundle.cc', + 'butler.cc', + 'chan_count.cc', + 'chan_mapping.cc', + 'configuration.cc', + 'config_text.cc', + 'control_protocol_manager.cc', + 'control_protocol_search_path.cc', + 'crossfade.cc', + 'cycle_timer.cc', + 'default_click.cc', + 'debug.cc', + 'delivery.cc', + 'directory_names.cc', + 'diskstream.cc', + 'element_import_handler.cc', + 'element_importer.cc', + 'enums.cc', + 'event_type_map.cc', + 'export_channel.cc', + 'export_channel_configuration.cc', + 'export_filename.cc', + 'export_format_base.cc', + 'export_format_manager.cc', + 'export_format_specification.cc', + 'export_formats.cc', + 'export_graph_builder.cc', + 'export_handler.cc', + 'export_preset.cc', + 'export_profile_manager.cc', + 'export_status.cc', + 'export_timespan.cc', + 'file_source.cc', + 'filename_extensions.cc', + 'filesystem_paths.cc', + 'filter.cc', + 'find_session.cc', + 'gain.cc', + 'globals.cc', + 'import.cc', + 'internal_return.cc', + 'internal_send.cc', + 'interpolation.cc', + 'io.cc', + 'io_processor.cc', + 'jack_slave.cc', + 'ladspa_plugin.cc', + 'location.cc', + 'location_importer.cc', + 'meter.cc', + 'midi_buffer.cc', + 'midi_clock_slave.cc', + 'midi_diskstream.cc', + 'midi_model.cc', + 'midi_patch_manager.cc', + 'midi_playlist.cc', + 'midi_port.cc', + 'midi_region.cc', + 'midi_ring_buffer.cc', + 'midi_source.cc', + 'midi_state_tracker.cc', + 'midi_stretch.cc', + 'midi_track.cc', + 'midi_ui.cc', + 'mix.cc', + 'mtc_slave.cc', + 'mtdm.cc', + 'mute_master.cc', + 'named_selection.cc', + 'onset_detector.cc', + 'panner.cc', + 'pcm_utils.cc', + 'pi_controller.cc', + 'playlist.cc', + 'playlist_factory.cc', + 'plugin.cc', + 'plugin_insert.cc', + 'plugin_manager.cc', + 'port.cc', + 'port_insert.cc', + 'port_set.cc', + 'processor.cc', + 'quantize.cc', + 'rc_configuration.cc', + 'recent_sessions.cc', + 'region.cc', + 'region_factory.cc', + 'resampled_source.cc', + 'return.cc', + 'reverse.cc', + 'route.cc', + 'route_group.cc', + 'route_group_member.cc', + 'rb_effect.cc', + 'send.cc', + 'session.cc', + 'session_butler.cc', + 'session_click.cc', + 'session_command.cc', + 'session_configuration.cc', + 'session_directory.cc', + 'session_events.cc', + 'session_export.cc', + 'session_handle.cc', + 'session_metadata.cc', + 'session_midi.cc', + 'session_playlists.cc', + 'session_process.cc', + 'session_rtevents.cc', + 'session_state.cc', + 'session_state_utils.cc', + 'session_time.cc', + 'session_transport.cc', + 'session_utils.cc', + 'slave.cc', + 'smf_source.cc', + 'sndfile_helpers.cc', + 'sndfileimportable.cc', + 'sndfilesource.cc', + 'source.cc', + 'source_factory.cc', + 'strip_silence.cc', + 'svn_revision.cc', + 'tape_file_matcher.cc', + 'template_utils.cc', + 'tempo.cc', + 'tempo_map_importer.cc', + 'ticker.cc', + 'track.cc', + 'transient_detector.cc', + 'user_bundle.cc', + 'utils.cc', + 'version.cc' +] + +def flac_supported(): + cmd = subprocess.Popen ("sndfile-info testfile.flac", + stdout = subprocess.PIPE, + stderr = subprocess.STDOUT, shell = True) + out = cmd.communicate()[0]; + return re.search ('unknown format', out) == None + +def ogg_supported(): + cmd = subprocess.Popen ("sndfile-info testfile.ogg", + stdout = subprocess.PIPE, + stderr = subprocess.STDOUT, shell = True) + out = cmd.communicate()[0]; + return re.search ('unknown format', out) == None + def set_options(opt): autowaf.set_options(opt) -def check_header_and_define(conf, header, define): - conf.check(header_name=header, define_name=define) - if conf.env[define]: - conf.env.append_value('CCFLAGS', '-D' + define) - conf.env.append_value('CXXFLAGS', '-D' + define) - def configure(conf): autowaf.build_version_files(path_prefix+'ardour/version.h', path_prefix+'version.cc', 'libardour3', MAJOR, MINOR, MICRO) autowaf.configure(conf) - autowaf.check_tool(conf, 'compiler_cxx') + conf.check_tool('compiler_cxx gas') autowaf.check_pkg(conf, 'aubio', uselib_store='AUBIO', atleast_version='0.3.2') autowaf.check_pkg(conf, 'jack', uselib_store='JACK', atleast_version='0.109.0') autowaf.check_pkg(conf, 'libxml-2.0', uselib_store='XML') @@ -49,181 +226,47 @@ def configure(conf): autowaf.check_pkg(conf, 'sndfile', uselib_store='SNDFILE', atleast_version='1.0.18') autowaf.check_pkg(conf, 'soundtouch-1.0', uselib_store='SOUNDTOUCH', mandatory=False) autowaf.check_pkg(conf, 'cppunit', uselib_store='CPPUNIT', atleast_version='1.12.0', mandatory=False) + autowaf.check_pkg(conf, 'ogg', uselib_store='OGG', atleast_version='1.1.2') + autowaf.check_pkg(conf, 'flac', uselib_store='FLAC', atleast_version='1.2.1') + + # we don't try to detect this, since its part of our source tree - conf.env.append_value('CXXFLAGS', '-DUSE_RUBBERBAND') - conf.define('HAVE_RUBBERBAND', 1) + conf.define('HAVE_RUBBERBAND', 1) # controls whether we think we have it + conf.define('USE_RUBBERBAND', 1) # controls whether we actually use it - check_header_and_define(conf, 'sys/vfs.h', 'HAVE_SYS_VFS_H') - check_header_and_define(conf, 'wordexp.h', 'HAVE_WORDEXP') + conf.define('CURRENT_SESSION_FILE_VERSION', CURRENT_SESSION_FILE_VERSION) - conf.env.append_value('CCFLAGS', '-D_REENTRANT -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE') - conf.env.append_value('CXXFLAGS', '-DENABLE_NLS') + conf.check(header_name='sys/vfs.h', define_name='HAVE_SYS_VFS_H') + conf.check(header_name='wordexp.h', define_name='HAVE_WORDEXP') + + if flac_supported(): + conf.define ('HAVE_FLAC', 1) + autowaf.display_msg(conf, 'Checking for FLAC support', True) + else: + autowaf.display_msg(conf, 'Checking for FLAC support', False) + if ogg_supported(): + conf.define ('HAVE_OGG', 1) + autowaf.display_msg(conf, 'Checking for Ogg/Vorbis support', True) + else: + autowaf.display_msg(conf, 'Checking for Ogg/Vorbis Support', False) - conf.env.append_value('CXXFLAGS', '-DHAVE_WAFCONFIG_H') - conf.write_config_header('wafconfig.h') + conf.write_config_header('libardour-config.h') # Boost headers autowaf.check_header(conf, 'boost/shared_ptr.hpp') autowaf.check_header(conf, 'boost/weak_ptr.hpp') + def build(bld): # Library - obj = bld.new_task_gen('cxx', 'shlib') - obj.source = ''' - amp.cc - analyser.cc - audio_buffer.cc - audio_diskstream.cc - audio_library.cc - audio_playlist.cc - audio_playlist_importer.cc - audio_port.cc - audio_region_importer.cc - audio_track.cc - audio_track_importer.cc - audioanalyser.cc - audioengine.cc - audiofile_tagger.cc - audiofilesource.cc - audioregion.cc - audiosource.cc - auditioner.cc - automatable.cc - automation.cc - automation_control.cc - automation_list.cc - beats_frames_converter.cc - broadcast_info.cc - buffer.cc - buffer_set.cc - bundle.cc - chan_count.cc - chan_mapping.cc - configuration.cc - control_protocol_manager.cc - control_protocol_search_path.cc - crossfade.cc - cycle_timer.cc - default_click.cc - delivery.cc - directory_names.cc - diskstream.cc - element_import_handler.cc - element_importer.cc - enums.cc - event_type_map.cc - export_channel.cc - export_channel_configuration.cc - export_file_io.cc - export_filename.cc - export_format_base.cc - export_format_manager.cc - export_format_specification.cc - export_formats.cc - export_handler.cc - export_preset.cc - export_processor.cc - export_profile_manager.cc - export_status.cc - export_timespan.cc - export_utilities.cc - file_source.cc - filename_extensions.cc - filesystem_paths.cc - filter.cc - find_session.cc - gain.cc - gdither.cc - globals.cc - import.cc - io.cc - io_processor.cc - jack_slave.cc - ladspa_plugin.cc - location.cc - location_importer.cc - meter.cc - midi_buffer.cc - midi_clock_slave.cc - midi_diskstream.cc - midi_model.cc - midi_patch_manager.cc - midi_playlist.cc - midi_port.cc - midi_region.cc - midi_ring_buffer.cc - midi_source.cc - midi_state_tracker.cc - midi_stretch.cc - midi_track.cc - mix.cc - mtc_slave.cc - mute_master.cc - named_selection.cc - onset_detector.cc - panner.cc - pcm_utils.cc - playlist.cc - playlist_factory.cc - plugin.cc - plugin_insert.cc - plugin_manager.cc - port.cc - port_insert.cc - port_set.cc - processor.cc - quantize.cc - rc_configuration.cc - recent_sessions.cc - region.cc - region_factory.cc - resampled_source.cc - return.cc - reverse.cc - route.cc - route_group.cc - send.cc - session.cc - session_butler.cc - session_click.cc - session_command.cc - session_configuration.cc - session_directory.cc - session_events.cc - session_export.cc - session_metadata.cc - session_midi.cc - session_process.cc - session_state.cc - session_state_utils.cc - session_time.cc - session_transport.cc - session_utils.cc - smf_source.cc - sndfile_helpers.cc - sndfileimportable.cc - sndfilesource.cc - source.cc - source_factory.cc - strip_silence.cc - svn_revision.cc - tape_file_matcher.cc - template_utils.cc - tempo.cc - tempo_map_importer.cc - ticker.cc - track.cc - transient_detector.cc - user_bundle.cc - utils.cc - version.cc - ''' + obj = bld.new_task_gen('cxx', 'shlib') + obj.source = libardour_sources obj.export_incdirs = ['.'] - obj.includes = ['.', '../surfaces/control_protocol'] + obj.includes = ['.', '../surfaces/control_protocol', '..'] obj.name = 'libardour' obj.target = 'ardour' - obj.uselib = 'GLIBMM AUBIO SIGCPP XML UUID JACK SNDFILE SAMPLERATE LRDF' - obj.uselib_local = 'libpbd libmidipp libevoral libvamphost libvampplugin libtaglib' + obj.uselib = 'GLIBMM GTHREAD AUBIO SIGCPP XML UUID JACK SNDFILE SAMPLERATE LRDF OSX COREAUDIO' + obj.uselib_local = 'libpbd libmidipp libevoral libvamphost libvampplugin libtaglib librubberband libaudiographer' obj.vnum = LIBARDOUR_LIB_VERSION obj.install_path = os.path.join(bld.env['LIBDIR'], 'ardour3') obj.cxxflags = ['-DPACKAGE="libardour3"'] @@ -234,28 +277,77 @@ def build(bld): os.path.normpath(bld.env['DATADIR']), 'locale') + '"'] obj.cxxflags += ['-DVAMP_DIR="' + os.path.join( os.path.normpath(bld.env['LIBDIR']), 'ardour3', 'vamp') + '"'] - obj.source += ' rb_effect.cc ' - obj.uselib_local += ' librubberband ' #obj.source += ' st_stretch.cc st_pitch.cc ' #obj.uselib += ' SOUNDTOUCH ' + #obj.add_objects = 'default/libs/surfaces/control_protocol/smpte_1.o' + + obj.env.append_value('LINKFLAGS', 'default/libs/surfaces/control_protocol/smpte_1.o') + # + # TODO: The above is an ugly hack that shouldn't be needed. We really need + # to refactor SMPTE out of libardour_cp to get rid of that circular dependency + # alltogether. + # if bld.env['HAVE_SLV2']: - obj.source += ' lv2_plugin.cc lv2_event_buffer.cc uri_map.cc ' + obj.source += [ 'lv2_plugin.cc', 'lv2_event_buffer.cc', 'uri_map.cc' ] obj.uselib += ' SLV2 ' - obj.cxxflags += ['-DHAVE_SLV2'] - if bld.env['HAVE_CPPUNIT']: + if bld.env['VST']: + obj.source += [ 'vst_plugin.cc', 'session_vst.cc' ] + + if bld.env['HAVE_COREAUDIO'] and bld.env['COREAUDIO']: + obj.source += [ 'coreaudiosource.cc', 'caimportable.cc' ] + + if bld.env['HAVE_AUDIOUNITS'] or bld.env['HAVE_COREAUDIO']: + obj.uselib_local += ' libappleutility' + + if bld.env['HAVE_AUDIOUNITS'] and bld.env['AUDIOUNITS']: + obj.source += [ 'audio_unit.cc' ] + + if bld.env['FPU_OPTIMIZATION']: + obj.source += [ 'sse_functions_xmm.cc' ] + if bld.env['build_target'] == 'i386' or bld.env['build_target'] == 'i686': + obj.source += [ 'sse_functions.s' ] + elif bld.env['build_target'] == 'x86_64': + obj.source += [ 'sse_functions_64bit.s' ] + + # i18n + if bld.env['ENABLE_NLS']: + mo_files = glob.glob (os.path.join (bld.get_curdir(), 'po/*.mo')) + for mo in mo_files: + lang = os.path.basename (mo).replace ('.mo', '') + bld.install_as (os.path.join (bld.env['PREFIX'], 'share', 'locale', lang, 'LC_MESSAGES', APPNAME + '.mo'), mo) + + if bld.env['BUILD_TESTS'] and bld.env['HAVE_CPPUNIT']: # Unit tests - obj = bld.new_task_gen('cxx', 'program') - obj.source = ''' - interpolation.cc - tests/interpolation-test.cc - tests/testrunner.cpp - ''' - obj.includes = ['.', './ardour'] - obj.uselib = 'CPPUNIT SIGCPP' - obj.target = 'run-tests' - obj.install_path = '' + testobj = bld.new_task_gen('cxx', 'program') + testobj.source = ''' + test/BBTTest.cpp + test/InterpolationTest.cpp + test/testrunner.cpp + '''.split() + testobj.includes = obj.includes + ['../pbd/'] + testobj.uselib = 'CPPUNIT SIGCPP JACK GLIBMM GTHREAD SAMPLERATE XML LRDF COREAUDIO' + testobj.uselib_local = 'libpbd libmidipp libardour' + testobj.name = 'libardour-tests' + testobj.target = 'run-tests' + testobj.install_path = '' + testobj.cxxflags = ['-DPACKAGE="libardour3test"'] + testobj.cxxflags += ['-DDATA_DIR="' + os.path.normpath(bld.env['DATADIR']) + '"'] + testobj.cxxflags += ['-DCONFIG_DIR="' + os.path.normpath(bld.env['CONFIGDIR']) + '"'] + testobj.cxxflags += ['-DMODULE_DIR="' + os.path.normpath(bld.env['LIBDIR']) + '"'] + testobj.cxxflags += ['-DLOCALEDIR="' + os.path.join( + os.path.normpath(bld.env['DATADIR']), 'locale') + '"'] + testobj.cxxflags += ['-DVAMP_DIR="' + os.path.join( + os.path.normpath(bld.env['LIBDIR']), 'ardour3', 'vamp') + '"'] + if bld.env['FPU_OPTIMIZATION']: + testobj.source += [ 'sse_functions_xmm.cc' ] + if bld.env['build_target'] == 'i386' or bld.env['build_target'] == 'i686': + testobj.source += [ 'sse_functions.s' ] + elif bld.env['build_target'] == 'x86_64': + testobj.source += [ 'sse_functions_64bit.s' ] def shutdown(): autowaf.shutdown() +def i18n(bld): + build_i18n (bld, 'libs/ardour', APPNAME, libardour_sources)