]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - contrib/subversion/subversion/include/private/svn_debug.h
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / contrib / subversion / subversion / include / private / svn_debug.h
1 /* svn_debug.h : handy little debug tools for the SVN developers
2  *
3  * ====================================================================
4  *    Licensed to the Apache Software Foundation (ASF) under one
5  *    or more contributor license agreements.  See the NOTICE file
6  *    distributed with this work for additional information
7  *    regarding copyright ownership.  The ASF licenses this file
8  *    to you under the Apache License, Version 2.0 (the
9  *    "License"); you may not use this file except in compliance
10  *    with the License.  You may obtain a copy of the License at
11  *
12  *      http://www.apache.org/licenses/LICENSE-2.0
13  *
14  *    Unless required by applicable law or agreed to in writing,
15  *    software distributed under the License is distributed on an
16  *    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17  *    KIND, either express or implied.  See the License for the
18  *    specific language governing permissions and limitations
19  *    under the License.
20  * ====================================================================
21  */
22
23 #ifndef SVN_DEBUG_H
24 #define SVN_DEBUG_H
25
26 #ifdef SVN_DEBUG
27 #define SVN_DBG__PROTOTYPES
28 #endif
29
30 #ifdef SVN_DBG__PROTOTYPES
31 #define APR_WANT_STDIO
32 #include <apr_want.h>
33 #include <apr_hash.h>
34 #endif
35
36 #ifdef __cplusplus
37 extern "C" {
38 #endif /* __cplusplus */
39
40 #ifdef SVN_DBG__PROTOTYPES
41 /* A few helper functions for the macros below.  */
42 void
43 svn_dbg__preamble(const char *file, long line, FILE *output);
44 void
45 svn_dbg__printf(const char *fmt, ...)
46   __attribute__((format(printf, 1, 2)));
47 void
48 svn_dbg__print_props(apr_hash_t *props,
49                      const char *header_fmt,
50                      ...)
51   __attribute__((format(printf, 2, 3)));
52 #endif
53
54 /* Only available when SVN_DEBUG is defined (ie. svn developers). Note that
55    we do *not* provide replacement macros/functions for proper releases.
56    The debug stuff should be removed before a commit.
57
58    ### maybe we will eventually decide to allow certain debug stuff to
59    ### remain in the code. at that point, we can rejigger this header.  */
60 #ifdef SVN_DEBUG
61
62 /* Print to stdout. Edit this line if you need stderr.  */
63 #define SVN_DBG_OUTPUT stdout
64
65
66 /* Defining this symbol in the source file, BEFORE INCLUDING THIS HEADER,
67    will switch off the output. Calls will still be made to svn_dbg__preamble()
68    for breakpoints.  */
69 #ifdef SVN_DBG_QUIET
70
71 #define SVN_DBG(ARGS) svn_dbg__preamble(__FILE__, __LINE__, NULL)
72 #define SVN_DBG_PROPS(ARGS) svn_dbg__preamble(__FILE__, __LINE__, NULL)
73
74 #else
75
76 /** Debug aid macro that prints the file:line of the call and printf-like
77  * arguments to the #SVN_DBG_OUTPUT stdio stream (#stdout by default).  Typical
78  * usage:
79  *
80  * <pre>
81  *   SVN_DBG(("rev=%ld kind=%s\n", revnum, svn_node_kind_to_word(kind)));
82  * </pre>
83  *
84  * outputs:
85  *
86  * <pre>
87  *   DBG: kitchensink.c: 42: rev=3141592 kind=file
88  * </pre>
89  *
90  * Note that these output lines are filtered by our test suite automatically,
91  * so you don't have to worry about throwing off expected output.
92  */
93 #define SVN_DBG(ARGS) (svn_dbg__preamble(__FILE__, __LINE__, SVN_DBG_OUTPUT), \
94                        svn_dbg__printf ARGS)
95 #define SVN_DBG_PROPS(ARGS) (svn_dbg__preamble(__FILE__, __LINE__, \
96                                                SVN_DBG_OUTPUT), \
97                              svn_dbg__print_props ARGS)
98
99 #endif
100
101 #endif /* SVN_DEBUG */
102
103 #ifdef __cplusplus
104 }
105 #endif /* __cplusplus */
106
107 #endif /* SVN_DEBUG_H */