Bazel bootstrapping: make it work on Windows again In this change: (1) add a sanity check to verify that GNU bintools are on the PATH (2) correct the PATH on Windows if (1) failed (3) use "<user>/My Documents/Temp" as the default temp directory instead of "%windir%/Temp", because the latter is non-writable Motivated by: https://github.com/bazelbuild/bazel/issues/2431 https://github.com/bazelbuild/bazel/issues/2449 -- PiperOrigin-RevId: 146006796 MOS_MIGRATED_REVID=146006796
diff --git a/compile.sh b/compile.sh index dfc3d71..67223e6 100755 --- a/compile.sh +++ b/compile.sh
@@ -22,6 +22,26 @@ set -o errexit +# Correct PATH on Windows, to avoid using "FIND.EXE" instead of "/usr/bin/find" +# etc, leading to confusing errors. +export BAZEL_OLD_PATH=$PATH +case "$(uname -s | tr [:upper:] [:lower:])" in +msys*|mingw*) + # Check that the PATH is set up correctly by attempting to locate `[`. + # This ensures that `which` is installed correctly and can succeed, while + # also avoids accidentally locating a tool that exists in plain Windows too + # (like "find" for "FIND.EXE"). + which [ >&/dev/null || export PATH="/bin:/usr/bin:$PATH" +esac + +# Check that the bintools can be found, otherwise we would see very confusing +# error messages. +which [ >&/dev/null || { + echo >&2 "ERROR: cannot locate GNU bintools; check your PATH." + echo >&2 " (You may need to run 'export PATH=/bin:/usr/bin:\$PATH)'" + exit 1 +} + cd "$(dirname "$0")" # Set the default verbose mode in buildenv.sh so that we do not display command
diff --git a/scripts/bootstrap/buildenv.sh b/scripts/bootstrap/buildenv.sh index 502f2c1..60a375d 100755 --- a/scripts/bootstrap/buildenv.sh +++ b/scripts/bootstrap/buildenv.sh
@@ -84,20 +84,15 @@ JAVA_HOME="${JAVA_HOME:-$(ls -d /c/Program\ Files/Java/jdk* | sort | tail -n 1)}" esac -# Extension for executables. EXE_EXT="" -case "${PLATFORM}" in -msys*|mingw*) +if [ "${PLATFORM}" == "mingw" ]; then + # Extension for executables. EXE_EXT=".exe" -esac -# Fix TMPDIR on msys -case "${PLATFORM}" in -msys*|mingw*) - default_tmp=${TMP:-$(cygpath -W)/Temp} + # Fix TMPDIR on msys + default_tmp=${TMP:-$(cygpath -mO)/Temp} TMPDIR=$(cygpath -ml "${TMPDIR:-$default_tmp}") -esac - +fi # Whether we display build messages or not. We set this conditionally because # the file including us or the user may already have defined VERBOSE to their @@ -118,6 +113,11 @@ ATEXIT_HANDLERS="${ATEXIT_HANDLERS} ${handler}" } +function restore_saved_path() { + export PATH=$BAZEL_OLD_PATH + export BAZEL_OLD_PATH= +} + # Exit routine to run all registered atexit handlers. # # If the program exited with an error, this exit routine will also exit with the @@ -146,6 +146,7 @@ function tempdir() { local tmp=${TMPDIR:-/tmp} + mkdir -p ${tmp} local DIR="$(mktemp -d ${tmp%%/}/bazel_XXXXXXXX)" mkdir -p "${DIR}" local DIRBASE=$(basename "${DIR}") @@ -164,6 +165,7 @@ } atexit cleanup_phasefile +atexit restore_saved_path # Excutes a command respecting the current verbosity settings. #