1
0
mirror of http://mpg123.de/trunk/.git synced 2025-10-17 19:31:16 +03:00
Files
mpg123/scripts/debugdef.pl
thor d1c9be757b Add new preprocessor flags to disable error / warning messages.
That can save around 9K on libmpg123.



git-svn-id: svn://scm.orgis.org/mpg123/trunk@1800 35dc7657-300d-0410-a2e5-dc2837fedb53
2009-01-10 16:38:05 +00:00

79 lines
1.9 KiB
Perl
Executable File

#!/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 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, "[" __FILE__ ":%i] '.$type.': " s "\n", __LINE__'.join(', ', @args).")$post\n"; }
#else{ print "do {} while(0)\n"; }
else{ print "$notreal\n"; }
}
}