00001 /*
00002 * This handles GCC attributes
00003 *
00004 * MUSCLE SmartCard Development ( http://www.linuxnet.com )
00005 *
00006 * Copyright (C) 2005
00007 * Ludovic Rousseau <ludovic.rousseau@free.fr>
00008 *
00009 * $Id: misc.h 2188 2006-10-19 11:29:29Z rousseau $
00010 */
00011
00012 #ifndef __misc_h__
00013 #define __misc_h__
00014
00015 #ifdef __cplusplus
00016 extern "C"
00017 {
00018 #endif
00019
00020 /*
00021 * Declare the function as internal to the library: the function name is
00022 * not exported and can't be used by a program linked to the library
00023 *
00024 * see http://gcc.gnu.org/onlinedocs/gcc-3.3.5/gcc/Function-Attributes.html#Function-Attributes
00025 * see http://www.nedprod.com/programs/gccvisibility.html
00026 */
00027 #if defined __GNUC__ && (__GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3))
00028 #define INTERNAL __attribute__ ((visibility("hidden")))
00029 #define PCSC_API __attribute__ ((visibility("default")))
00030 #else
00031 #define INTERNAL
00032 #define PCSC_API
00033 #endif
00034 #define EXTERNAL PCSC_API
00035
00036 #if defined __GNUC__
00037
00038 /* GNU Compiler Collection (GCC) */
00039 #define CONSTRUCTOR __attribute__ ((constructor))
00040 #define DESTRUCTOR __attribute__ ((destructor))
00041
00042 #else
00043
00044 /* SUN C compiler does not use __attribute__ but #pragma init (function)
00045 * We can't use a # inside a #define so it is not possible to use
00046 * #define CONSTRUCTOR_DECLARATION(x) #pragma init (x)
00047 * The #pragma is used directly where needed */
00048
00049 /* any other */
00050 #define CONSTRUCTOR
00051 #define DESTRUCTOR
00052
00053 #endif
00054
00055 #ifdef __cplusplus
00056 }
00057 #endif
00058
00059 #endif /* __misc_h__ */
1.2.14 written by Dimitri van Heesch,
© 1997-2002