summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2015-10-31 13:17:23 +0100
committerLudovic Courtès <ludo@gnu.org>2015-10-31 13:17:23 +0100
commit3c3e69728c10bcdffa0c597b2b80a482361aea14 (patch)
tree28b3085380904dd7d282eb85f00e7445f8e029b9
parentef89cb4263e14887385ef8240b040be052c741c1 (diff)
gnu: guitarix: Compile in C++11 mode.
* gnu/packages/patches/guitarix-c++11.patch: New file. * gnu-system.am (dist_patch_DATA): Add it. * gnu/packages/audio.scm (guitarix)[source]: Use it. [arguments]: Add --cxxflags to #:configure-flags.
-rw-r--r--gnu-system.am1
-rw-r--r--gnu/packages/audio.scm6
-rw-r--r--gnu/packages/patches/guitarix-c++11.patch297
3 files changed, 302 insertions, 2 deletions
diff --git a/gnu-system.am b/gnu-system.am
index 0ee4eebeef..3b7e62ce7d 100644
--- a/gnu-system.am
+++ b/gnu-system.am
@@ -495,6 +495,7 @@ dist_patch_DATA = \
gnu/packages/patches/guile-present-coding.patch \
gnu/packages/patches/guile-relocatable.patch \
gnu/packages/patches/guile-rsvg-pkgconfig.patch \
+ gnu/packages/patches/guitarix-c++11.patch \
gnu/packages/patches/gtkglext-disable-disable-deprecated.patch \
gnu/packages/patches/hop-bigloo-4.0b.patch \
gnu/packages/patches/hop-linker-flags.patch \
diff --git a/gnu/packages/audio.scm b/gnu/packages/audio.scm
index 404a5d9d62..92ece7a47e 100644
--- a/gnu/packages/audio.scm
+++ b/gnu/packages/audio.scm
@@ -536,7 +536,8 @@ patches that can be used with softsynths such as Timidity and WildMidi.")
version ".tar.bz2"))
(sha256
(base32
- "1w6dg2n0alfjsx1iy6s53783invygwxk11p1i65cc3nq3zlidcgx"))))
+ "1w6dg2n0alfjsx1iy6s53783invygwxk11p1i65cc3nq3zlidcgx"))
+ (patches (list (search-patch "guitarix-c++11.patch")))))
(build-system waf-build-system)
(arguments
`(#:tests? #f ; no "check" target
@@ -544,7 +545,8 @@ patches that can be used with softsynths such as Timidity and WildMidi.")
#:configure-flags
(list
;; Add the output lib directory to the RUNPATH.
- (string-append "--ldflags=-Wl,-rpath=" %output "/lib"))))
+ (string-append "--ldflags=-Wl,-rpath=" %output "/lib")
+ "--cxxflags=-std=c++11")))
(inputs
`(("libsndfile" ,libsndfile)
("boost" ,boost)
diff --git a/gnu/packages/patches/guitarix-c++11.patch b/gnu/packages/patches/guitarix-c++11.patch
new file mode 100644
index 0000000000..599855a223
--- /dev/null
+++ b/gnu/packages/patches/guitarix-c++11.patch
@@ -0,0 +1,297 @@
+Work around a C++11 incompatibility when compiling the gperf-generated
+'jsonrpc_methods.cc' with -std=c++11:
+
+ default/src/gx_head/engine/jsonrpc_methods.cc: In function ‘const CmdConnection::methodnames* in_word_set(const char*, unsigned int)’:
+ default/src/gx_head/engine/jsonrpc_methods.cc:211:26: error: reference to ‘hash’ is ambiguous
+ register int key = hash (str, len);
+ ^
+The solution is to run 'gperf -L C++' so that it generates code with
+appropriate C++ name-spacing to avoid the ambiguity.
+
+--- guitarix-0.33.0/tools/make_jsonrpc_methods 2015-10-31 12:45:52.756587435 +0100
++++ guitarix-0.33.0/tools/make_jsonrpc_methods 2015-10-31 12:47:02.801103366 +0100
+@@ -14,7 +14,7 @@ def add_enums(template_name, hashtable_n
+ hashtable = open(hashtable_name, "w")
+ hashtable.write(headline)
+ hashtable.flush()
+- gperf = Popen(gperf_program, stdin=PIPE, stdout=hashtable)
++ gperf = Popen([gperf_program, "-L", "C++"], stdin=PIPE, stdout=hashtable)
+ enumlist = []
+ section = 0
+ in_comment = False
+
+--- guitarix-0.33.0/src/gx_head/engine/jsonrpc.cpp 2015-10-31 12:50:33.934647842 +0100
++++ guitarix-0.33.0/src/gx_head/engine/jsonrpc.cpp 2015-10-31 12:50:51.238773730 +0100
+@@ -1171,7 +1171,7 @@ bool CmdConnection::request(gx_system::J
+ }
+ }
+ jp.next(gx_system::JsonParser::end_object);
+- const methodnames *p = in_word_set(method.c_str(), method.size());
++ const methodnames *p = Perfect_Hash::in_word_set(method.c_str(), method.size());
+ if (!p) {
+ throw RpcError(-32601, Glib::ustring::compose("Method not found -- '%1'", method));
+ }
+
+
+The following part is adapted from an upstream patch for the new libsigc++.
+
+commit 001aa683814a7bf4537882c7c3acf1dafd851cd5
+Author: Hermann Meyer <brummer-@web.de>
+Date: Sat Oct 31 09:33:16 2015 +0100
+
+ * fix libsigc++ removes sigc::group
+
+diff --git a/src/gx_head/gui/avahi_discover.cpp b/src/gx_head/gui/avahi_discover.cpp
+index c49746e..88993c2 100644
+--- a/src/gx_head/gui/avahi_discover.cpp
++++ b/src/gx_head/gui/avahi_discover.cpp
+@@ -193,7 +193,9 @@ SelectInstance::SelectInstance(gx_system::CmdlineOptions& options, Gtk::Window *
+ win->signal_response().connect(sigc::mem_fun(this, &SelectInstance::on_response));
+ bld->get_widget("treeview", view);
+ view->signal_row_activated().connect(
+- sigc::group(sigc::mem_fun(win, &Gtk::Dialog::response), 1));
++ sigc::mem_fun(this,&SelectInstance::on_row));
++ //view->signal_row_activated().connect(
++ //sigc::group(sigc::mem_fun(win, &Gtk::Dialog::response), 1));
+ view->set_model(Gtk::ListStore::create(cols));
+ view->get_selection()->set_mode(Gtk::SELECTION_BROWSE);
+ view->get_selection()->signal_changed().connect(
+@@ -242,6 +244,10 @@ void SelectInstance::on_avahi_changed() {
+ }
+ }
+
++void SelectInstance::on_row(const Gtk::TreePath& path, Gtk::TreeViewColumn* column) {
++ on_response(1);
++}
++
+ void SelectInstance::on_response(int response_id) {
+ if (response_id == 1) {
+ Gtk::TreeIter i = view->get_selection()->get_selected();
+diff --git a/src/gx_head/gui/gx_main.cpp b/src/gx_head/gui/gx_main.cpp
+index d1ad329..a207aa6 100644
+--- a/src/gx_head/gui/gx_main.cpp
++++ b/src/gx_head/gui/gx_main.cpp
+@@ -281,8 +281,10 @@ void ErrorPopup::show_msg() {
+ align->set_padding(50,20,0,10);
+ Gtk::VBox *vbox = dynamic_cast<Gtk::VBox *>(dialog->get_child());
+ vbox->set_redraw_on_allocate(true);
+- vbox->signal_expose_event().connect(
+- sigc::group(&gx_cairo::error_box_expose,GTK_WIDGET(vbox->gobj()),sigc::_1,(void*)0),false);
++ g_signal_connect(GTK_WIDGET(vbox->gobj()), "expose-event",
++ G_CALLBACK(gx_cairo::error_box_expose), NULL);
++ // vbox->signal_expose_event().connect(
++ //sigc::group(&gx_cairo::error_box_expose,GTK_WIDGET(vbox->gobj()),sigc::_1,(void*)0),false);
+ dialog->set_title(_("GUITARIX ERROR"));
+ dialog->signal_response().connect(
+ sigc::mem_fun(*this, &ErrorPopup::on_response));
+@@ -306,9 +308,11 @@ GxSplashBox::GxSplashBox()
+ : Gtk::Window(Gtk::WINDOW_POPUP) {
+ set_redraw_on_allocate(true);
+ set_app_paintable();
+- signal_expose_event().connect(
+- sigc::group(&gx_cairo::splash_expose, GTK_WIDGET(gobj()),
+- sigc::_1, (void*)0), false);
++ g_signal_connect(GTK_WIDGET(gobj()), "expose-event",
++ G_CALLBACK(gx_cairo::splash_expose), NULL);
++ //signal_expose_event().connect(
++ // sigc::group(&gx_cairo::splash_expose, GTK_WIDGET(gobj()),
++ // sigc::_1, (void*)0), false);
+ set_decorated(false);
+ set_type_hint(Gdk::WINDOW_TYPE_HINT_SPLASHSCREEN);
+ set_position(Gtk::WIN_POS_CENTER );
+diff --git a/src/gx_head/gui/gx_main_window.cpp b/src/gx_head/gui/gx_main_window.cpp
+index 23c9ae6..eb0e201 100644
+--- a/src/gx_head/gui/gx_main_window.cpp
++++ b/src/gx_head/gui/gx_main_window.cpp
+@@ -1303,6 +1303,23 @@ void MainWindow::on_log_activate() {
+ fLoggingWindow.hide();
+ }
+ }
++// show loggingbox
++bool MainWindow::on_log_activated(GdkEventButton* ev) {
++ if (ev->type == GDK_BUTTON_PRESS && ev->button == 1) {
++ if (!actions.loggingbox->get_active()) {
++ actions.loggingbox->set_active(true);
++ gint rxorg, ryorg;
++ window->get_position(rxorg, ryorg);
++ fLoggingWindow.move(rxorg+5, ryorg+272);
++ fLoggingWindow.show_all();
++ on_msg_level_changed();
++ } else {
++ fLoggingWindow.hide();
++ actions.loggingbox->set_active(false);
++ }
++ }
++ return true;
++}
+
+ void MainWindow::on_engine_toggled() {
+ gx_engine::GxEngineState s;
+@@ -2119,6 +2136,14 @@ bool MainWindow::on_toggle_mute(GdkEventButton* ev) {
+ return true;
+ }
+
++bool MainWindow::on_jackserverconnection(GdkEventButton* ev) {
++ if (ev->type == GDK_BUTTON_PRESS && ev->button == 1) {
++ bool v = actions.jackserverconnection->get_active();
++ actions.jackserverconnection->set_active(!v);
++ }
++ return true;
++}
++
+ void MainWindow::on_msg_level_changed() {
+ switch (fLoggingWindow.get_unseen_msg_level()) {
+ case GxLogger::kWarning: logstate_image->set(pixbuf_log_yellow); break;
+@@ -2683,12 +2708,14 @@ MainWindow::MainWindow(gx_engine::GxMachineBase& machine_, gx_system::CmdlineOpt
+ */
+ if (jack) {
+ jackd_image->set(pixbuf_jack_disconnected);
+- jackd_image->get_parent()->signal_button_press_event().connect(
+- sigc::bind_return(
+- sigc::group(
+- sigc::ptr_fun(toggle_action),
+- actions.jackserverconnection),
+- true));
++ jackd_image->get_parent()->signal_button_press_event().connect(
++ sigc::mem_fun(*this, &MainWindow::on_jackserverconnection));
++ //jackd_image->get_parent()->signal_button_press_event().connect(
++ // sigc::bind_return(
++ // sigc::group(
++ // sigc::ptr_fun(toggle_action),
++ // actions.jackserverconnection),
++ // true));
+ } else {
+ jackd_image->hide();
+ }
+@@ -2823,11 +2850,14 @@ MainWindow::MainWindow(gx_engine::GxMachineBase& machine_, gx_system::CmdlineOpt
+ false));
+ on_msg_level_changed();
+ logstate_image->get_parent()->signal_button_press_event().connect(
+- sigc::bind_return(
+- sigc::group(
+- sigc::ptr_fun(toggle_action),
+- actions.loggingbox),
+- true));
++ sigc::mem_fun(*this, &MainWindow::on_log_activated));
++
++ //logstate_image->get_parent()->signal_button_press_event().connect(
++ //sigc::bind_return(
++ // sigc::group(
++ // sigc::ptr_fun(toggle_action),
++ // actions.loggingbox),
++ // true));
+
+ /*
+ ** load plugin definitions into plugin_dict, add to effects_toolpalette
+diff --git a/src/gx_head/gui/gx_portmap.cpp b/src/gx_head/gui/gx_portmap.cpp
+index d8a6ae6..e711ee7 100644
+--- a/src/gx_head/gui/gx_portmap.cpp
++++ b/src/gx_head/gui/gx_portmap.cpp
+@@ -578,12 +578,16 @@ PortMapWindow::PortMapWindow(Glib::RefPtr<gx_gui::GxBuilder> bld, gx_jack::GxJac
+ b->set_name("rack_button");
+ Gtk::VBox *vbox1;
+ bld->find_widget("dialog-vbox1", vbox1);
+- vbox1->signal_expose_event().connect(
+- sigc::group(&gx_cairo::rectangle_skin_color_expose,GTK_WIDGET(vbox1->gobj()),sigc::_1,(void*)0),false);
++ g_signal_connect(GTK_WIDGET(vbox1->gobj()), "expose-event",
++ G_CALLBACK(gx_cairo::rectangle_skin_color_expose), NULL);
++ // vbox1->signal_expose_event().connect(
++ //sigc::group(&gx_cairo::rectangle_skin_color_expose,GTK_WIDGET(vbox1->gobj()),sigc::_1,(void*)0),false);
+ Gtk::VBox *vbox2;
+ bld->find_widget("dialog-vbox2", vbox2);
+- vbox2->signal_expose_event().connect(
+- sigc::group(&gx_cairo::rectangle_skin_color_expose,GTK_WIDGET(vbox2->gobj()),sigc::_1,(void*)0),false);
++ g_signal_connect(GTK_WIDGET(vbox2->gobj()), "expose-event",
++ G_CALLBACK(gx_cairo::rectangle_skin_color_expose), NULL);
++ // vbox2->signal_expose_event().connect(
++// sigc::group(&gx_cairo::rectangle_skin_color_expose,GTK_WIDGET(vbox2->gobj()),sigc::_1,(void*)0),false);
+ vbox1->set_redraw_on_allocate(true);
+ vbox2->set_redraw_on_allocate(true);
+ for (int i = 0; i < number_of_ports; ++i) {
+diff --git a/src/headers/avahi_discover.h b/src/headers/avahi_discover.h
+index 5af5949..b6f523a 100644
+--- a/src/headers/avahi_discover.h
++++ b/src/headers/avahi_discover.h
+@@ -91,6 +91,7 @@ private:
+ } cols;
+ private:
+ void on_response(int response_id);
++ void on_row(const Gtk::TreePath& path, Gtk::TreeViewColumn* column);
+ void on_avahi_changed();
+ void on_selection_changed();
+ public:
+diff --git a/src/headers/gx_main_window.h b/src/headers/gx_main_window.h
+index 3b54285..e7c02ce 100644
+--- a/src/headers/gx_main_window.h
++++ b/src/headers/gx_main_window.h
+@@ -720,6 +720,7 @@ private:
+ void on_load_ladspa();
+ void delete_select_jack_control();
+ void on_log_activate();
++ bool on_log_activated(GdkEventButton* ev);
+ void do_program_change(int pgm);
+ void on_engine_toggled();
+ void on_engine_state_change(gx_engine::GxEngineState state);
+@@ -728,6 +729,7 @@ private:
+ void setup_tuner_temperament(Gxw::RackTuner& tuner);
+ void setup_tuner(Gxw::RackTuner& tuner);
+ bool on_toggle_mute(GdkEventButton* ev);
++ bool on_jackserverconnection(GdkEventButton* ev);
+ void on_msg_level_changed();
+ void on_ampdetail_switch(bool compress, bool setparam);
+ void on_show_oscilloscope(bool v);
+
+The following is adapted from this upstream patch, which does a whole
+bunch of unrelated things.
+
+commit 44ab541a5a846c0b3832f4225d1ae92183d55550
+Author: Hermann Meyer <brummer-@web.de>
+Date: Fri Oct 30 08:47:42 2015 +0100
+
+ * add 53 tet tuner option
+ * add online preset download widget (requiers libwebkit-1.0
+ * fix bug #27
+ * fix build fail with c++11 system libs (make c++11 default)
+
+--- a/src/LV2/gx_amp.lv2/gxamp_gui.cpp
++++ b/src/LV2/gx_amp.lv2/gxamp_gui.cpp
+@@ -124,7 +124,7 @@ void GXPluginGUI::set_skin()
+ gtk_rc_parse_string (toparse.c_str());
+ }
+
+-inline std::string to_string(long long _Val)
++inline std::string t_string(long long _Val)
+ { // convert int to string
+ char _Buf[128];
+ sprintf(_Buf, "%lld", _Val);
+@@ -136,7 +136,7 @@ void GXPluginGUI::set_plug_name()
+ // Here the plugin should have different name for different amp.....
+ addKnob = "";
+ plugskin = "amp21.png";
+- plug_name = "GUITARIXLV2" + to_string(reinterpret_cast<long long>(this));
++ plug_name = "GUITARIXLV2" + t_string(reinterpret_cast<long long>(this));
+ //fprintf(stderr,"%s",plug_name.c_str());
+ }
+
+diff --git a/src/LV2/gx_amp_stereo.lv2/gxamp_stereo_gui.cpp b/src/LV2/gx_amp_stereo.lv2/gxamp_stereo_gui.cpp
+index d5947ee..edc1caa 100644
+--- a/src/LV2/gx_amp_stereo.lv2/gxamp_stereo_gui.cpp
++++ b/src/LV2/gx_amp_stereo.lv2/gxamp_stereo_gui.cpp
+@@ -124,7 +124,7 @@ void GXPluginGUI::set_skin()
+ gtk_rc_parse_string (toparse.c_str());
+ }
+
+-inline std::string to_string(long long _Val)
++inline std::string t_string(long long _Val)
+ { // convert int to string
+ char _Buf[128];
+ sprintf(_Buf, "%lld", _Val);
+@@ -135,7 +135,7 @@ void GXPluginGUI::set_plug_name()
+ {
+ addKnob = "";
+ plugskin = "amp21.png";
+- plug_name = "GUITARIXLV2" + to_string(reinterpret_cast<long long>(this));
++ plug_name = "GUITARIXLV2" + t_string(reinterpret_cast<long long>(this));
+ }
+
+ GtkWidget* GXPluginGUI::make_gui()