misc/libfreetype/include/freetype/internal/ftdebug.h
branchwebgl
changeset 9521 8054d9d775fd
parent 9282 92af50454cf2
parent 9519 b8b5c82eb61b
child 9950 2759212a27de
equal deleted inserted replaced
9282:92af50454cf2 9521:8054d9d775fd
     1 /***************************************************************************/
       
     2 /*                                                                         */
       
     3 /*  ftdebug.h                                                              */
       
     4 /*                                                                         */
       
     5 /*    Debugging and logging component (specification).                     */
       
     6 /*                                                                         */
       
     7 /*  Copyright 1996-2001, 2002, 2004, 2006, 2007, 2008, 2009 by             */
       
     8 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
       
     9 /*                                                                         */
       
    10 /*  This file is part of the FreeType project, and may only be used,       */
       
    11 /*  modified, and distributed under the terms of the FreeType project      */
       
    12 /*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
       
    13 /*  this file you indicate that you have read the license and              */
       
    14 /*  understand and accept it fully.                                        */
       
    15 /*                                                                         */
       
    16 /*                                                                         */
       
    17 /*  IMPORTANT: A description of FreeType's debugging support can be        */
       
    18 /*             found in `docs/DEBUG.TXT'.  Read it if you need to use or   */
       
    19 /*             understand this code.                                       */
       
    20 /*                                                                         */
       
    21 /***************************************************************************/
       
    22 
       
    23 
       
    24 #ifndef __FTDEBUG_H__
       
    25 #define __FTDEBUG_H__
       
    26 
       
    27 
       
    28 #include <ft2build.h>
       
    29 #include FT_CONFIG_CONFIG_H
       
    30 #include FT_FREETYPE_H
       
    31 
       
    32 
       
    33 FT_BEGIN_HEADER
       
    34 
       
    35 
       
    36   /* force the definition of FT_DEBUG_LEVEL_ERROR if FT_DEBUG_LEVEL_TRACE */
       
    37   /* is already defined; this simplifies the following #ifdefs            */
       
    38   /*                                                                      */
       
    39 #ifdef FT_DEBUG_LEVEL_TRACE
       
    40 #undef  FT_DEBUG_LEVEL_ERROR
       
    41 #define FT_DEBUG_LEVEL_ERROR
       
    42 #endif
       
    43 
       
    44 
       
    45   /*************************************************************************/
       
    46   /*                                                                       */
       
    47   /* Define the trace enums as well as the trace levels array when they    */
       
    48   /* are needed.                                                           */
       
    49   /*                                                                       */
       
    50   /*************************************************************************/
       
    51 
       
    52 #ifdef FT_DEBUG_LEVEL_TRACE
       
    53 
       
    54 #define FT_TRACE_DEF( x )  trace_ ## x ,
       
    55 
       
    56   /* defining the enumeration */
       
    57   typedef enum  FT_Trace_
       
    58   {
       
    59 #include FT_INTERNAL_TRACE_H
       
    60     trace_count
       
    61 
       
    62   } FT_Trace;
       
    63 
       
    64 
       
    65   /* defining the array of trace levels, provided by `src/base/ftdebug.c' */
       
    66   extern int  ft_trace_levels[trace_count];
       
    67 
       
    68 #undef FT_TRACE_DEF
       
    69 
       
    70 #endif /* FT_DEBUG_LEVEL_TRACE */
       
    71 
       
    72 
       
    73   /*************************************************************************/
       
    74   /*                                                                       */
       
    75   /* Define the FT_TRACE macro                                             */
       
    76   /*                                                                       */
       
    77   /* IMPORTANT!                                                            */
       
    78   /*                                                                       */
       
    79   /* Each component must define the macro FT_COMPONENT to a valid FT_Trace */
       
    80   /* value before using any TRACE macro.                                   */
       
    81   /*                                                                       */
       
    82   /*************************************************************************/
       
    83 
       
    84 #ifdef FT_DEBUG_LEVEL_TRACE
       
    85 
       
    86 #define FT_TRACE( level, varformat )                      \
       
    87           do                                              \
       
    88           {                                               \
       
    89             if ( ft_trace_levels[FT_COMPONENT] >= level ) \
       
    90               FT_Message varformat;                       \
       
    91           } while ( 0 )
       
    92 
       
    93 #else /* !FT_DEBUG_LEVEL_TRACE */
       
    94 
       
    95 #define FT_TRACE( level, varformat )  do { } while ( 0 )      /* nothing */
       
    96 
       
    97 #endif /* !FT_DEBUG_LEVEL_TRACE */
       
    98 
       
    99 
       
   100   /*************************************************************************/
       
   101   /*                                                                       */
       
   102   /* <Function>                                                            */
       
   103   /*    FT_Trace_Get_Count                                                 */
       
   104   /*                                                                       */
       
   105   /* <Description>                                                         */
       
   106   /*    Return the number of available trace components.                   */
       
   107   /*                                                                       */
       
   108   /* <Return>                                                              */
       
   109   /*    The number of trace components.  0 if FreeType 2 is not built with */
       
   110   /*    FT_DEBUG_LEVEL_TRACE definition.                                   */
       
   111   /*                                                                       */
       
   112   /* <Note>                                                                */
       
   113   /*    This function may be useful if you want to access elements of      */
       
   114   /*    the internal `ft_trace_levels' array by an index.                  */
       
   115   /*                                                                       */
       
   116   FT_BASE( FT_Int )
       
   117   FT_Trace_Get_Count( void );
       
   118 
       
   119 
       
   120   /*************************************************************************/
       
   121   /*                                                                       */
       
   122   /* <Function>                                                            */
       
   123   /*    FT_Trace_Get_Name                                                  */
       
   124   /*                                                                       */
       
   125   /* <Description>                                                         */
       
   126   /*    Return the name of a trace component.                              */
       
   127   /*                                                                       */
       
   128   /* <Input>                                                               */
       
   129   /*    The index of the trace component.                                  */
       
   130   /*                                                                       */
       
   131   /* <Return>                                                              */
       
   132   /*    The name of the trace component.  This is a statically allocated   */
       
   133   /*    C string, so do not free it after use.  NULL if FreeType 2 is not  */
       
   134   /*    built with FT_DEBUG_LEVEL_TRACE definition.                        */
       
   135   /*                                                                       */
       
   136   /* <Note>                                                                */
       
   137   /*    Use @FT_Trace_Get_Count to get the number of available trace       */
       
   138   /*    components.                                                        */
       
   139   /*                                                                       */
       
   140   /*    This function may be useful if you want to control FreeType 2's    */
       
   141   /*    debug level in your application.                                   */
       
   142   /*                                                                       */
       
   143   FT_BASE( const char * )
       
   144   FT_Trace_Get_Name( FT_Int  idx );
       
   145 
       
   146 
       
   147   /*************************************************************************/
       
   148   /*                                                                       */
       
   149   /* You need two opening and closing parentheses!                         */
       
   150   /*                                                                       */
       
   151   /* Example: FT_TRACE0(( "Value is %i", foo ))                            */
       
   152   /*                                                                       */
       
   153   /* Output of the FT_TRACEX macros is sent to stderr.                     */
       
   154   /*                                                                       */
       
   155   /*************************************************************************/
       
   156 
       
   157 #define FT_TRACE0( varformat )  FT_TRACE( 0, varformat )
       
   158 #define FT_TRACE1( varformat )  FT_TRACE( 1, varformat )
       
   159 #define FT_TRACE2( varformat )  FT_TRACE( 2, varformat )
       
   160 #define FT_TRACE3( varformat )  FT_TRACE( 3, varformat )
       
   161 #define FT_TRACE4( varformat )  FT_TRACE( 4, varformat )
       
   162 #define FT_TRACE5( varformat )  FT_TRACE( 5, varformat )
       
   163 #define FT_TRACE6( varformat )  FT_TRACE( 6, varformat )
       
   164 #define FT_TRACE7( varformat )  FT_TRACE( 7, varformat )
       
   165 
       
   166 
       
   167   /*************************************************************************/
       
   168   /*                                                                       */
       
   169   /* Define the FT_ERROR macro.                                            */
       
   170   /*                                                                       */
       
   171   /* Output of this macro is sent to stderr.                               */
       
   172   /*                                                                       */
       
   173   /*************************************************************************/
       
   174 
       
   175 #ifdef FT_DEBUG_LEVEL_ERROR
       
   176 
       
   177 #define FT_ERROR( varformat )  FT_Message  varformat
       
   178 
       
   179 #else  /* !FT_DEBUG_LEVEL_ERROR */
       
   180 
       
   181 #define FT_ERROR( varformat )  do { } while ( 0 )      /* nothing */
       
   182 
       
   183 #endif /* !FT_DEBUG_LEVEL_ERROR */
       
   184 
       
   185 
       
   186   /*************************************************************************/
       
   187   /*                                                                       */
       
   188   /* Define the FT_ASSERT macro.                                           */
       
   189   /*                                                                       */
       
   190   /*************************************************************************/
       
   191 
       
   192 #ifdef FT_DEBUG_LEVEL_ERROR
       
   193 
       
   194 #define FT_ASSERT( condition )                                      \
       
   195           do                                                        \
       
   196           {                                                         \
       
   197             if ( !( condition ) )                                   \
       
   198               FT_Panic( "assertion failed on line %d of file %s\n", \
       
   199                         __LINE__, __FILE__ );                       \
       
   200           } while ( 0 )
       
   201 
       
   202 #else /* !FT_DEBUG_LEVEL_ERROR */
       
   203 
       
   204 #define FT_ASSERT( condition )  do { } while ( 0 )
       
   205 
       
   206 #endif /* !FT_DEBUG_LEVEL_ERROR */
       
   207 
       
   208 
       
   209   /*************************************************************************/
       
   210   /*                                                                       */
       
   211   /* Define `FT_Message' and `FT_Panic' when needed.                       */
       
   212   /*                                                                       */
       
   213   /*************************************************************************/
       
   214 
       
   215 #ifdef FT_DEBUG_LEVEL_ERROR
       
   216 
       
   217 #include "stdio.h"  /* for vfprintf() */
       
   218 
       
   219   /* print a message */
       
   220   FT_BASE( void )
       
   221   FT_Message( const char*  fmt,
       
   222               ... );
       
   223 
       
   224   /* print a message and exit */
       
   225   FT_BASE( void )
       
   226   FT_Panic( const char*  fmt,
       
   227             ... );
       
   228 
       
   229 #endif /* FT_DEBUG_LEVEL_ERROR */
       
   230 
       
   231 
       
   232   FT_BASE( void )
       
   233   ft_debug_init( void );
       
   234 
       
   235 
       
   236 #if defined( _MSC_VER )      /* Visual C++ (and Intel C++) */
       
   237 
       
   238   /* We disable the warning `conditional expression is constant' here */
       
   239   /* in order to compile cleanly with the maximum level of warnings.  */
       
   240 #pragma warning( disable : 4127 )
       
   241 
       
   242 #endif /* _MSC_VER */
       
   243 
       
   244 
       
   245 FT_END_HEADER
       
   246 
       
   247 #endif /* __FTDEBUG_H__ */
       
   248 
       
   249 
       
   250 /* END */