add -fvisibility=hidden to libgtkmm2ext, and make things work
authorPaul Davis <paul@linuxaudiosystems.com>
Thu, 17 Oct 2013 18:36:41 +0000 (14:36 -0400)
committerPaul Davis <paul@linuxaudiosystems.com>
Thu, 17 Oct 2013 18:36:41 +0000 (14:36 -0400)
libs/ardour/ardour/midi_ui.h
libs/gtkmm2ext/gtk_ui.cc
libs/gtkmm2ext/gtkmm2ext/actions.h
libs/gtkmm2ext/gtkmm2ext/gtk_ui.h
libs/gtkmm2ext/wscript
libs/pbd/pbd/abstract_ui.h
libs/pbd/pbd/libpbd_visibility.h
libs/surfaces/mackie/mackie_control_protocol.h
libs/surfaces/osc/osc.h
libs/surfaces/wiimote/wiimote.h

index 469f29377062ca6f6e7eb3b7e67327bd05433e59..e99d6bf499ff92158571b4655f1388da55e4e0bf 100644 (file)
@@ -22,6 +22,7 @@
 
 #include <list>
 
+#define ABSTRACT_UI_EXPORTS
 #include "pbd/abstract_ui.h"
 #include "pbd/signals.h"
 #include "pbd/stacktrace.h"
index d9e4c871a65be903f7bad202c67be638e82998d6..fc94657f6df96f432f84ee1752f46f3b1612e03d 100644 (file)
@@ -43,6 +43,7 @@
 #include "gtkmm2ext/actions.h"
 #include "gtkmm2ext/activatable.h"
 #include "gtkmm2ext/actions.h"
+#include "gtkmm2ext/gui_thread.h"
 
 #include "i18n.h"
 
index 9101f8ea92b6c4e86a8fe07f2e5d539147ccee9e..d92f85bb6eeeba8b58bfde385d8e7d9a1cd6a271 100644 (file)
 #include <gtkmm/actiongroup.h>
 #include <gtkmm/accelkey.h>
 
