Disable PrintPreviewTest.TaskManagerNewPrintPreview.
[chromium-blink-merge.git] / mojo / tools / mojob.sh
blobe0804d1ef656f98b6bd27c800c66d5a204c0f763
1 #!/bin/bash
2 # Copyright 2013 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file.
6 # This a simple script to make building/testing Mojo components easier (on
7 # Linux).
9 # TODO(vtl): Maybe make the test runner smart and not run unchanged test
10 # binaries.
11 # TODO(vtl) Maybe also provide a way to pass command-line arguments to the test
12 # binaries.
14 do_help() {
15 cat << EOF
16 Usage: $(basename "$0") [command|option ...]
18 command should be one of:
19 build - Build.
20 test - Run unit tests (does not build).
21 perftest - Run perf tests (does not build).
22 pytest - Run Python unit tests.
23 gyp - Run gyp for mojo (does not sync).
24 gypall - Run gyp for all of chromium (does not sync).
25 sync - Sync using gclient (does not run gyp).
26 show-bash-alias - Outputs an appropriate bash alias for mojob. In bash do:
27 \$ eval \`mojo/tools/mojob.sh show-bash-alias\`
29 option (which will only apply to following commands) should be one of:
30 Build/test options (specified before build/test/perftest):
31 --debug - Build/test in Debug mode.
32 --release - Build/test in Release mode.
33 --debug-and-release - Build/test in both Debug and Release modes (default).
34 Compiler options (specified before gyp):
35 --clang - Use clang (default).
36 --gcc - Use gcc.
37 Component options:
38 --shared Build components as shared libraries (default).
39 --static Build components as static libraries.
40 Use goma:
41 --use-goma - Use goma if \$GOMA_DIR is set or \$HOME/goma exists (default).
42 --no-use-goma - Do not use goma.
44 Note: It will abort on the first failure (if any).
45 EOF
48 do_build() {
49 echo "Building in out/$1 ..."
50 if [ "$GOMA" = "auto" -a -v GOMA_DIR ]; then
51 ninja -j 1000 -l 100 -C "out/$1" mojo || exit 1
52 else
53 ninja -C "out/$1" mojo || exit 1
57 do_unittests() {
58 echo "Running unit tests in out/$1 ..."
59 mojo/tools/test_runner.py mojo/tools/data/unittests "out/$1" \
60 mojob_test_successes || exit 1
63 do_perftests() {
64 echo "Running perf tests in out/$1 ..."
65 "out/$1/mojo_public_system_perftests" || exit 1
68 do_pytests() {
69 python mojo/tools/run_mojo_python_tests.py || exit 1
72 do_gyp() {
73 local gyp_defines="$(make_gyp_defines)"
74 echo "Running gyp for mojo with GYP_DEFINES=$gyp_defines ..."
75 GYP_DEFINES="$gyp_defines" build/gyp_chromium mojo/mojo.gyp || exit 1
78 do_gypall() {
79 local gyp_defines="$(make_gyp_defines)"
80 echo "Running gyp for everything with GYP_DEFINES=$gyp_defines ..."
81 GYP_DEFINES="$gyp_defines" build/gyp_chromium || exit 1
84 do_sync() {
85 # Note: sync only (with hooks, but no gyp-ing).
86 GYP_CHROMIUM_NO_ACTION=1 gclient sync || exit 1
89 # Valid values: Debug, Release, or Debug_and_Release.
90 BUILD_TEST_TYPE=Debug_and_Release
91 should_do_Debug() {
92 test "$BUILD_TEST_TYPE" = Debug -o "$BUILD_TEST_TYPE" = Debug_and_Release
94 should_do_Release() {
95 test "$BUILD_TEST_TYPE" = Release -o "$BUILD_TEST_TYPE" = Debug_and_Release
98 # Valid values: clang or gcc.
99 COMPILER=clang
100 # Valid values: shared or static.
101 COMPONENT=shared
102 # Valid values: auto or disabled.
103 GOMA=auto
104 make_gyp_defines() {
105 local options=()
106 # Always include these options.
107 options+=("use_aura=1")
108 case "$COMPILER" in
109 clang)
110 options+=("clang=1")
112 gcc)
113 options+=("clang=0")
115 esac
116 case "$COMPONENT" in
117 shared)
118 options+=("component=shared_library")
120 static)
121 options+=("component=static_library")
123 esac
124 case "$GOMA" in
125 auto)
126 if [ -v GOMA_DIR ]; then
127 options+=("use_goma=1" "gomadir=\"${GOMA_DIR}\"")
128 else
129 options+=("use_goma=0")
132 disabled)
133 options+=("use_goma=0")
135 esac
136 echo "${options[*]}"
139 set_goma_dir_if_necessary() {
140 if [ "$GOMA" = "auto" -a ! -v GOMA_DIR ]; then
141 if [ -d "${HOME}/goma" ]; then
142 GOMA_DIR="${HOME}/goma"
147 start_goma_if_necessary() {
148 if [ "$GOMA" = "auto" -a -v GOMA_DIR ]; then
149 "${GOMA_DIR}/goma_ctl.py" ensure_start
153 # We're in src/mojo/tools. We want to get to src.
154 cd "$(realpath "$(dirname "$0")")/../.."
156 if [ $# -eq 0 ]; then
157 do_help
158 exit 0
161 for arg in "$@"; do
162 case "$arg" in
163 # Commands -----------------------------------------------------------------
164 help|--help)
165 do_help
166 exit 0
168 build)
169 set_goma_dir_if_necessary
170 start_goma_if_necessary
171 should_do_Debug && do_build Debug
172 should_do_Release && do_build Release
174 test)
175 should_do_Debug && do_unittests Debug
176 should_do_Release && do_unittests Release
178 perftest)
179 should_do_Debug && do_perftests Debug
180 should_do_Release && do_perftests Release
182 pytest)
183 do_pytests
185 gyp)
186 set_goma_dir_if_necessary
187 do_gyp
189 gypall)
190 set_goma_dir_if_necessary
191 do_gypall
193 sync)
194 do_sync
196 show-bash-alias)
197 # You want to type something like:
198 # alias mojob=\
199 # '"$(pwd | sed '"'"'s/\(.*\/src\).*/\1/'"'"')/mojo/tools/mojob.sh"'
200 # This is quoting hell, so we simply escape every non-alphanumeric
201 # character.
202 echo alias\ mojob\=\'\"\$\(pwd\ \|\ sed\ \'\"\'\"\'s\/\\\(\.\*\\\/src\\\)\
203 \.\*\/\\1\/\'\"\'\"\'\)\/mojo\/tools\/mojob\.sh\"\'
205 # Options ------------------------------------------------------------------
206 --debug)
207 BUILD_TEST_TYPE=Debug
209 --release)
210 BUILD_TEST_TYPE=Release
212 --debug-and-release)
213 BUILD_TEST_TYPE=Debug_and_Release
215 --clang)
216 COMPILER=clang
218 --gcc)
219 COMPILER=gcc
221 --shared)
222 COMPONENT=shared
224 --static)
225 COMPONENT=static
227 --use-goma)
228 GOMA=auto
230 --no-use-goma)
231 GOMA=disabled
234 echo "Unknown command \"${arg}\". Try \"$(basename "$0") help\"."
235 exit 1
237 esac
238 done