1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
|
/* namespace.h: an attempt at rationalizing shared objects
namespace use.
Copyright (C) 2006 Vincent Fourmond
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Library Public License as published
by the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Library General Public License for more details.
You should have received a copy of the GNU Library General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef _NAMESPACE_H
#define _NAMESPACE_H
/* This header file provides three OS-specific macros for the definition of
extern (or NOT extern) symbols:
* PUBLIC, which has to be used to mark objects that will be used
outside the module
* INTERN, for symbols which are shared among compilation units within a
module, but are NOT exported to other modules.
* PRIVATE, for symbols which are visible only within the containing
compilation unit (i.e. C source file) and, of course, are not exported to
other modules.
Please don't add "extern" after the PRIVATE or PUBLIC declaration
as this would break compilation on Darwin.
*/
#if __GNUC__ >= 4 /* we have the visibility attribute */
# define INTERN __attribute__ ((visibility ("hidden")))
# define PUBLIC __attribute__ ((visibility ("default")))
# define INTERN_EXTERN extern
#elif defined __APPLE__
# define INTERN __private_extern__
# define PUBLIC
# define INTERN_EXTERN
#else /* not really good */
# define INTERN
# define PUBLIC
# define INTERN_EXTERN
#endif /* __APPLE__ and __GNU_C_ >= 4*/
/* In any case, PRIVATE is static */
#define PRIVATE static
#endif
|