mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-25 11:11:08 +00:00
57c8e0146f
Add new GST_API_EXPORT in config.h and use that for GST_*_API decorators instead of GST_EXPORT. The right export define depends on the toolchain and whether we're using -fvisibility=hidden or not, so it's better to set it to the right thing directly than hard-coding a compiler whitelist in the public header. We put the export define into config.h instead of passing it via the command line to the compiler because it might contain spaces and brackets and in the autotools scenario we'd have to pass that through multiple layers of plumbing and Makefile/shell escaping and we're just not going to be *that* lucky. The export define is only used if we're compiling our lib, not by external users of the lib headers, so it's not a problem to put it into config.h Also, this means all .c files of libs need to include config.h to get the export marker defined, so fix up a few that didn't include config.h. This commit depends on a common submodule commit that makes gst-glib-gen.mak add an #include "config.h" to generated enum/marshal .c files for the autotools build. https://bugzilla.gnome.org/show_bug.cgi?id=797185
184 lines
6.6 KiB
C
184 lines
6.6 KiB
C
/* GStreamer
|
|
* Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
|
|
* 2004,2005 Wim Taymans <wim@fluendo.com>
|
|
*
|
|
* gstconfig.h: GST_DISABLE_* macros for build configuration
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Library General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2 of the License, or (at your option) any later version.
|
|
*
|
|
* This library 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
|
|
* Library General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Library General Public
|
|
* License along with this library; if not, write to the
|
|
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
|
* Boston, MA 02110-1301, USA.
|
|
*/
|
|
|
|
/**
|
|
* SECTION:gstconfig
|
|
* @short_description: Build configuration options
|
|
*
|
|
* This describes the configuration options for GStreamer. When building
|
|
* GStreamer there are a lot of parts (known internally as "subsystems" ) that
|
|
* can be disabled for various reasons. The most common reasons are speed and
|
|
* size, which is important because GStreamer is designed to run on embedded
|
|
* systems.
|
|
*
|
|
* If a subsystem is disabled, most of this changes are done in an API
|
|
* compatible way, so you don't need to adapt your code in most cases. It is
|
|
* never done in an ABI compatible way though. So if you want to disable a
|
|
* subsystem, you have to rebuild all programs depending on GStreamer, too.
|
|
*
|
|
* If a subsystem is disabled in GStreamer, a value is defined in
|
|
* <gst/gst.h>. You can check this if you do subsystem-specific stuff.
|
|
* <example id="example-gstconfig">
|
|
* <title>Doing subsystem specific things</title>
|
|
* <programlisting>
|
|
* &hash;ifndef GST_DISABLE_GST_DEBUG
|
|
* // do stuff specific to the debugging subsystem
|
|
* &hash;endif // GST_DISABLE_GST_DEBUG
|
|
* </programlisting>
|
|
* </example>
|
|
*/
|
|
|
|
#ifndef __GST_CONFIG_H__
|
|
#define __GST_CONFIG_H__
|
|
|
|
/* trick gtk-doc into believing these symbols are defined (yes, it's ugly) */
|
|
|
|
#if 0
|
|
#define GST_DISABLE_GST_DEBUG 1
|
|
#define GST_DISABLE_PARSE 1
|
|
#define GST_DISABLE_REGISTRY 1
|
|
#define GST_DISABLE_PLUGIN 1
|
|
#endif
|
|
|
|
/***** default padding of structures *****/
|
|
#define GST_PADDING 4
|
|
#define GST_PADDING_INIT { NULL }
|
|
|
|
/***** padding for very extensible base classes *****/
|
|
#define GST_PADDING_LARGE 20
|
|
|
|
/***** disabling of subsystems *****/
|
|
|
|
/**
|
|
* GST_DISABLE_GST_DEBUG:
|
|
*
|
|
* Configures the inclusion of the debugging subsystem
|
|
*/
|
|
@GST_DISABLE_GST_DEBUG_DEFINE@
|
|
|
|
/**
|
|
* GST_DISABLE_PARSE:
|
|
*
|
|
* Configures the inclusion of the gst-launch parser
|
|
*/
|
|
@GST_DISABLE_PARSE_DEFINE@
|
|
|
|
/**
|
|
* GST_DISABLE_REGISTRY:
|
|
*
|
|
* Configures the use of the plugin registry.
|
|
* If one disables this, required plugins need to be loaded and registered
|
|
* manually
|
|
*/
|
|
@GST_DISABLE_REGISTRY_DEFINE@
|
|
|
|
/* FIXME: test and document these! */
|
|
/* Configures the use of external plugins */
|
|
@GST_DISABLE_PLUGIN_DEFINE@
|
|
|
|
/* Whether or not the CPU supports unaligned access
|
|
* The macros used are defined consistently by GCC, Clang, MSVC, Sun, and ICC
|
|
*
|
|
* References:
|
|
* https://sourceforge.net/p/predef/wiki/Architectures/
|
|
* https://msdn.microsoft.com/en-us/library/b0084kay.aspx
|
|
* http://docs.oracle.com/cd/E19205-01/820-4155/c++_faq.html#Vers6
|
|
* https://software.intel.com/en-us/node/583402
|
|
*/
|
|
#if defined(__alpha__) || defined(__arc__) || defined(__arm__) || defined(__aarch64__) || defined(__bfin) || defined(__hppa__) || defined(__nios2__) || defined(__MICROBLAZE__) || defined(__mips__) || defined(__or1k__) || defined(__sh__) || defined(__SH4__) || defined(__sparc__) || defined(__sparc) || defined(__ia64__) || defined(_M_ALPHA) || defined(_M_ARM) || defined(_M_IA64) || defined(__xtensa__) || defined(__e2k__) || defined(__riscv)
|
|
# define GST_HAVE_UNALIGNED_ACCESS 0
|
|
#elif defined(__i386__) || defined(__i386) || defined(__amd64__) || defined(__amd64) || defined(__x86_64__) || defined(__ppc__) || defined(__ppc64__) || defined(__powerpc__) || defined(__powerpc64__) || defined(__m68k__) || defined(_M_IX86) || defined(_M_AMD64) || defined(_M_X64) || defined(__s390__) || defined(__s390x__) || defined(__zarch__)
|
|
# define GST_HAVE_UNALIGNED_ACCESS 1
|
|
#else
|
|
# error "Could not detect architecture; don't know whether it supports unaligned access! Please file a bug."
|
|
#endif
|
|
|
|
/**
|
|
* GST_EXPORT:
|
|
*
|
|
* Export the given variable from the built shared object.
|
|
*
|
|
* On Windows, this exports the variable from the DLL.
|
|
* On other platforms, this gets defined to "extern".
|
|
*/
|
|
/**
|
|
* GST_PLUGIN_EXPORT:
|
|
*
|
|
* Export the plugin's definition.
|
|
*
|
|
* On Windows, this exports the plugin definition from the DLL.
|
|
* On other platforms, this gets defined as a no-op.
|
|
*/
|
|
/* Only use __declspec(dllexport/import) when we have been built with MSVC or
|
|
* the user is linking to us with MSVC. The only remaining case is when we were
|
|
* built with MinGW and are linking with MinGW in which case we rely on the
|
|
* linker to auto-export/import symbols. Of course all this is only used when
|
|
* not linking statically.
|
|
*
|
|
* NOTE: To link to GStreamer statically on Windows, you must define
|
|
* GST_STATIC_COMPILATION or the prototypes will cause the compiler to search
|
|
* for the symbol inside a DLL.
|
|
*/
|
|
#if (@GSTCONFIG_BUILT_WITH_MSVC@ || defined(_MSC_VER)) && !defined(GST_STATIC_COMPILATION)
|
|
# define GST_PLUGIN_EXPORT __declspec(dllexport)
|
|
# ifdef GST_EXPORTS
|
|
# define GST_EXPORT __declspec(dllexport)
|
|
# else
|
|
# define GST_EXPORT __declspec(dllimport) extern
|
|
# endif
|
|
#else
|
|
# if defined(__GNUC__) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))
|
|
# define GST_PLUGIN_EXPORT __attribute__ ((visibility ("default")))
|
|
# define GST_EXPORT extern __attribute__ ((visibility ("default")))
|
|
# else
|
|
# define GST_PLUGIN_EXPORT
|
|
# define GST_EXPORT extern
|
|
# endif
|
|
#endif
|
|
|
|
#if defined(_MSC_VER) && !defined(GST_STATIC_COMPILATION)
|
|
# define GST_API_IMPORT __declspec(dllimport) extern
|
|
#else
|
|
# define GST_API_IMPORT extern
|
|
#endif
|
|
|
|
#ifndef GST_API
|
|
# ifdef BUILDING_GST
|
|
# define GST_API GST_API_EXPORT /* from config.h */
|
|
# else
|
|
# define GST_API GST_API_IMPORT
|
|
# endif
|
|
#endif
|
|
|
|
/* These macros are used to mark deprecated functions in GStreamer headers,
|
|
* and thus have to be exposed in installed headers. But please
|
|
* do *not* use them in other projects. Instead, use G_DEPRECATED
|
|
* or define your own wrappers around it. */
|
|
#ifndef GST_DISABLE_DEPRECATED
|
|
#define GST_DEPRECATED GST_API
|
|
#define GST_DEPRECATED_FOR(f) GST_API
|
|
#else
|
|
#define GST_DEPRECATED G_DEPRECATED GST_API
|
|
#define GST_DEPRECATED_FOR(f) G_DEPRECATED_FOR(f) GST_API
|
|
#endif
|
|
|
|
#endif /* __GST_CONFIG_H__ */
|