#!/bin/sh
#
# This script scans the whole source code for symbols of the form dprintf_xxx,
# generates the necessary macro definitions and puts them into the files
# include/stddebug.h and include/debug.h . This script must be started with 
# cwd = rootdir of the Wine-distribution.
#
# Michael Patra  <micky@marie.physik.tu-berlin.de>
#
DEBUG_H=include/debug.h
STDDEBUG_H=include/stddebug.h

mv $DEBUG_H $DEBUG_H.old
mv $STDDEBUG_H $STDDEBUG_H.old

# Build the list of debug identifiers
grep -h dprintf_ */*.c | sed 's/.*dprintf_\([A-Za-z0-9_]*\).*/\1/g' | \
	sort | uniq > temp.$$

# Build debug.h

sed '/^\/\* Do not remove this line or change anything below this line \*\//q'\
      <$DEBUG_H.old >$DEBUG_H
cat <<++EOF++ >> $DEBUG_H

#ifdef DEBUG_NONE_EXT
++EOF++

cat temp.$$ | tr a-z A-Z |
{
while read x
do
	echo "#undef DEBUG_$x" >> $DEBUG_H
done
}

cat <<++EOF++ >>$DEBUG_H
#endif

#ifdef DEBUG_ALL_EXT
++EOF++

cat temp.$$ | tr a-z A-Z |
{
while read x
do
	echo "#define DEBUG_$x" >> $DEBUG_H
done
}

cat <<++EOF++ >>$DEBUG_H
#endif

#ifdef DEBUG_RUNTIME
#ifdef DEBUG_DEFINE_VARIABLES
short debug_msg_enabled[]={
++EOF++

cat temp.$$ | tr a-z A-Z |
{
while read x
do
	cat <<++EOF++ >>$DEBUG_H
#ifdef DEBUG_$x
    1,
#else
    0,
#endif
++EOF++

done
}

cat <<++EOF++ >>$DEBUG_H
    0
};
#else
extern short debug_msg_enabled[];
#endif
#endif

++EOF++

i=0
cat temp.$$ |
{
while read x 
do
	y=`echo $x | tr a-z A-Z`
	cat <<++EOF++ >>$DEBUG_H
#ifdef DEBUG_RUNTIME
#define dprintf_$x if(!debug_msg_enabled[$i]) ; else fprintf
#define debugging_$x debug_msg_enabled[$i]
#else
#ifdef DEBUG_$y
#define dprintf_$x fprintf
#define debugging_$x 1
#else
#define dprintf_$x while(0) fprintf
#define debugging_$x 0
#endif
#endif

++EOF++
	let i=$i+1
done
}

cat <<++EOF++ >>$DEBUG_H

#ifdef DEBUG_RUNTIME
#ifdef DEBUG_DEFINE_VARIABLES
static char *debug_msg_name[] = {
++EOF++

cat temp.$$ | 
{
while read x
do
	echo "    \"$x\"," >> $DEBUG_H
done
}

cat <<++EOF++ >>$DEBUG_H
    ""
};
#endif
#endif
++EOF++

# Build stddebug.h

sed '/^\/\* Do not remove this line or change anything below this line \*\//q'\
      <$STDDEBUG_H.old >$STDDEBUG_H

cat <<++EOF++ >>$STDDEBUG_H

#ifdef DEBUG_NONE
++EOF++

cat temp.$$ | tr a-z A-Z |
{
while read x
do
	echo "#undef DEBUG_$x" >> $STDDEBUG_H
done
}

cat <<++EOF++ >>$STDDEBUG_H
#endif

#ifdef DEBUG_ALL
++EOF++

cat temp.$$ | tr a-z A-Z |
{
while read x
do
	echo "#define DEBUG_$x" >> $STDDEBUG_H
done
}
echo "#endif" >> $STDDEBUG_H

rm temp.$$ $DEBUG_H.old $STDDEBUG_H.old
