Bootstrapping: don't use convenience symlinks
When `compile.sh` builds bazel using bazel, it
copies the resulting binary to `output/bazel`.
However sometimes the convenience symlink
`bazel-bin` is not created, probably because an
old one is still around and cannot be deleted.
That is clearly a bug, but to work around it, the
bootstrap builder shouldn't attempt to rely on the
creation of these symlinks in the first place.
This change updates compile.sh to use `bazel info`
to locate the `bazel-bin` directory's real path,
and attempt to copy the bazel binary from there.
This works around
https://github.com/bazelbuild/bazel/issues/1827
--
MOS_MIGRATED_REVID=134398451
diff --git a/compile.sh b/compile.sh
index 53fc412..484b043 100755
--- a/compile.sh
+++ b/compile.sh
@@ -99,8 +99,13 @@
new_step 'Building Bazel with Bazel'
display "."
log "Building output/bazel"
- bazel_build "src:bazel${EXE_EXT}"
- cp -f "bazel-bin/src/bazel${EXE_EXT}" "output/bazel${EXE_EXT}"
+ bazel_build "src:bazel${EXE_EXT}" \
+ || fail "Could not build Bazel"
+ bazel_bin_path="$(get_bazel_bin_path)/src/bazel${EXE_EXT}"
+ [ -e "$bazel_bin_path" ] \
+ || fail "Could not find freshly built Bazel binary at '$bazel_bin_path'"
+ cp -f "$bazel_bin_path" "output/bazel${EXE_EXT}" \
+ || fail "Could not copy '$bazel_bin_path' to 'output/bazel${EXE_EXT}'"
chmod 0755 "output/bazel${EXE_EXT}"
BAZEL="$(pwd)/output/bazel${EXE_EXT}"
fi
diff --git a/scripts/bootstrap/bootstrap.sh b/scripts/bootstrap/bootstrap.sh
index c656e15..20f5bba 100755
--- a/scripts/bootstrap/bootstrap.sh
+++ b/scripts/bootstrap/bootstrap.sh
@@ -45,24 +45,31 @@
fi
if [ -z "${BAZEL-}" ]; then
- function bazel_build() {
- bootstrap_build ${BAZEL_ARGS-} \
- --verbose_failures \
- --javacopt="-g -source ${JAVA_VERSION} -target ${JAVA_VERSION}" \
- "${EMBED_LABEL_ARG[@]}" \
- "${@}"
+ function run_bootstrapping_bazel() {
+ local command=$1
+ shift
+ run_bazel_jar $command \
+ ${BAZEL_ARGS-} --verbose_failures \
+ --javacopt="-g -source ${JAVA_VERSION} -target ${JAVA_VERSION}" "${@}"
}
else
- function bazel_build() {
- ${BAZEL} --bazelrc=${BAZELRC} ${BAZEL_DIR_STARTUP_OPTIONS} build \
- ${BAZEL_ARGS-} \
- --verbose_failures \
- --javacopt="-g -source ${JAVA_VERSION} -target ${JAVA_VERSION}" \
- "${EMBED_LABEL_ARG[@]}" \
- "${@}"
+ function run_bootstrapping_bazel() {
+ local command=$1
+ shift
+ ${BAZEL} --bazelrc=${BAZELRC} ${BAZEL_DIR_STARTUP_OPTIONS} $command \
+ ${BAZEL_ARGS-} --verbose_failures \
+ --javacopt="-g -source ${JAVA_VERSION} -target ${JAVA_VERSION}" "${@}"
}
fi
+function bazel_build() {
+ run_bootstrapping_bazel build "${EMBED_LABEL_ARG[@]}" "$@"
+}
+
+function get_bazel_bin_path() {
+ run_bootstrapping_bazel info "bazel-bin" || echo "bazel-bin"
+}
+
function md5_outputs() {
[ -n "${BAZEL_TEST_XTRACE:-}" ] && set +x # Avoid garbage in the output
# runfiles/MANIFEST & runfiles_manifest contain absolute path, ignore.
diff --git a/scripts/bootstrap/buildenv.sh b/scripts/bootstrap/buildenv.sh
index ebcf942..4a94687 100755
--- a/scripts/bootstrap/buildenv.sh
+++ b/scripts/bootstrap/buildenv.sh
@@ -158,7 +158,7 @@
exitCode=1
fi
echo >&2
- echo "$@" >&2
+ echo "ERROR: $@" >&2
exit $exitCode
}
diff --git a/scripts/bootstrap/compile.sh b/scripts/bootstrap/compile.sh
index 77372f0..c72b9f7 100755
--- a/scripts/bootstrap/compile.sh
+++ b/scripts/bootstrap/compile.sh
@@ -302,8 +302,9 @@
cp tools/osx/xcode_locator_stub.sh ${ARCHIVE_DIR}/_embedded_binaries/xcode-locator
fi
-# bazel build using bootstrap version
-function bootstrap_build() {
+function run_bazel_jar() {
+ local command=$1
+ shift
"${JAVA_HOME}/bin/java" \
-XX:+HeapDumpOnOutOfMemoryError -Xverify:none -Dfile.encoding=ISO-8859-1 \
-XX:HeapDumpPath=${OUTPUT_DIR} \
@@ -319,7 +320,7 @@
--nofatal_event_bus_exceptions \
${BAZEL_DIR_STARTUP_OPTIONS} \
${BAZEL_BOOTSTRAP_STARTUP_OPTIONS:-} \
- build \
+ $command \
--ignore_unsupported_sandboxing \
--startup_time=329 --extract_data_time=523 \
--rc_source=/dev/null --isatty=1 \