update_third_party.sh
4.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#!/bin/sh -e
scriptpath=$(readlink -f "$0")
llgosrcdir=$(dirname "$scriptpath")
cd $llgosrcdir
gofrontendrepo=https://go.googlesource.com/gofrontend
gofrontendrev=81eb6a3f425b2158c67ee32c0cc973a72ce9d6be
gccrepo=svn://gcc.gnu.org/svn/gcc/trunk
gccrev=219477
gotoolsrepo=https://go.googlesource.com/tools
gotoolsrev=d4e70101500b43ffe705d4c45e50dd4f1c8e3b2e
linerrepo=https://github.com/peterh/liner.git
linerrev=4d47685ab2fd2dbb46c66b831344d558bc4be5b9
tempdir=$(mktemp -d /tmp/update_third_party.XXXXXX)
gofrontenddir=$tempdir/gofrontend
gotoolsdir=$tempdir/go.tools
linerdir=third_party/liner
rm -rf third_party
mkdir -p third_party/gofrontend third_party/gotools
git_clone() {
repo=$1
dir=$2
rev=$3
git clone $repo $dir
(
cd $dir
git checkout $rev
rm -fr .git
)
}
# --------------------- gofrontend ---------------------
git_clone $gofrontendrepo $gofrontenddir $gofrontendrev
cp -r $gofrontenddir/LICENSE $gofrontenddir/libgo third_party/gofrontend
# Apply a diff that eliminates use of the unnamed struct extension beyond what
# -fms-extensions supports.
(cd third_party/gofrontend && patch -p1) < libgo-noext.diff
# Apply a diff that disables testing of packages known to fail.
(cd third_party/gofrontend && patch -p1) < libgo-check-failures.diff
find third_party/gofrontend -name '*.orig' -exec rm \{\} \;
# Remove GPL licensed files.
rm \
third_party/gofrontend/libgo/testsuite/libgo.testmain/testmain.exp \
third_party/gofrontend/libgo/testsuite/lib/libgo.exp \
third_party/gofrontend/libgo/testsuite/config/default.exp
# --------------------- gcc ---------------------
# Some dependencies are stored in the gcc repository.
# TODO(pcc): Ask iant about mirroring these dependencies into gofrontend.
for f in config-ml.in depcomp install-sh ltmain.sh missing ; do
svn cat -r $gccrev $gccrepo/$f > third_party/gofrontend/$f
done
mkdir -p third_party/gofrontend/include third_party/gofrontend/libgcc
# Copy in our versions of GCC files.
cp include/dwarf2.h third_party/gofrontend/include/
cp include/filenames.h third_party/gofrontend/include/
cp include/unwind-pe.h third_party/gofrontend/libgcc/
# Note: this expects the llgo source tree to be located at llvm/tools/llgo.
cp ../../cmake/config.guess third_party/gofrontend/
cp autoconf/config.sub third_party/gofrontend/
for d in libbacktrace libffi ; do
svn export -r $gccrev $gccrepo/$d third_party/gofrontend/$d
done
# Remove GPL licensed files, and files that confuse our license check.
rm \
third_party/gofrontend/libffi/ChangeLog \
third_party/gofrontend/libffi/doc/libffi.texi \
third_party/gofrontend/libffi/msvcc.sh \
third_party/gofrontend/libffi/testsuite/config/default.exp \
third_party/gofrontend/libffi/testsuite/libffi.call/call.exp \
third_party/gofrontend/libffi/testsuite/libffi.complex/complex.exp \
third_party/gofrontend/libffi/testsuite/libffi.go/go.exp \
third_party/gofrontend/libffi/testsuite/libffi.special/special.exp \
third_party/gofrontend/libffi/testsuite/lib/libffi.exp \
third_party/gofrontend/libffi/testsuite/lib/target-libpath.exp \
third_party/gofrontend/libffi/testsuite/lib/wrapper.exp
# The build requires these files to exist.
touch \
third_party/gofrontend/include/dwarf2.def \
third_party/gofrontend/libffi/doc/libffi.texi
# --------------------- go.tools ---------------------
git_clone $gotoolsrepo $gotoolsdir $gotoolsrev
cp -r $gotoolsdir/LICENSE $gotoolsdir/go third_party/gotools
# Vendor the go.tools repository.
find third_party/gotools -name '*.go' | xargs sed -i -e \
's,"golang.org/x/tools/,"llvm.org/llgo/third_party/gotools/,g'
# --------------------- peterh/liner -----------------
git_clone $linerrepo $linerdir $linerrev
# --------------------- license check ---------------------
# We don't want any GPL licensed code without an autoconf/libtool
# exception, or any GPLv3 licensed code.
for i in `grep -lr 'General Public License' third_party` ; do
if grep -q 'configuration script generated by Autoconf, you may include it under' $i || \
grep -q 'is built using GNU Libtool, you may include this file under the' $i ; then
:
else
echo "$i: license check failed"
exit 1
fi
done
if grep -qr GPLv3 third_party ; then
echo "`grep -lr GPLv3 third_party`: license check failed"
exit 1
fi
rm -rf $tempdir