#!/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]) fprintf
#define debugging_$x debug_msg_enabled[$i]
#else
#ifdef DEBUG_$y
#define dprintf_$x fprintf
#define debugging_$x 1
#else
#define dprintf_$x
#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
