Rocco Rutte:
[apps/madmutt.git] / lib / debug.h
1 /*
2  * written for mutt-ng by:
3  * Rocco Rutte <pdmef@cs.tu-berlin.de>
4  *
5  * This file is part of mutt-ng, see http://www.muttng.org/.
6  * It's licensed under the GNU General Public License,
7  * please see the file GPL in the top level source directory.
8  */
9
10 /* generic interface for debug messages */
11
12 #ifndef _LIB_DEBUG_H
13 #define _LIB_DEBUG_H
14
15 #include <stdio.h>
16
17 #ifdef DEBUG
18
19 extern short DebugLevel;
20 extern FILE* DebugFile;
21
22 void debug_setlevel (short);
23 void debug_start (const char*);
24
25 void _debug_print_intro (const char*, int, const char*, int);
26 void _debug_print_msg (const char*, ...);
27
28 /*
29  * the debug_print() macro will (in the end) print debug messages of the
30  * following format:
31  *
32  *      (file:line:function:level): message
33  *
34  * for GCC and:
35  *
36  *      (file:line:level): message
37  *
38  * otherwise
39  */
40 #ifdef __GNUC__
41 #define debug_print(level,msg) do { \
42   if (DebugLevel >= level) { \
43     _debug_print_intro (__FILE__,__LINE__,__FUNCTION__,level); \
44     _debug_print_msg msg; \
45   } \
46 } while(0)
47 #else /* __GNUC__ */
48 #define debug_print(level,msg) do { \
49   if (DebugLevel >= level) { \
50     _debug_print_intro (__FILE__,__LINE__,NULL,level); \
51     _debug_print_msg msg; \
52   } \
53 } while(0)
54 #endif /* !__GNUC__ */
55
56 #else /* DEBUG */
57
58 /*
59  * without debug support, we don't need these
60  * (this also kills the dozens of #ifdef for debug...
61  */
62 #define debug_start(basedir)
63 #define debug_setlevel(level)
64 #define debug_print(level,msg)
65
66 #endif /* !DEBUG */
67
68 #endif /* !_LIB_DEBUG_H */