xref: /aosp_15_r20/external/flac/include/FLAC++/export.h (revision 600f14f40d737144c998e2ec7a483122d3776fbc)
1 /* libFLAC++ - Free Lossless Audio Codec library
2  * Copyright (C) 2002-2009  Josh Coalson
3  * Copyright (C) 2011-2023  Xiph.Org Foundation
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  * - Redistributions of source code must retain the above copyright
10  * notice, this list of conditions and the following disclaimer.
11  *
12  * - Redistributions in binary form must reproduce the above copyright
13  * notice, this list of conditions and the following disclaimer in the
14  * documentation and/or other materials provided with the distribution.
15  *
16  * - Neither the name of the Xiph.org Foundation nor the names of its
17  * contributors may be used to endorse or promote products derived from
18  * this software without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23  * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
24  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
27  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
28  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
29  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
30  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
32 
33 #ifndef FLACPP__EXPORT_H
34 #define FLACPP__EXPORT_H
35 
36 /** \file include/FLAC++/export.h
37  *
38  *  \brief
39  *  This module contains \#defines and symbols for exporting function
40  *  calls, and providing version information and compiled-in features.
41  *
42  *  See the \link flacpp_export export \endlink module.
43  */
44 
45 /** \defgroup flacpp_export FLAC++/export.h: export symbols
46  *  \ingroup flacpp
47  *
48  *  \brief
49  *  This module contains \#defines and symbols for exporting function
50  *  calls, and providing version information and compiled-in features.
51  *
52  *  If you are compiling for Windows (with Visual Studio or MinGW for
53  *  example) and will link to the static library (libFLAC++.lib) you
54  *  should define FLAC__NO_DLL in your project to make sure the symbols
55  *  are exported properly.
56  *
57  * \{
58  */
59 
60 /** This \#define is used internally in libFLAC and its headers to make
61  * sure the correct symbols are exported when working with shared
62  * libraries. On Windows, this \#define is set to __declspec(dllexport)
63  * when compiling libFLAC into a library and to __declspec(dllimport)
64  * when the headers are used to link to that DLL. On non-Windows systems
65  * it is used to set symbol visibility.
66  *
67  * Because of this, the define FLAC__NO_DLL must be defined when linking
68  * to libFLAC statically or linking will fail.
69  */
70 /* This has grown quite complicated. FLAC__NO_DLL is used by MSVC sln
71  * files and CMake, which build either static or shared. autotools can
72  * build static, shared or **both**. Therefore, DLL_EXPORT, which is set
73  * by libtool, must override FLAC__NO_DLL on building shared components
74  */
75 #if defined(_WIN32)
76 #if defined(FLAC__NO_DLL) && !(defined(DLL_EXPORT))
77 #define FLACPP_API
78 #else
79 #ifdef FLACPP_API_EXPORTS
80 #define	FLACPP_API __declspec(dllexport)
81 #else
82 #define FLACPP_API __declspec(dllimport)
83 #endif
84 #endif
85 #elif defined(FLAC__USE_VISIBILITY_ATTR)
86 #define FLACPP_API __attribute__ ((visibility ("default")))
87 #else
88 #define FLACPP_API
89 #endif
90 
91 /** These \#defines will mirror the libtool-based library version number, see
92  * http://www.gnu.org/software/libtool/manual/libtool.html#Libtool-versioning
93  */
94 #define FLACPP_API_VERSION_CURRENT 10
95 #define FLACPP_API_VERSION_REVISION 1 /**< see above */
96 #define FLACPP_API_VERSION_AGE 0 /**< see above */
97 
98 /* \} */
99 
100 #endif
101