xref: /aosp_15_r20/external/cronet/third_party/protobuf/tests.sh (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker#!/bin/bash
2*6777b538SAndroid Build Coastguard Worker#
3*6777b538SAndroid Build Coastguard Worker# Build and run tests for the protobuf project. We use this script to run
4*6777b538SAndroid Build Coastguard Worker# tests on kokoro (Ubuntu and MacOS). It can run locally as well but you
5*6777b538SAndroid Build Coastguard Worker# need to make sure the required compilers/tools are available.
6*6777b538SAndroid Build Coastguard Worker
7*6777b538SAndroid Build Coastguard Workerinternal_build_cpp() {
8*6777b538SAndroid Build Coastguard Worker  if [ -f src/protoc ]; then
9*6777b538SAndroid Build Coastguard Worker    # Already built.
10*6777b538SAndroid Build Coastguard Worker    return
11*6777b538SAndroid Build Coastguard Worker  fi
12*6777b538SAndroid Build Coastguard Worker
13*6777b538SAndroid Build Coastguard Worker  # Initialize any submodules.
14*6777b538SAndroid Build Coastguard Worker  git submodule update --init --recursive
15*6777b538SAndroid Build Coastguard Worker
16*6777b538SAndroid Build Coastguard Worker  ./autogen.sh
17*6777b538SAndroid Build Coastguard Worker  ./configure CXXFLAGS="-fPIC -std=c++11"  # -fPIC is needed for python cpp test.
18*6777b538SAndroid Build Coastguard Worker                                           # See python/setup.py for more details
19*6777b538SAndroid Build Coastguard Worker  make -j$(nproc)
20*6777b538SAndroid Build Coastguard Worker}
21*6777b538SAndroid Build Coastguard Worker
22*6777b538SAndroid Build Coastguard Workerbuild_cpp() {
23*6777b538SAndroid Build Coastguard Worker  internal_build_cpp
24*6777b538SAndroid Build Coastguard Worker  make check -j$(nproc) || (cat src/test-suite.log; false)
25*6777b538SAndroid Build Coastguard Worker  cd conformance && make test_cpp && cd ..
26*6777b538SAndroid Build Coastguard Worker}
27*6777b538SAndroid Build Coastguard Worker
28*6777b538SAndroid Build Coastguard Workerbuild_cpp_tcmalloc() {
29*6777b538SAndroid Build Coastguard Worker  internal_build_cpp
30*6777b538SAndroid Build Coastguard Worker  ./configure LIBS=-ltcmalloc && make clean && make \
31*6777b538SAndroid Build Coastguard Worker      PTHREAD_CFLAGS='-pthread -DGOOGLE_PROTOBUF_HEAP_CHECK_DRACONIAN' \
32*6777b538SAndroid Build Coastguard Worker      check
33*6777b538SAndroid Build Coastguard Worker  cd src
34*6777b538SAndroid Build Coastguard Worker  PPROF_PATH=/usr/bin/google-pprof HEAPCHECK=strict ./protobuf-test
35*6777b538SAndroid Build Coastguard Worker}
36*6777b538SAndroid Build Coastguard Worker
37*6777b538SAndroid Build Coastguard Workerbuild_cpp_distcheck() {
38*6777b538SAndroid Build Coastguard Worker  grep -q -- "-Og" src/Makefile.am &&
39*6777b538SAndroid Build Coastguard Worker    echo "The -Og flag is incompatible with Clang versions older than 4.0." &&
40*6777b538SAndroid Build Coastguard Worker    exit 1
41*6777b538SAndroid Build Coastguard Worker
42*6777b538SAndroid Build Coastguard Worker  # Initialize any submodules.
43*6777b538SAndroid Build Coastguard Worker  git submodule update --init --recursive
44*6777b538SAndroid Build Coastguard Worker  ./autogen.sh
45*6777b538SAndroid Build Coastguard Worker  ./configure
46*6777b538SAndroid Build Coastguard Worker  make dist
47*6777b538SAndroid Build Coastguard Worker
48*6777b538SAndroid Build Coastguard Worker  # List all files that should be included in the distribution package.
49*6777b538SAndroid Build Coastguard Worker  git ls-files | grep "^\(java\|python\|objectivec\|csharp\|ruby\|php\|cmake\|examples\|src/google/protobuf/.*\.proto\)" |\
50*6777b538SAndroid Build Coastguard Worker    grep -v ".gitignore" | grep -v "java/lite/proguard.pgcfg" |\
51*6777b538SAndroid Build Coastguard Worker    grep -v "python/compatibility_tests" | grep -v "python/docs" | grep -v "python/.repo-metadata.json" |\
52*6777b538SAndroid Build Coastguard Worker    grep -v "python/protobuf_distutils" | grep -v "csharp/compatibility_tests" > dist.lst
53*6777b538SAndroid Build Coastguard Worker  # Unzip the dist tar file.
54*6777b538SAndroid Build Coastguard Worker  DIST=`ls *.tar.gz`
55*6777b538SAndroid Build Coastguard Worker  tar -xf $DIST
56*6777b538SAndroid Build Coastguard Worker  cd ${DIST//.tar.gz}
57*6777b538SAndroid Build Coastguard Worker  # Check if every file exists in the dist tar file.
58*6777b538SAndroid Build Coastguard Worker  FILES_MISSING=""
59*6777b538SAndroid Build Coastguard Worker  for FILE in $(<../dist.lst); do
60*6777b538SAndroid Build Coastguard Worker    [ -f "$FILE" ] || {
61*6777b538SAndroid Build Coastguard Worker      echo "$FILE is not found!"
62*6777b538SAndroid Build Coastguard Worker      FILES_MISSING="$FILE $FILES_MISSING"
63*6777b538SAndroid Build Coastguard Worker    }
64*6777b538SAndroid Build Coastguard Worker  done
65*6777b538SAndroid Build Coastguard Worker  cd ..
66*6777b538SAndroid Build Coastguard Worker  if [ ! -z "$FILES_MISSING" ]; then
67*6777b538SAndroid Build Coastguard Worker    echo "Missing files in EXTRA_DIST: $FILES_MISSING"
68*6777b538SAndroid Build Coastguard Worker    exit 1
69*6777b538SAndroid Build Coastguard Worker  fi
70*6777b538SAndroid Build Coastguard Worker
71*6777b538SAndroid Build Coastguard Worker  # Do the regular dist-check for C++.
72*6777b538SAndroid Build Coastguard Worker  make distcheck -j$(nproc)
73*6777b538SAndroid Build Coastguard Worker}
74*6777b538SAndroid Build Coastguard Worker
75*6777b538SAndroid Build Coastguard Workerbuild_dist_install() {
76*6777b538SAndroid Build Coastguard Worker  # Create a symlink pointing to python2 and put it at the beginning of $PATH.
77*6777b538SAndroid Build Coastguard Worker  # This is necessary because the googletest build system involves a Python
78*6777b538SAndroid Build Coastguard Worker  # script that is not compatible with Python 3. More recent googletest
79*6777b538SAndroid Build Coastguard Worker  # versions have fixed this, but they have also removed the autotools build
80*6777b538SAndroid Build Coastguard Worker  # system support that we rely on. This is a temporary workaround to keep the
81*6777b538SAndroid Build Coastguard Worker  # googletest build working when the default python binary is Python 3.
82*6777b538SAndroid Build Coastguard Worker  mkdir tmp || true
83*6777b538SAndroid Build Coastguard Worker  pushd tmp
84*6777b538SAndroid Build Coastguard Worker  ln -s /usr/bin/python2 ./python
85*6777b538SAndroid Build Coastguard Worker  popd
86*6777b538SAndroid Build Coastguard Worker  PATH=$PWD/tmp:$PATH
87*6777b538SAndroid Build Coastguard Worker
88*6777b538SAndroid Build Coastguard Worker  # Initialize any submodules.
89*6777b538SAndroid Build Coastguard Worker  git submodule update --init --recursive
90*6777b538SAndroid Build Coastguard Worker  ./autogen.sh
91*6777b538SAndroid Build Coastguard Worker  ./configure
92*6777b538SAndroid Build Coastguard Worker  make dist
93*6777b538SAndroid Build Coastguard Worker
94*6777b538SAndroid Build Coastguard Worker  # Unzip the dist tar file and install it.
95*6777b538SAndroid Build Coastguard Worker  DIST=`ls *.tar.gz`
96*6777b538SAndroid Build Coastguard Worker  tar -xf $DIST
97*6777b538SAndroid Build Coastguard Worker  pushd ${DIST//.tar.gz}
98*6777b538SAndroid Build Coastguard Worker  ./configure && make check -j4 && make install
99*6777b538SAndroid Build Coastguard Worker
100*6777b538SAndroid Build Coastguard Worker  export LD_LIBRARY_PATH=/usr/local/lib
101*6777b538SAndroid Build Coastguard Worker
102*6777b538SAndroid Build Coastguard Worker  # Try to install Java
103*6777b538SAndroid Build Coastguard Worker  pushd java
104*6777b538SAndroid Build Coastguard Worker  use_java jdk11
105*6777b538SAndroid Build Coastguard Worker  $MVN install
106*6777b538SAndroid Build Coastguard Worker  popd
107*6777b538SAndroid Build Coastguard Worker
108*6777b538SAndroid Build Coastguard Worker  # Try to install Python
109*6777b538SAndroid Build Coastguard Worker  python3 -m venv venv
110*6777b538SAndroid Build Coastguard Worker  source venv/bin/activate
111*6777b538SAndroid Build Coastguard Worker  pushd python
112*6777b538SAndroid Build Coastguard Worker  python3 setup.py clean build sdist
113*6777b538SAndroid Build Coastguard Worker  pip3 install dist/protobuf-*.tar.gz
114*6777b538SAndroid Build Coastguard Worker  popd
115*6777b538SAndroid Build Coastguard Worker  deactivate
116*6777b538SAndroid Build Coastguard Worker  rm -rf python/venv
117*6777b538SAndroid Build Coastguard Worker}
118*6777b538SAndroid Build Coastguard Worker
119*6777b538SAndroid Build Coastguard Workerbuild_csharp() {
120*6777b538SAndroid Build Coastguard Worker  # Required for conformance tests and to regenerate protos.
121*6777b538SAndroid Build Coastguard Worker  internal_build_cpp
122*6777b538SAndroid Build Coastguard Worker  NUGET=/usr/local/bin/nuget.exe
123*6777b538SAndroid Build Coastguard Worker
124*6777b538SAndroid Build Coastguard Worker  # Disable some unwanted dotnet options
125*6777b538SAndroid Build Coastguard Worker  export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=true
126*6777b538SAndroid Build Coastguard Worker  export DOTNET_CLI_TELEMETRY_OPTOUT=true
127*6777b538SAndroid Build Coastguard Worker
128*6777b538SAndroid Build Coastguard Worker  # TODO(jtattermusch): is this still needed with "first time experience"
129*6777b538SAndroid Build Coastguard Worker  # disabled?
130*6777b538SAndroid Build Coastguard Worker  # Perform "dotnet new" once to get the setup preprocessing out of the
131*6777b538SAndroid Build Coastguard Worker  # way. That spews a lot of output (including backspaces) into logs
132*6777b538SAndroid Build Coastguard Worker  # otherwise, and can cause problems. It doesn't matter if this step
133*6777b538SAndroid Build Coastguard Worker  # is performed multiple times; it's cheap after the first time anyway.
134*6777b538SAndroid Build Coastguard Worker  # (It also doesn't matter if it's unnecessary, which it will be on some
135*6777b538SAndroid Build Coastguard Worker  # systems. It's necessary on Jenkins in order to avoid unprintable
136*6777b538SAndroid Build Coastguard Worker  # characters appearing in the JUnit output.)
137*6777b538SAndroid Build Coastguard Worker  mkdir dotnettmp
138*6777b538SAndroid Build Coastguard Worker  (cd dotnettmp; dotnet new > /dev/null)
139*6777b538SAndroid Build Coastguard Worker  rm -rf dotnettmp
140*6777b538SAndroid Build Coastguard Worker
141*6777b538SAndroid Build Coastguard Worker  # Check that the protos haven't broken C# codegen.
142*6777b538SAndroid Build Coastguard Worker  # TODO(jonskeet): Fail if regenerating creates any changes.
143*6777b538SAndroid Build Coastguard Worker  csharp/generate_protos.sh
144*6777b538SAndroid Build Coastguard Worker
145*6777b538SAndroid Build Coastguard Worker  csharp/buildall.sh
146*6777b538SAndroid Build Coastguard Worker  cd conformance && make test_csharp && cd ..
147*6777b538SAndroid Build Coastguard Worker
148*6777b538SAndroid Build Coastguard Worker  # Run csharp compatibility test between 3.0.0 and the current version.
149*6777b538SAndroid Build Coastguard Worker  csharp/compatibility_tests/v3.0.0/test.sh 3.0.0
150*6777b538SAndroid Build Coastguard Worker
151*6777b538SAndroid Build Coastguard Worker  # Regression test for https://github.com/protocolbuffers/protobuf/issues/9526
152*6777b538SAndroid Build Coastguard Worker  # - all line endings in .proto and .cs (and .csproj) files should be LF.
153*6777b538SAndroid Build Coastguard Worker  if git ls-files --eol csharp | grep -E '\.cs|\.proto' | grep -v w/lf
154*6777b538SAndroid Build Coastguard Worker  then
155*6777b538SAndroid Build Coastguard Worker    echo "The files listed above have mixed or CRLF line endings; please change to LF."
156*6777b538SAndroid Build Coastguard Worker    exit 1
157*6777b538SAndroid Build Coastguard Worker  fi
158*6777b538SAndroid Build Coastguard Worker}
159*6777b538SAndroid Build Coastguard Worker
160*6777b538SAndroid Build Coastguard Workerbuild_golang() {
161*6777b538SAndroid Build Coastguard Worker  # Go build needs `protoc`.
162*6777b538SAndroid Build Coastguard Worker  internal_build_cpp
163*6777b538SAndroid Build Coastguard Worker  # Add protoc to the path so that the examples build finds it.
164*6777b538SAndroid Build Coastguard Worker  export PATH="`pwd`/src:$PATH"
165*6777b538SAndroid Build Coastguard Worker
166*6777b538SAndroid Build Coastguard Worker  export GOPATH="$HOME/gocode"
167*6777b538SAndroid Build Coastguard Worker  mkdir -p "$GOPATH/src/github.com/protocolbuffers"
168*6777b538SAndroid Build Coastguard Worker  mkdir -p "$GOPATH/src/github.com/golang"
169*6777b538SAndroid Build Coastguard Worker  rm -f "$GOPATH/src/github.com/protocolbuffers/protobuf"
170*6777b538SAndroid Build Coastguard Worker  rm -f "$GOPATH/src/github.com/golang/protobuf"
171*6777b538SAndroid Build Coastguard Worker  ln -s "`pwd`" "$GOPATH/src/github.com/protocolbuffers/protobuf"
172*6777b538SAndroid Build Coastguard Worker  export PATH="$GOPATH/bin:$PATH"
173*6777b538SAndroid Build Coastguard Worker  (cd $GOPATH/src/github.com/golang && git clone https://github.com/golang/protobuf.git && cd protobuf && git checkout v1.3.5)
174*6777b538SAndroid Build Coastguard Worker  go install github.com/golang/protobuf/protoc-gen-go
175*6777b538SAndroid Build Coastguard Worker
176*6777b538SAndroid Build Coastguard Worker  cd examples && PROTO_PATH="-I../src -I." make gotest && cd ..
177*6777b538SAndroid Build Coastguard Worker}
178*6777b538SAndroid Build Coastguard Worker
179*6777b538SAndroid Build Coastguard Workeruse_java() {
180*6777b538SAndroid Build Coastguard Worker  version=$1
181*6777b538SAndroid Build Coastguard Worker  case "$version" in
182*6777b538SAndroid Build Coastguard Worker    jdk17)
183*6777b538SAndroid Build Coastguard Worker      export PATH=/usr/lib/jvm/java-17-openjdk-amd64/bin:$PATH
184*6777b538SAndroid Build Coastguard Worker      export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
185*6777b538SAndroid Build Coastguard Worker      ;;
186*6777b538SAndroid Build Coastguard Worker    jdk11)
187*6777b538SAndroid Build Coastguard Worker      export PATH=/usr/lib/jvm/java-11-openjdk-amd64/bin:$PATH
188*6777b538SAndroid Build Coastguard Worker      export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
189*6777b538SAndroid Build Coastguard Worker      ;;
190*6777b538SAndroid Build Coastguard Worker    jdk8)
191*6777b538SAndroid Build Coastguard Worker      export PATH=/usr/lib/jvm/java-8-openjdk-amd64/bin:$PATH
192*6777b538SAndroid Build Coastguard Worker      export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
193*6777b538SAndroid Build Coastguard Worker      ;;
194*6777b538SAndroid Build Coastguard Worker    jdk7)
195*6777b538SAndroid Build Coastguard Worker      export PATH=/usr/lib/jvm/java-7-openjdk-amd64/bin:$PATH
196*6777b538SAndroid Build Coastguard Worker      export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
197*6777b538SAndroid Build Coastguard Worker      ;;
198*6777b538SAndroid Build Coastguard Worker    oracle7)
199*6777b538SAndroid Build Coastguard Worker      export PATH=/usr/lib/jvm/java-7-oracle/bin:$PATH
200*6777b538SAndroid Build Coastguard Worker      export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
201*6777b538SAndroid Build Coastguard Worker      ;;
202*6777b538SAndroid Build Coastguard Worker  esac
203*6777b538SAndroid Build Coastguard Worker
204*6777b538SAndroid Build Coastguard Worker  MAVEN_LOCAL_REPOSITORY=/var/maven_local_repository
205*6777b538SAndroid Build Coastguard Worker  MVN="$MVN -e --quiet -Dhttps.protocols=TLSv1.2 -Dmaven.repo.local=$MAVEN_LOCAL_REPOSITORY"
206*6777b538SAndroid Build Coastguard Worker
207*6777b538SAndroid Build Coastguard Worker  which java
208*6777b538SAndroid Build Coastguard Worker  java -version
209*6777b538SAndroid Build Coastguard Worker  $MVN -version
210*6777b538SAndroid Build Coastguard Worker}
211*6777b538SAndroid Build Coastguard Worker
212*6777b538SAndroid Build Coastguard Worker# --batch-mode suppresses download progress output that spams the logs.
213*6777b538SAndroid Build Coastguard WorkerMVN="mvn --batch-mode"
214*6777b538SAndroid Build Coastguard Worker
215*6777b538SAndroid Build Coastguard Workerinternal_build_java() {
216*6777b538SAndroid Build Coastguard Worker  version=$1
217*6777b538SAndroid Build Coastguard Worker  dir=java_$version
218*6777b538SAndroid Build Coastguard Worker  # Java build needs `protoc`.
219*6777b538SAndroid Build Coastguard Worker  internal_build_cpp
220*6777b538SAndroid Build Coastguard Worker  cp -r java $dir
221*6777b538SAndroid Build Coastguard Worker  cd $dir && $MVN clean
222*6777b538SAndroid Build Coastguard Worker  # Skip tests here - callers will decide what tests they want to run
223*6777b538SAndroid Build Coastguard Worker  $MVN install -Dmaven.test.skip=true
224*6777b538SAndroid Build Coastguard Worker}
225*6777b538SAndroid Build Coastguard Worker
226*6777b538SAndroid Build Coastguard Workerbuild_java() {
227*6777b538SAndroid Build Coastguard Worker  version=$1
228*6777b538SAndroid Build Coastguard Worker  internal_build_java $version
229*6777b538SAndroid Build Coastguard Worker  # Skip the Kotlin tests on Oracle 7
230*6777b538SAndroid Build Coastguard Worker  if [ "$version" == "oracle7" ]; then
231*6777b538SAndroid Build Coastguard Worker    $MVN test -pl bom,lite,core,util
232*6777b538SAndroid Build Coastguard Worker  else
233*6777b538SAndroid Build Coastguard Worker    $MVN test
234*6777b538SAndroid Build Coastguard Worker  fi
235*6777b538SAndroid Build Coastguard Worker  cd ../..
236*6777b538SAndroid Build Coastguard Worker}
237*6777b538SAndroid Build Coastguard Worker
238*6777b538SAndroid Build Coastguard Worker# The conformance tests are hard-coded to work with the $ROOT/java directory.
239*6777b538SAndroid Build Coastguard Worker# So this can't run in parallel with two different sets of tests.
240*6777b538SAndroid Build Coastguard Workerbuild_java_with_conformance_tests() {
241*6777b538SAndroid Build Coastguard Worker  # Java build needs `protoc`.
242*6777b538SAndroid Build Coastguard Worker  internal_build_cpp
243*6777b538SAndroid Build Coastguard Worker  # This local installation avoids the problem caused by a new version not yet in Maven Central
244*6777b538SAndroid Build Coastguard Worker  cd java/bom && $MVN install
245*6777b538SAndroid Build Coastguard Worker  cd ../..
246*6777b538SAndroid Build Coastguard Worker  cd java/core && $MVN test && $MVN install
247*6777b538SAndroid Build Coastguard Worker  cd ../lite && $MVN test && $MVN install
248*6777b538SAndroid Build Coastguard Worker  cd ../util && $MVN test && $MVN install && $MVN package assembly:single
249*6777b538SAndroid Build Coastguard Worker  if [ "$version" == "jdk8" ]; then
250*6777b538SAndroid Build Coastguard Worker    cd ../kotlin && $MVN test && $MVN install
251*6777b538SAndroid Build Coastguard Worker    cd ../kotlin-lite && $MVN test && $MVN install
252*6777b538SAndroid Build Coastguard Worker  fi
253*6777b538SAndroid Build Coastguard Worker  cd ../..
254*6777b538SAndroid Build Coastguard Worker  cd conformance && make test_java && cd ..
255*6777b538SAndroid Build Coastguard Worker}
256*6777b538SAndroid Build Coastguard Worker
257*6777b538SAndroid Build Coastguard Workerbuild_java_jdk7() {
258*6777b538SAndroid Build Coastguard Worker  use_java jdk7
259*6777b538SAndroid Build Coastguard Worker  build_java_with_conformance_tests
260*6777b538SAndroid Build Coastguard Worker}
261*6777b538SAndroid Build Coastguard Worker
262*6777b538SAndroid Build Coastguard Workerbuild_java_oracle7() {
263*6777b538SAndroid Build Coastguard Worker  use_java oracle7
264*6777b538SAndroid Build Coastguard Worker  build_java oracle7
265*6777b538SAndroid Build Coastguard Worker}
266*6777b538SAndroid Build Coastguard Worker
267*6777b538SAndroid Build Coastguard Workerbuild_java_jdk8() {
268*6777b538SAndroid Build Coastguard Worker  use_java jdk8
269*6777b538SAndroid Build Coastguard Worker  build_java_with_conformance_tests
270*6777b538SAndroid Build Coastguard Worker}
271*6777b538SAndroid Build Coastguard Worker
272*6777b538SAndroid Build Coastguard Workerbuild_java_jdk11() {
273*6777b538SAndroid Build Coastguard Worker  use_java jdk11
274*6777b538SAndroid Build Coastguard Worker  build_java
275*6777b538SAndroid Build Coastguard Worker}
276*6777b538SAndroid Build Coastguard Worker
277*6777b538SAndroid Build Coastguard Workerbuild_java_jdk17() {
278*6777b538SAndroid Build Coastguard Worker  use_java jdk17
279*6777b538SAndroid Build Coastguard Worker  build_java
280*6777b538SAndroid Build Coastguard Worker}
281*6777b538SAndroid Build Coastguard Worker
282*6777b538SAndroid Build Coastguard Workerbuild_java_linkage_monitor() {
283*6777b538SAndroid Build Coastguard Worker  # Linkage Monitor checks compatibility with other Google libraries
284*6777b538SAndroid Build Coastguard Worker  # https://github.com/GoogleCloudPlatform/cloud-opensource-java/tree/master/linkage-monitor
285*6777b538SAndroid Build Coastguard Worker
286*6777b538SAndroid Build Coastguard Worker  use_java jdk11
287*6777b538SAndroid Build Coastguard Worker  internal_build_cpp
288*6777b538SAndroid Build Coastguard Worker
289*6777b538SAndroid Build Coastguard Worker  # Linkage Monitor uses $HOME/.m2 local repository
290*6777b538SAndroid Build Coastguard Worker  MVN="mvn -e -B -Dhttps.protocols=TLSv1.2"
291*6777b538SAndroid Build Coastguard Worker  cd java
292*6777b538SAndroid Build Coastguard Worker  # Installs the snapshot version locally
293*6777b538SAndroid Build Coastguard Worker  $MVN install -Dmaven.test.skip=true
294*6777b538SAndroid Build Coastguard Worker
295*6777b538SAndroid Build Coastguard Worker  # Linkage Monitor uses the snapshot versions installed in $HOME/.m2 to verify compatibility
296*6777b538SAndroid Build Coastguard Worker  JAR=linkage-monitor-latest-all-deps.jar
297*6777b538SAndroid Build Coastguard Worker  curl -v -O "https://storage.googleapis.com/cloud-opensource-java-linkage-monitor/${JAR}"
298*6777b538SAndroid Build Coastguard Worker  # Fails if there's new linkage errors compared with baseline
299*6777b538SAndroid Build Coastguard Worker  java -jar $JAR com.google.cloud:libraries-bom
300*6777b538SAndroid Build Coastguard Worker}
301*6777b538SAndroid Build Coastguard Worker
302*6777b538SAndroid Build Coastguard Workerbuild_objectivec_ios() {
303*6777b538SAndroid Build Coastguard Worker  # Reused the build script that takes care of configuring and ensuring things
304*6777b538SAndroid Build Coastguard Worker  # are up to date.  The OS X test runs the objc conformance test, so skip it
305*6777b538SAndroid Build Coastguard Worker  # here.
306*6777b538SAndroid Build Coastguard Worker  objectivec/DevTools/full_mac_build.sh \
307*6777b538SAndroid Build Coastguard Worker      --core-only --skip-xcode-osx --skip-xcode-tvos --skip-objc-conformance "$@"
308*6777b538SAndroid Build Coastguard Worker}
309*6777b538SAndroid Build Coastguard Worker
310*6777b538SAndroid Build Coastguard Workerbuild_objectivec_ios_debug() {
311*6777b538SAndroid Build Coastguard Worker  build_objectivec_ios --skip-xcode-release
312*6777b538SAndroid Build Coastguard Worker}
313*6777b538SAndroid Build Coastguard Worker
314*6777b538SAndroid Build Coastguard Workerbuild_objectivec_ios_release() {
315*6777b538SAndroid Build Coastguard Worker  build_objectivec_ios --skip-xcode-debug
316*6777b538SAndroid Build Coastguard Worker}
317*6777b538SAndroid Build Coastguard Worker
318*6777b538SAndroid Build Coastguard Workerbuild_objectivec_osx() {
319*6777b538SAndroid Build Coastguard Worker  # Reused the build script that takes care of configuring and ensuring things
320*6777b538SAndroid Build Coastguard Worker  # are up to date.
321*6777b538SAndroid Build Coastguard Worker  objectivec/DevTools/full_mac_build.sh \
322*6777b538SAndroid Build Coastguard Worker      --core-only --skip-xcode-ios --skip-xcode-tvos
323*6777b538SAndroid Build Coastguard Worker}
324*6777b538SAndroid Build Coastguard Worker
325*6777b538SAndroid Build Coastguard Workerbuild_objectivec_tvos() {
326*6777b538SAndroid Build Coastguard Worker  # Reused the build script that takes care of configuring and ensuring things
327*6777b538SAndroid Build Coastguard Worker  # are up to date.  The OS X test runs the objc conformance test, so skip it
328*6777b538SAndroid Build Coastguard Worker  # here.
329*6777b538SAndroid Build Coastguard Worker  objectivec/DevTools/full_mac_build.sh \
330*6777b538SAndroid Build Coastguard Worker      --core-only --skip-xcode-ios --skip-xcode-osx --skip-objc-conformance "$@"
331*6777b538SAndroid Build Coastguard Worker}
332*6777b538SAndroid Build Coastguard Worker
333*6777b538SAndroid Build Coastguard Workerbuild_objectivec_tvos_debug() {
334*6777b538SAndroid Build Coastguard Worker  build_objectivec_tvos --skip-xcode-release
335*6777b538SAndroid Build Coastguard Worker}
336*6777b538SAndroid Build Coastguard Worker
337*6777b538SAndroid Build Coastguard Workerbuild_objectivec_tvos_release() {
338*6777b538SAndroid Build Coastguard Worker  build_objectivec_tvos --skip-xcode-debug
339*6777b538SAndroid Build Coastguard Worker}
340*6777b538SAndroid Build Coastguard Worker
341*6777b538SAndroid Build Coastguard Workerbuild_python() {
342*6777b538SAndroid Build Coastguard Worker  internal_build_cpp
343*6777b538SAndroid Build Coastguard Worker  cd python
344*6777b538SAndroid Build Coastguard Worker  tox --skip-missing-interpreters
345*6777b538SAndroid Build Coastguard Worker  cd ..
346*6777b538SAndroid Build Coastguard Worker}
347*6777b538SAndroid Build Coastguard Worker
348*6777b538SAndroid Build Coastguard Workerbuild_python_version() {
349*6777b538SAndroid Build Coastguard Worker  internal_build_cpp
350*6777b538SAndroid Build Coastguard Worker  cd python
351*6777b538SAndroid Build Coastguard Worker  envlist=$1
352*6777b538SAndroid Build Coastguard Worker  tox -e $envlist
353*6777b538SAndroid Build Coastguard Worker  cd ..
354*6777b538SAndroid Build Coastguard Worker}
355*6777b538SAndroid Build Coastguard Worker
356*6777b538SAndroid Build Coastguard Workerbuild_python37() {
357*6777b538SAndroid Build Coastguard Worker  build_python_version py37-python
358*6777b538SAndroid Build Coastguard Worker}
359*6777b538SAndroid Build Coastguard Worker
360*6777b538SAndroid Build Coastguard Workerbuild_python38() {
361*6777b538SAndroid Build Coastguard Worker  build_python_version py38-python
362*6777b538SAndroid Build Coastguard Worker}
363*6777b538SAndroid Build Coastguard Worker
364*6777b538SAndroid Build Coastguard Workerbuild_python39() {
365*6777b538SAndroid Build Coastguard Worker  build_python_version py39-python
366*6777b538SAndroid Build Coastguard Worker}
367*6777b538SAndroid Build Coastguard Worker
368*6777b538SAndroid Build Coastguard Workerbuild_python310() {
369*6777b538SAndroid Build Coastguard Worker  build_python_version py310-python
370*6777b538SAndroid Build Coastguard Worker}
371*6777b538SAndroid Build Coastguard Worker
372*6777b538SAndroid Build Coastguard Workerbuild_python_cpp() {
373*6777b538SAndroid Build Coastguard Worker  internal_build_cpp
374*6777b538SAndroid Build Coastguard Worker  export LD_LIBRARY_PATH=../src/.libs # for Linux
375*6777b538SAndroid Build Coastguard Worker  export DYLD_LIBRARY_PATH=../src/.libs # for OS X
376*6777b538SAndroid Build Coastguard Worker  cd python
377*6777b538SAndroid Build Coastguard Worker  tox --skip-missing-interpreters
378*6777b538SAndroid Build Coastguard Worker  cd ..
379*6777b538SAndroid Build Coastguard Worker}
380*6777b538SAndroid Build Coastguard Worker
381*6777b538SAndroid Build Coastguard Workerbuild_python_cpp_version() {
382*6777b538SAndroid Build Coastguard Worker  internal_build_cpp
383*6777b538SAndroid Build Coastguard Worker  export LD_LIBRARY_PATH=../src/.libs # for Linux
384*6777b538SAndroid Build Coastguard Worker  export DYLD_LIBRARY_PATH=../src/.libs # for OS X
385*6777b538SAndroid Build Coastguard Worker  cd python
386*6777b538SAndroid Build Coastguard Worker  envlist=$1
387*6777b538SAndroid Build Coastguard Worker  tox -e $envlist
388*6777b538SAndroid Build Coastguard Worker  cd ..
389*6777b538SAndroid Build Coastguard Worker}
390*6777b538SAndroid Build Coastguard Worker
391*6777b538SAndroid Build Coastguard Workerbuild_python37_cpp() {
392*6777b538SAndroid Build Coastguard Worker  build_python_cpp_version py37-cpp
393*6777b538SAndroid Build Coastguard Worker}
394*6777b538SAndroid Build Coastguard Worker
395*6777b538SAndroid Build Coastguard Workerbuild_python38_cpp() {
396*6777b538SAndroid Build Coastguard Worker  build_python_cpp_version py38-cpp
397*6777b538SAndroid Build Coastguard Worker}
398*6777b538SAndroid Build Coastguard Worker
399*6777b538SAndroid Build Coastguard Workerbuild_python39_cpp() {
400*6777b538SAndroid Build Coastguard Worker  build_python_cpp_version py39-cpp
401*6777b538SAndroid Build Coastguard Worker}
402*6777b538SAndroid Build Coastguard Worker
403*6777b538SAndroid Build Coastguard Workerbuild_python310_cpp() {
404*6777b538SAndroid Build Coastguard Worker  build_python_cpp_version py310-cpp
405*6777b538SAndroid Build Coastguard Worker}
406*6777b538SAndroid Build Coastguard Worker
407*6777b538SAndroid Build Coastguard Workerbuild_ruby23() {
408*6777b538SAndroid Build Coastguard Worker  internal_build_cpp  # For conformance tests.
409*6777b538SAndroid Build Coastguard Worker  cd ruby && bash travis-test.sh ruby-2.3.8 && cd ..
410*6777b538SAndroid Build Coastguard Worker}
411*6777b538SAndroid Build Coastguard Workerbuild_ruby24() {
412*6777b538SAndroid Build Coastguard Worker  internal_build_cpp  # For conformance tests.
413*6777b538SAndroid Build Coastguard Worker  cd ruby && bash travis-test.sh ruby-2.4 && cd ..
414*6777b538SAndroid Build Coastguard Worker}
415*6777b538SAndroid Build Coastguard Workerbuild_ruby25() {
416*6777b538SAndroid Build Coastguard Worker  internal_build_cpp  # For conformance tests.
417*6777b538SAndroid Build Coastguard Worker  cd ruby && bash travis-test.sh ruby-2.5.1 && cd ..
418*6777b538SAndroid Build Coastguard Worker}
419*6777b538SAndroid Build Coastguard Workerbuild_ruby26() {
420*6777b538SAndroid Build Coastguard Worker  internal_build_cpp  # For conformance tests.
421*6777b538SAndroid Build Coastguard Worker  cd ruby && bash travis-test.sh ruby-2.6.0 && cd ..
422*6777b538SAndroid Build Coastguard Worker}
423*6777b538SAndroid Build Coastguard Workerbuild_ruby27() {
424*6777b538SAndroid Build Coastguard Worker  internal_build_cpp  # For conformance tests.
425*6777b538SAndroid Build Coastguard Worker  cd ruby && bash travis-test.sh ruby-2.7.0 && cd ..
426*6777b538SAndroid Build Coastguard Worker}
427*6777b538SAndroid Build Coastguard Workerbuild_ruby30() {
428*6777b538SAndroid Build Coastguard Worker  internal_build_cpp  # For conformance tests.
429*6777b538SAndroid Build Coastguard Worker  cd ruby && bash travis-test.sh ruby-3.0.2 && cd ..
430*6777b538SAndroid Build Coastguard Worker}
431*6777b538SAndroid Build Coastguard Workerbuild_ruby31() {
432*6777b538SAndroid Build Coastguard Worker  internal_build_cpp  # For conformance tests.
433*6777b538SAndroid Build Coastguard Worker  cd ruby && bash travis-test.sh ruby-3.1.0 && cd ..
434*6777b538SAndroid Build Coastguard Worker}
435*6777b538SAndroid Build Coastguard Worker
436*6777b538SAndroid Build Coastguard Workerbuild_jruby92() {
437*6777b538SAndroid Build Coastguard Worker  internal_build_cpp                # For conformance tests.
438*6777b538SAndroid Build Coastguard Worker  internal_build_java jdk8 && cd .. # For Maven protobuf jar with local changes
439*6777b538SAndroid Build Coastguard Worker  cd ruby && bash travis-test.sh jruby-9.2.20.1 && cd ..
440*6777b538SAndroid Build Coastguard Worker}
441*6777b538SAndroid Build Coastguard Worker
442*6777b538SAndroid Build Coastguard Workerbuild_jruby93() {
443*6777b538SAndroid Build Coastguard Worker  internal_build_cpp                # For conformance tests.
444*6777b538SAndroid Build Coastguard Worker  internal_build_java jdk8 && cd .. # For Maven protobuf jar with local changes
445*6777b538SAndroid Build Coastguard Worker  cd ruby && bash travis-test.sh jruby-9.3.4.0 && cd ..
446*6777b538SAndroid Build Coastguard Worker}
447*6777b538SAndroid Build Coastguard Worker
448*6777b538SAndroid Build Coastguard Workeruse_php() {
449*6777b538SAndroid Build Coastguard Worker  VERSION=$1
450*6777b538SAndroid Build Coastguard Worker  export PATH=/usr/local/php-${VERSION}/bin:$PATH
451*6777b538SAndroid Build Coastguard Worker  internal_build_cpp
452*6777b538SAndroid Build Coastguard Worker}
453*6777b538SAndroid Build Coastguard Worker
454*6777b538SAndroid Build Coastguard Workerbuild_php() {
455*6777b538SAndroid Build Coastguard Worker  use_php $1
456*6777b538SAndroid Build Coastguard Worker  pushd php
457*6777b538SAndroid Build Coastguard Worker  rm -rf vendor
458*6777b538SAndroid Build Coastguard Worker  php -v
459*6777b538SAndroid Build Coastguard Worker  php -m
460*6777b538SAndroid Build Coastguard Worker  composer update
461*6777b538SAndroid Build Coastguard Worker  composer test
462*6777b538SAndroid Build Coastguard Worker  popd
463*6777b538SAndroid Build Coastguard Worker  (cd conformance && make test_php)
464*6777b538SAndroid Build Coastguard Worker}
465*6777b538SAndroid Build Coastguard Worker
466*6777b538SAndroid Build Coastguard Workertest_php_c() {
467*6777b538SAndroid Build Coastguard Worker  pushd php
468*6777b538SAndroid Build Coastguard Worker  rm -rf vendor
469*6777b538SAndroid Build Coastguard Worker  php -v
470*6777b538SAndroid Build Coastguard Worker  php -m
471*6777b538SAndroid Build Coastguard Worker  composer update
472*6777b538SAndroid Build Coastguard Worker  composer test_c
473*6777b538SAndroid Build Coastguard Worker  popd
474*6777b538SAndroid Build Coastguard Worker  (cd conformance && make test_php_c)
475*6777b538SAndroid Build Coastguard Worker}
476*6777b538SAndroid Build Coastguard Worker
477*6777b538SAndroid Build Coastguard Workerbuild_php_c() {
478*6777b538SAndroid Build Coastguard Worker  use_php $1
479*6777b538SAndroid Build Coastguard Worker  test_php_c
480*6777b538SAndroid Build Coastguard Worker}
481*6777b538SAndroid Build Coastguard Worker
482*6777b538SAndroid Build Coastguard Workerbuild_php7.0_mac() {
483*6777b538SAndroid Build Coastguard Worker  internal_build_cpp
484*6777b538SAndroid Build Coastguard Worker  # Install PHP
485*6777b538SAndroid Build Coastguard Worker  curl -s https://php-osx.liip.ch/install.sh | bash -s 7.0
486*6777b538SAndroid Build Coastguard Worker  PHP_FOLDER=`find /usr/local -type d -name "php5-7.0*"`  # The folder name may change upon time
487*6777b538SAndroid Build Coastguard Worker  test ! -z "$PHP_FOLDER"
488*6777b538SAndroid Build Coastguard Worker  export PATH="$PHP_FOLDER/bin:$PATH"
489*6777b538SAndroid Build Coastguard Worker
490*6777b538SAndroid Build Coastguard Worker  # Install Composer
491*6777b538SAndroid Build Coastguard Worker  wget https://getcomposer.org/download/2.0.13/composer.phar --progress=dot:mega -O /usr/local/bin/composer
492*6777b538SAndroid Build Coastguard Worker  chmod a+x /usr/local/bin/composer
493*6777b538SAndroid Build Coastguard Worker
494*6777b538SAndroid Build Coastguard Worker  # Install valgrind
495*6777b538SAndroid Build Coastguard Worker  echo "#! /bin/bash" > valgrind
496*6777b538SAndroid Build Coastguard Worker  chmod ug+x valgrind
497*6777b538SAndroid Build Coastguard Worker  sudo mv valgrind /usr/local/bin/valgrind
498*6777b538SAndroid Build Coastguard Worker
499*6777b538SAndroid Build Coastguard Worker  # Test
500*6777b538SAndroid Build Coastguard Worker  test_php_c
501*6777b538SAndroid Build Coastguard Worker}
502*6777b538SAndroid Build Coastguard Worker
503*6777b538SAndroid Build Coastguard Workerbuild_php7.3_mac() {
504*6777b538SAndroid Build Coastguard Worker  internal_build_cpp
505*6777b538SAndroid Build Coastguard Worker  # Install PHP
506*6777b538SAndroid Build Coastguard Worker  # We can't test PHP 7.4 with these binaries yet:
507*6777b538SAndroid Build Coastguard Worker  #   https://github.com/liip/php-osx/issues/276
508*6777b538SAndroid Build Coastguard Worker  curl -s https://php-osx.liip.ch/install.sh | bash -s 7.3
509*6777b538SAndroid Build Coastguard Worker  PHP_FOLDER=`find /usr/local -type d -name "php5-7.3*"`  # The folder name may change upon time
510*6777b538SAndroid Build Coastguard Worker  test ! -z "$PHP_FOLDER"
511*6777b538SAndroid Build Coastguard Worker  export PATH="$PHP_FOLDER/bin:$PATH"
512*6777b538SAndroid Build Coastguard Worker
513*6777b538SAndroid Build Coastguard Worker  # Install Composer
514*6777b538SAndroid Build Coastguard Worker  wget https://getcomposer.org/download/2.0.13/composer.phar --progress=dot:mega -O /usr/local/bin/composer
515*6777b538SAndroid Build Coastguard Worker  chmod a+x /usr/local/bin/composer
516*6777b538SAndroid Build Coastguard Worker
517*6777b538SAndroid Build Coastguard Worker  # Install valgrind
518*6777b538SAndroid Build Coastguard Worker  echo "#! /bin/bash" > valgrind
519*6777b538SAndroid Build Coastguard Worker  chmod ug+x valgrind
520*6777b538SAndroid Build Coastguard Worker  sudo mv valgrind /usr/local/bin/valgrind
521*6777b538SAndroid Build Coastguard Worker
522*6777b538SAndroid Build Coastguard Worker  # Test
523*6777b538SAndroid Build Coastguard Worker  test_php_c
524*6777b538SAndroid Build Coastguard Worker}
525*6777b538SAndroid Build Coastguard Worker
526*6777b538SAndroid Build Coastguard Workerbuild_php_compatibility() {
527*6777b538SAndroid Build Coastguard Worker  internal_build_cpp
528*6777b538SAndroid Build Coastguard Worker}
529*6777b538SAndroid Build Coastguard Worker
530*6777b538SAndroid Build Coastguard Workerbuild_php_multirequest() {
531*6777b538SAndroid Build Coastguard Worker  use_php 7.4
532*6777b538SAndroid Build Coastguard Worker  php/tests/multirequest.sh
533*6777b538SAndroid Build Coastguard Worker}
534*6777b538SAndroid Build Coastguard Worker
535*6777b538SAndroid Build Coastguard Workerbuild_php8.0_all() {
536*6777b538SAndroid Build Coastguard Worker  build_php 8.0
537*6777b538SAndroid Build Coastguard Worker  build_php 8.1
538*6777b538SAndroid Build Coastguard Worker  build_php_c 8.0
539*6777b538SAndroid Build Coastguard Worker  build_php_c 8.1
540*6777b538SAndroid Build Coastguard Worker}
541*6777b538SAndroid Build Coastguard Worker
542*6777b538SAndroid Build Coastguard Workerbuild_php_all_32() {
543*6777b538SAndroid Build Coastguard Worker  build_php 7.0
544*6777b538SAndroid Build Coastguard Worker  build_php 7.1
545*6777b538SAndroid Build Coastguard Worker  build_php 7.4
546*6777b538SAndroid Build Coastguard Worker  build_php_c 7.0
547*6777b538SAndroid Build Coastguard Worker  build_php_c 7.1
548*6777b538SAndroid Build Coastguard Worker  build_php_c 7.4
549*6777b538SAndroid Build Coastguard Worker  build_php_c 7.1-zts
550*6777b538SAndroid Build Coastguard Worker  build_php_c 7.2-zts
551*6777b538SAndroid Build Coastguard Worker  build_php_c 7.5-zts
552*6777b538SAndroid Build Coastguard Worker}
553*6777b538SAndroid Build Coastguard Worker
554*6777b538SAndroid Build Coastguard Workerbuild_php_all() {
555*6777b538SAndroid Build Coastguard Worker  build_php_all_32
556*6777b538SAndroid Build Coastguard Worker  build_php_multirequest
557*6777b538SAndroid Build Coastguard Worker  build_php_compatibility
558*6777b538SAndroid Build Coastguard Worker}
559*6777b538SAndroid Build Coastguard Worker
560*6777b538SAndroid Build Coastguard Workerbuild_benchmark() {
561*6777b538SAndroid Build Coastguard Worker  use_php 7.2
562*6777b538SAndroid Build Coastguard Worker  cd kokoro/linux/benchmark && ./run.sh
563*6777b538SAndroid Build Coastguard Worker}
564*6777b538SAndroid Build Coastguard Worker
565*6777b538SAndroid Build Coastguard Worker# -------- main --------
566*6777b538SAndroid Build Coastguard Worker
567*6777b538SAndroid Build Coastguard Workerif [ "$#" -ne 1 ]; then
568*6777b538SAndroid Build Coastguard Worker  echo "
569*6777b538SAndroid Build Coastguard WorkerUsage: $0 { cpp |
570*6777b538SAndroid Build Coastguard Worker            cpp_distcheck |
571*6777b538SAndroid Build Coastguard Worker            csharp |
572*6777b538SAndroid Build Coastguard Worker            java_jdk7 |
573*6777b538SAndroid Build Coastguard Worker            java_oracle7 |
574*6777b538SAndroid Build Coastguard Worker            java_jdk8 |
575*6777b538SAndroid Build Coastguard Worker            java_jdk11 |
576*6777b538SAndroid Build Coastguard Worker            java_jdk17 |
577*6777b538SAndroid Build Coastguard Worker            java_linkage_monitor |
578*6777b538SAndroid Build Coastguard Worker            objectivec_ios |
579*6777b538SAndroid Build Coastguard Worker            objectivec_ios_debug |
580*6777b538SAndroid Build Coastguard Worker            objectivec_ios_release |
581*6777b538SAndroid Build Coastguard Worker            objectivec_osx |
582*6777b538SAndroid Build Coastguard Worker            objectivec_tvos |
583*6777b538SAndroid Build Coastguard Worker            objectivec_tvos_debug |
584*6777b538SAndroid Build Coastguard Worker            objectivec_tvos_release |
585*6777b538SAndroid Build Coastguard Worker            python |
586*6777b538SAndroid Build Coastguard Worker            python_cpp |
587*6777b538SAndroid Build Coastguard Worker            python_compatibility |
588*6777b538SAndroid Build Coastguard Worker            ruby23 |
589*6777b538SAndroid Build Coastguard Worker            ruby24 |
590*6777b538SAndroid Build Coastguard Worker            ruby25 |
591*6777b538SAndroid Build Coastguard Worker            ruby26 |
592*6777b538SAndroid Build Coastguard Worker            ruby27 |
593*6777b538SAndroid Build Coastguard Worker            ruby30 |
594*6777b538SAndroid Build Coastguard Worker            ruby31 |
595*6777b538SAndroid Build Coastguard Worker            jruby92 |
596*6777b538SAndroid Build Coastguard Worker            jruby93 |
597*6777b538SAndroid Build Coastguard Worker            ruby_all |
598*6777b538SAndroid Build Coastguard Worker            php_all |
599*6777b538SAndroid Build Coastguard Worker            php_all_32 |
600*6777b538SAndroid Build Coastguard Worker            php7.0_mac |
601*6777b538SAndroid Build Coastguard Worker            php7.3_mac |
602*6777b538SAndroid Build Coastguard Worker            dist_install |
603*6777b538SAndroid Build Coastguard Worker            benchmark }
604*6777b538SAndroid Build Coastguard Worker"
605*6777b538SAndroid Build Coastguard Worker  exit 1
606*6777b538SAndroid Build Coastguard Workerfi
607*6777b538SAndroid Build Coastguard Worker
608*6777b538SAndroid Build Coastguard Workerset -e  # exit immediately on error
609*6777b538SAndroid Build Coastguard Workerset -x  # display all commands
610*6777b538SAndroid Build Coastguard Workercd $(dirname $0)
611*6777b538SAndroid Build Coastguard Workereval "build_$1"
612