blob: 9a4a00acd2fb7218cf34d52968af94199e45a9b4 [file] [log] [blame]
#!/bin/sh
set -e
#---------------------------------------------------------------------
# This quick and dirty script assists in updating the C++ demangler
# machinery in coregrind/m_demangle.
# The script will check out
# - old and new revisions of the C++ demangler related files from GCC's trunk
# - m_demangle from valgrind's trunk.
# It will assemble
# - a patch file with local changes that were applied to the C++
# demangler to make it work within valgrind
# - a directory new_m_demangle whose contents should be copied to
# m_demangle in valgrind trunk
# The patch will *not* be applied automatically.
#---------------------------------------------------------------------
# You need to modify these revision numbers for your update.
old_gcc_revision=r181975 # the revision of the previous update
new_gcc_revision=r212125 # the revision for this update
# Unless the organization of demangler related files has changed, no
# changes below this line should be necessary.
# Setup a temp directory
DIR=/tmp/demangle
rm -rf $DIR
mkdir -p $DIR
cd $DIR
echo "Updating the demangler in $DIR"
# 1) Check out files from old GCC revision
echo "Checking out GCC files @ $old_gcc_revision"
mkdir gcc-$old_gcc_revision
cd gcc-$old_gcc_revision
svn co -$old_gcc_revision svn://gcc.gnu.org/svn/gcc/trunk/libiberty libiberty > /dev/null
svn co -$old_gcc_revision svn://gcc.gnu.org/svn/gcc/trunk/include include > /dev/null
rm -rf libiberty/.svn
rm -rf include/.svn
cd ..
# 2) Assemble the ones we need in $DIR/$old_gcc_revision
mkdir $old_gcc_revision
cd $old_gcc_revision
cp ../gcc-$old_gcc_revision/include/ansidecl.h .
cp ../gcc-$old_gcc_revision/include/demangle.h .
cp ../gcc-$old_gcc_revision/include/dyn-string.h .
cp ../gcc-$old_gcc_revision/include/safe-ctype.h .
cp ../gcc-$old_gcc_revision/libiberty/cp-demangle.c .
cp ../gcc-$old_gcc_revision/libiberty/cp-demangle.h .
cp ../gcc-$old_gcc_revision/libiberty/cplus-dem.c .
cp ../gcc-$old_gcc_revision/libiberty/dyn-string.c .
cp ../gcc-$old_gcc_revision/libiberty/safe-ctype.c .
cd ..
# 3) Check out files from new GCC revision
echo "Checking out GCC files @ $new_gcc_revision"
mkdir gcc-$new_gcc_revision
cd gcc-$new_gcc_revision
svn co -$new_gcc_revision svn://gcc.gnu.org/svn/gcc/trunk/libiberty libiberty > /dev/null
svn co -$new_gcc_revision svn://gcc.gnu.org/svn/gcc/trunk/include include > /dev/null
rm -rf libiberty/.svn
rm -rf include/.svn
cd ..
# 4) Assemble the ones we need in $DIR/$new_gcc_revision
mkdir $new_gcc_revision
cd $new_gcc_revision
cp ../gcc-$new_gcc_revision/include/ansidecl.h .
cp ../gcc-$new_gcc_revision/include/demangle.h .
cp ../gcc-$new_gcc_revision/include/dyn-string.h .
cp ../gcc-$new_gcc_revision/include/safe-ctype.h .
cp ../gcc-$new_gcc_revision/libiberty/cp-demangle.c .
cp ../gcc-$new_gcc_revision/libiberty/cp-demangle.h .
cp ../gcc-$new_gcc_revision/libiberty/cplus-dem.c .
cp ../gcc-$new_gcc_revision/libiberty/dyn-string.c .
cp ../gcc-$new_gcc_revision/libiberty/safe-ctype.c .
cd ..
# 5) Check out valgrind coregrind/m_demangle into old_m_demangle
echo "Checking out coregrind/m_demangle"
svn co svn://svn.valgrind.org/valgrind/trunk/coregrind/m_demangle old_m_demangle > /dev/null
rm -rf old_m_demangle/.svn
# 6) Create new_m_demangle
cp -rp old_m_demangle new_m_demangle
cp -rp $new_gcc_revision/*.[ch] new_m_demangle
# 7) Compare files from previous GCC revision against old_m_demangle
# (This gets us the changes we made to the demangler).
echo "Creating patch"
set +e
diff -r -u $old_gcc_revision old_m_demangle > our-changes
echo "Patch file 'our-changes' created"
# 7) See how the patch would apply
echo "Attempting to apply the patch (but not actualy doing it)."
cd new_m_demangle
patch --dry -p1 < ../our-changes