@ -31,9 +31,21 @@
# include "compiler-macros.h"
# ifdef FT_LOGGING
# include <../src/dlg/dlg/dlg.h>
# include <../src/dlg/dlg/output.h>
# endif
FT_BEGIN_HEADER
/* force the definition of FT_DEBUG_LEVEL_TRACE if FT_LOGGING is */
/* already defined. */
/* */
# ifdef FT_LOGGING
# undef FT_DEBUG_LEVEL_TRACE
# define FT_DEBUG_LEVEL_TRACE
# endif
/* force the definition of FT_DEBUG_LEVEL_ERROR if FT_DEBUG_LEVEL_TRACE */
/* is already defined; this simplifies the following #ifdefs */
@ -84,19 +96,43 @@ FT_BEGIN_HEADER
*
*/
# ifdef FT_DEBUG_LEVEL_TRACE
/* we need two macros here to make cpp expand `FT_COMPONENT' */
# define FT_TRACE_COMP( x ) FT_TRACE_COMP_( x )
# define FT_TRACE_COMP_( x ) trace_ ## x
/*************************************************************************
*
* If FT_LOGGING is enabled , tracing messages are sent to dlg ' s API .
* If FT_LOGGING is disabled , tracing messages are sent to ` FT_Message `
* ( defined in ftdebug . c ) .
*
*/
# ifdef FT_LOGGING
# define FT_LOG( level, varformat ) \
do \
{ \
if ( ft_trace_levels [ FT_TRACE_COMP ( FT_COMPONENT ) ] > = level ) \
dlg_trace varformat ; \
} while ( 0 )
# else /* !FT_LOGGING */
# define FT_TRACE( level, varformat ) \
# define FT_LOG( level, varformat ) \
do \
{ \
if ( ft_trace_levels [ FT_TRACE_COMP ( FT_COMPONENT ) ] > = level ) \
FT_Message varformat ; \
} while ( 0 )
# endif /* !FT_LOGGING */
# ifdef FT_DEBUG_LEVEL_TRACE
/* we need two macros here to make cpp expand `FT_COMPONENT' */
# define FT_TRACE_COMP( x ) FT_TRACE_COMP_( x )
# define FT_TRACE_COMP_( x ) trace_ ## x
# define FT_TRACE( level, varformat ) FT_LOG( level, varformat )
# else /* !FT_DEBUG_LEVEL_TRACE */
# define FT_TRACE( level, varformat ) do { } while ( 0 ) /* nothing */
@ -204,7 +240,27 @@ FT_BEGIN_HEADER
# ifdef FT_DEBUG_LEVEL_ERROR
# define FT_ERROR( varformat ) FT_Message varformat
/*************************************************************************
*
* If FT_LOGGING is enabled , error messages are sent to dlg ' s API .
* If FT_LOGGING is disabled , error messages are sent to ` FT_Message `
* ( defined in ftdebug . c ) .
*
*/
# ifdef FT_LOGGING
# define FT_ERROR( varformat ) \
do \
{ \
dlg_trace varformat ; \
} while ( 0 )
# else /* !FT_LOGGING */
# define FT_ERROR( varformat ) FT_Message varformat
# endif /* !FT_LOGGING */
# else /* !FT_DEBUG_LEVEL_ERROR */
@ -277,6 +333,48 @@ FT_BEGIN_HEADER
FT_BASE ( void )
ft_debug_init ( void ) ;
# ifdef FT_LOGGING
/**************************************************************************
*
* ' dlg ' uses output handlers to control how and where log messages are
* printed . Therefore we need to define a default output handler for
* FreeType .
*/
FT_BASE ( void )
ft_log_handler ( const struct dlg_origin * origin ,
const char * string ,
void * data ) ;
/**************************************************************************
*
* ` ft_default_log_handler ` stores the function pointer that is used
* internally by FreeType to print logs to a file .
*
* It is defined in ` ftdebug . c ` .
*/
extern dlg_handler ft_default_log_handler ;
/**************************************************************************
*
* If FT_LOGGING macro is enabled , FreeType needs to initialize and
* un - initialize ` FILE * ` .
*
* These functions are defined in ` ftdebug . c ` .
*
*/
FT_BASE ( void )
ft_logging_init ( void ) ;
FT_BASE ( void )
ft_logging_deinit ( void ) ;
# endif /* FT_LOGGING */
FT_END_HEADER
# endif /* FTDEBUG_H_ */