+#include "gtkmm2ext/visibility.h"
+
 namespace Gtk {
        class UIManager;
 }
 
 namespace ActionManager {
 
-       extern std::string unbound_string;  /* the key string returned if an action is not bound */
-       extern Glib::RefPtr<Gtk::UIManager> ui_manager;
+       LIBGTKMM2EXT_API extern std::string unbound_string;  /* the key string returned if an action is not bound */
+       LIBGTKMM2EXT_API extern Glib::RefPtr<Gtk::UIManager> ui_manager;
        
-       extern void set_sensitive (std::vector<Glib::RefPtr<Gtk::Action> >& actions, bool);
-       extern std::string get_key_representation (const std::string& accel_path, Gtk::AccelKey& key);
+       LIBGTKMM2EXT_API extern void set_sensitive (std::vector<Glib::RefPtr<Gtk::Action> >& actions, bool);
+       LIBGTKMM2EXT_API extern std::string get_key_representation (const std::string& accel_path, Gtk::AccelKey& key);
 
-       extern Gtk::Widget* get_widget (const char * name);
-       extern Glib::RefPtr<Gtk::Action> get_action (const char* group, const char* name);
-       extern Glib::RefPtr<Gtk::Action> get_action (const char* path);
-       extern Glib::RefPtr<Gtk::Action> get_action_from_name (const char* name);
-       extern void do_action (const char* group, const char* name);
-       extern void set_toggle_action (const char* group, const char* name, bool);
+       LIBGTKMM2EXT_API extern Gtk::Widget* get_widget (const char * name);
+       LIBGTKMM2EXT_API extern Glib::RefPtr<Gtk::Action> get_action (const char* group, const char* name);
+       LIBGTKMM2EXT_API extern Glib::RefPtr<Gtk::Action> get_action (const char* path);
+       LIBGTKMM2EXT_API extern Glib::RefPtr<Gtk::Action> get_action_from_name (const char* name);
+       LIBGTKMM2EXT_API extern void do_action (const char* group, const char* name);
+       LIBGTKMM2EXT_API extern void set_toggle_action (const char* group, const char* name, bool);
 
-       extern void add_action_group (Glib::RefPtr<Gtk::ActionGroup>);
+       LIBGTKMM2EXT_API extern void add_action_group (Glib::RefPtr<Gtk::ActionGroup>);
 
-       extern Glib::RefPtr<Gtk::Action> register_action (Glib::RefPtr<Gtk::ActionGroup> group,
+       LIBGTKMM2EXT_API extern Glib::RefPtr<Gtk::Action> register_action (Glib::RefPtr<Gtk::ActionGroup> group,
                                                   const char * name, const char * label);
-       extern Glib::RefPtr<Gtk::Action> register_action (Glib::RefPtr<Gtk::ActionGroup> group,
+       LIBGTKMM2EXT_API extern Glib::RefPtr<Gtk::Action> register_action (Glib::RefPtr<Gtk::ActionGroup> group,
                                                   const char * name, const char * label, sigc::slot<void> sl,
                                                   guint key, Gdk::ModifierType mods);
-       extern Glib::RefPtr<Gtk::Action> register_action (Glib::RefPtr<Gtk::ActionGroup> group,
+       LIBGTKMM2EXT_API extern Glib::RefPtr<Gtk::Action> register_action (Glib::RefPtr<Gtk::ActionGroup> group,
                                                   const char * name, const char * label, sigc::slot<void> sl);
 
-       extern Glib::RefPtr<Gtk::Action> register_radio_action (Glib::RefPtr<Gtk::ActionGroup> group, Gtk::RadioAction::Group&,
+       LIBGTKMM2EXT_API extern Glib::RefPtr<Gtk::Action> register_radio_action (Glib::RefPtr<Gtk::ActionGroup> group, Gtk::RadioAction::Group&,
                                                                const char * name, const char * label, sigc::slot<void> sl,
                                                                guint key, Gdk::ModifierType mods);
-       extern Glib::RefPtr<Gtk::Action> register_radio_action (Glib::RefPtr<Gtk::ActionGroup> group, Gtk::RadioAction::Group&,
+       LIBGTKMM2EXT_API extern Glib::RefPtr<Gtk::Action> register_radio_action (Glib::RefPtr<Gtk::ActionGroup> group, Gtk::RadioAction::Group&,
                                                                const char * name, const char * label, sigc::slot<void> sl);
-       extern Glib::RefPtr<Gtk::Action> register_radio_action (Glib::RefPtr<Gtk::ActionGroup> group, Gtk::RadioAction::Group&,
+       LIBGTKMM2EXT_API extern Glib::RefPtr<Gtk::Action> register_radio_action (Glib::RefPtr<Gtk::ActionGroup> group, Gtk::RadioAction::Group&,
                                                                std::string const &, std::string const &, std::string const &, sigc::slot<void> sl);
 
-       extern Glib::RefPtr<Gtk::Action> register_toggle_action (Glib::RefPtr<Gtk::ActionGroup> group,
+       LIBGTKMM2EXT_API extern Glib::RefPtr<Gtk::Action> register_toggle_action (Glib::RefPtr<Gtk::ActionGroup> group,
                                                          const char * name, const char * label, sigc::slot<void> sl,
                                                          guint key, Gdk::ModifierType mods);
-       extern Glib::RefPtr<Gtk::Action> register_toggle_action (Glib::RefPtr<Gtk::ActionGroup> group,
+       LIBGTKMM2EXT_API extern Glib::RefPtr<Gtk::Action> register_toggle_action (Glib::RefPtr<Gtk::ActionGroup> group,
                                                                 std::string const &, std::string const &, std::string const &, sigc::slot<void> sl);
-       extern Glib::RefPtr<Gtk::Action> register_toggle_action (Glib::RefPtr<Gtk::ActionGroup> group,
+       LIBGTKMM2EXT_API extern Glib::RefPtr<Gtk::Action> register_toggle_action (Glib::RefPtr<Gtk::ActionGroup> group,
                                                                 const char * name, const char * label, sigc::slot<void> sl);
 
-       extern bool lookup_entry (const Glib::ustring accel_path, Gtk::AccelKey& key);
+       LIBGTKMM2EXT_API extern bool lookup_entry (const Glib::ustring accel_path, Gtk::AccelKey& key);
 
-       extern void get_all_actions (std::vector<std::string>& names,
+       LIBGTKMM2EXT_API extern void get_all_actions (std::vector<std::string>& names,
                                     std::vector<std::string>& paths,
                                     std::vector<std::string>& tooltips,
                                     std::vector<std::string>& keys,
                                     std::vector<Gtk::AccelKey>& bindings);
 
-       extern void get_all_actions (std::vector<std::string>& groups,
+       LIBGTKMM2EXT_API extern void get_all_actions (std::vector<std::string>& groups,
                                     std::vector<std::string>& paths,
                                     std::vector<std::string>& tooltips,
                                     std::vector<Gtk::AccelKey>& bindings);
 
-       extern void check_toggleaction (std::string);
-       extern void uncheck_toggleaction (std::string);
-       extern void set_toggleaction_state (std::string, bool);
+       LIBGTKMM2EXT_API extern void check_toggleaction (std::string);
+       LIBGTKMM2EXT_API extern void uncheck_toggleaction (std::string);
+       LIBGTKMM2EXT_API extern void set_toggleaction_state (std::string, bool);
 };
 
 #endif /* __libgtkmm2ext_actions_h__ */
index 2e5cc11d23c590a32d53dd38a7d0fc927a51f299..b726eb89acd0da99e19acab732b2edb72e153078 100644 (file)
 #include <gtkmm/textbuffer.h>
 #include <gtkmm/main.h>
 #include <gdkmm/color.h>
-#include <pbd/abstract_ui.h>
-#include <pbd/ringbufferNPT.h>
-#include <pbd/pool.h>
-#include <pbd/error.h>
-#include <pbd/receiver.h>
+
+#define ABSTRACT_UI_EXPORTS
+#include "pbd/abstract_ui.h"
+#include "pbd/ringbufferNPT.h"
+#include "pbd/pool.h"
+#include "pbd/error.h"
+#include "pbd/receiver.h"
 
 #include "gtkmm2ext/visibility.h"
 
index 7600c8a089f0fb82e726589a152e92e2d40b7973..955b133d333ab3337c68e4c1d598aa24d63cbdb9 100644 (file)
@@ -90,6 +90,8 @@ def build(bld):
         obj.defines      = [ 'LIBGTKMM2EXT_DLL=1', 'LIBGTKMM2EXT_DLL_EXPORTS=1' ]
         # internal shared libs that we use
         obj.defines     += [ 'LIBPBD_DLL=1' ]
+        obj.cxxflags     = [ '-fvisibility=hidden' ]
+        obj.cflags     = [ '-fvisibility=hidden' ]
     else:
         obj              = bld.stlib(features = 'c cxx cstlib cxxstlib', source=gtkmm2ext_sources)
         obj.cxxflags     = [ '-fPIC' ]
index e78cf1ce2878238908e798b1fd789df94e94f4bd..f78ba260904a350313b383e31acf970b5316e3f4 100644 (file)
 #include "pbd/signals.h"
 #include "pbd/base_ui.h"
 
+/* We have a special case in libpbd of a template class that gets instantiated
+ * as the base class of several classes in other libraries. It is not possible
+ * to use LIBFOO_API to mark this visible, because the FOO in each case is 
+ * different. So we define this generic visible/export/hidden/import pair
+ * of macros to try to deal with this special case. These should NEVER be
+ * used anywhere except AbstractUI<T> (or similar cases if they arise.
+ *
+ * Note the assumption here that other libs are being built as DLLs if this one is.
+ */
+
+#ifdef ABSTRACT_UI_EXPORTS
+#define ABSTRACT_UI_API LIBPBD_DLL_EXPORT
+#else
+#define ABSTRACT_UI_API LIBPBD_DLL_IMPORT
+#endif 
+
+
 class Touchable;
 
 template<typename RequestObject>
-class AbstractUI : public BaseUI
+class ABSTRACT_UI_API AbstractUI : public BaseUI /* see notes in visibility.h about why this is not LIBPBD_API */
 {
   public:
        AbstractUI (const std::string& name);
index 0aa309a4a46fad25c251ea34ba2fcccf88f1aeb2..e2c6235f0ba336dded07fbd3dbfe867ca750526d 100644 (file)
@@ -38,8 +38,6 @@
     #define LIBPBD_DLL_IMPORT
     #define LIBPBD_DLL_EXPORT
     #define LIBPBD_DLL_LOCAL
-    #define LIBPBD_DLL_IMPORT_CLASS
-    #define LIBPBD_DLL_EXPORT_CLASS
   #endif
 #endif
 
index 46692477266ed89d7f2f43aef8af0bbe14c0095b..81e14369381a681b5127a24cdc53b3ca90914cc6 100644 (file)
@@ -28,6 +28,7 @@
 #include <pthread.h>
 #include <boost/smart_ptr.hpp>
 
+#define ABSTRACT_UI_EXPORTS
 #include "pbd/abstract_ui.h"
 #include "midi++/types.h"
 #include "ardour/types.h"
index 84dd0d9c86c082b7ba75e57e82e19b28a235ff45..2479eceaff07e951f86b44d7547518334bd993d2 100644 (file)
@@ -31,6 +31,7 @@
 
 #include <glibmm/main.h>
 
+#define ABSTRACT_UI_EXPORTS
 #include "pbd/abstract_ui.h"
 
 #include "ardour/types.h"
index f6ac8edc41d140288611e37f5987c6c6247d6e89..6edadf6c64f305cbb78738da372ac3129cdc36d7 100644 (file)
@@ -23,6 +23,7 @@
 
 #include <cwiid.h>
 
+#define ABSTRACT_UI_EXPORTS
 #include "pbd/abstract_ui.h"
 #include "ardour/types.h"
 #include "control_protocol/control_protocol.h"