1//
2// SPDX-License-Identifier: BSD-3-Clause
3// Copyright Contributors to the OpenEXR Project.
4//
5
6#ifndef INCLUDED_IMATHEXPORT_H
7#define INCLUDED_IMATHEXPORT_H
8
9#include "ImathConfig.h"
10
11/// \defgroup ExportMacros Macros to manage symbol visibility
12///
13/// There is more information about the motivation for these macros
14/// documented in the OpenEXR source tree
15/// (https://github.com/AcademySoftwareFoundation/openexr) under
16/// docs/SymbolVisibility.md
17///
18/// Imath only needs a couple of the possible macros outlined in the
19/// above document, and due to it largely being inline only, does not
20/// have much to do.
21///
22/// @{
23#if defined(IMATH_DLL)
24
25// when building Imath as a DLL for Windows, we have to control the
26// typical DLL export / import things. Luckily, the typeinfo is all
27// automatic there, so only have to deal with symbols, except Windows
28// has some weirdness with DLLs and extern const, so we have to
29// provide a macro to handle that.
30
31# if defined(IMATH_EXPORTS)
32# define IMATH_EXPORT __declspec(dllexport)
33# define IMATH_EXPORT_CONST extern __declspec(dllexport)
34# else
35# define IMATH_EXPORT __declspec(dllimport)
36# define IMATH_EXPORT_CONST extern __declspec(dllimport)
37# endif
38
39// DLLs don't support these types of visibility controls, just leave them as empty
40# define IMATH_EXPORT_TYPE
41# define IMATH_EXPORT_ENUM
42# define IMATH_EXPORT_TEMPLATE_TYPE
43
44#else
45
46# ifdef IMATH_PUBLIC_SYMBOL_ATTRIBUTE
47# define IMATH_EXPORT IMATH_PUBLIC_SYMBOL_ATTRIBUTE
48# define IMATH_EXPORT_CONST extern const IMATH_PUBLIC_SYMBOL_ATTRIBUTE
49# else
50# define IMATH_EXPORT
51# define IMATH_EXPORT_CONST extern const
52# endif
53
54# ifdef IMATH_PUBLIC_TYPE_VISIBILITY_ATTRIBUTE
55# define IMATH_EXPORT_ENUM IMATH_PUBLIC_TYPE_VISIBILITY_ATTRIBUTE
56# define IMATH_EXPORT_TEMPLATE_TYPE IMATH_PUBLIC_TYPE_VISIBILITY_ATTRIBUTE
57# define IMATH_EXPORT_TYPE IMATH_PUBLIC_TYPE_VISIBILITY_ATTRIBUTE
58# else
59# define IMATH_EXPORT_ENUM
60# define IMATH_EXPORT_TEMPLATE_TYPE IMATH_EXPORT
61# define IMATH_EXPORT_TYPE IMATH_EXPORT
62# endif
63
64#endif // IMATH_DLL
65
66/// @}
67
68#endif // INCLUDED_IMATHEXPORT_H
69

source code of include/Imath/ImathExport.h