// If DEFINE_FUNC_ATTRIBUTES macro is not defined then all function attributes // are defined as empty values. // // If DO_NOT_DEFINE_EMPTY_ATTRIBUTES then empty macros are not defined. Thus // undefined DEFINE_FUNC_ATTRIBUTES and defined DO_NOT_DEFINE_EMPTY_ATTRIBUTES // leaves file with untouched FUNC_ATTR_* macros. This variant is used for // scripts/gendeclarations.lua. // // Empty macros are used for *.c files. (undefined DEFINE_FUNC_ATTRIBUTES and // undefined DO_NOT_DEFINE_EMPTY_ATTRIBUTES) // // Macros defined as __attribute__((*)) are used by generated header files. // (defined DEFINE_FUNC_ATTRIBUTES and undefined // DO_NOT_DEFINE_EMPTY_ATTRIBUTES) // // Defined DEFINE_FUNC_ATTRIBUTES and defined DO_NOT_DEFINE_EMPTY_ATTRIBUTES is // not used by anything. // FUNC_ATTR_* macros should be in *.c files for declarations generator. If you // define a function for which declaration is not generated by // gendeclarations.lua (e.g. template hash implementation) then you should use // REAL_FATTR_* macros. // gcc and clang expose their version as follows: // // gcc 4.7.2: // __GNUC__ = 4 // __GNUC_MINOR__ = 7 // __GNUC_PATCHLEVEL = 2 // // clang 3.4 (claims compat with gcc 4.2.1): // __GNUC__ = 4 // __GNUC_MINOR__ = 2 // __GNUC_PATCHLEVEL = 1 // __clang__ = 1 // __clang_major__ = 3 // __clang_minor__ = 4 // // To view the default defines of these compilers, you can perform: // // $ gcc -E -dM -