u_debug.h revision a31d289de6091987e6b9da6af1b2e56eb79a96fb
1a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca/**************************************************************************
2a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca *
3a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
4a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * All Rights Reserved.
5a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca *
6a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * Permission is hereby granted, free of charge, to any person obtaining a
7a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * copy of this software and associated documentation files (the
8a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * "Software"), to deal in the Software without restriction, including
9a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * without limitation the rights to use, copy, modify, merge, publish,
10a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * distribute, sub license, and/or sell copies of the Software, and to
11a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * permit persons to whom the Software is furnished to do so, subject to
12a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * the following conditions:
13a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca *
14a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * The above copyright notice and this permission notice (including the
15a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * next paragraph) shall be included in all copies or substantial portions
16a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * of the Software.
17a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca *
18a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
21a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
22a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
23a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
24a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca *
26a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca **************************************************************************/
27a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca
28a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca/**
29a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * @file
30a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * Cross-platform debugging helpers.
31a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca *
32a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * For now it just has assert and printf replacements, but it might be extended
33a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * with stack trace reports and more advanced logging in the near future.
34a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca *
35a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * @author Jose Fonseca <jrfonseca@tungstengraphics.com>
36a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca */
37a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca
38a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#ifndef P_DEBUG_H_
39a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#define P_DEBUG_H_
40a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca
41a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#ifdef	__cplusplus
42a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonsecaextern "C" {
43a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#endif
44a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca
45a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca
46a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#ifdef DBG
47a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#ifndef DEBUG
48a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#define DEBUG 1
49a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#endif
50a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#else
51a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#ifndef NDEBUG
52a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#define NDEBUG 1
53a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#endif
54a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#endif
55a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca
56a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca
57a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonsecavoid debug_printf(const char *format, ...);
58a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonsecavoid debug_assert_fail(const char *expr, const char *file, unsigned line);
59a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca
60a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca/** Assert macro */
61a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#ifdef DEBUG
62a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#define debug_assert(expr) ((expr) ? (void)0 : debug_assert_fail(#expr, __FILE__, __LINE__))
63a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#else
64a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#define debug_assert(expr) ((void)0)
65a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#endif
66a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca
67a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca
68a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#ifdef assert
69a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#warning Standard C Library assert macro usage detected.
70a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#undef assert
71a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#endif
72a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#define assert(expr) debug_assert(expr)
73a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca
74a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca
75a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#ifdef	__cplusplus
76a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca}
77a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#endif
78a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca
79a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#endif /* P_DEBUG_H_ */
80