summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Carter <Jeremy@JeremyCarter.ca>2014-11-14 13:34:15 -0500
committerJeremy Carter <Jeremy@JeremyCarter.ca>2014-11-14 13:34:15 -0500
commit592bfdd3f4af9463e2e6a691d7240839ba50d61d (patch)
tree0c0e17acda42cf26c35b15cff67c1e0cb961e139
parent32b86104aa7f814ab5930c206ffa18971313c79d (diff)
parent6b3a8915f3c50f7220121fcb9202ec20144389c4 (diff)
Merge remote-tracking branch 'upstream/master'
-rw-r--r--gtk2_ardour/add_route_dialog.cc2
-rw-r--r--gtk2_ardour/ardour_ui.cc11
-rw-r--r--gtk2_ardour/audio_streamview.cc2
-rw-r--r--gtk2_ardour/automation_region_view.cc1
-rw-r--r--gtk2_ardour/editor.cc2
-rw-r--r--gtk2_ardour/editor_actions.cc8
-rw-r--r--gtk2_ardour/editor_audio_import.cc4
-rw-r--r--gtk2_ardour/editor_canvas.cc2
-rw-r--r--gtk2_ardour/editor_drag.cc30
-rw-r--r--gtk2_ardour/editor_export_audio.cc2
-rw-r--r--gtk2_ardour/editor_markers.cc34
-rw-r--r--gtk2_ardour/editor_mouse.cc18
-rw-r--r--gtk2_ardour/editor_ops.cc8
-rw-r--r--gtk2_ardour/editor_regions.cc2
-rw-r--r--gtk2_ardour/editor_tempodisplay.cc8
-rw-r--r--gtk2_ardour/gain_meter.cc2
-rw-r--r--gtk2_ardour/latency_gui.cc2
-rw-r--r--gtk2_ardour/midi_region_view.cc34
-rw-r--r--gtk2_ardour/midi_region_view.h1
-rw-r--r--gtk2_ardour/midi_selection.cc26
-rw-r--r--gtk2_ardour/midi_selection.h11
-rw-r--r--gtk2_ardour/note_base.cc2
-rw-r--r--gtk2_ardour/note_select_dialog.h1
-rw-r--r--gtk2_ardour/port_matrix.cc2
-rw-r--r--gtk2_ardour/rc_option_editor.cc25
-rw-r--r--gtk2_ardour/region_view.cc4
-rw-r--r--gtk2_ardour/rhythm_ferret.cc2
-rw-r--r--gtk2_ardour/route_group_dialog.cc2
-rw-r--r--gtk2_ardour/route_time_axis.cc6
-rw-r--r--gtk2_ardour/selection.cc4
-rw-r--r--gtk2_ardour/sfdb_ui.cc4
-rw-r--r--gtk2_ardour/streamview.cc4
-rw-r--r--gtk2_ardour/time_axis_view.cc2
-rw-r--r--gtk2_ardour/time_axis_view_item.cc24
-rw-r--r--gtk2_ardour/time_selection.cc2
-rw-r--r--gtk2_ardour/utils.cc2
-rw-r--r--libs/ardour/ardour/audio_unit.h6
-rw-r--r--libs/ardour/ardour/plugin_manager.h2
-rw-r--r--libs/ardour/ardour/rc_configuration_vars.h1
-rw-r--r--libs/ardour/ardour/types.h3
-rw-r--r--libs/ardour/audio_playlist_source.cc2
-rw-r--r--libs/ardour/audio_unit.cc72
-rw-r--r--libs/ardour/bundle.cc2
-rw-r--r--libs/ardour/butler.cc4
-rw-r--r--libs/ardour/cycle_timer.cc6
-rw-r--r--libs/ardour/delivery.cc6
-rw-r--r--libs/ardour/midi_model.cc26
-rw-r--r--libs/ardour/midi_playlist_source.cc6
-rw-r--r--libs/ardour/panner_shell.cc2
-rw-r--r--libs/ardour/plugin_insert.cc4
-rw-r--r--libs/ardour/plugin_manager.cc31
-rw-r--r--libs/ardour/region_factory.cc8
-rw-r--r--libs/ardour/route.cc4
-rw-r--r--libs/ardour/send.cc2
-rw-r--r--libs/ardour/session.cc4
-rw-r--r--libs/ardour/session_process.cc2
-rw-r--r--libs/ardour/sndfilesource.cc4
-rw-r--r--libs/ardour/system_exec.cc5
-rw-r--r--libs/ardour/tempo.cc12
-rw-r--r--libs/ardour/track.cc2
-rw-r--r--libs/ardour/utils.cc14
-rw-r--r--libs/backends/jack/weak_libjack.c14
-rw-r--r--libs/backends/jack/weak_libjack.def17
-rw-r--r--libs/backends/jack/weak_libjack.h16
-rw-r--r--libs/backends/jack/wscript2
-rw-r--r--libs/canvas/canvas.cc2
-rw-r--r--libs/evoral/evoral/PatchChange.hpp3
-rw-r--r--libs/evoral/evoral/Sequence.hpp1
-rw-r--r--libs/evoral/src/ControlList.cpp2
-rw-r--r--libs/evoral/src/Sequence.cpp18
-rw-r--r--libs/fst/wscript4
-rw-r--r--libs/gtkmm2ext/actions.cc2
-rw-r--r--libs/gtkmm2ext/gtk_ui.cc2
-rw-r--r--libs/midi++2/mtc.cc2
-rw-r--r--libs/pbd/pool.cc4
-rw-r--r--libs/vfork/wscript2
-rwxr-xr-xtools/linux_packaging/build4
-rwxr-xr-xtools/linux_packaging/stage2.run3
-rw-r--r--tools/linux_packaging/uninstall.sh.in2
-rwxr-xr-xtools/osx_packaging/osx_build6
-rw-r--r--tools/sanity_check/systemtest.cpp1
-rw-r--r--wscript9
82 files changed, 415 insertions, 227 deletions
diff --git a/gtk2_ardour/add_route_dialog.cc b/gtk2_ardour/add_route_dialog.cc
index 94e4369aae..57fd46be73 100644
--- a/gtk2_ardour/add_route_dialog.cc
+++ b/gtk2_ardour/add_route_dialog.cc
@@ -346,7 +346,7 @@ AddRouteDialog::mode ()
} else {
fatal << string_compose (X_("programming error: unknown track mode in add route dialog combo = %1"), str)
<< endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
/* keep gcc happy */
return ARDOUR::Normal;
diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc
index 2e9d8b3247..03ca13745f 100644
--- a/gtk2_ardour/ardour_ui.cc
+++ b/gtk2_ardour/ardour_ui.cc
@@ -88,6 +88,9 @@
#ifdef WINDOWS_VST_SUPPORT
#include <fst.h>
#endif
+#ifdef AUDIOUNIT_SUPPORT
+#include "ardour/audio_unit.h"
+#endif
#include "timecode/time.h"
@@ -483,6 +486,14 @@ ARDOUR_UI::post_engine ()
{
/* Things to be done once (and once ONLY) after we have a backend running in the AudioEngine
*/
+#ifdef AUDIOUNIT_SUPPORT
+ std::string au_msg;
+ if (AUPluginInfo::au_get_crashlog(au_msg)) {
+ popup_error(_("Audio Unit Plugin Scan Failed. Automatic AU scanning has been disabled. Please see the log window for further details."));
+ error << _("Audio Unit Plugin Scan Failed:") << endmsg;
+ info << au_msg << endmsg;
+ }
+#endif
ARDOUR::init_post_engine ();
diff --git a/gtk2_ardour/audio_streamview.cc b/gtk2_ardour/audio_streamview.cc
index 68757c256b..df1820eeeb 100644
--- a/gtk2_ardour/audio_streamview.cc
+++ b/gtk2_ardour/audio_streamview.cc
@@ -113,7 +113,7 @@ AudioStreamView::create_region_view (boost::shared_ptr<Region> r, bool wait_for_
break;
default:
fatal << string_compose (_("programming error: %1"), "illegal track mode in ::create_region_view()") << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
diff --git a/gtk2_ardour/automation_region_view.cc b/gtk2_ardour/automation_region_view.cc
index 2da15c17c5..e088f7c59f 100644
--- a/gtk2_ardour/automation_region_view.cc
+++ b/gtk2_ardour/automation_region_view.cc
@@ -60,6 +60,7 @@ AutomationRegionView::AutomationRegionView (ArdourCanvas::Container*
AutomationRegionView::~AutomationRegionView ()
{
+ RegionViewGoingAway (this); /* EMIT_SIGNAL */
}
void
diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc
index ba4eb09cd1..d5c9aa6fea 100644
--- a/gtk2_ardour/editor.cc
+++ b/gtk2_ardour/editor.cc
@@ -2631,7 +2631,7 @@ Editor::timecode_snap_to_internal (framepos_t& start, int32_t direction, bool /*
break;
default:
fatal << "Editor::smpte_snap_to_internal() called with non-timecode snap type!" << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
}
diff --git a/gtk2_ardour/editor_actions.cc b/gtk2_ardour/editor_actions.cc
index d16105987a..e8125ef593 100644
--- a/gtk2_ardour/editor_actions.cc
+++ b/gtk2_ardour/editor_actions.cc
@@ -1081,7 +1081,7 @@ Editor::snap_type_action (SnapType type)
break;
default:
fatal << string_compose (_("programming error: %1: %2"), "Editor: impossible snap-to type", (int) type) << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
act = ActionManager::get_action (X_("Snap"), action);
@@ -1477,7 +1477,7 @@ Editor::snap_mode_action (SnapMode mode)
break;
default:
fatal << string_compose (_("programming error: %1: %2"), "Editor: impossible snap mode type", (int) mode) << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
act = ActionManager::get_action (X_("Editor"), action);
@@ -1541,7 +1541,7 @@ Editor::edit_point_action (EditPoint ep)
break;
default:
fatal << string_compose (_("programming error: %1: %2"), "Editor: impossible edit point type", (int) ep) << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
act = ActionManager::get_action (X_("Editor"), action);
@@ -1599,7 +1599,7 @@ Editor::zoom_focus_action (ZoomFocus focus)
break;
default:
fatal << string_compose (_("programming error: %1: %2"), "Editor: impossible focus type", (int) focus) << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
act = ActionManager::get_action (X_("Zoom"), action);
diff --git a/gtk2_ardour/editor_audio_import.cc b/gtk2_ardour/editor_audio_import.cc
index e5ac8c6c72..af1d41f91f 100644
--- a/gtk2_ardour/editor_audio_import.cc
+++ b/gtk2_ardour/editor_audio_import.cc
@@ -314,14 +314,14 @@ Editor::do_import (vector<string> paths, ImportDisposition disposition, ImportMo
continue;
case 0:
fatal << "Updating existing sources should be disabled!" << endmsg;
- /* NOTREACHED*/
+ abort(); /* NOTREACHED*/
break;
case 1:
replace = false;
break;
default:
fatal << "Illegal return " << check << " from check_whether_and_how_to_import()!" << endmsg;
- /* NOTREACHED*/
+ abort(); /* NOTREACHED*/
}
/* have to reset this for every file we handle */
diff --git a/gtk2_ardour/editor_canvas.cc b/gtk2_ardour/editor_canvas.cc
index 7eeeba2ed0..482ada3cbc 100644
--- a/gtk2_ardour/editor_canvas.cc
+++ b/gtk2_ardour/editor_canvas.cc
@@ -1348,7 +1348,7 @@ Editor::choose_canvas_cursor_on_entry (GdkEventCrossing* /*event*/, ItemType typ
}
if (cursor) {
- set_canvas_cursor (cursor, false);
+ set_canvas_cursor (cursor, true);
}
}
diff --git a/gtk2_ardour/editor_drag.cc b/gtk2_ardour/editor_drag.cc
index aa37467f2c..0aaec8d24d 100644
--- a/gtk2_ardour/editor_drag.cc
+++ b/gtk2_ardour/editor_drag.cc
@@ -1967,7 +1967,10 @@ NoteResizeDrag::start_grab (GdkEvent* event, Gdk::Cursor* /*ignored*/)
MidiRegionSelection::iterator next;
next = r;
++next;
- (*r)->begin_resizing (at_front);
+ MidiRegionView* mrv = dynamic_cast<MidiRegionView*>(*r);
+ if (mrv) {
+ mrv->begin_resizing (at_front);
+ }
r = next;
}
}
@@ -1979,7 +1982,10 @@ NoteResizeDrag::motion (GdkEvent* /*event*/, bool /*first_move*/)
for (MidiRegionSelection::iterator r = ms.begin(); r != ms.end(); ++r) {
NoteBase* nb = reinterpret_cast<NoteBase*> (_item->get_data ("notebase"));
assert (nb);
- (*r)->update_resizing (nb, at_front, _drags->current_pointer_x() - grab_x(), relative);
+ MidiRegionView* mrv = dynamic_cast<MidiRegionView*>(*r);
+ if (mrv) {
+ mrv->update_resizing (nb, at_front, _drags->current_pointer_x() - grab_x(), relative);
+ }
}
}
@@ -1990,7 +1996,10 @@ NoteResizeDrag::finished (GdkEvent*, bool /*movement_occurred*/)
for (MidiRegionSelection::iterator r = ms.begin(); r != ms.end(); ++r) {
NoteBase* nb = reinterpret_cast<NoteBase*> (_item->get_data ("notebase"));
assert (nb);
- (*r)->commit_resizing (nb, at_front, _drags->current_pointer_x() - grab_x(), relative);
+ MidiRegionView* mrv = dynamic_cast<MidiRegionView*>(*r);
+ if (mrv) {
+ mrv->commit_resizing (nb, at_front, _drags->current_pointer_x() - grab_x(), relative);
+ }
}
}
@@ -1999,7 +2008,10 @@ NoteResizeDrag::aborted (bool)
{
MidiRegionSelection& ms (_editor->get_selection().midi_regions);
for (MidiRegionSelection::iterator r = ms.begin(); r != ms.end(); ++r) {
- (*r)->abort_resizing ();
+ MidiRegionView* mrv = dynamic_cast<MidiRegionView*>(*r);
+ if (mrv) {
+ mrv->abort_resizing ();
+ }
}
}
@@ -5268,12 +5280,10 @@ void
NoteCreateDrag::motion (GdkEvent* event, bool)
{
_note[1] = max ((framepos_t)0, adjusted_current_frame (event) - _region_view->region()->position ());
- double const x = _editor->sample_to_pixel (_note[1]);
- if (_note[1] > _note[0]) {
- _drag_rect->set_x1 (x);
- } else {
- _drag_rect->set_x0 (x);
- }
+ double const x0 = _editor->sample_to_pixel (_note[0]);
+ double const x1 = _editor->sample_to_pixel (_note[1]);
+ _drag_rect->set_x0 (std::min(x0, x1));
+ _drag_rect->set_x1 (std::max(x0, x1));
}
void
diff --git a/gtk2_ardour/editor_export_audio.cc b/gtk2_ardour/editor_export_audio.cc
index e40030d671..f92cf07150 100644
--- a/gtk2_ardour/editor_export_audio.cc
+++ b/gtk2_ardour/editor_export_audio.cc
@@ -90,7 +90,7 @@ Editor::export_range ()
if ((marker = reinterpret_cast<Marker *> (marker_menu_item->get_data ("marker"))) == 0) {
fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
Location* l;
diff --git a/gtk2_ardour/editor_markers.cc b/gtk2_ardour/editor_markers.cc
index 0900c7fc18..6d07ecc357 100644
--- a/gtk2_ardour/editor_markers.cc
+++ b/gtk2_ardour/editor_markers.cc
@@ -704,7 +704,7 @@ Editor::remove_marker (ArdourCanvas::Item& item, GdkEvent*)
if ((marker = static_cast<Marker*> (item.get_data ("marker"))) == 0) {
fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
if (entered_marker == marker) {
@@ -791,7 +791,7 @@ Editor::marker_context_menu (GdkEventButton* ev, ArdourCanvas::Item* item)
Marker * marker;
if ((marker = reinterpret_cast<Marker *> (item->get_data("marker"))) == 0) {
fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
bool is_start;
@@ -976,7 +976,7 @@ Editor::marker_menu_hide ()
if ((marker = reinterpret_cast<Marker *> (marker_menu_item->get_data ("marker"))) == 0) {
fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
Location* l;
@@ -994,7 +994,7 @@ Editor::marker_menu_select_using_range ()
if ((marker = reinterpret_cast<Marker *> (marker_menu_item->get_data ("marker"))) == 0) {
fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
Location* l;
@@ -1012,7 +1012,7 @@ Editor::marker_menu_select_all_selectables_using_range ()
if ((marker = reinterpret_cast<Marker *> (marker_menu_item->get_data ("marker"))) == 0) {
fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
Location* l;
@@ -1031,7 +1031,7 @@ Editor::marker_menu_separate_regions_using_location ()
if ((marker = reinterpret_cast<Marker *> (marker_menu_item->get_data ("marker"))) == 0) {
fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
Location* l;
@@ -1050,7 +1050,7 @@ Editor::marker_menu_play_from ()
if ((marker = reinterpret_cast<Marker *> (marker_menu_item->get_data ("marker"))) == 0) {
fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
Location* l;
@@ -1080,7 +1080,7 @@ Editor::marker_menu_set_playhead ()
if ((marker = reinterpret_cast<Marker *> (marker_menu_item->get_data ("marker"))) == 0) {
fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
Location* l;
@@ -1111,7 +1111,7 @@ Editor::marker_menu_range_to_next ()
if ((marker = reinterpret_cast<Marker *> (marker_menu_item->get_data ("marker"))) == 0) {
fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
Location* l;
@@ -1141,7 +1141,7 @@ Editor::marker_menu_set_from_playhead ()
if ((marker = reinterpret_cast<Marker *> (marker_menu_item->get_data ("marker"))) == 0) {
fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
Location* l;
@@ -1169,7 +1169,7 @@ Editor::marker_menu_set_from_selection (bool /*force_regions*/)
if ((marker = reinterpret_cast<Marker *> (marker_menu_item->get_data ("marker"))) == 0) {
fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
Location* l;
@@ -1200,7 +1200,7 @@ Editor::marker_menu_play_range ()
if ((marker = reinterpret_cast<Marker *> (marker_menu_item->get_data ("marker"))) == 0) {
fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
Location* l;
@@ -1225,7 +1225,7 @@ Editor::marker_menu_loop_range ()
if ((marker = reinterpret_cast<Marker *> (marker_menu_item->get_data ("marker"))) == 0) {
fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
Location* l;
@@ -1276,7 +1276,7 @@ Editor::dynamic_cast_marker_object (void* p, MeterMarker** m, TempoMarker** t) c
Marker* marker = reinterpret_cast<Marker*> (p);
if (!marker) {
fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
*m = dynamic_cast<MeterMarker*> (marker);
@@ -1320,7 +1320,7 @@ Editor::toggle_marker_menu_lock ()
if ((marker = reinterpret_cast<Marker *> (marker_menu_item->get_data ("marker"))) == 0) {
fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
Location* loc;
@@ -1346,7 +1346,7 @@ Editor::marker_menu_rename ()
if ((marker = reinterpret_cast<Marker *> (marker_menu_item->get_data ("marker"))) == 0) {
fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
@@ -1540,7 +1540,7 @@ Editor::toggle_marker_menu_glue ()
if ((marker = reinterpret_cast<Marker *> (marker_menu_item->get_data ("marker"))) == 0) {
fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
Location* loc;
diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc
index c4e19b15a8..3ad9f0a54c 100644
--- a/gtk2_ardour/editor_mouse.cc
+++ b/gtk2_ardour/editor_mouse.cc
@@ -1332,12 +1332,12 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
if ((marker = reinterpret_cast<Marker *> (item->get_data ("marker"))) == 0) {
fatal << _("programming error: tempo marker canvas item has no marker object pointer!") << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
if ((tempo_marker = dynamic_cast<TempoMarker*> (marker)) == 0) {
fatal << _("programming error: marker for tempo is not a tempo marker!") << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
edit_tempo_marker (*tempo_marker);
@@ -1350,12 +1350,12 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
if ((marker = reinterpret_cast<Marker *> (item->get_data ("marker"))) == 0) {
fatal << _("programming error: tempo marker canvas item has no marker object pointer!") << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
if ((meter_marker = dynamic_cast<MeterMarker*> (marker)) == 0) {
fatal << _("programming error: marker for meter is not a meter marker!") << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
edit_meter_marker (*meter_marker);
break;
@@ -1813,6 +1813,8 @@ Editor::leave_handler (ArdourCanvas::Item* item, GdkEvent*, ItemType item_type)
bool is_start;
bool ret = true;
+ reset_canvas_cursor ();
+
switch (item_type) {
case ControlPointItem:
_verbose_cursor->hide ();
@@ -1997,7 +1999,7 @@ Editor::can_remove_control_point (ArdourCanvas::Item* item)
if ((control_point = reinterpret_cast<ControlPoint *> (item->get_data ("control_point"))) == 0) {
fatal << _("programming error: control point canvas item has no control point object pointer!") << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
AutomationLine& line = control_point->line ();
@@ -2022,7 +2024,7 @@ Editor::remove_control_point (ArdourCanvas::Item* item)
if ((control_point = reinterpret_cast<ControlPoint *> (item->get_data ("control_point"))) == 0) {
fatal << _("programming error: control point canvas item has no control point object pointer!") << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
control_point->line().remove_point (*control_point);
@@ -2035,7 +2037,7 @@ Editor::edit_control_point (ArdourCanvas::Item* item)
if (p == 0) {
fatal << _("programming error: control point canvas item has no control point object pointer!") << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
ControlPointDialog d (p);
@@ -2240,7 +2242,7 @@ Editor::hide_marker (ArdourCanvas::Item* item, GdkEvent* /*event*/)
if ((marker = static_cast<Marker *> (item->get_data ("marker"))) == 0) {
fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
Location* location = find_location_from_marker (marker, is_start);
diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc
index 1f23aa4319..b8e13bc196 100644
--- a/gtk2_ardour/editor_ops.cc
+++ b/gtk2_ardour/editor_ops.cc
@@ -646,7 +646,7 @@ Editor::build_region_boundary_cache ()
break;
default:
fatal << string_compose (_("build_region_boundary_cache called with snap_type = %1"), _snap_type) << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
return;
}
@@ -4000,8 +4000,10 @@ void
Editor::cut_copy_midi (CutCopyOp op)
{
for (MidiRegionSelection::iterator i = selection->midi_regions.begin(); i != selection->midi_regions.end(); ++i) {
- MidiRegionView* mrv = *i;
- mrv->cut_copy_clear (op);
+ MidiRegionView* mrv = dynamic_cast<MidiRegionView*>(*i);
+ if (mrv) {
+ mrv->cut_copy_clear (op);
+ }
}
}
diff --git a/gtk2_ardour/editor_regions.cc b/gtk2_ardour/editor_regions.cc
index 886d5e1209..78c45c7d8d 100644
--- a/gtk2_ardour/editor_regions.cc
+++ b/gtk2_ardour/editor_regions.cc
@@ -1560,7 +1560,7 @@ EditorRegions::sort_type_action (Editing::RegionListSortType t) const
break;
default:
fatal << string_compose (_("programming error: %1: %2"), "EditorRegions: impossible sort type", (int) t) << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
RefPtr<Action> act = ActionManager::get_action (X_("RegionList"), action);
diff --git a/gtk2_ardour/editor_tempodisplay.cc b/gtk2_ardour/editor_tempodisplay.cc
index fec380ee35..daf36d2d72 100644
--- a/gtk2_ardour/editor_tempodisplay.cc
+++ b/gtk2_ardour/editor_tempodisplay.cc
@@ -271,12 +271,12 @@ Editor::remove_tempo_marker (ArdourCanvas::Item* item)
if ((marker = reinterpret_cast<Marker *> (item->get_data ("marker"))) == 0) {
fatal << _("programming error: tempo marker canvas item has no marker object pointer!") << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
if ((tempo_marker = dynamic_cast<TempoMarker*> (marker)) == 0) {
fatal << _("programming error: marker for tempo is not a tempo marker!") << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
if (tempo_marker->tempo().movable()) {
@@ -375,12 +375,12 @@ Editor::remove_meter_marker (ArdourCanvas::Item* item)
if ((marker = reinterpret_cast<Marker *> (item->get_data ("marker"))) == 0) {
fatal << _("programming error: meter marker canvas item has no marker object pointer!") << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
if ((meter_marker = dynamic_cast<MeterMarker*> (marker)) == 0) {
fatal << _("programming error: marker for meter is not a meter marker!") << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
if (meter_marker->meter().movable()) {
diff --git a/gtk2_ardour/gain_meter.cc b/gtk2_ardour/gain_meter.cc
index daba2e77d4..7b7ad33f9a 100644
--- a/gtk2_ardour/gain_meter.cc
+++ b/gtk2_ardour/gain_meter.cc
@@ -610,7 +610,7 @@ next_meter_point (MeterPoint mp)
break;
}
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
return MeterInput;
}
diff --git a/gtk2_ardour/latency_gui.cc b/gtk2_ardour/latency_gui.cc
index 703e7dd4ab..d21a055d9e 100644
--- a/gtk2_ardour/latency_gui.cc
+++ b/gtk2_ardour/latency_gui.cc
@@ -148,7 +148,7 @@ LatencyGUI::change_latency_from_button (int dir)
} else {
fatal << string_compose (_("programming error: %1 (%2)"), X_("illegal string in latency GUI units combo"), unitstr)
<< endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
if (dir > 0) {
diff --git a/gtk2_ardour/midi_region_view.cc b/gtk2_ardour/midi_region_view.cc
index 08fab6ff86..81248c9585 100644
--- a/gtk2_ardour/midi_region_view.cc
+++ b/gtk2_ardour/midi_region_view.cc
@@ -112,6 +112,7 @@ MidiRegionView::MidiRegionView (ArdourCanvas::Container *parent, RouteTimeAxisVi
, _last_event_y (0)
, pre_enter_cursor (0)
, pre_press_cursor (0)
+ , pre_note_enter_cursor (0)
, _note_player (0)
{
CANVAS_DEBUG_NAME (_note_group, string_compose ("note group for %1", get_item_name()));
@@ -149,6 +150,7 @@ MidiRegionView::MidiRegionView (ArdourCanvas::Container *parent, RouteTimeAxisVi
, _last_event_y (0)
, pre_enter_cursor (0)
, pre_press_cursor (0)
+ , pre_note_enter_cursor (0)
, _note_player (0)
{
CANVAS_DEBUG_NAME (_note_group, string_compose ("note group for %1", get_item_name()));
@@ -195,6 +197,7 @@ MidiRegionView::MidiRegionView (const MidiRegionView& other)
, _last_event_y (0)
, pre_enter_cursor (0)
, pre_press_cursor (0)
+ , pre_note_enter_cursor (0)
, _note_player (0)
{
init (false);
@@ -223,6 +226,7 @@ MidiRegionView::MidiRegionView (const MidiRegionView& other, boost::shared_ptr<M
, _last_event_y (0)
, pre_enter_cursor (0)
, pre_press_cursor (0)
+ , pre_note_enter_cursor (0)
, _note_player (0)
{
init (true);
@@ -420,6 +424,7 @@ MidiRegionView::leave_notify (GdkEventCrossing*)
if (pre_enter_cursor) {
Editor* editor = dynamic_cast<Editor *> (&trackview.editor());
editor->set_canvas_cursor(pre_enter_cursor);
+ pre_enter_cursor = 0;
}
return false;
@@ -456,7 +461,7 @@ MidiRegionView::button_press (GdkEventButton* ev)
if (m == MouseObject && Keyboard::modifier_state_contains (ev->state, Keyboard::insert_note_modifier())) {
pre_press_cursor = editor->get_canvas_cursor ();
editor->set_canvas_cursor (editor->cursors()->midi_pencil);
- }
+ }
if (_mouse_state != SelectTouchDragging) {
@@ -3116,7 +3121,7 @@ MidiRegionView::note_entered(NoteBase* ev)
{
Editor* editor = dynamic_cast<Editor*>(&trackview.editor());
- pre_enter_cursor = editor->get_canvas_cursor ();
+ pre_note_enter_cursor = editor->get_canvas_cursor ();
if (_mouse_state == SelectTouchDragging) {
note_selected (ev, true);
@@ -3136,9 +3141,9 @@ MidiRegionView::note_left (NoteBase*)
editor->verbose_cursor()->hide ();
- if (pre_enter_cursor) {
- editor->set_canvas_cursor (pre_enter_cursor);
- pre_enter_cursor = 0;
+ if (pre_note_enter_cursor) {
+ editor->set_canvas_cursor (pre_note_enter_cursor);
+ pre_note_enter_cursor = 0;
}
}
@@ -3190,13 +3195,13 @@ MidiRegionView::note_mouse_position (float x_fraction, float /*y_fraction*/, boo
Editing::MouseMode mm = editor->current_mouse_mode();
bool trimmable = (mm == MouseObject || mm == MouseTimeFX || mm == MouseDraw);
- if (trimmable && x_fraction > 0.0 && x_fraction < 0.2) {
- editor->set_canvas_cursor (editor->cursors()->left_side_trim);
- } else if (trimmable && x_fraction >= 0.8 && x_fraction < 1.0) {
- editor->set_canvas_cursor (editor->cursors()->right_side_trim);
- } else {
- if (pre_enter_cursor && can_set_cursor) {
- editor->set_canvas_cursor (pre_enter_cursor);
+ if (can_set_cursor) {
+ if (trimmable && x_fraction > 0.0 && x_fraction < 0.2) {
+ editor->set_canvas_cursor (editor->cursors()->left_side_trim);
+ } else if (trimmable && x_fraction >= 0.8 && x_fraction < 1.0) {
+ editor->set_canvas_cursor (editor->cursors()->right_side_trim);
+ } else if (pre_note_enter_cursor) {
+ editor->set_canvas_cursor (pre_note_enter_cursor);
}
}
}
@@ -3221,7 +3226,7 @@ MidiRegionView::set_frame_color()
}
if (!rect_visible) {
- f = UINT_RGBA_CHANGE_A (f, 0);
+ f = UINT_RGBA_CHANGE_A (f, 80);
}
frame->set_fill_color (f);
@@ -3520,7 +3525,8 @@ MidiRegionView::update_ghost_note (double x, double y)
/* note that this sets the time of the ghost note in beats relative to
the start of the source; that is how all note times are stored.
*/
- _ghost_note->note()->set_time (absolute_frames_to_source_beats (f + _region->position ()));
+ _ghost_note->note()->set_time (
+ std::max(0.0, absolute_frames_to_source_beats (f + _region->position ())));
_ghost_note->note()->set_length (length);
_ghost_note->note()->set_note (midi_stream_view()->y_to_note (y));
_ghost_note->note()->set_channel (mtv->get_channel_for_add ());
diff --git a/gtk2_ardour/midi_region_view.h b/gtk2_ardour/midi_region_view.h
index 3fd6625ce9..65ca7df7ab 100644
--- a/gtk2_ardour/midi_region_view.h
+++ b/gtk2_ardour/midi_region_view.h
@@ -473,6 +473,7 @@ private:
Gdk::Cursor* pre_enter_cursor;
Gdk::Cursor* pre_press_cursor;
+ Gdk::Cursor* pre_note_enter_cursor;
NotePlayer* _note_player;
diff --git a/gtk2_ardour/midi_selection.cc b/gtk2_ardour/midi_selection.cc
index bf9b88899b..f98f696444 100644
--- a/gtk2_ardour/midi_selection.cc
+++ b/gtk2_ardour/midi_selection.cc
@@ -17,29 +17,19 @@
*/
-#include "gtkmm2ext/gui_thread.h"
-#include "midi_region_view.h"
#include "midi_selection.h"
-#include "region_view.h"
MidiRegionSelection::MidiRegionSelection ()
-{
- RegionView::RegionViewGoingAway.connect (_death_connection, MISSING_INVALIDATOR, boost::bind (&MidiRegionSelection::remove_it, this, _1), gui_context());
-}
+ : RegionSelection ()
+{}
-/** Copy constructor.
- * @param other MidiRegionSelection to copy.
- */
MidiRegionSelection::MidiRegionSelection (MidiRegionSelection const & other)
- : std::list<MidiRegionView*> (other)
-{
- RegionView::RegionViewGoingAway.connect (_death_connection, MISSING_INVALIDATOR, boost::bind (&MidiRegionSelection::remove_it, this, _1), gui_context());
-}
-
+ : RegionSelection (other)
+{}
-void
-MidiRegionSelection::remove_it (RegionView* rv)
+MidiRegionSelection&
+MidiRegionSelection::operator= (const MidiRegionSelection& other)
{
- MidiRegionView* mrv = dynamic_cast<MidiRegionView*> (rv);
- remove (mrv);
+ RegionSelection::operator=(other);
+ return *this;
}
diff --git a/gtk2_ardour/midi_selection.h b/gtk2_ardour/midi_selection.h
index f2c2d3fc60..2aa04356d7 100644
--- a/gtk2_ardour/midi_selection.h
+++ b/gtk2_ardour/midi_selection.h
@@ -20,22 +20,19 @@
#ifndef __ardour_gtk_midi_selection_h__
#define __ardour_gtk_midi_selection_h__
-#include <list>
-#include "pbd/signals.h"
+#include "region_selection.h"
class MidiRegionView;
class MidiCutBuffer;
class RegionView;
-class MidiRegionSelection : public std::list<MidiRegionView*>
+class MidiRegionSelection : public RegionSelection
{
public:
MidiRegionSelection ();
- MidiRegionSelection (MidiRegionSelection const &);
+ MidiRegionSelection (const MidiRegionSelection&);
-private:
- void remove_it (RegionView *);
- PBD::ScopedConnection _death_connection;
+ MidiRegionSelection& operator= (const MidiRegionSelection&);
};
struct MidiNoteSelection : std::list<MidiCutBuffer*> {};
diff --git a/gtk2_ardour/note_base.cc b/gtk2_ardour/note_base.cc
index 7bc45a4b25..5e5d83e500 100644
--- a/gtk2_ardour/note_base.cc
+++ b/gtk2_ardour/note_base.cc
@@ -262,8 +262,8 @@ NoteBase::event_handler (GdkEvent* ev)
switch (ev->type) {
case GDK_ENTER_NOTIFY:
- set_mouse_fractions (ev);
_region.note_entered (this);
+ set_mouse_fractions (ev);
break;
case GDK_LEAVE_NOTIFY:
diff --git a/gtk2_ardour/note_select_dialog.h b/gtk2_ardour/note_select_dialog.h
index 607dbe1506..910728f2fb 100644
--- a/gtk2_ardour/note_select_dialog.h
+++ b/gtk2_ardour/note_select_dialog.h
@@ -20,6 +20,7 @@
#ifndef __gtk2_ardour_note_select_dialog_h__
#define __gtk2_ardour_note_select_dialog_h__
+#include <stdint.h>
#include "ardour_dialog.h"
#include "gtk_pianokeyboard.h"
diff --git a/gtk2_ardour/port_matrix.cc b/gtk2_ardour/port_matrix.cc
index bf9da544e6..b3b5a91ed3 100644
--- a/gtk2_ardour/port_matrix.cc
+++ b/gtk2_ardour/port_matrix.cc
@@ -1139,7 +1139,7 @@ PortMatrix::get_association (PortMatrixNode node) const
}
- /* NOTREACHED */
+ abort(); /* NOTREACHED */
return PortMatrixNode::NOT_ASSOCIATED;
}
diff --git a/gtk2_ardour/rc_option_editor.cc b/gtk2_ardour/rc_option_editor.cc
index a4d2b5dee2..0cb8441fd9 100644
--- a/gtk2_ardour/rc_option_editor.cc
+++ b/gtk2_ardour/rc_option_editor.cc
@@ -996,7 +996,8 @@ public:
PluginOptions (RCConfiguration* c)
: _rc_config (c)
, _display_plugin_scan_progress (_("Always Display Plugin Scan Progress"))
- , _discover_vst_on_start (_("Scan for new VST Plugins on Application Start"))
+ , _discover_vst_on_start (_("Scan for [new] VST Plugins on Application Start"))
+ , _discover_au_on_start (_("Scan for AudioUnit Plugins on Application Start"))
, _timeout_adjustment (0, 0, 3000, 50, 50)
, _timeout_slider (_timeout_adjustment)
{
@@ -1022,6 +1023,7 @@ public:
Gtkmm2ext::UI::instance()->set_tip (_display_plugin_scan_progress,
_("<b>When enabled</b> a popup window showing plugin scan progress is displayed for indexing (cache load) and discovery (detect new plugins)"));
+#if (defined WINDOWS_VST_SUPPORT || defined LXVST_SUPPORT)
_timeout_slider.set_digits (0);
_timeout_adjustment.signal_value_changed().connect (sigc::mem_fun (*this, &PluginOptions::timeout_changed));
@@ -1069,6 +1071,14 @@ public:
b->signal_clicked().connect (sigc::mem_fun (*this, &PluginOptions::edit_vst_path_clicked));
t->attach (*b, 1, 2, n, n+1, FILL); ++n;
#endif
+#endif // any VST
+
+#ifdef AUDIOUNIT_SUPPORT
+ t->attach (_discover_au_on_start, 0, 2, n, n+1); ++n;
+ _discover_au_on_start.signal_toggled().connect (sigc::mem_fun (*this, &PluginOptions::discover_au_on_start_toggled));
+ Gtkmm2ext::UI::instance()->set_tip (_discover_au_on_start,
+ _("<b>When enabled</b> Audio Unit Plugins are discovered on application start. When disabled AU plugins will only be available after triggering a 'Scan' manually. The first successful scan will enable AU auto-scan, Any crash during plugin discovery will disable it."));
+#endif
_box->pack_start (*t,true,true);
}
@@ -1086,18 +1096,24 @@ public:
int const x = _rc_config->get_vst_scan_timeout();
_timeout_adjustment.set_value (x);
}
+ else if (p == "discover-audio-units") {
+ bool const x = _rc_config->get_discover_audio_units();
+ _discover_au_on_start.set_active (x);
+ }
}
void set_state_from_config () {
parameter_changed ("show-plugin-scan-window");
parameter_changed ("discover-vst-on-start");
parameter_changed ("vst-scan-timeout");
+ parameter_changed ("discover-audio-units");
}
private:
RCConfiguration* _rc_config;
CheckButton _display_plugin_scan_progress;
CheckButton _discover_vst_on_start;
+ CheckButton _discover_au_on_start;
Adjustment _timeout_adjustment;
HScale _timeout_slider;
@@ -1111,6 +1127,11 @@ private:
_rc_config->set_discover_vst_on_start(x);
}
+ void discover_au_on_start_toggled () {
+ bool const x = _discover_au_on_start.get_active();
+ _rc_config->set_discover_audio_units(x);
+ }
+
void timeout_changed () {
int x = floor(_timeout_adjustment.get_value());
_rc_config->set_vst_scan_timeout(x);
@@ -2127,7 +2148,7 @@ RCOptionEditor::RCOptionEditor ()
/* VIDEO Timeline */
add_option (_("Video"), new VideoTimelineOptions (_rc_config));
-#if (defined WINDOWS_VST_SUPPORT || defined LXVST_SUPPORT)
+#if (defined WINDOWS_VST_SUPPORT || defined LXVST_SUPPORT || defined AUDIOUNIT_SUPPORT)
/* Plugin options (currrently VST only) */
add_option (_("Plugins"), new PluginOptions (_rc_config));
#endif
diff --git a/gtk2_ardour/region_view.cc b/gtk2_ardour/region_view.cc
index d4604b265d..fcdde48487 100644
--- a/gtk2_ardour/region_view.cc
+++ b/gtk2_ardour/region_view.cc
@@ -225,7 +225,9 @@ RegionView::~RegionView ()
bool
RegionView::canvas_group_event (GdkEvent* event)
{
- return trackview.editor().canvas_region_view_event (event, group, this);
+ if (!in_destructor) {
+ return trackview.editor().canvas_region_view_event (event, group, this);
+ }
}
void
diff --git a/gtk2_ardour/rhythm_ferret.cc b/gtk2_ardour/rhythm_ferret.cc
index ec5ebc93a1..f159331018 100644
--- a/gtk2_ardour/rhythm_ferret.cc
+++ b/gtk2_ardour/rhythm_ferret.cc
@@ -273,7 +273,7 @@ RhythmFerret::get_note_onset_function ()
fatal << string_compose (_("programming error: %1 (%2)"), X_("illegal note onset function string"), txt)
<< endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
return -1;
}
diff --git a/gtk2_ardour/route_group_dialog.cc b/gtk2_ardour/route_group_dialog.cc
index 3addc1c598..e7e48f777e 100644
--- a/gtk2_ardour/route_group_dialog.cc
+++ b/gtk2_ardour/route_group_dialog.cc
@@ -207,7 +207,7 @@ RouteGroupDialog::do_run ()
msg.run ();
}
- /* NOTREACHED */
+ abort(); /* NOTREACHED */
return false;
}
diff --git a/gtk2_ardour/route_time_axis.cc b/gtk2_ardour/route_time_axis.cc
index 31c2eb1712..c4d49e40b9 100644
--- a/gtk2_ardour/route_time_axis.cc
+++ b/gtk2_ardour/route_time_axis.cc
@@ -2015,7 +2015,7 @@ RouteTimeAxisView::add_processor_automation_curve (boost::shared_ptr<Processor>
<< string_compose (X_("processor automation curve for %1:%2/%3/%4 not registered with track!"),
processor->name(), what.type(), (int) what.channel(), what.id() )
<< endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
return;
}
@@ -2481,7 +2481,7 @@ RouteTimeAxisView::add_underlay (StreamView* v, bool /*update_xml*/)
if (find(_underlay_streams.begin(), _underlay_streams.end(), v) == _underlay_streams.end()) {
if (find(other._underlay_mirrors.begin(), other._underlay_mirrors.end(), this) != other._underlay_mirrors.end()) {
fatal << _("programming error: underlay reference pointer pairs are inconsistent!") << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
_underlay_streams.push_back(v);
@@ -2518,7 +2518,7 @@ RouteTimeAxisView::remove_underlay (StreamView* v)
if (gm == other._underlay_mirrors.end()) {
fatal << _("programming error: underlay reference pointer pairs are inconsistent!") << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
v->foreach_regionview(sigc::mem_fun(*this, &RouteTimeAxisView::remove_ghost));
diff --git a/gtk2_ardour/selection.cc b/gtk2_ardour/selection.cc
index 507245eb3d..1bdc0fe8b0 100644
--- a/gtk2_ardour/selection.cc
+++ b/gtk2_ardour/selection.cc
@@ -1002,7 +1002,7 @@ Selection::toggle (list<Selectable*> const & selectables)
fatal << _("programming error: ")
<< X_("unknown selectable type passed to Selection::toggle()")
<< endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
}
@@ -1056,7 +1056,7 @@ Selection::add (list<Selectable*> const & selectables)
fatal << _("programming error: ")
<< X_("unknown selectable type passed to Selection::add()")
<< endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
}
diff --git a/gtk2_ardour/sfdb_ui.cc b/gtk2_ardour/sfdb_ui.cc
index da29eb75a8..80ee165a84 100644
--- a/gtk2_ardour/sfdb_ui.cc
+++ b/gtk2_ardour/sfdb_ui.cc
@@ -113,7 +113,7 @@ importmode2string (ImportMode mode)
case ImportAsTapeTrack:
return _("as new tape tracks");
}
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
return _("as new tracks");
}
@@ -1891,7 +1891,7 @@ SoundFileOmega::get_channel_disposition () const
if (x == disposition_map.end()) {
fatal << string_compose (_("programming error: %1 (%2)"), "unknown string for import disposition", str) << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
return x->second;
diff --git a/gtk2_ardour/streamview.cc b/gtk2_ardour/streamview.cc
index ed759f3a7e..73e150549f 100644
--- a/gtk2_ardour/streamview.cc
+++ b/gtk2_ardour/streamview.cc
@@ -431,7 +431,7 @@ StreamView::update_rec_box ()
default:
fatal << string_compose (_("programming error: %1"), "illegal track mode") << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
return;
}
@@ -575,7 +575,7 @@ StreamView::child_height () const
return height / (_layers * 2 + 1);
}
- /* NOTREACHED */
+ abort(); /* NOTREACHED */
return height;
}
diff --git a/gtk2_ardour/time_axis_view.cc b/gtk2_ardour/time_axis_view.cc
index af8699c001..58969a97f5 100644
--- a/gtk2_ardour/time_axis_view.cc
+++ b/gtk2_ardour/time_axis_view.cc
@@ -1312,7 +1312,7 @@ TimeAxisView::preset_height (Height h)
return button_height + extra_height;
}
- /* NOTREACHED */
+ abort(); /* NOTREACHED */
return 0;
}
diff --git a/gtk2_ardour/time_axis_view_item.cc b/gtk2_ardour/time_axis_view_item.cc
index c698263d57..5948cebddd 100644
--- a/gtk2_ardour/time_axis_view_item.cc
+++ b/gtk2_ardour/time_axis_view_item.cc
@@ -719,12 +719,10 @@ uint32_t
TimeAxisViewItem::fill_opacity () const
{
if (!rect_visible) {
- /* if the frame/rect is marked as invisible, then the
- * fill should be transparent. simplest: set
-
- * alpha/opacity to zero.
- */
- return 0;
+ /* if the frame/rect is marked as "invisible", then the
+ fill should be translucent.parent.
+ */
+ return 64;
}
if (_dragging) {
@@ -781,19 +779,19 @@ TimeAxisViewItem::set_frame_color()
return;
}
- frame->set_fill_color (get_fill_color());
+ frame->set_fill_color (get_fill_color());
set_frame_gradient ();
- if (!_recregion) {
+ if (!_recregion) {
uint32_t f = ARDOUR_UI::config()->get_TimeAxisFrame();
- if (!rect_visible) {
+ if (!rect_visible) {
/* make the frame outline be visible but rather transparent */
- f = UINT_RGBA_CHANGE_A (f, 64);
- }
+ f = UINT_RGBA_CHANGE_A (f, 64);
+ }
- frame->set_outline_color (f);
- }
+ frame->set_outline_color (f);
+ }
}
void
diff --git a/gtk2_ardour/time_selection.cc b/gtk2_ardour/time_selection.cc
index a0f33e8c99..8545a345eb 100644
--- a/gtk2_ardour/time_selection.cc
+++ b/gtk2_ardour/time_selection.cc
@@ -38,7 +38,7 @@ TimeSelection::operator[] (uint32_t which)
}
}
fatal << string_compose (_("programming error: request for non-existent audio range (%1)!"), which) << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
return *(new AudioRange(0,0,0)); /* keep the compiler happy; never called */
}
diff --git a/gtk2_ardour/utils.cc b/gtk2_ardour/utils.cc
index 171fc631d5..0f61656033 100644
--- a/gtk2_ardour/utils.cc
+++ b/gtk2_ardour/utils.cc
@@ -708,7 +708,7 @@ ARDOUR_UI_UTILS::get_icon_path (const char* cname, string icon_set, bool is_imag
if (!find_file (def, name, data_file_path)) {
fatal << string_compose (_("cannot find icon image for %1 using %2"), name, spath.to_string()) << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
}
diff --git a/libs/ardour/ardour/audio_unit.h b/libs/ardour/ardour/audio_unit.h
index d840c258e7..48ea614f8e 100644
--- a/libs/ardour/ardour/audio_unit.h
+++ b/libs/ardour/ardour/audio_unit.h
@@ -243,6 +243,7 @@ class LIBARDOUR_API AUPluginInfo : public PluginInfo {
bool reconfigurable_io() const { return true; }
static PluginInfoList* discover ();
+ static bool au_get_crashlog (std::string &msg);
static void get_names (CAComponentDescription&, std::string& name, std::string& maker);
static std::string stringify_descriptor (const CAComponentDescription&);
@@ -251,6 +252,11 @@ class LIBARDOUR_API AUPluginInfo : public PluginInfo {
private:
boost::shared_ptr<CAComponentDescription> descriptor;
UInt32 version;
+ static FILE * _crashlog_fd;
+
+ static void au_start_crashlog (void);
+ static void au_remove_crashlog (void);
+ static void au_crashlog (std::string);
static void discover_music (PluginInfoList&);
static void discover_fx (PluginInfoList&);
diff --git a/libs/ardour/ardour/plugin_manager.h b/libs/ardour/ardour/plugin_manager.h
index 6239bd7cb0..31ab833508 100644
--- a/libs/ardour/ardour/plugin_manager.h
+++ b/libs/ardour/ardour/plugin_manager.h
@@ -127,7 +127,7 @@ class LIBARDOUR_API PluginManager : public boost::noncopyable {
void add_lxvst_presets ();
void add_presets (std::string domain);
- void au_refresh ();
+ void au_refresh (bool cache_only = false);
void lv2_refresh ();
diff --git a/libs/ardour/ardour/rc_configuration_vars.h b/libs/ardour/ardour/rc_configuration_vars.h
index 20c3857537..2ae2b562eb 100644
--- a/libs/ardour/ardour/rc_configuration_vars.h
+++ b/libs/ardour/ardour/rc_configuration_vars.h
@@ -211,6 +211,7 @@ CONFIG_VARIABLE (bool, use_lxvst, "use-lxvst", true)
CONFIG_VARIABLE (bool, show_plugin_scan_window, "show-plugin-scan-window", false)
CONFIG_VARIABLE (bool, discover_vst_on_start, "discover-vst-on-start", false)
CONFIG_VARIABLE (int, vst_scan_timeout, "vst-scan-timeout", 600) /* deciseconds, per plugin, <= 0 no timeout */
+CONFIG_VARIABLE (bool, discover_audio_units, "discover-audio-units", false)
/* custom user plugin paths */
CONFIG_VARIABLE (std::string, plugin_path_vst, "plugin-path-vst", "@default@")
diff --git a/libs/ardour/ardour/types.h b/libs/ardour/ardour/types.h
index 7444a54a7c..165afd0dd9 100644
--- a/libs/ardour/ardour/types.h
+++ b/libs/ardour/ardour/types.h
@@ -267,8 +267,7 @@ namespace ARDOUR {
return seconds != 0;
}
- /* NOTREACHED */
- assert (false);
+ abort(); /* NOTREACHED */
return false;
}
};
diff --git a/libs/ardour/audio_playlist_source.cc b/libs/ardour/audio_playlist_source.cc
index 5e8dc09d45..5f71d6246f 100644
--- a/libs/ardour/audio_playlist_source.cc
+++ b/libs/ardour/audio_playlist_source.cc
@@ -169,7 +169,7 @@ framecnt_t
AudioPlaylistSource::write_unlocked (Sample *, framecnt_t)
{
fatal << string_compose (_("programming error: %1"), "AudioPlaylistSource::write() called - should be impossible") << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
return 0;
}
diff --git a/libs/ardour/audio_unit.cc b/libs/ardour/audio_unit.cc
index add2407f84..3024c55f43 100644
--- a/libs/ardour/audio_unit.cc
+++ b/libs/ardour/audio_unit.cc
@@ -19,6 +19,7 @@
*/
#include <sstream>
+#include <fstream>
#include <errno.h>
#include <string.h>
#include <math.h>
@@ -71,6 +72,7 @@ AUPluginInfo::CachedInfoMap AUPluginInfo::cached_info;
static string preset_search_path = "/Library/Audio/Presets:/Network/Library/Audio/Presets";
static string preset_suffix = ".aupreset";
static bool preset_search_path_initialized = false;
+FILE * AUPluginInfo::_crashlog_fd = NULL;
static OSStatus
_render_callback(void *userData,
@@ -2156,6 +2158,8 @@ AUPluginInfo::discover ()
if (!Glib::file_test (au_cache_path(), Glib::FILE_TEST_EXISTS)) {
ARDOUR::BootMessage (_("Discovering AudioUnit plugins (could take some time ...)"));
}
+ // create crash log file
+ au_start_crashlog ();
PluginInfoList* plugs = new PluginInfoList;
@@ -2164,6 +2168,9 @@ AUPluginInfo::discover ()
discover_generators (*plugs);
discover_instruments (*plugs);
+ // all fine if we get here
+ au_remove_crashlog ();
+
DEBUG_TRACE (DEBUG::PluginManager, string_compose ("AU: discovered %1 plugins\n", plugs->size()));
return plugs;
@@ -2221,10 +2228,57 @@ AUPluginInfo::discover_instruments (PluginInfoList& plugs)
discover_by_description (plugs, desc);
}
+
+bool
+AUPluginInfo::au_get_crashlog (std::string &msg)
+{
+ string fn = Glib::build_filename (ARDOUR::user_cache_directory(), "au_crashlog.txt");
+ if (!Glib::file_test (fn, Glib::FILE_TEST_EXISTS)) {
+ return false;
+ }
+ std::ifstream ifs(fn.c_str());
+ msg.assign ((std::istreambuf_iterator<char>(ifs)), (std::istreambuf_iterator<char>()));
+ au_remove_crashlog ();
+ return true;
+}
+
+void
+AUPluginInfo::au_start_crashlog ()
+{
+ string fn = Glib::build_filename (ARDOUR::user_cache_directory(), "au_crashlog.txt");
+ assert(!_crashlog_fd);
+ DEBUG_TRACE (DEBUG::AudioUnits, string_compose ("Creating AU Log: %1\n", fn));
+ if (!(_crashlog_fd = fopen(fn.c_str(), "w"))) {
+ PBD::error << "Cannot create AU error-log\n";
+ }
+}
+
+void
+AUPluginInfo::au_remove_crashlog ()
+{
+ if (_crashlog_fd) {
+ ::fclose(_crashlog_fd);
+ _crashlog_fd = NULL;
+ }
+ string fn = Glib::build_filename (ARDOUR::user_cache_directory(), "au_crashlog.txt");
+ ::g_unlink(fn.c_str());
+ DEBUG_TRACE (DEBUG::AudioUnits, string_compose ("Remove AU Log: %1\n", fn));
+}
+
+
+void
+AUPluginInfo::au_crashlog (std::string msg)
+{
+ assert(_crashlog_fd);
+ fprintf(_crashlog_fd, "AU: %s\n", msg.c_str());
+ ::fflush(_crashlog_fd);
+}
+
void
AUPluginInfo::discover_by_description (PluginInfoList& plugs, CAComponentDescription& desc)
{
Component comp = 0;
+ au_crashlog(string_compose("Start AU discovery for Type: %1", (int)desc.componentType));
comp = FindNextComponent (NULL, &desc);
@@ -2232,6 +2286,21 @@ AUPluginInfo::discover_by_description (PluginInfoList& plugs, CAComponentDescrip
CAComponentDescription temp;
GetComponentInfo (comp, &temp, NULL, NULL, NULL);
+ {
+ CFStringRef compTypeString = UTCreateStringForOSType(temp.componentType);
+ CFStringRef compSubTypeString = UTCreateStringForOSType(temp.componentSubType);
+ CFStringRef compManufacturerString = UTCreateStringForOSType(temp.componentManufacturer);
+ CFStringRef itemName = CFStringCreateWithFormat(kCFAllocatorDefault, NULL, CFSTR("%@ - %@ - %@"),
+ compTypeString, compManufacturerString, compSubTypeString);
+ au_crashlog(string_compose("Scanning ID: %1", CFStringRefToStdString(itemName)));
+ if (compTypeString != NULL)
+ CFRelease(compTypeString);
+ if (compSubTypeString != NULL)
+ CFRelease(compSubTypeString);
+ if (compManufacturerString != NULL)
+ CFRelease(compManufacturerString);
+ }
+
AUPluginInfoPtr info (new AUPluginInfo
(boost::shared_ptr<CAComponentDescription> (new CAComponentDescription(temp))));
@@ -2275,6 +2344,7 @@ AUPluginInfo::discover_by_description (PluginInfoList& plugs, CAComponentDescrip
AUPluginInfo::get_names (temp, info->name, info->creator);
ARDOUR::PluginScanMessage(_("AU"), info->name, false);
+ au_crashlog(string_compose("Plugin: %1", info->name));
info->type = ARDOUR::AudioUnit;
info->unique_id = stringify_descriptor (*info->descriptor);
@@ -2327,8 +2397,10 @@ AUPluginInfo::discover_by_description (PluginInfoList& plugs, CAComponentDescrip
error << string_compose (_("Cannot get I/O configuration info for AU %1"), info->name) << endmsg;
}
+ au_crashlog("Success.");
comp = FindNextComponent (comp, &desc);
}
+ au_crashlog(string_compose("End AU discovery for Type: %1", (int)desc.componentType));
}
bool
diff --git a/libs/ardour/bundle.cc b/libs/ardour/bundle.cc
index 834a98d347..7e50807c6e 100644
--- a/libs/ardour/bundle.cc
+++ b/libs/ardour/bundle.cc
@@ -591,7 +591,7 @@ Bundle::type_channel_to_overall (DataType t, uint32_t c) const
++o;
}
- /* NOTREACHED */
+ abort(); /* NOTREACHED */
return -1;
}
diff --git a/libs/ardour/butler.cc b/libs/ardour/butler.cc
index 327665441e..9bc232007b 100644
--- a/libs/ardour/butler.cc
+++ b/libs/ardour/butler.cc
@@ -202,7 +202,7 @@ Butler::dequeue_request (Request::Type& r)
return false;
} else {
fatal << _("Error reading from butler request pipe") << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
#else
r = (Request::Type) m_request_state.get();
@@ -242,7 +242,7 @@ Butler::thread_work ()
case Request::Quit:
return 0;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
break;
default:
diff --git a/libs/ardour/cycle_timer.cc b/libs/ardour/cycle_timer.cc
index bb4f3181e0..84dafd00cc 100644
--- a/libs/ardour/cycle_timer.cc
+++ b/libs/ardour/cycle_timer.cc
@@ -38,7 +38,7 @@ get_mhz()
if ((f = fopen("/proc/cpuinfo", "r")) == 0) {
fatal << _("CycleTimer::get_mhz(): can't open /proc/cpuinfo") << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
return 0.0f;
}
@@ -50,7 +50,7 @@ get_mhz()
if (fgets (buf, sizeof(buf), f) == 0) {
fatal << _("CycleTimer::get_mhz(): cannot locate cpu MHz in /proc/cpuinfo") << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
return 0.0f;
}
@@ -73,7 +73,7 @@ get_mhz()
}
fatal << _("cannot locate cpu MHz in /proc/cpuinfo") << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
return 0.0f;
}
diff --git a/libs/ardour/delivery.cc b/libs/ardour/delivery.cc
index 30f7ef63fa..f7d679d3ba 100644
--- a/libs/ardour/delivery.cc
+++ b/libs/ardour/delivery.cc
@@ -148,7 +148,7 @@ Delivery::can_support_io_configuration (const ChanCount& in, ChanCount& out)
}
} else {
fatal << "programming error: this should never be reached" << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
@@ -169,7 +169,7 @@ Delivery::can_support_io_configuration (const ChanCount& in, ChanCount& out)
}
} else {
fatal << "programming error: this should never be reached" << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
} else {
@@ -210,7 +210,7 @@ Delivery::configure_io (ChanCount in, ChanCount out)
if (_input->n_ports() != in) {
if (_input->n_ports() != ChanCount::ZERO) {
fatal << _name << " programming error: configure_io called with " << in << " and " << out << " with " << _input->n_ports() << " input ports" << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
} else {
/* I/O not yet configured */
}
diff --git a/libs/ardour/midi_model.cc b/libs/ardour/midi_model.cc
index ef9544589d..259a04bc0f 100644
--- a/libs/ardour/midi_model.cc
+++ b/libs/ardour/midi_model.cc
@@ -195,11 +195,11 @@ MidiModel::NoteDiffCommand::change (const NotePtr note, Property prop,
case StartTime:
fatal << "MidiModel::DiffCommand::change() with integer argument called for start time" << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
break;
case Length:
fatal << "MidiModel::DiffCommand::change() with integer argument called for length" << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
break;
}
@@ -627,7 +627,7 @@ MidiModel::NoteDiffCommand::unmarshal_change (XMLNode *xml_change)
change.property = (Property) string_2_enum (prop->value(), change.property);
} else {
fatal << "!!!" << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
if ((prop = xml_change->property ("id")) == 0) {
@@ -648,7 +648,7 @@ MidiModel::NoteDiffCommand::unmarshal_change (XMLNode *xml_change)
}
} else {
fatal << "!!!" << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
if ((prop = xml_change->property ("new")) != 0) {
@@ -662,7 +662,7 @@ MidiModel::NoteDiffCommand::unmarshal_change (XMLNode *xml_change)
}
} else {
fatal << "!!!" << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
/* we must point at the instance of the note that is actually in the model.
@@ -899,7 +899,7 @@ MidiModel::SysExDiffCommand::unmarshal_change (XMLNode *xml_change)
change.property = (Property) string_2_enum (prop->value(), change.property);
} else {
fatal << "!!!" << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
if ((prop = xml_change->property ("id")) == 0) {
@@ -914,7 +914,7 @@ MidiModel::SysExDiffCommand::unmarshal_change (XMLNode *xml_change)
old_str >> change.old_time;
} else {
fatal << "!!!" << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
if ((prop = xml_change->property ("new")) != 0) {
@@ -922,7 +922,7 @@ MidiModel::SysExDiffCommand::unmarshal_change (XMLNode *xml_change)
new_str >> change.new_time;
} else {
fatal << "!!!" << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
/* we must point at the instance of the sysex that is actually in the model.
@@ -1728,7 +1728,7 @@ MidiModel::resolve_overlaps_unlocked (const NotePtr note, void* arg)
return -1; /* do not add the new note */
break;
default:
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
/* stupid gcc */
break;
}
@@ -1764,7 +1764,7 @@ MidiModel::resolve_overlaps_unlocked (const NotePtr note, void* arg)
note_length = min (note_length, (*i)->end_time() - note->time());
break;
default:
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
/* stupid gcc */
break;
}
@@ -1783,7 +1783,7 @@ MidiModel::resolve_overlaps_unlocked (const NotePtr note, void* arg)
/* cannot add in this case */
return -1;
default:
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
/* stupid gcc */
break;
}
@@ -1801,14 +1801,14 @@ MidiModel::resolve_overlaps_unlocked (const NotePtr note, void* arg)
to_be_deleted.insert (*i);
break;
default:
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
/* stupid gcc */
break;
}
break;
default:
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
/* stupid gcc */
break;
}
diff --git a/libs/ardour/midi_playlist_source.cc b/libs/ardour/midi_playlist_source.cc
index 68e0a478df..cd5362c3da 100644
--- a/libs/ardour/midi_playlist_source.cc
+++ b/libs/ardour/midi_playlist_source.cc
@@ -142,7 +142,7 @@ MidiPlaylistSource::write_unlocked (MidiRingBuffer<framepos_t>&,
framecnt_t)
{
fatal << string_compose (_("programming error: %1"), "MidiPlaylistSource::write_unlocked() called - should be impossible") << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
return 0;
}
@@ -150,14 +150,14 @@ void
MidiPlaylistSource::append_event_unlocked_beats(const Evoral::Event<Evoral::MusicalTime>& /*ev*/)
{
fatal << string_compose (_("programming error: %1"), "MidiPlaylistSource::append_event_unlocked_beats() called - should be impossible") << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
void
MidiPlaylistSource::append_event_unlocked_frames(const Evoral::Event<framepos_t>& /* ev */, framepos_t /*source_start*/)
{
fatal << string_compose (_("programming error: %1"), "MidiPlaylistSource::append_event_unlocked_frames() called - should be impossible") << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
void
diff --git a/libs/ardour/panner_shell.cc b/libs/ardour/panner_shell.cc
index a4a9342816..de0780cdba 100644
--- a/libs/ardour/panner_shell.cc
+++ b/libs/ardour/panner_shell.cc
@@ -120,7 +120,7 @@ PannerShell::configure_io (ChanCount in, ChanCount out)
PannerInfo* pi = PannerManager::instance().select_panner (in, out, _user_selected_panner_uri);
if (!pi) {
fatal << _("No panner found: check that panners are being discovered correctly during startup.") << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
DEBUG_TRACE (DEBUG::Panning, string_compose (_("select panner: %1\n"), pi->descriptor.name.c_str()));
diff --git a/libs/ardour/plugin_insert.cc b/libs/ardour/plugin_insert.cc
index 26b6aacd2a..0c76b65c84 100644
--- a/libs/ardour/plugin_insert.cc
+++ b/libs/ardour/plugin_insert.cc
@@ -600,7 +600,7 @@ PluginInsert::default_parameter_value (const Evoral::Parameter& param)
if (_plugins.empty()) {
fatal << _("programming error: ") << X_("PluginInsert::default_parameter_value() called with no plugin")
<< endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
return _plugins[0]->default_value (param.id());
@@ -646,7 +646,7 @@ PluginInsert::plugin_factory (boost::shared_ptr<Plugin> other)
fatal << string_compose (_("programming error: %1"),
X_("unknown plugin type in PluginInsert::plugin_factory"))
<< endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
return boost::shared_ptr<Plugin> ((Plugin*) 0);
}
diff --git a/libs/ardour/plugin_manager.cc b/libs/ardour/plugin_manager.cc
index 1791e2f10d..b6100f74b5 100644
--- a/libs/ardour/plugin_manager.cc
+++ b/libs/ardour/plugin_manager.cc
@@ -116,12 +116,17 @@ PluginManager::PluginManager ()
string lrdf_path;
#if defined WINDOWS_VST_SUPPORT || defined LXVST_SUPPORT
+ // source-tree (ardev, etc)
PBD::Searchpath vstsp(Glib::build_filename(ARDOUR::ardour_dll_directory(), "fst"));
+
#ifdef PLATFORM_WINDOWS
+ // on windows the .exe needs to be in the same folder with libardour.dll
vstsp += Glib::build_filename(g_win32_get_package_installation_directory_of_module (0), "bin");
#else
- vstsp += Glib::getenv("PATH");
+ // on Unices additional internal-use binaries are deployed to $libdir
+ vstsp += ARDOUR::ardour_dll_directory();
#endif
+
if (!PBD::find_file (vstsp,
#ifdef PLATFORM_WINDOWS
#ifdef DEBUGGABLE_SCANNER_APP
@@ -243,7 +248,7 @@ PluginManager::refresh (bool cache_only)
#ifdef AUDIOUNIT_SUPPORT
BootMessage (_("Scanning AU Plugins"));
- au_refresh ();
+ au_refresh (cache_only);
#endif
BootMessage (_("Plugin Scan Complete..."));
@@ -604,11 +609,23 @@ PluginManager::lv2_refresh ()
#ifdef AUDIOUNIT_SUPPORT
void
-PluginManager::au_refresh ()
+PluginManager::au_refresh (bool cache_only)
{
DEBUG_TRACE (DEBUG::PluginManager, "AU: refresh\n");
+ if (cache_only && !Config->get_discover_audio_units ()) {
+ return;
+ }
delete _au_plugin_info;
+
+ // disable automatic scan in case we crash
+ Config->set_discover_audio_units (false);
+ Config->save_state();
+
_au_plugin_info = AUPluginInfo::discover();
+
+ // successful scan re-enabled automatic discovery
+ Config->set_discover_audio_units (true);
+ Config->save_state();
}
#endif
@@ -1050,9 +1067,9 @@ ARDOUR::PluginInfoList&
PluginManager::au_plugin_info ()
{
#ifdef AUDIOUNIT_SUPPORT
- assert(_au_plugin_info);
- return *_au_plugin_info;
-#else
- return _empty_plugin_info;
+ if (_au_plugin_info) {
+ return *_au_plugin_info;
+ }
#endif
+ return _empty_plugin_info;
}
diff --git a/libs/ardour/region_factory.cc b/libs/ardour/region_factory.cc
index 44f8c34ddd..9654a4b3de 100644
--- a/libs/ardour/region_factory.cc
+++ b/libs/ardour/region_factory.cc
@@ -66,7 +66,7 @@ RegionFactory::create (boost::shared_ptr<const Region> region, bool announce)
} else {
fatal << _("programming error: RegionFactory::create() called with unknown Region type")
<< endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
if (ret) {
@@ -108,7 +108,7 @@ RegionFactory::create (boost::shared_ptr<Region> region, const PropertyList& pli
} else {
fatal << _("programming error: RegionFactory::create() called with unknown Region type")
<< endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
return boost::shared_ptr<Region>();
}
@@ -149,7 +149,7 @@ RegionFactory::create (boost::shared_ptr<Region> region, frameoffset_t offset, c
} else {
fatal << _("programming error: RegionFactory::create() called with unknown Region type")
<< endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
return boost::shared_ptr<Region>();
}
@@ -191,7 +191,7 @@ RegionFactory::create (boost::shared_ptr<Region> region, const SourceList& srcs,
} else {
fatal << _("programming error: RegionFactory::create() called with unknown Region type")
<< endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
if (ret) {
diff --git a/libs/ardour/route.cc b/libs/ardour/route.cc
index f78cd1e2f1..d67c1bbd86 100644
--- a/libs/ardour/route.cc
+++ b/libs/ardour/route.cc
@@ -3730,7 +3730,7 @@ Route::set_active (bool yn, void* src)
void
Route::meter ()
{
- Glib::Threads::RWLock::ReaderLock rm (_processor_lock, Glib::Threads::TRY_LOCK);
+ Glib::Threads::RWLock::ReaderLock rm (_processor_lock);
assert (_meter);
@@ -3785,7 +3785,7 @@ Route::get_control (const Evoral::Parameter& param)
/* maybe one of our processors does or ... */
- Glib::Threads::RWLock::ReaderLock rm (_processor_lock, Glib::Threads::TRY_LOCK);
+ Glib::Threads::RWLock::ReaderLock rm (_processor_lock);
for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ++i) {
if ((c = boost::dynamic_pointer_cast<AutomationControl>((*i)->control (param))) != 0) {
break;
diff --git a/libs/ardour/send.cc b/libs/ardour/send.cc
index 87aadf4193..9d5fd619c3 100644
--- a/libs/ardour/send.cc
+++ b/libs/ardour/send.cc
@@ -65,7 +65,7 @@ Send::name_and_id_new_send (Session& s, Role r, uint32_t& bitslot, bool ignore_b
return string_compose (_("send %1"), (bitslot = s.next_send_id ()) + 1);
default:
fatal << string_compose (_("programming error: send created using role %1"), enum_2_string (r)) << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
return string();
}
diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc
index 6807bed812..2878bb8014 100644
--- a/libs/ardour/session.cc
+++ b/libs/ardour/session.cc
@@ -2380,7 +2380,7 @@ Session::new_route_from_template (uint32_t how_many, const std::string& template
/* generate a new name by adding a number to the end of the template name */
if (!find_route_name (route_name.c_str(), ++number, name, sizeof(name), true)) {
fatal << _("Session: UINT_MAX routes? impossible!") << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
}
@@ -4041,7 +4041,7 @@ Session::available_capture_duration ()
fatal << string_compose (_("programming error: %1"),
X_("illegal native file data format"))
<< endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
double scale = 4096.0 / sample_bytes_on_disk;
diff --git a/libs/ardour/session_process.cc b/libs/ardour/session_process.cc
index 497fbd4d2e..260c6c319a 100644
--- a/libs/ardour/session_process.cc
+++ b/libs/ardour/session_process.cc
@@ -1169,7 +1169,7 @@ Session::process_event (SessionEvent* ev)
default:
fatal << string_compose(_("Programming error: illegal event type in process_event (%1)"), ev->type) << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
break;
};
diff --git a/libs/ardour/sndfilesource.cc b/libs/ardour/sndfilesource.cc
index 58fbab233b..5f1b31c640 100644
--- a/libs/ardour/sndfilesource.cc
+++ b/libs/ardour/sndfilesource.cc
@@ -152,7 +152,7 @@ SndFileSource::SndFileSource (Session& s, const string& path, const string& orig
default:
fatal << string_compose (_("programming error: %1"), X_("unsupported audio header format requested")) << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
break;
}
@@ -459,7 +459,7 @@ SndFileSource::nondestructive_write_unlocked (Sample *data, framecnt_t cnt)
if (_info.channels != 1) {
fatal << string_compose (_("programming error: %1 %2"), X_("SndFileSource::write called on non-mono file"), _path) << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
return 0;
}
diff --git a/libs/ardour/system_exec.cc b/libs/ardour/system_exec.cc
index 75b20e4500..d83165252a 100644
--- a/libs/ardour/system_exec.cc
+++ b/libs/ardour/system_exec.cc
@@ -35,7 +35,10 @@ static char *vfork_exec_wrapper_path() {
#else
std::string vfork_exec_wrapper;
if (!PBD::find_file (
- PBD::Searchpath(Glib::build_filename(ARDOUR::ardour_dll_directory(), "vfork")),
+ PBD::Searchpath(
+ ARDOUR::ardour_dll_directory() // deployed
+ + G_SEARCHPATH_SEPARATOR_S + Glib::build_filename(ARDOUR::ardour_dll_directory(), "vfork") // src, build (ardev, etc)
+ ),
"ardour-exec-wrapper", vfork_exec_wrapper)) {
PBD::fatal << "vfork exec wrapper 'ardour-exec-wrapper' was not found in $PATH." << endmsg;
/* not reached */
diff --git a/libs/ardour/tempo.cc b/libs/ardour/tempo.cc
index 621d1e2c74..5e50e8e02b 100644
--- a/libs/ardour/tempo.cc
+++ b/libs/ardour/tempo.cc
@@ -677,7 +677,7 @@ TempoMap::first_meter () const
}
fatal << _("programming error: no tempo section in tempo map!") << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
return *m;
}
@@ -693,7 +693,7 @@ TempoMap::first_tempo () const
}
fatal << _("programming error: no tempo section in tempo map!") << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
return *t;
}
@@ -807,7 +807,7 @@ TempoMap::recompute_map (bool reassign_tempo_bbt, framepos_t end)
rmeter = ms;
} else {
fatal << _("programming error: unhandled MetricSection type") << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
}
}
@@ -1489,8 +1489,7 @@ TempoMap::round_to_type (framepos_t frame, int dir, BBTPointType type)
break;
}
- /* NOTREACHED */
- assert (false);
+ abort(); /* NOTREACHED */
return 0;
}
@@ -1532,6 +1531,7 @@ TempoMap::tempo_section_at (framepos_t frame) const
if (prev == 0) {
fatal << endmsg;
+ abort(); /*NOTREACHED*/
}
return *prev;
@@ -1785,7 +1785,7 @@ TempoMap::insert_time (framepos_t where, framecnt_t amount)
// cerr << "NEW METER, frame = " << (*i)->frame() << " start = " << (*i)->start() <<endl;
} else {
fatal << _("programming error: unhandled MetricSection type") << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
prev = (*i);
diff --git a/libs/ardour/track.cc b/libs/ardour/track.cc
index 03d75d9d79..1426c3926c 100644
--- a/libs/ardour/track.cc
+++ b/libs/ardour/track.cc
@@ -951,7 +951,7 @@ Track::monitoring_state () const
}
}
- /* NOTREACHED */
+ abort(); /* NOTREACHED */
return MonitoringSilence;
}
diff --git a/libs/ardour/utils.cc b/libs/ardour/utils.cc
index 9c0aea885b..6d6511bb9f 100644
--- a/libs/ardour/utils.cc
+++ b/libs/ardour/utils.cc
@@ -429,7 +429,7 @@ ARDOUR::string_to_edit_mode (string str)
return Lock;
}
fatal << string_compose (_("programming error: unknown edit mode string \"%1\""), str) << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
return Slide;
}
@@ -468,7 +468,7 @@ ARDOUR::string_to_sync_source (string str)
}
fatal << string_compose (_("programming error: unknown sync source string \"%1\""), str) << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
return Engine;
}
@@ -577,7 +577,7 @@ ARDOUR::string_to_auto_state (std::string str)
}
fatal << string_compose (_("programming error: %1 %2"), "illegal AutoState string: ", str) << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
return Touch;
}
@@ -601,7 +601,7 @@ ARDOUR::auto_state_to_string (AutoState as)
}
fatal << string_compose (_("programming error: %1 %2"), "illegal AutoState type: ", as) << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
return "";
}
@@ -615,7 +615,7 @@ ARDOUR::string_to_auto_style (std::string str)
}
fatal << string_compose (_("programming error: %1 %2"), "illegal AutoStyle string: ", str) << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
return Trim;
}
@@ -634,7 +634,7 @@ ARDOUR::auto_style_to_string (AutoStyle as)
}
fatal << string_compose (_("programming error: %1 %2"), "illegal AutoStyle type: ", as) << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
return "";
}
@@ -669,7 +669,7 @@ ARDOUR::native_header_format_extension (HeaderFormat hf, const DataType& type)
}
fatal << string_compose (_("programming error: unknown native header format: %1"), hf);
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
return ".wav";
}
diff --git a/libs/backends/jack/weak_libjack.c b/libs/backends/jack/weak_libjack.c
index ebde208e42..775410287b 100644
--- a/libs/backends/jack/weak_libjack.c
+++ b/libs/backends/jack/weak_libjack.c
@@ -57,10 +57,19 @@ static void* lib_symbol(void* const lib, const char* const sym) {
typedef void * pvoid_t;
#define MAPSYM(SYM, FAIL) _j._ ## SYM = (func_t)lib_symbol(lib, "jack_" # SYM); \
if (!_j._ ## SYM) err |= FAIL;
-#else
+#elif defined NDEBUG
typedef void * __attribute__ ((__may_alias__)) pvoid_t;
#define MAPSYM(SYM, FAIL) *(pvoid_t *)(&_j._ ## SYM) = lib_symbol(lib, "jack_" # SYM); \
if (!_j._ ## SYM) err |= FAIL;
+#else
+typedef void * __attribute__ ((__may_alias__)) pvoid_t;
+#define MAPSYM(SYM, FAIL) *(pvoid_t *)(&_j._ ## SYM) = lib_symbol(lib, "jack_" # SYM); \
+ if (!_j._ ## SYM) { \
+ if (FAIL) { \
+ fprintf(stderr, "*** WEAK-JACK: required symbol 'jack_%s' was not found\n", "" # SYM); \
+ } \
+ err |= FAIL; \
+ }
#endif
typedef void (* func_t) (void);
@@ -182,6 +191,9 @@ int have_libjack (void) {
/* dedicated support for jack_client_open(,..) variable arg function macro */
func_t WJACK_get_client_open(void) {
+ if (_status == -1) {
+ init_weak_jack();
+ }
return _j._client_open;
}
diff --git a/libs/backends/jack/weak_libjack.def b/libs/backends/jack/weak_libjack.def
index eeab00e943..45b1dc94a5 100644
--- a/libs/backends/jack/weak_libjack.def
+++ b/libs/backends/jack/weak_libjack.def
@@ -113,9 +113,22 @@ JCFUN(0, int, client_real_time_priority, 0)
JCFUN(0, int, client_max_real_time_priority, 0)
JPFUN(0, int, acquire_real_time_scheduling, (jack_native_thread_t t, int p), (t,p), 0)
JPFUN(0, int, drop_real_time_scheduling, (jack_native_thread_t t), (t), 0)
-JPFUN(1, int, client_stop_thread, (jack_client_t* c, jack_native_thread_t t), (c,t), 0)
-JPFUN(1, int, client_kill_thread, (jack_client_t* c, jack_native_thread_t t), (c,t), 0)
+JPFUN(0, int, client_stop_thread, (jack_client_t* c, jack_native_thread_t t), (c,t), 0)
+JPFUN(0, int, client_kill_thread, (jack_client_t* c, jack_native_thread_t t), (c,t), 0)
JPFUN(1, int, client_create_thread, \
(jack_client_t* c, jack_native_thread_t *t, int p, int r, void *(*f)(void*), void *a), (c,t,p,r,f,a), 0)
+#if 0
+/* <jack/metadata.h> */
+JPFUN(0, int, set_property, (jack_client_t* c, jack_uuid_t s, const char* k, const char* v, const char* t), (c,s,k,v,t), -1)
+JXFUN(0, int, get_property, (jack_uuid_t s, const char* k, char** v, char** t), (s,k,v,t), if (v) *v=NULL; if (t) *t=NULL; return -1;)
+JVFUN(0, free_description, (jack_description_t* d, int f), (d,f),)
+JXFUN(0, int, get_properties, (jack_uuid_t s, jack_description_t* d), (s,d), if (d) {d->properties = NULL; d->property_cnt = 0;} return -1;)
+JXFUN(0, int, get_all_properties, (jack_description_t** d), (d), if (d) *d=NULL; return -1;)
+JPFUN(0, int, remove_property, (jack_client_t* c, jack_uuid_t s, const char* k), (c,s,k), -1)
+JPFUN(0, int, remove_properties, (jack_client_t* c, jack_uuid_t s), (c,s), -1)
+JPFUN(0, int, remove_all_properties, (jack_client_t* c), (c), -1)
+ (jack_client_t* c, jack_native_thread_t *t, int p, int r, void *(*f)(void*), void *a), (c,t,p,r,f,a), 0)
+#endif
+
#endif // end USE_WEAK_JACK
diff --git a/libs/backends/jack/weak_libjack.h b/libs/backends/jack/weak_libjack.h
index 349861f6ab..63439f0763 100644
--- a/libs/backends/jack/weak_libjack.h
+++ b/libs/backends/jack/weak_libjack.h
@@ -154,6 +154,19 @@ int have_libjack(void);
#define jack_client_open WJACK_client_client_openXXX
+#if 0
+/* <jack/metadata.h> */
+#define jack_set_property WJACK_set_property
+#define jack_get_property WJACK_get_property
+#define jack_free_description WJACK_free_description
+#define jack_get_properties WJACK_get_properties
+#define jack_get_all_properties WJACK_get_all_properties
+#define jack_remove_property WJACK_remove_property
+#define jack_remove_properties WJACK_remove_properties
+#define jack_remove_all_properties WJACK_remove_all_properties
+#define jack_set_property_change_callback WJACK_set_property_change_callback
+#endif
+
#endif // end USE_WEAK_JACK
#include <jack/jack.h>
@@ -162,6 +175,9 @@ int have_libjack(void);
#include <jack/midiport.h>
#include <jack/session.h>
#include <jack/thread.h>
+#if 0
+#include <jack/metadata.h>
+#endif
#ifdef USE_WEAK_JACK
diff --git a/libs/backends/jack/wscript b/libs/backends/jack/wscript
index 033024c710..5cf7e91f02 100644
--- a/libs/backends/jack/wscript
+++ b/libs/backends/jack/wscript
@@ -44,7 +44,7 @@ def configure(conf):
def build(bld):
- obj = bld(features = 'cxx cxxshlib')
+ obj = bld(features = 'c cxx cxxshlib')
obj.source = [
'jack_api.cc',
'jack_connection.cc',
diff --git a/libs/canvas/canvas.cc b/libs/canvas/canvas.cc
index aebc601620..35fe31041d 100644
--- a/libs/canvas/canvas.cc
+++ b/libs/canvas/canvas.cc
@@ -775,7 +775,7 @@ GtkCanvas::on_expose_event (GdkEventExpose* ev)
render (Rect (ev->area.x, ev->area.y, ev->area.x + ev->area.width, ev->area.y + ev->area.height), draw_context);
-#ifdef USE_CAIRO_IMAGE_SURFACE_FOR_GTK_CANVAS
+#ifdef USE_CAIRO_IMAGE_SURFACE
/* now blit our private surface back to the GDK one */
window_context->rectangle (ev->area.x, ev->area.y, ev->area.width, ev->area.height);
diff --git a/libs/evoral/evoral/PatchChange.hpp b/libs/evoral/evoral/PatchChange.hpp
index e05157aa92..48ed0f9c13 100644
--- a/libs/evoral/evoral/PatchChange.hpp
+++ b/libs/evoral/evoral/PatchChange.hpp
@@ -147,8 +147,7 @@ public:
case 2:
return _program_change;
default:
- abort ();
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
return _program_change;
}
}
diff --git a/libs/evoral/evoral/Sequence.hpp b/libs/evoral/evoral/Sequence.hpp
index 280fc600de..484afa8459 100644
--- a/libs/evoral/evoral/Sequence.hpp
+++ b/libs/evoral/evoral/Sequence.hpp
@@ -136,7 +136,6 @@ public:
inline bool operator()(const boost::shared_ptr< const Note<Time> > a,
const boost::shared_ptr< const Note<Time> > b) const {
return musical_time_greater_than (a->time(), b->time());
- return a->time() > b->time();
}
};
diff --git a/libs/evoral/src/ControlList.cpp b/libs/evoral/src/ControlList.cpp
index 3f70cde274..deabd9d1cc 100644
--- a/libs/evoral/src/ControlList.cpp
+++ b/libs/evoral/src/ControlList.cpp
@@ -1199,7 +1199,7 @@ ControlList::unlocked_eval (double x) const
return multipoint_eval (x);
}
- /*NOTREACHED*/ /* stupid gcc */
+ abort(); /*NOTREACHED*/ /* stupid gcc */
return _default_value;
}
diff --git a/libs/evoral/src/Sequence.cpp b/libs/evoral/src/Sequence.cpp
index 7084a90491..1cc8ff6e0f 100644
--- a/libs/evoral/src/Sequence.cpp
+++ b/libs/evoral/src/Sequence.cpp
@@ -905,7 +905,7 @@ Sequence<Time>::append(const Event<Time>& event, event_id_t evid)
const MIDIEvent<Time>& ev = (const MIDIEvent<Time>&)event;
- assert(_notes.empty() || ev.time() >= (*_notes.rbegin())->time());
+ assert(_notes.empty() || musical_time_greater_or_equal_to(ev.time(), (*_notes.rbegin())->time()));
assert(_writing);
if (!midi_event_is_valid(ev.buffer(), ev.size())) {
@@ -1052,7 +1052,7 @@ Sequence<Time>::append_note_off_unlocked (NotePtr note)
NotePtr nn = *n;
if (note->note() == nn->note() && nn->channel() == note->channel()) {
- assert(note->time() >= nn->time());
+ assert(musical_time_greater_or_equal_to(note->time(), nn->time()));
nn->set_length (note->time() - nn->time());
nn->set_off_velocity (note->velocity());
@@ -1215,7 +1215,7 @@ Sequence<Time>::note_lower_bound (Time t) const
{
NotePtr search_note(new Note<Time>(0, t, 0, 0, 0));
typename Sequence<Time>::Notes::const_iterator i = _notes.lower_bound(search_note);
- assert(i == _notes.end() || (*i)->time() >= t);
+ assert(i == _notes.end() || musical_time_greater_or_equal_to((*i)->time(), t));
return i;
}
@@ -1237,7 +1237,7 @@ Sequence<Time>::sysex_lower_bound (Time t) const
{
SysExPtr search (new Event<Time> (0, t));
typename Sequence<Time>::SysExes::const_iterator i = _sysexes.lower_bound (search);
- assert (i == _sysexes.end() || (*i)->time() >= t);
+ assert (i == _sysexes.end() || musical_time_greater_or_equal_to((*i)->time(), t));
return i;
}
@@ -1250,7 +1250,7 @@ Sequence<Time>::note_lower_bound (Time t)
{
NotePtr search_note(new Note<Time>(0, t, 0, 0, 0));
typename Sequence<Time>::Notes::iterator i = _notes.lower_bound(search_note);
- assert(i == _notes.end() || (*i)->time() >= t);
+ assert(i == _notes.end() || musical_time_greater_or_equal_to((*i)->time(), t));
return i;
}
@@ -1272,7 +1272,7 @@ Sequence<Time>::sysex_lower_bound (Time t)
{
SysExPtr search (new Event<Time> (0, t));
typename Sequence<Time>::SysExes::iterator i = _sysexes.lower_bound (search);
- assert (i == _sysexes.end() || (*i)->time() >= t);
+ assert (i == _sysexes.end() || musical_time_greater_or_equal_to((*i)->time(), t));
return i;
}
@@ -1346,8 +1346,7 @@ Sequence<Time>::get_notes_by_pitch (Notes& n, NoteOperator op, uint8_t val, int
default:
//fatal << string_compose (_("programming error: %1 %2", X_("get_notes_by_pitch() called with illegal operator"), op)) << endmsg;
- abort ();
- /* NOTREACHED*/
+ abort(); /* NOTREACHED*/
}
}
}
@@ -1392,8 +1391,7 @@ Sequence<Time>::get_notes_by_velocity (Notes& n, NoteOperator op, uint8_t val, i
break;
default:
// fatal << string_compose (_("programming error: %1 %2", X_("get_notes_by_velocity() called with illegal operator"), op)) << endmsg;
- abort ();
- /* NOTREACHED*/
+ abort(); /* NOTREACHED*/
}
}
diff --git a/libs/fst/wscript b/libs/fst/wscript
index 91273f3d79..5eb1d512df 100644
--- a/libs/fst/wscript
+++ b/libs/fst/wscript
@@ -51,7 +51,7 @@ def build(bld):
obj.source = 'scanner.wine'
obj.target = 'ardour-vst-scanner'
obj.chmod = Utils.O755
- obj.install_path = os.path.join(bld.env['LIBDIR'], 'fst')
+ obj.install_path = os.path.join(bld.env['LIBDIR'])
obj.dict = {
'VERSION' : bld.env['VERSION'],
}
@@ -83,4 +83,4 @@ def build(bld):
'VST_SCANNER_APP',
'PACKAGE="' + I18N_PACKAGE + '"',
]
- obj.install_path = os.path.join(bld.env['LIBDIR'], 'fst')
+ obj.install_path = os.path.join(bld.env['LIBDIR'])
diff --git a/libs/gtkmm2ext/actions.cc b/libs/gtkmm2ext/actions.cc
index 5f853b0170..666ac29c5c 100644
--- a/libs/gtkmm2ext/actions.cc
+++ b/libs/gtkmm2ext/actions.cc
@@ -490,7 +490,7 @@ ActionManager::set_toggleaction_state (string n, bool s)
if (last_slash == 0) {
fatal << string_compose ("programmer error: %1 %2", "illegal toggle action name", name) << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
return;
}
diff --git a/libs/gtkmm2ext/gtk_ui.cc b/libs/gtkmm2ext/gtk_ui.cc
index 6a490e1bb0..df7ec96324 100644
--- a/libs/gtkmm2ext/gtk_ui.cc
+++ b/libs/gtkmm2ext/gtk_ui.cc
@@ -81,7 +81,7 @@ UI::UI (string namestr, int *argc, char ***argv)
theGtkUI = this;
} else {
fatal << "duplicate UI requested" << endmsg;
- /* NOTREACHED */
+ abort(); /* NOTREACHED */
}
/* the GUI event loop runs in the main thread of the app,
diff --git a/libs/midi++2/mtc.cc b/libs/midi++2/mtc.cc
index 1a477c3b8c..e2a018ca51 100644
--- a/libs/midi++2/mtc.cc
+++ b/libs/midi++2/mtc.cc
@@ -285,7 +285,7 @@ Parser::process_mtc_quarter_frame (MIDI::byte *msg)
break;
default:
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
break;
}
diff --git a/libs/pbd/pool.cc b/libs/pbd/pool.cc
index cdcd9abdd7..234dfaeb18 100644
--- a/libs/pbd/pool.cc
+++ b/libs/pbd/pool.cc
@@ -70,7 +70,7 @@ Pool::alloc ()
if (free_list.read (&ptr, 1) < 1) {
fatal << "CRITICAL: " << _name << " POOL OUT OF MEMORY - RECOMPILE WITH LARGER SIZE!!" << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
return 0;
} else {
return ptr;
@@ -184,7 +184,7 @@ PerThreadPool::per_thread_pool ()
CrossThreadPool* p = _key.get();
if (!p) {
fatal << "programming error: no per-thread pool \"" << _name << "\" for thread " << pthread_name() << endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
return p;
}
diff --git a/libs/vfork/wscript b/libs/vfork/wscript
index 10f11149d8..8f4efbe0c7 100644
--- a/libs/vfork/wscript
+++ b/libs/vfork/wscript
@@ -21,7 +21,7 @@ def build(bld):
obj = bld (features = 'c cprogram')
obj.source = 'exec_wrapper.c'
obj.target = 'ardour-exec-wrapper'
- obj.install_path = os.path.join(bld.env['LIBDIR'], 'vfork')
+ obj.install_path = os.path.join(bld.env['LIBDIR'])
obj.defines = [
'_POSIX_SOURCE',
'_XOPEN_SOURCE=500',
diff --git a/tools/linux_packaging/build b/tools/linux_packaging/build
index 72b7bf3893..132d9449f3 100755
--- a/tools/linux_packaging/build
+++ b/tools/linux_packaging/build
@@ -391,7 +391,7 @@ done
cp $BUILD_ROOT/libs/panners/*/lib*.so* $Panners
# Backends
-for backend in jack wavesaudio ; do
+for backend in jack alsa dummy wavesaudio ; do
cp $BUILD_ROOT/libs/backends/$backend/lib*.so* $Backends
done
@@ -418,7 +418,7 @@ fi
# vfork wrapper
if test -f $BUILD_ROOT/libs/vfork/ardour-exec-wrapper ; then
- cp $BUILD_ROOT/libs/vfork/ardour-exec-wrapper $VFork
+ cp $BUILD_ROOT/libs/vfork/ardour-exec-wrapper $APPLIB
fi
# ALSA device reservation tool (if available)
diff --git a/tools/linux_packaging/stage2.run b/tools/linux_packaging/stage2.run
index e98810e820..6af5b34181 100755
--- a/tools/linux_packaging/stage2.run
+++ b/tools/linux_packaging/stage2.run
@@ -101,6 +101,7 @@ SystemInstall ()
########################################################################
# Main
########################################################################
+umask 0022
# If you double click a script, some systems don't get the PWD correct.
# Force it to be correct
@@ -158,6 +159,8 @@ if [ "$(id -u)" != "0" ]; then
exit 1
fi
exit
+ else
+ sudo -k # make sudo forget about cached credentials
fi
if ! sudo date;
diff --git a/tools/linux_packaging/uninstall.sh.in b/tools/linux_packaging/uninstall.sh.in
index 795c5d317d..c1d6cf561e 100644
--- a/tools/linux_packaging/uninstall.sh.in
+++ b/tools/linux_packaging/uninstall.sh.in
@@ -67,6 +67,8 @@ if [ "$(id -u)" != "0" ]; then
exit 1
fi
exit
+ else
+ sudo -k # make sudo forget about cached credentials
fi
if ! sudo date;
diff --git a/tools/osx_packaging/osx_build b/tools/osx_packaging/osx_build
index ba503d14c7..3e9f2945a9 100755
--- a/tools/osx_packaging/osx_build
+++ b/tools/osx_packaging/osx_build
@@ -110,7 +110,6 @@ ExportFormats=$Shared/export
Templates=$Shared/templates
PatchFiles=$Shared/patchfiles
MackieControl=$Shared/mcp
-VFork=$Frameworks/vfork
if [ x$PRINT_SYSDEPS != x ] ; then
#
@@ -147,7 +146,6 @@ mkdir -p $Frameworks/modules
mkdir -p $Etc
mkdir -p $MackieControl
mkdir -p $PatchFiles
-mkdir -p $VFork
# maybe set variables
env=""
@@ -393,13 +391,13 @@ fi
# VST scanner app and wrapper script, if they exist
if test -d $BUILD_ROOT/libs/fst ; then
- cp $BUILD_ROOT/libs/fst/ardour-vst-scanner* $Frameworks/ || true
+ cp $BUILD_ROOT/libs/fst/ardour-vst-scanner* $Frameworks/
fi
# vfork wrapper
if test -f $BUILD_ROOT/libs/vfork/ardour-exec-wrapper ; then
mkdir -p $Frameworks/vfork
- cp $BUILD_ROOT/libs/vfork/ardour-exec-wrapper $VFork
+ cp $BUILD_ROOT/libs/vfork/ardour-exec-wrapper $Frameworks/
fi
diff --git a/tools/sanity_check/systemtest.cpp b/tools/sanity_check/systemtest.cpp
index 025eb0ef25..b7c04a2031 100644
--- a/tools/sanity_check/systemtest.cpp
+++ b/tools/sanity_check/systemtest.cpp
@@ -169,6 +169,7 @@ int system_user_in_group(const char *name) {
gid = get_group_by_name(name);
if (0==gid) {
fprintf(stderr, "No %s group found\n", name);
+ free(list);
return 0;
}
diff --git a/wscript b/wscript
index 9f0c06b991..df1aea53e4 100644
--- a/wscript
+++ b/wscript
@@ -373,6 +373,10 @@ def set_compiler_flags (conf,opt):
compiler_flags.extend(('-arch', 'i386'))
linker_flags.extend(('-arch', 'i386'))
+ if opt.ppc:
+ compiler_flags.extend(('-arch', 'ppc'))
+ linker_flags.extend(('-arch', 'ppc'))
+
#
# warnings flags
#
@@ -502,6 +506,8 @@ def options(opt):
# help='Compile with support for Frontier Designs Tranzport (if libusb is available)')
opt.add_option('--generic', action='store_true', default=False, dest='generic',
help='Compile with -arch i386 (OS X ONLY)')
+ opt.add_option('--ppc', action='store_true', default=False, dest='ppc',
+ help='Compile with -arch ppc (OS X ONLY)')
opt.add_option('--versioned', action='store_true', default=False, dest='versioned',
help='Add revision information to executable name inside the build directory')
opt.add_option('--windows-vst', action='store_true', default=False, dest='windows_vst',
@@ -856,7 +862,8 @@ const char* const ardour_config_info = "\\n\\
write_config_text('Translation', opts.nls)
# write_config_text('Tranzport', opts.tranzport)
write_config_text('Unit tests', conf.env['BUILD_TESTS'])
- write_config_text('Generic x86 CPU', opts.generic)
+ write_config_text('Mac i386 Architecture', opts.generic)
+ write_config_text('Mac ppc Architecture', opts.ppc)
write_config_text('Waves Backend', opts.build_wavesbackend)
write_config_text('Windows VST support', opts.windows_vst)
write_config_text('Wiimote support', conf.is_defined('BUILD_WIIMOTE'))