1// SPDX-License-Identifier: BSD-3-Clause
2// Copyright (c) Contributors to the OpenEXR Project.
3
4// This file is auto-generated by the configure step
5
6#ifndef INCLUDED_OPENEXR_CONFIG_H
7#define INCLUDED_OPENEXR_CONFIG_H 1
8
9#pragma once
10
11//
12// Options / configuration based on O.S. / compiler
13/////////////////////
14
15//
16// Define and set to 1 if the target system has support for large
17// stack sizes.
18//
19/* #undef OPENEXR_HAVE_LARGE_STACK */
20
21//////////////////////
22//
23// C++ namespace configuration / options
24
25//
26// Current internal library namepace name
27//
28#define OPENEXR_IMF_INTERNAL_NAMESPACE_CUSTOM 0
29#define OPENEXR_IMF_INTERNAL_NAMESPACE Imf_3_1
30
31//
32// Current public user namepace name
33//
34
35#define OPENEXR_IMF_NAMESPACE_CUSTOM 0
36#define OPENEXR_IMF_NAMESPACE Imf
37
38//
39// Version string for runtime access
40//
41
42#define OPENEXR_VERSION_STRING "3.1.5"
43#define OPENEXR_PACKAGE_STRING "OpenEXR 3.1.5"
44
45#define OPENEXR_VERSION_MAJOR 3
46#define OPENEXR_VERSION_MINOR 1
47#define OPENEXR_VERSION_PATCH 5
48#define OPENEXR_VERSION_RELEASE_TYPE ""
49// Deprecated, for back compatibility:
50#define OPENEXR_VERSION_EXTRA ""
51
52#define OPENEXR_LIB_VERSION_STRING "30.5.1"
53
54// Version as a single hex number, e.g. 0x01000300 == 1.0.3
55#define OPENEXR_VERSION_HEX ((uint32_t(OPENEXR_VERSION_MAJOR) << 24) | \
56 (uint32_t(OPENEXR_VERSION_MINOR) << 16) | \
57 (uint32_t(OPENEXR_VERSION_PATCH) << 8))
58
59
60// On modern versions of gcc & clang, __has_attribute can test support for
61// __attribute__((attr)). Make sure it's safe for other compilers.
62#ifndef __has_attribute
63# define __has_attribute(x) 0
64#endif
65
66
67// Whether the user configured the library to have symbol visibility
68// tagged
69#define OPENEXR_ENABLE_API_VISIBILITY
70
71/// \defgroup ExportMacros Macros to manage symbol visibility
72///
73/// See docs/SymbolVisibility.md for more discussion about the
74/// motivation for these macros
75///
76/// If we are compiling a DLL for Windows, there needs to be custom
77/// rules for each library such that the macro swaps between doing a
78/// dllexport and a dllimport, so the defines here are less
79/// useful. Further, MSVC does not have this concept at all currently,
80/// so is elided.
81///
82/// The top level macros which start with OPENEXR can act as simple
83/// ways to combine the logic however for non-DLL or non-windows
84/// platforms, but until the current patterns change, one should check
85/// the specific library export.h (i.e. @sa IexExport.h,
86/// @sa IlmThreadExport.h, @sa ImfExport.h, @sa ImfUtilExport.h )
87///
88/// These per-library exports define a subset which are used by that
89/// library.
90///
91/// Iex is simple and does not need to do more than expose class types
92/// and functions, and does not have any private members to hide, so
93/// only provides a couple of the possible macros.
94///
95/// Similarly, IlmThread is also reasonably simple.
96///
97/// OpenEXR and OpenEXRUtil have much more logic and have to deal with
98/// templates and template instantiation, and so define more of the
99/// macros.
100///
101/// @{
102
103#if defined(OPENEXR_ENABLE_API_VISIBILITY) && ! ( defined(OPENEXR_DLL) || defined(_MSC_VER) )
104# define OPENEXR_PUBLIC_SYMBOL_ATTRIBUTE __attribute__ ((__visibility__ ("default")))
105# define OPENEXR_PRIVATE_SYMBOL_ATTRIBUTE __attribute__ ((__visibility__ ("hidden")))
106 // clang differs from gcc and has type visibility which is needed
107 // for enums and templates, and isn't well documented, but causes
108 // the vtable and typeinfo to be made visible, but not necessarily
109 // all the members
110# if __has_attribute(__type_visibility__)
111# define OPENEXR_PUBLIC_TYPE_VISIBILITY_ATTRIBUTE __attribute__ ((__type_visibility__ ("default")))
112# endif
113
114 // these are always the same, at least in current compilers
115# define OPENEXR_EXPORT OPENEXR_PUBLIC_SYMBOL_ATTRIBUTE
116# define OPENEXR_HIDDEN OPENEXR_PRIVATE_SYMBOL_ATTRIBUTE
117 // currently define this as the same between compilers to export
118 // things like default copy ctors etc, and do not use the type
119 // visibility which only exports the typeinfo / vtable
120# define OPENEXR_EXPORT_TYPE OPENEXR_EXPORT
121# define OPENEXR_EXPORT_EXTERN_TEMPLATE OPENEXR_EXPORT
122
123# ifdef OPENEXR_PUBLIC_TYPE_VISIBILITY_ATTRIBUTE
124# define OPENEXR_EXPORT_ENUM OPENEXR_PUBLIC_TYPE_VISIBILITY_ATTRIBUTE
125# define OPENEXR_EXPORT_TEMPLATE_TYPE OPENEXR_PUBLIC_TYPE_VISIBILITY_ATTRIBUTE
126 // clang (well, type_visibility) seems empirically need the
127 // default/public symbol tag when specifying explicit template
128 // instantiations, where gcc (no type_visibility) complains if
129 // you set that
130# define OPENEXR_EXPORT_TEMPLATE_INSTANCE OPENEXR_EXPORT
131# else
132# define OPENEXR_EXPORT_ENUM
133# define OPENEXR_EXPORT_TEMPLATE_TYPE OPENEXR_EXPORT
134# define OPENEXR_EXPORT_TEMPLATE_INSTANCE
135# endif
136
137#else // msvc or api visibility disabled, just clear all this out (DLLs will define a set anyway)
138
139# define OPENEXR_EXPORT
140# define OPENEXR_HIDDEN
141# define OPENEXR_EXPORT_TYPE
142# define OPENEXR_EXPORT_EXTERN_TEMPLATE
143# define OPENEXR_EXPORT_ENUM
144# define OPENEXR_EXPORT_TEMPLATE_TYPE
145# define OPENEXR_EXPORT_TYPE
146# define OPENEXR_EXPORT_TEMPLATE_INSTANCE
147
148#endif
149
150#if defined(__cplusplus) && (__cplusplus >= 201402L)
151# define OPENEXR_DEPRECATED(msg) [[deprecated(msg)]]
152#endif
153
154#ifndef OPENEXR_DEPRECATED
155# ifdef _MSC_VER
156# define OPENEXR_DEPRECATED(msg) __declspec(deprecated(msg))
157# else
158# define OPENEXR_DEPRECATED(msg) __attribute__((deprecated(msg)))
159# endif
160#endif
161
162#endif // INCLUDED_OPENEXR_CONFIG_H
163

source code of include/OpenEXR/OpenEXRConfig.h