use visibility control on JACK audio backend, so that we can import this change into...
authorPaul Davis <paul@linuxaudiosystems.com>
Fri, 13 Sep 2013 16:32:50 +0000 (12:32 -0400)
committerPaul Davis <paul@linuxaudiosystems.com>
Fri, 13 Sep 2013 16:32:50 +0000 (12:32 -0400)
libs/ardour/ardour/audio_backend.h
libs/ardour/ardour/visibility.h [new file with mode: 0644]
libs/ardour/audioengine.cc
libs/backends/jack/jack_api.cc
libs/backends/jack/wscript

index d9561a62e564da848acf490e25e64a8980205f0a..4d57f0b43d808cd153afe9d98fafb6486d048bdd 100644 (file)
 #include "ardour/types.h"
 #include "ardour/audioengine.h"
 #include "ardour/port_engine.h"
+#include "ardour/visibility.h"
+
+#ifdef ARDOURBACKEND_DLL_EXPORTS // defined if we are building the ARDOUR Panners DLLs (instead of using them)
+    #define ARDOURBACKEND_API LIBARDOUR_HELPER_DLL_EXPORT
+#else
+    #define ARDOURBACKEND_API LIBARDOUR_HELPER_DLL_IMPORT
+#endif 
+#define ARDOURBACKEND_LOCAL LIBARDOUR_HELPER_DLL_LOCAL
 
 namespace ARDOUR {
 
diff --git a/libs/ardour/ardour/visibility.h b/libs/ardour/ardour/visibility.h
new file mode 100644 (file)
index 0000000..09287b8
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+    Copyright (C) 2013 Paul Davis
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#ifndef __libardour_visibility_h__
+#define __libardour_visibility_h__
+
+/* _WIN32 is defined by most compilers targetting Windows, but within the
+ * ardour source tree, we also define COMPILER_MSVC or COMPILER_MINGW depending
+ * on how a Windows build is built.
+ */
+
+#if defined _WIN32 || defined __CYGWIN__ || defined(COMPILER_MSVC) || defined(COMPILER_MINGW)
+  #define LIBARDOUR_HELPER_DLL_IMPORT __declspec(dllimport)
+  #define LIBARDOUR_HELPER_DLL_EXPORT __declspec(dllexport)
+  #define LIBARDOUR_HELPER_DLL_LOCAL
+#else
+  #if __GNUC__ >= 4
+    #define LIBARDOUR_HELPER_DLL_IMPORT __attribute__ ((visibility ("default")))
+    #define LIBARDOUR_HELPER_DLL_EXPORT __attribute__ ((visibility ("default")))
+    #define LIBARDOUR_HELPER_DLL_LOCAL  __attribute__ ((visibility ("hidden")))
+  #else
+    #define LIBARDOUR_HELPER_DLL_IMPORT
+    #define LIBARDOUR_HELPER_DLL_EXPORT
+    #define LIBARDOUR_HELPER_DLL_LOCAL
+  #endif
+#endif
+
+#endif /* __libardour_visibility_h__ */
index 73dee76a92af181b6b3cb9a7fd59662a72baf641..567f3c7671db49a24527380cc7466bca0bd8222b 100644 (file)
@@ -505,7 +505,8 @@ AudioEngine::backend_discover (const string& path)
 {
        Glib::Module module (path);
        AudioBackendInfo* info;
-       void* sym = 0;
+       AudioBackendInfo* (*dfunc)(void);
+       void* func = 0;
 
        if (!module) {
                error << string_compose(_("AudioEngine: cannot load module \"%1\" (%2)"), path,
@@ -513,15 +514,16 @@ AudioEngine::backend_discover (const string& path)
                return 0;
        }
        
-       if (!module.get_symbol ("descriptor", sym)) {
-               error << string_compose(_("AudioEngine: backend at \"%1\" has no descriptor."), path) << endmsg;
+       if (!module.get_symbol ("descriptor", func)) {
+               error << string_compose(_("AudioEngine: backend at \"%1\" has no descriptor function."), path) << endmsg;
                error << Glib::Module::get_last_error() << endmsg;
                return 0;
        }
 
        module.make_resident ();
        
-       info = (AudioBackendInfo*) sym;
+       dfunc = (AudioBackendInfo* (*)(void))func;
+       info = dfunc();
        
        return info;
 }
index e02ccde2f1a662ee96f5520746ca1a0633f4751d..836acfda11a54b1b818f6d2d17b8b2bc6ffdbc3b 100644 (file)
@@ -66,19 +66,13 @@ already_configured ()
        return JackConnection::server_running ();
 }
 
-extern "C" {
-       
-       
-       /* functions looked up using dlopen-and-cousins, and so naming scope
-        * must be non-mangled.
-        */
-
-       ARDOUR::AudioBackendInfo descriptor = {
-               "JACK",
-               instantiate,
-               deinstantiate,
-               backend_factory,
-               already_configured,
-       };
-}
+static ARDOUR::AudioBackendInfo _descriptor = {
+       "JACK",
+       instantiate,
+       deinstantiate,
+       backend_factory,
+       already_configured,
+};
+
+extern "C" ARDOURBACKEND_API ARDOUR::AudioBackendInfo* descriptor() { return &_descriptor; }
 
index 3c47f3a6520ed0193894ebb717d6abbda8785dd5..98c39c7b16f27a9505f0b25be8ccf6b005cc5f4a 100644 (file)
@@ -38,8 +38,9 @@ def build(bld):
     obj.use      = 'ardour libpbd'
     obj.vnum     = JACKBACKEND_VERSION
     obj.install_path  = os.path.join(bld.env['LIBDIR'], 'ardour3', 'backends')
-    obj.defines = ['PACKAGE="' + I18N_PACKAGE + '"']
-    
+    obj.defines = ['PACKAGE="' + I18N_PACKAGE + '"', 
+                   'ARDOURBACKEND_DLL_EXPORTS'
+                   ]
 
     #
     # device discovery code in the jack backend needs ALSA