remove $Id$, it doesn't work with git anyway
[libfirm] / include / libfirm / begin.h
1 /*
2  * Copyright (C) 1995-2008 University of Karlsruhe.  All right reserved.
3  *
4  * This file is part of libFirm.
5  *
6  * This file may be distributed and/or modified under the terms of the
7  * GNU General Public License version 2 as published by the Free Software
8  * Foundation and appearing in the file LICENSE.GPL included in the
9  * packaging of this file.
10  *
11  * Licensees holding valid libFirm Professional Edition licenses may use
12  * this file in accordance with the libFirm Commercial License.
13  * Agreement provided with the Software.
14  *
15  * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
16  * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17  * PURPOSE.
18  */
19
20 /**
21  * @file
22  * @brief       Should be included in all public firm headers at the beginning
23  * @author      Matthias Braun
24  */
25 #ifndef FIRM_BEGIN_H
26 #define FIRM_BEGIN_H
27
28 /**
29  * @def FIRM_API
30  * Declaration specifier which marks a function/variable as being publicly
31  * visible outside the firm library/dll
32  */
33 #ifdef FIRM_DLL
34         #ifdef FIRM_BUILD
35                 #ifdef _WIN32
36                         #define FIRM_API extern __declspec(dllexport)
37                 #else
38                         #define FIRM_API extern __attribute__((visibility("default")))
39                 #endif
40         #else
41                 #ifdef _WIN32
42                         #define FIRM_API extern __declspec(dllimport)
43                 #else
44                         #define FIRM_API extern
45                 #endif
46         #endif
47 #else
48         #define  FIRM_API extern
49 #endif
50
51 #ifdef __cplusplus
52 # define FIRM_NOTHROW throw ()
53 #else
54 # define FIRM_NOTHROW
55 #endif
56
57 /**
58  * @def FIRM_PRINTF
59  * Attribute with marks a function to have a printf style format
60  * string and variadic argument.
61  */
62 #if defined(__GNUC__)
63 # define FIRM_PRINTF(a,b) __attribute__((__format__(__printf__, a, b)))
64 #else
65 # define FIRM_PRINTF(a,b)
66 #endif
67
68 #endif
69
70 /* mark declarations as C function (note that we always need this,
71  * so don't put it in the include guard) */
72 #ifdef __cplusplus
73 extern "C" {
74 #endif