From 3b7230552d8aa6c36fd2fbc3ccc1cfb9109fc843 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Wed, 22 Jul 2009 13:51:16 +0000 Subject: [PATCH] make i18n build work ; add mackie dir back to build ; token work on amp for MIDI; don't try to subgroup route groups with MIDI (for now) git-svn-id: svn://localhost/ardour2/branches/3.0@5412 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/wscript | 367 ++++++++++++++++--------------- libs/ardour/amp.cc | 20 +- libs/ardour/ardour/buffer_set.h | 19 ++ libs/ardour/ardour/midi_buffer.h | 9 + libs/ardour/delivery.cc | 2 - libs/ardour/internal_send.cc | 2 + libs/ardour/route.cc | 7 +- libs/ardour/route_group.cc | 11 + libs/ardour/send.cc | 8 +- libs/ardour/wscript | 334 ++++++++++++++-------------- libs/surfaces/mackie/wscript | 10 +- libs/surfaces/wscript | 1 + w18n.py | 41 ++++ wscript | 11 +- 14 files changed, 488 insertions(+), 354 deletions(-) create mode 100644 w18n.py diff --git a/gtk2_ardour/wscript b/gtk2_ardour/wscript index d847ee311c..a43573c801 100644 --- a/gtk2_ardour/wscript +++ b/gtk2_ardour/wscript @@ -2,6 +2,7 @@ import autowaf import os import glob +from w18n import build_i18n # Version of this package (even if built as a child) MAJOR = '1' @@ -19,8 +20,181 @@ blddir = 'build' path_prefix = 'gtk2_ardour/' +gtk2_ardour_sources = [ + 'about.cc', + 'actions.cc', + 'add_midi_cc_track_dialog.cc', + 'add_route_dialog.cc', + 'analysis_window.cc', + 'ardour_dialog.cc', + 'ardour_ui.cc', + 'ardour_ui2.cc', + 'ardour_ui_dependents.cc', + 'ardour_ui_dialogs.cc', + 'ardour_ui_ed.cc', + 'ardour_ui_mixer.cc', + 'ardour_ui_options.cc', + 'audio_clock.cc', + 'audio_region_editor.cc', + 'audio_region_view.cc', + 'audio_streamview.cc', + 'audio_time_axis.cc', + 'automation_controller.cc', + 'automation_line.cc', + 'automation_region_view.cc', + 'automation_streamview.cc', + 'automation_time_axis.cc', + 'axis_view.cc', + 'bundle_manager.cc', + 'cairo_widget.cc', + 'canvas-flag.cc', + 'canvas-note-event.cc', + 'canvas-note.cc', + 'canvas-program-change.cc', + 'canvas-simpleline.c', + 'canvas-simplerect.c', + 'canvas-sysex.cc', + 'canvas-waveview.c', + 'control_point.cc', + 'control_point_dialog.cc', + 'crossfade_edit.cc', + 'crossfade_view.cc', + 'curvetest.cc', + 'diamond.cc', + 'editing.cc', + 'editor.cc', + 'editor_actions.cc', + 'editor_audio_import.cc', + 'editor_audiotrack.cc', + 'editor_canvas.cc', + 'editor_canvas_events.cc', + 'editor_component.cc', + 'editor_cursors.cc', + 'editor_drag.cc', + 'editor_route_groups.cc', + 'editor_export_audio.cc', + 'editor_group_tabs.cc', + 'editor_hscroller.cc', + 'editor_keyboard.cc', + 'editor_keys.cc', + 'editor_markers.cc', + 'editor_mixer.cc', + 'editor_mouse.cc', + 'editor_nudge.cc', + 'editor_ops.cc', + 'editor_regions.cc', + 'editor_routes.cc', + 'editor_rulers.cc', + 'editor_scrub.cc', + 'editor_selection.cc', + 'editor_selection_list.cc', + 'editor_snapshots.cc', + 'editor_summary.cc', + 'editor_tempodisplay.cc', + 'editor_timefx.cc', + 'engine_dialog.cc', + 'enums.cc', + 'export_channel_selector.cc', + 'export_dialog.cc', + 'export_file_notebook.cc', + 'export_filename_selector.cc', + 'export_format_dialog.cc', + 'export_format_selector.cc', + 'export_preset_selector.cc', + 'export_timespan_selector.cc', + 'fft.cc', + 'fft_graph.cc', + 'fft_result.cc', + 'gain_meter.cc', + 'generic_pluginui.cc', + 'ghostregion.cc', + 'global_port_matrix.cc', + 'group_tabs.cc', + 'gtk-custom-hruler.c', + 'gtk-custom-ruler.c', + 'io_selector.cc', + 'keyboard.cc', + 'keyeditor.cc', + 'latency_gui.cc', + 'level_meter.cc', + 'lineset.cc', + 'location_ui.cc', + 'main.cc', + 'marker.cc', + 'midi_channel_selector.cc', + 'midi_port_dialog.cc', + 'midi_region_view.cc', + 'midi_scroomer.cc', + 'midi_streamview.cc', + 'midi_time_axis.cc', + 'mixer_group_tabs.cc', + 'mixer_strip.cc', + 'mixer_ui.cc', + 'nag.cc', + 'option_editor.cc', + 'opts.cc', + 'panner.cc', + 'panner2d.cc', + 'panner_ui.cc', + 'piano_roll_header.cc', + 'playlist_selector.cc', + 'plugin_eq_gui.cc', + 'plugin_selector.cc', + 'plugin_ui.cc', + 'port_group.cc', + 'port_matrix.cc', + 'port_matrix_body.cc', + 'port_matrix_column_labels.cc', + 'port_matrix_component.cc', + 'port_matrix_grid.cc', + 'port_matrix_labels.cc', + 'port_matrix_row_labels.cc', + 'processor_box.cc', + 'prompter.cc', + 'public_editor.cc', + 'rc_option_editor.cc', + 'region_gain_line.cc', + 'region_selection.cc', + 'region_view.cc', + 'return_ui.cc', + 'rhythm_ferret.cc', + 'route_group_dialog.cc', + 'route_group_menu.cc', + 'route_params_ui.cc', + 'route_processor_selection.cc', + 'route_time_axis.cc', + 'route_ui.cc', + 'selection.cc', + 'send_ui.cc', + 'session_import_dialog.cc', + 'session_metadata_dialog.cc', + 'session_option_editor.cc', + 'sfdb_ui.cc', + 'simpleline.cc', + 'simplerect.cc', + 'splash.cc', + 'startup.cc', + 'streamview.cc', + 'strip_silence_dialog.cc', + 'tape_region_view.cc', + 'tempo_dialog.cc', + 'tempo_lines.cc', + 'theme_manager.cc', + 'time_axis_view.cc', + 'time_axis_view_item.cc', + 'time_fx_dialog.cc', + 'time_selection.cc', + 'track_selection.cc', + 'ui_config.cc', + 'utils.cc', + 'version.cc', + 'waveview.cc', +] + def set_options(opt): autowaf.set_options(opt) + opt.add_option('--potupdate', action='store_true', dest='potupdate', + help='Rebuild pot file for translators') def configure(conf): autowaf.build_version_files(path_prefix+'version.h', path_prefix+'version.cc', @@ -51,177 +225,8 @@ def configure(conf): def build(bld): # Program obj = bld.new_task_gen(features = 'cxx cc cprogram') - obj.source = ''' - about.cc - actions.cc - add_midi_cc_track_dialog.cc - add_route_dialog.cc - analysis_window.cc - ardour_dialog.cc - ardour_ui.cc - ardour_ui2.cc - ardour_ui_dependents.cc - ardour_ui_dialogs.cc - ardour_ui_ed.cc - ardour_ui_mixer.cc - ardour_ui_options.cc - audio_clock.cc - audio_region_editor.cc - audio_region_view.cc - audio_streamview.cc - audio_time_axis.cc - automation_controller.cc - automation_line.cc - automation_region_view.cc - automation_streamview.cc - automation_time_axis.cc - axis_view.cc - bundle_manager.cc - cairo_widget.cc - canvas-flag.cc - canvas-note-event.cc - canvas-note.cc - canvas-program-change.cc - canvas-simpleline.c - canvas-simplerect.c - canvas-sysex.cc - canvas-waveview.c - control_point.cc - control_point_dialog.cc - crossfade_edit.cc - crossfade_view.cc - curvetest.cc - diamond.cc - editing.cc - editor.cc - editor_actions.cc - editor_audio_import.cc - editor_audiotrack.cc - editor_canvas.cc - editor_canvas_events.cc - editor_component.cc - editor_cursors.cc - editor_drag.cc - editor_route_groups.cc - editor_export_audio.cc - editor_group_tabs.cc - editor_hscroller.cc - editor_keyboard.cc - editor_keys.cc - editor_markers.cc - editor_mixer.cc - editor_mouse.cc - editor_nudge.cc - editor_ops.cc - editor_regions.cc - editor_routes.cc - editor_rulers.cc - editor_scrub.cc - editor_selection.cc - editor_selection_list.cc - editor_snapshots.cc - editor_summary.cc - editor_tempodisplay.cc - editor_timefx.cc - engine_dialog.cc - enums.cc - export_channel_selector.cc - export_dialog.cc - export_file_notebook.cc - export_filename_selector.cc - export_format_dialog.cc - export_format_selector.cc - export_preset_selector.cc - export_timespan_selector.cc - fft.cc - fft_graph.cc - fft_result.cc - gain_meter.cc - generic_pluginui.cc - ghostregion.cc - global_port_matrix.cc - group_tabs.cc - gtk-custom-hruler.c - gtk-custom-ruler.c - io_selector.cc - keyboard.cc - keyeditor.cc - latency_gui.cc - level_meter.cc - lineset.cc - location_ui.cc - main.cc - marker.cc - midi_channel_selector.cc - midi_port_dialog.cc - midi_region_view.cc - midi_scroomer.cc - midi_streamview.cc - midi_time_axis.cc - mixer_group_tabs.cc - mixer_strip.cc - mixer_ui.cc - nag.cc - option_editor.cc - opts.cc - panner.cc - panner2d.cc - panner_ui.cc - piano_roll_header.cc - playlist_selector.cc - plugin_eq_gui.cc - plugin_selector.cc - plugin_ui.cc - port_group.cc - port_matrix.cc - port_matrix_body.cc - port_matrix_column_labels.cc - port_matrix_component.cc - port_matrix_grid.cc - port_matrix_labels.cc - port_matrix_row_labels.cc - processor_box.cc - prompter.cc - public_editor.cc - rc_option_editor.cc - region_gain_line.cc - region_selection.cc - region_view.cc - return_ui.cc - rhythm_ferret.cc - route_group_dialog.cc - route_group_menu.cc - route_params_ui.cc - route_processor_selection.cc - route_time_axis.cc - route_ui.cc - selection.cc - send_ui.cc - session_import_dialog.cc - session_metadata_dialog.cc - session_option_editor.cc - sfdb_ui.cc - simpleline.cc - simplerect.cc - splash.cc - startup.cc - streamview.cc - strip_silence_dialog.cc - tape_region_view.cc - tempo_dialog.cc - tempo_lines.cc - theme_manager.cc - time_axis_view.cc - time_axis_view_item.cc - time_fx_dialog.cc - time_selection.cc - track_selection.cc - ui_config.cc - utils.cc - version.cc - waveview.cc - ''' obj.includes = ['.'] + obj.source = gtk2_ardour_sources obj.name = 'gtk2_ardour' obj.target = 'ardour-3.0' obj.install_path = os.path.join(bld.env['LIBDIR'], 'ardour3') @@ -238,29 +243,29 @@ def build(bld): obj.cxxflags += ['-DLOCALEDIR="' + os.path.join( os.path.normpath(bld.env['DATADIRNAME']), 'locale') + '"'] if bld.env['HAVE_SLV2']: - obj.source += ' lv2_plugin_ui.cc ' + obj.source += [ 'lv2_plugin_ui.cc' ] obj.uselib += ' SLV2 ' if bld.env['FREESOUND']: - obj.source += 'sfdb_freesound_mootcher.cc ' + obj.source += [ 'sfdb_freesound_mootcher.cc' ] if bld.env['VST']: - obj.source += ' vst_pluginui.cc ' + obj.source += [ 'vst_pluginui.cc' ] obj.cxxflags += [ '-DVST_SUPPORT' ] if bld.env['GTKOSX']: obj.features += ' objc ' - obj.source += ' cocoacarbon.mm ' + obj.source += [ 'cocoacarbon.mm' ] obj.cxxflags += [ '-DTOP_MENUBAR', '-DGTKOSX' ] obj.linkflags += [ '-framework', 'AppKit', '-framework', 'CoreAudioKit' ] if bld.env['AUDIOUNITS']: - obj.source += ' au_pluginui.mm ' + obj.source += [ 'au_pluginui.mm' ] obj.cxxflags += [ '-DHAVE_AUDIOUNITS' ] obj.uselib_local += ' libappleutility ' else: - obj.source += ' x11.cc ' + obj.source += [ 'x11.cc' ] # Wrappers @@ -401,6 +406,12 @@ def build(bld): bld.install_files('${DATADIR}/ardour3/pixmaps', 'pixmaps/*.xpm') bld.install_files('${DATADIR}/ardour3', 'splash.png') -def shutdown(): - autowaf.shutdown() + # 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) +def i18n(bld): + build_i18n (bld, 'gtk2_ardour', APPNAME, gtk2_ardour_sources) diff --git a/libs/ardour/amp.cc b/libs/ardour/amp.cc index c5183eb3db..0efaaa3535 100644 --- a/libs/ardour/amp.cc +++ b/libs/ardour/amp.cc @@ -28,6 +28,7 @@ #include "ardour/buffer_set.h" #include "ardour/configuration.h" #include "ardour/io.h" +#include "ardour/midi_buffer.h" #include "ardour/mute_master.h" #include "ardour/session.h" @@ -193,9 +194,26 @@ Amp::apply_gain (BufferSet& bufs, nframes_t nframes, gain_t initial, gain_t targ delta = target - initial; } + /* MIDI Gain */ + + for (BufferSet::midi_iterator i = bufs.midi_begin(); i != bufs.midi_end(); ++i) { +#if 0 + MidiBuffer& mb (*i); + + for (MidiBuffer::iterator m = mb.begin(); m != mb.end(); ++m) { + Evoral::MIDIEvent ev (*m); + if (ev.buffer()[0] == MIDI_CMD_NOTE_ON) { + ev.buffer()[2] = (uint8_t) rint (ev.buffer()[2] * 1.0); + } + } +#endif + } + + /* Audio Gain */ + for (BufferSet::audio_iterator i = bufs.audio_begin(); i != bufs.audio_end(); ++i) { Sample* const buffer = i->data(); - + fractional_pos = 1.0; for (nframes_t nx = 0; nx < declick; ++nx) { diff --git a/libs/ardour/ardour/buffer_set.h b/libs/ardour/ardour/buffer_set.h index 1c77918789..284609a988 100644 --- a/libs/ardour/ardour/buffer_set.h +++ b/libs/ardour/ardour/buffer_set.h @@ -126,6 +126,25 @@ public: audio_iterator audio_begin() { return audio_iterator(*this, 0); } audio_iterator audio_end() { return audio_iterator(*this, _count.n_audio()); } + class midi_iterator { + public: + MidiBuffer& operator*() { return _set.get_midi(_index); } + MidiBuffer* operator->() { return &_set.get_midi(_index); } + midi_iterator& operator++() { ++_index; return *this; } // yes, prefix only + bool operator==(const midi_iterator& other) { return (_index == other._index); } + bool operator!=(const midi_iterator& other) { return (_index != other._index); } + + private: + friend class BufferSet; + + midi_iterator(BufferSet& list, size_t index) : _set(list), _index(index) {} + + BufferSet& _set; + size_t _index; + }; + + midi_iterator midi_begin() { return midi_iterator(*this, 0); } + midi_iterator midi_end() { return midi_iterator(*this, _count.n_midi()); } class iterator { public: diff --git a/libs/ardour/ardour/midi_buffer.h b/libs/ardour/ardour/midi_buffer.h index 4e27e33235..d5f15fb621 100644 --- a/libs/ardour/ardour/midi_buffer.h +++ b/libs/ardour/ardour/midi_buffer.h @@ -64,6 +64,15 @@ public: *((TimeType*)(buffer._data + offset)), event_size, ev_start); } + inline EventType operator*() { + uint8_t* ev_start = buffer._data + offset + sizeof(TimeType); + int event_size = Evoral::midi_event_size(ev_start); + assert(event_size >= 0); + return EventType(EventTypeMap::instance().midi_event_type(*ev_start), + *((TimeType*)(buffer._data + offset)), + event_size, ev_start); + } + inline iterator_base& operator++() { uint8_t* ev_start = buffer._data + offset + sizeof(TimeType); int event_size = Evoral::midi_event_size(ev_start); diff --git a/libs/ardour/delivery.cc b/libs/ardour/delivery.cc index 5a7365df96..01ff226b5e 100644 --- a/libs/ardour/delivery.cc +++ b/libs/ardour/delivery.cc @@ -328,8 +328,6 @@ Delivery::run (BufferSet& bufs, sframes_t start_frame, sframes_t end_frame, nfra Amp::apply_simple_gain (bufs, nframes, tgain); } - // Attach output buffers to port buffers - if (_panner && _panner->npanners() && !_panner->bypassed()) { // Use the panner to distribute audio to output port buffers diff --git a/libs/ardour/internal_send.cc b/libs/ardour/internal_send.cc index 7c2c384276..f11c6037b3 100644 --- a/libs/ardour/internal_send.cc +++ b/libs/ardour/internal_send.cc @@ -117,6 +117,8 @@ InternalSend::run (BufferSet& bufs, sframes_t start_frame, sframes_t end_frame, _amp->run (sendbufs, start_frame, end_frame, nframes); + /* XXX NEED TO PAN */ + /* consider metering */ if (_metering) { diff --git a/libs/ardour/route.cc b/libs/ardour/route.cc index 73323b4aca..56311c975d 100644 --- a/libs/ardour/route.cc +++ b/libs/ardour/route.cc @@ -760,10 +760,6 @@ Route::add_processor_from_xml (const XMLNode& node, ProcessorList::iterator iter return true; } - } else if (prop->value() == "listen" || prop->value() == "deliver") { - - /* XXX need to generalize */ - } else if (prop->value() == "intsend") { processor.reset (new InternalSend (_session, _mute_master, node)); @@ -795,6 +791,7 @@ Route::add_processor_from_xml (const XMLNode& node, ProcessorList::iterator iter } else { error << string_compose(_("unknown Processor type \"%1\"; ignored"), prop->value()) << endmsg; + return false; } if (iter == _processors.end() && processor->visible() && !_processors.empty()) { @@ -2649,6 +2646,8 @@ Route::meter () { Glib::RWLock::ReaderLock rm (_processor_lock, Glib::TRY_LOCK); + assert (_meter); + _meter->meter (); for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ++i) { diff --git a/libs/ardour/route_group.cc b/libs/ardour/route_group.cc index f88df5c86a..26612226a7 100644 --- a/libs/ardour/route_group.cc +++ b/libs/ardour/route_group.cc @@ -34,6 +34,8 @@ #include "ardour/configuration.h" #include "ardour/session.h" +#include "i18n.h" + using namespace ARDOUR; using namespace sigc; using namespace std; @@ -224,6 +226,15 @@ RouteGroup::make_subgroup () RouteList rl; uint32_t nin = 0; + /* since we don't do MIDI Busses yet, check quickly ... */ + + for (list::iterator i = routes.begin(); i != routes.end(); ++i) { + if ((*i)->output()->n_ports().n_midi() != 0) { + PBD::info << _("You cannot subgroup MIDI tracks at this time") << endmsg; + return; + } + } + for (list::iterator i = routes.begin(); i != routes.end(); ++i) { nin = max (nin, (*i)->output()->n_ports().n_audio()); } diff --git a/libs/ardour/send.cc b/libs/ardour/send.cc index 1728dc52d9..a90f31c2cf 100644 --- a/libs/ardour/send.cc +++ b/libs/ardour/send.cc @@ -190,7 +190,13 @@ Send::configure_io (ChanCount in, ChanCount out) return false; } - return Processor::configure_io (in, out); + if (!Processor::configure_io (in, out)) { + return false; + } + + reset_panner (); + + return true; } /** Set up the XML description of a send so that its name is unique. diff --git a/libs/ardour/wscript b/libs/ardour/wscript index c58d74384e..58e22cca27 100644 --- a/libs/ardour/wscript +++ b/libs/ardour/wscript @@ -3,6 +3,7 @@ import autowaf import os import glob import Options +from w18n import build_i18n # Version of this package (even if built as a child) MAJOR = '3' @@ -26,6 +27,160 @@ 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', + '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', + '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', + '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', + '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_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' +] + def set_options(opt): autowaf.set_options(opt) @@ -76,160 +231,8 @@ def configure(conf): 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 - 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 - 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 - 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_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.name = 'libardour' @@ -249,28 +252,35 @@ def build(bld): #obj.source += ' st_stretch.cc st_pitch.cc ' #obj.uselib += ' SOUNDTOUCH ' 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 ' if bld.env['VST']: - obj.source += ' vst_plugin.cc session_vst.cc ' + obj.source += [ 'vst_plugin.cc', 'session_vst.cc' ] if bld.env['HAVE_COREAUDIO'] and bld.env['COREAUDIO']: - obj.sources += ' coreaudio.cc caimportable.cc ' + obj.sources += [ 'coreaudio.cc', 'caimportable.cc' ] if bld.env['HAVE_AUDIOUNITS'] and bld.env['AUDIOUNITS']: - obj.sources += ' audio_unit.cc ' + obj.sources += [ 'audio_unit.cc' ] if bld.env['IS_OSX']: # this avoids issues with circular dependencies between libardour and libardour_cp. obj.linkflags += '-undefined suppress -flat_namespace' if bld.env['FPU_OPTIMIZATION']: - obj.source += ' sse_functions_xmm.cc' + obj.source += [ 'sse_functions_xmm.cc' ] if bld.env['build_target'] == 'i386' or bld.env['build_target'] == 'i686': - obj.source += ' sse_functions.s' + obj.source += [ 'sse_functions.s' ] elif bld.env['build_target'] == 'x86_64': - obj.source += ' sse_functions_64bit.s' + 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['HAVE_CPPUNIT']: # Unit tests @@ -289,3 +299,5 @@ def build(bld): def shutdown(): autowaf.shutdown() +def i18n(bld): + build_i18n (bld, 'libs/ardour', APPNAME, libardour_sources) diff --git a/libs/surfaces/mackie/wscript b/libs/surfaces/mackie/wscript index 725a220851..e55c01217a 100644 --- a/libs/surfaces/mackie/wscript +++ b/libs/surfaces/mackie/wscript @@ -6,7 +6,7 @@ import os # major increment <=> incompatible changes # minor increment <=> compatible changes (additions) # micro increment <=> no interface changes -LIBSURFACES_LIB_VERSION = '4.1.0' +LIBARDOUR_MCP_LIB_VERSION = '4.1.0' # Mandatory variables srcdir = '.' @@ -43,10 +43,10 @@ def build(bld): obj.export_incdirs = ['./mackie'] obj.cxxflags = '-DPACKAGE="ardour_mackie"' obj.includes = ['.', './mackie'] - obj.name = 'libmackie' - obj.target = 'mackie' - obj.uselib_local = 'libardour libsurfaces' - obj.vnum = LIBSURFACES_LIB_VERSION + obj.name = 'libardour_mcp' + obj.target = 'ardour_mcp' + obj.uselib_local = 'libardour libardour_cp' + obj.vnum = LIBARDOUR_MCP_LIB_VERSION obj.install_path = os.path.join(bld.env['LIBDIR'], 'ardour3') def shutdown(): diff --git a/libs/surfaces/wscript b/libs/surfaces/wscript index d629e6ab8e..f952df6ed5 100644 --- a/libs/surfaces/wscript +++ b/libs/surfaces/wscript @@ -43,6 +43,7 @@ def configure(conf): def build(bld): bld.add_subdirs('control_protocol') bld.add_subdirs('generic_midi') + bld.add_subdirs('mackie') if bld.env['BUILD_OSC']: bld.add_subdirs('osc') if bld.env['BUILD_POWERMATE']: diff --git a/w18n.py b/w18n.py new file mode 100644 index 0000000000..2605de3592 --- /dev/null +++ b/w18n.py @@ -0,0 +1,41 @@ +#!/usr/bin/env python + +import autowaf +import os +import glob + +def build_i18n(bld,dir,name,sources): + pwd = bld.get_curdir() + os.chdir(pwd) + + pot_file = '%s.pot' % name + + args = [ 'xgettext', + '--keyword=_', + '--keyword=N_', + '--from-code=UTF-8', + '-o', pot_file, + '--copyright-holder="Paul Davis"' ] + args += sources + print 'Updating ', pot_file + os.spawnvp (os.P_WAIT, 'xgettext', args) + + po_files = glob.glob ('po/*.po') + + for po_file in po_files: + args = [ 'msgmerge', + '--update', + po_file, + pot_file ] + print 'Updating ', po_file + os.spawnvp (os.P_WAIT, 'msgmerge', args) + + for po_file in po_files: + mo_file = po_file.replace ('.po', '.mo') + args = [ 'msgfmt', + '-c', + '-o', + mo_file, + po_file ] + print 'Generating ', po_file + os.spawnvp (os.P_WAIT, 'msgfmt', args) diff --git a/wscript b/wscript index cf1d0d721f..f9ab47a525 100644 --- a/wscript +++ b/wscript @@ -29,6 +29,11 @@ children = [ ] +i18n_children = [ + 'gtk2_ardour', + 'libs/ardour' +] + # Version stuff def fetch_svn_revision (path): @@ -386,6 +391,8 @@ def configure(conf): autowaf.display_msg(conf, 'Samplerate', bool(conf.env['HAVE_SAMPLERATE'])) autowaf.display_msg(conf, 'Soundtouch', bool(conf.env['HAVE_SOUNDTOUCH'])) autowaf.display_msg(conf, 'Translation', opts.nls) + if opts.nls: + conf.define ('ENABLE_NLS', 1) autowaf.display_msg(conf, 'System Libraries', opts.syslibs) autowaf.display_msg(conf, 'Tranzport', opts.tranzport) if opts.tranzport: @@ -411,6 +418,6 @@ def build(bld): for i in children: bld.add_subdirs(i) -def shutdown(): - autowaf.shutdown() +def i18n(bld): + bld.recurse (i18n_children) -- 2.30.2