1
0
mirror of http://mpg123.de/trunk/.git synced 2025-07-31 13:24:22 +03:00

C99-style debuggin!

git-svn-id: svn://scm.orgis.org/mpg123/trunk@4422 35dc7657-300d-0410-a2e5-dc2837fedb53
This commit is contained in:
thor
2018-02-26 00:25:29 +00:00
parent 762e3ed9a8
commit bc5f1093f2
2 changed files with 12 additions and 85 deletions

View File

@ -1,85 +0,0 @@
#!/usr/bin/perl
# debugdef.pl: avoid variadic debugging macros through automatic definitions
# written by Thomas Orgis <thomas@orgis.org>, placed in the public domain
my $num = shift(@ARGV);
print <<EOT;
/*
debug.h:
if DEBUG defined: debugging macro fprintf wrappers
else: macros defined to do nothing
That saves typing #ifdef DEBUG all the time and still preserves
lean code without debugging.
public domain (or LGPL / GPL, if you like that more;-)
generated by debugdef.pl, what was
trivially written by Thomas Orgis <thomas\@orgis.org>
*/
#include "config.h"
/*
I could do that with variadic macros available:
#define sdebug(me, s) fprintf(stderr, "[location] " s "\\n")
#define debug(me, s, ...) fprintf(stderr, "[location] " s "\}n", __VA_ARGS__)
Variadic macros are a C99 feature...
Now just predefining stuff non-variadic for up to $num arguments.
It's cumbersome to have them all with different names, though...
*/
#ifdef ME
#define DBGPRFX ME": "
#else
#define DBGPRFX ""
#endif
#ifdef DEBUG
#include <stdio.h>
EOT
printdefs(1);
print "#else\n";
printdefs(0);
print "#endif\n";
foreach my $t ('warning', 'error', 'ereturn')
{
print "\n/* $t macros also here... */\n";
print "#ifndef NO_".uc($t)."\n";
printdefs(1, $t);
print "#else\n";
printdefs(0, $t);
print "#endif\n";
}
sub printdefs
{
my $forreal = shift;
my $type = shift;
$type = 'debug' unless defined $type;
my $i;
my $pre = ''; my $post = ''; my $rv = '';
my $notreal = '';
if($type eq 'ereturn')
{
$pre = 'do{ ';
$post = '; return rv; }while(0)';
$rv = 'rv, ';
$notreal = 'return rv';
}
while(++$i <= $num+1)
{
my @args, my $j;
while(++$j < $i){ push(@args, chr(ord('a')+$j-1)); }
unshift(@args, '') if(@args);
print '#define '.$type.($i > 1 ? ($i-1) : '').'('.$rv.'s';
print join(', ', @args).') ';
if($forreal){ print $pre.'fprintf(stderr, DBGPRFX"[" __FILE__ ":%i] '.$type.': " s "\n", __LINE__'.join(', ', @args).")$post\n"; }
#else{ print "do {} while(0)\n"; }
else{ print "$notreal\n"; }
}
}