00001 #ifndef _RPMUTIL_H
00002 #define _RPMUTIL_H
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 8)
00018 # define RPM_GNUC_EXTENSION __extension__
00019 #else
00020 # define RPM_GNUC_EXTENSION
00021 #endif
00022
00023
00024
00025 #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
00026 #define RPM_GNUC_PURE \
00027 __attribute__((__pure__))
00028 #define RPM_GNUC_MALLOC \
00029 __attribute__((__malloc__))
00030 #else
00031 #define RPM_GNUC_PURE
00032 #define RPM_GNUC_MALLOC
00033 #endif
00034
00035 #if __GNUC__ >= 4
00036 #define RPM_GNUC_NULL_TERMINATED __attribute__((__sentinel__))
00037 #else
00038 #define RPM_GNUC_NULL_TERMINATED
00039 #endif
00040
00041 #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4)
00042 #define RPM_GNUC_PRINTF( format_idx, arg_idx ) \
00043 __attribute__((__format__ (__printf__, format_idx, arg_idx)))
00044 #define RPM_GNUC_SCANF( format_idx, arg_idx ) \
00045 __attribute__((__format__ (__scanf__, format_idx, arg_idx)))
00046 #define RPM_GNUC_FORMAT( arg_idx ) \
00047 __attribute__((__format_arg__ (arg_idx)))
00048 #define RPM_GNUC_NORETURN \
00049 __attribute__((__noreturn__))
00050 #define RPM_GNUC_CONST \
00051 __attribute__((__const__))
00052 #define RPM_GNUC_UNUSED \
00053 __attribute__((__unused__))
00054 #define RPM_GNUC_NO_INSTRUMENT \
00055 __attribute__((__no_instrument_function__))
00056 #else
00057 #define RPM_GNUC_PRINTF( format_idx, arg_idx )
00058 #define RPM_GNUC_SCANF( format_idx, arg_idx )
00059 #define RPM_GNUC_FORMAT( arg_idx )
00060 #define RPM_GNUC_NORETURN
00061 #define RPM_GNUC_CONST
00062 #define RPM_GNUC_UNUSED
00063 #define RPM_GNUC_NO_INSTRUMENT
00064 #endif
00065
00066 #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)
00067 #define RPM_GNUC_DEPRECATED \
00068 __attribute__((__deprecated__))
00069 #else
00070 #define RPM_GNUC_DEPRECATED
00071 #endif
00072
00073 #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)
00074 # define RPM_GNUC_MAY_ALIAS __attribute__((may_alias))
00075 #else
00076 # define RPM_GNUC_MAY_ALIAS
00077 #endif
00078
00079 #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
00080 #define RPM_GNUC_WARN_UNUSED_RESULT \
00081 __attribute__((warn_unused_result))
00082 #else
00083 #define RPM_GNUC_WARN_UNUSED_RESULT
00084 #endif
00085
00086 #if __GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)
00087 # define RPM_GNUC_INTERNAL __attribute__((visibility("hidden")))
00088 #else
00089 # define RPM_GNUC_INTERNAL
00090 #endif
00091
00092
00093
00094 #ifdef __cplusplus
00095 # define RPM_BEGIN_DECLS extern "C" {
00096 # define RPM_END_DECLS }
00097 #else
00098 # define RPM_BEGIN_DECLS
00099 # define RPM_END_DECLS
00100 #endif
00101
00102 #endif