Use newly-added ORC_API decorators to export symbols explicitly.
Get rid of orc.map file and the ORC_EXPORT stuff that never did
anything anyway (define was unused).
EXTRA_DIST = COPYING RELEASE autogen.sh gtk-doc.make orc.m4 \
$(shell find "$(top_srcdir)" -type f -name meson.build ! -path "$(top_srcdir)/orc-0.4.*" ) \
- meson_options.txt orc/orc.map
+ meson_options.txt
DISTCHECK_CONFIGURE_FLAGS=--enable-gtk-doc
enable_Bsymbolic=no)
LDFLAGS="${SAVED_LDFLAGS}" LIBS="${SAVED_LIBS}"])
-AC_DEFINE(ORC_EXPORTS, 1, [Defined for compiling internal code])
-
ORC_CFLAGS="$ORC_CFLAGS \$(ERROR_CFLAGS) -I\$(top_srcdir) -D_GNU_SOURCE"
AC_SUBST(ERROR_CFLAGS)
AC_SUBST(ORC_CFLAGS)
cc = meson.get_compiler('c')
+cdata = configuration_data() # config.h
+pc_conf = configuration_data() # orc.pc
+
# -Bsymbolic-functions
if meson.version().version_compare('>= 0.46.0')
if cc.has_link_argument('-Wl,-Bsymbolic-functions')
endif
endif
-cdata = configuration_data() # config.h
-pc_conf = configuration_data() # orc.pc
-
-cdata.set('ORC_EXPORTS', true)
+# Symbol visibility
+if cc.get_id() == 'msvc'
+ export_define = '__declspec(dllexport) extern'
+elif cc.has_argument('-fvisibility=hidden')
+ add_project_arguments('-fvisibility=hidden', language: 'c')
+ export_define = 'extern __attribute__ ((visibility ("default")))'
+else
+ export_define = 'extern'
+endif
+# Passing this through the command line would be too messy
+cdata.set('ORC_API_EXPORT', export_define)
all_backends = ['sse', 'mmx', 'altivec', 'neon', 'mips', 'c64x'] # 'arm'
install_headers(orc_test_headers, subdir : 'orc-' + orc_api + '/orc-test')
-if cc.get_id() != 'msvc'
- link_args = ['-Wl,--version-script,' + meson.current_source_dir() + '/orc-test.map']
-else
- link_args = []
-endif
-
orc_test_shr = shared_library ('orc-test-' + orc_api,
orc_test_sources,
version : libversion,
soversion : soversion,
include_directories : orc_inc,
- c_args : [ orc_c_args , '-DORC_ENABLE_UNSTABLE_API' ],
+ c_args : orc_c_args + ['-DBUILDING_ORC_TEST'],
dependencies : [libm, orc_dep],
- link_args : link_args,
- link_depends : 'orc-test.map',
install : true)
orc_test_sta = static_library ('orc-test-' + orc_api,
objects : orc_test_shr.extract_all_objects(),
include_directories : orc_inc,
- c_args : [ orc_c_args , '-DORC_ENABLE_UNSTABLE_API' ],
+ c_args : orc_c_args + ['-DBUILDING_ORC_TEST'],
dependencies : [libm, orc_dep],
install : true)
+++ /dev/null
-{
-global:
- orc_*;
-local:
- *;
-};
ORC_BEGIN_DECLS
-#ifndef ORC_TEST_API
-#define ORC_TEST_API extern
+#ifdef BUILDING_ORC_TEST
+#define ORC_TEST_API ORC_API_EXPORT /* defined in config.h */
+#else
+#define ORC_TEST_API ORC_API_IMPORT
#endif
typedef enum {
orc_dependencies = [libm, librt, liblog]
-# FIXME: Use gcc visibility attributes in ORC_EXPORT
-if cc.get_id() != 'msvc'
- link_args = ['-Wl,--version-script,' + meson.current_source_dir() + '/orc.map']
-else
- link_args = []
-endif
-
orc_shr = shared_library ('orc-' + orc_api,
orc_sources,
version : libversion,
soversion : soversion,
include_directories : orc_inc,
- c_args : orc_c_args,
+ c_args : orc_c_args + ['-DBUILDING_ORC'],
dependencies : orc_dependencies,
- link_args : link_args,
- link_depends : 'orc.map',
install : true)
orc_sta = static_library ('orc-' + orc_api,
objects: orc_shr.extract_all_objects(),
include_directories : orc_inc,
- c_args : orc_c_args,
+ c_args : orc_c_args + ['-DBUILDING_ORC'],
install : true)
if get_option('default_library') == 'static'
#ifndef _ORC_ORC_H_
#define _ORC_ORC_H_
-#ifndef ORC_API
-#define ORC_API extern
-#endif
-
#include <orc/orcutils.h>
#include <orc/orcprogram.h>
#include <orc/orcdebug.h>
+++ /dev/null
-{
-global:
- orc_*;
-local:
- *;
-};
#define ORC_END_DECLS
#endif
-#ifdef _MSC_VER
-#ifdef ORC_EXPORTS
-#define ORC_EXPORT __declspec(dllexport) extern
+/* FIXME: unused, remove */
+#define ORC_EXPORT
+
+#if defined(_MSC_VER) || defined(_WIN32)
+#define ORC_API_IMPORT __declspec(dllimport) extern
#else
-#define ORC_EXPORT __declspec(dllimport) extern
+#define ORC_API_IMPORT extern
#endif
-#else /* not _MSC_VER */
-#define ORC_EXPORT extern
+
+#ifdef BUILDING_ORC
+#define ORC_API ORC_API_EXPORT /* defined in config.h */
+#else
+#define ORC_API ORC_API_IMPORT
#endif
ORC_BEGIN_DECLS