blob: 8c1bbaa40324e8bcc4e3dcf57c099e49081928e9 [file] [log] [blame]
floriane44b9cd2011-12-10 16:03:57 +00001#!/bin/sh
2
3set -e
4
5#---------------------------------------------------------------------
6# This quick and dirty script assists in updating the C++ demangler
7# machinery in coregrind/m_demangle.
8# The script will check out
florianc9d75822014-06-30 21:04:16 +00009# - old and new revisions of the C++ demangler related files from GCC's trunk
floriane44b9cd2011-12-10 16:03:57 +000010# - m_demangle from valgrind's trunk.
11# It will assemble
12# - a patch file with local changes that were applied to the C++
13# demangler to make it work within valgrind
floriana70dfab2011-12-10 16:06:57 +000014# - a directory new_m_demangle whose contents should be copied to
floriane44b9cd2011-12-10 16:03:57 +000015# m_demangle in valgrind trunk
florianc9d75822014-06-30 21:04:16 +000016# The patch will *not* be applied automatically.
floriane44b9cd2011-12-10 16:03:57 +000017#---------------------------------------------------------------------
18
19# You need to modify these revision numbers for your update.
Elliott Hughesed398002017-06-21 14:41:24 -070020old_gcc_revision=r240068 # the revision of the previous update
21new_gcc_revision=r246502 # the revision for this update
floriane44b9cd2011-12-10 16:03:57 +000022
23# Unless the organization of demangler related files has changed, no
24# changes below this line should be necessary.
25
26# Setup a temp directory
27DIR=/tmp/demangle
28
29rm -rf $DIR
30mkdir -p $DIR
31
32cd $DIR
33
34echo "Updating the demangler in $DIR"
35
36# 1) Check out files from old GCC revision
37echo "Checking out GCC files @ $old_gcc_revision"
38
39mkdir gcc-$old_gcc_revision
40cd gcc-$old_gcc_revision
41svn co -$old_gcc_revision svn://gcc.gnu.org/svn/gcc/trunk/libiberty libiberty > /dev/null
42svn co -$old_gcc_revision svn://gcc.gnu.org/svn/gcc/trunk/include include > /dev/null
43rm -rf libiberty/.svn
44rm -rf include/.svn
45cd ..
46
47# 2) Assemble the ones we need in $DIR/$old_gcc_revision
48mkdir $old_gcc_revision
49cd $old_gcc_revision
50cp ../gcc-$old_gcc_revision/include/ansidecl.h .
51cp ../gcc-$old_gcc_revision/include/demangle.h .
52cp ../gcc-$old_gcc_revision/include/dyn-string.h .
53cp ../gcc-$old_gcc_revision/include/safe-ctype.h .
54cp ../gcc-$old_gcc_revision/libiberty/cp-demangle.c .
55cp ../gcc-$old_gcc_revision/libiberty/cp-demangle.h .
56cp ../gcc-$old_gcc_revision/libiberty/cplus-dem.c .
57cp ../gcc-$old_gcc_revision/libiberty/dyn-string.c .
Elliott Hughesa0664b92017-04-18 17:46:52 -070058cp ../gcc-$old_gcc_revision/libiberty/d-demangle.c .
Elliott Hughesed398002017-06-21 14:41:24 -070059cp ../gcc-$old_gcc_revision/libiberty/rust-demangle.c .
floriane44b9cd2011-12-10 16:03:57 +000060cp ../gcc-$old_gcc_revision/libiberty/safe-ctype.c .
61cd ..
62
63# 3) Check out files from new GCC revision
64
65echo "Checking out GCC files @ $new_gcc_revision"
66mkdir gcc-$new_gcc_revision
67cd gcc-$new_gcc_revision
68svn co -$new_gcc_revision svn://gcc.gnu.org/svn/gcc/trunk/libiberty libiberty > /dev/null
69svn co -$new_gcc_revision svn://gcc.gnu.org/svn/gcc/trunk/include include > /dev/null
70rm -rf libiberty/.svn
71rm -rf include/.svn
72cd ..
73
74# 4) Assemble the ones we need in $DIR/$new_gcc_revision
75
76mkdir $new_gcc_revision
77cd $new_gcc_revision
78cp ../gcc-$new_gcc_revision/include/ansidecl.h .
79cp ../gcc-$new_gcc_revision/include/demangle.h .
80cp ../gcc-$new_gcc_revision/include/dyn-string.h .
81cp ../gcc-$new_gcc_revision/include/safe-ctype.h .
82cp ../gcc-$new_gcc_revision/libiberty/cp-demangle.c .
83cp ../gcc-$new_gcc_revision/libiberty/cp-demangle.h .
84cp ../gcc-$new_gcc_revision/libiberty/cplus-dem.c .
85cp ../gcc-$new_gcc_revision/libiberty/dyn-string.c .
Elliott Hughesa0664b92017-04-18 17:46:52 -070086cp ../gcc-$new_gcc_revision/libiberty/d-demangle.c .
Elliott Hughesed398002017-06-21 14:41:24 -070087cp ../gcc-$new_gcc_revision/libiberty/rust-demangle.c .
floriane44b9cd2011-12-10 16:03:57 +000088cp ../gcc-$new_gcc_revision/libiberty/safe-ctype.c .
89cd ..
90
91# 5) Check out valgrind coregrind/m_demangle into old_m_demangle
92echo "Checking out coregrind/m_demangle"
93svn co svn://svn.valgrind.org/valgrind/trunk/coregrind/m_demangle old_m_demangle > /dev/null
94rm -rf old_m_demangle/.svn
95
96# 6) Create new_m_demangle
97cp -rp old_m_demangle new_m_demangle
98cp -rp $new_gcc_revision/*.[ch] new_m_demangle
99
100# 7) Compare files from previous GCC revision against old_m_demangle
101# (This gets us the changes we made to the demangler).
102echo "Creating patch"
103set +e
104diff -r -u $old_gcc_revision old_m_demangle > our-changes
105echo "Patch file 'our-changes' created"
106
107# 7) See how the patch would apply
108echo "Attempting to apply the patch (but not actualy doing it)."
109cd new_m_demangle
110patch --dry -p1 < ../our-changes