| #!/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 |
| # - 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 automacially. |
| #--------------------------------------------------------------------- |
| |
| # You need to modify these revision numbers for your update. |
| old_gcc_revision=r141363 # the revision of the previous update |
| new_gcc_revision=r181975 # 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 |