On Windows, build ``bazel.exe`` instead of just ``bazel``.

Needed for #276.

--
MOS_MIGRATED_REVID=114693711
diff --git a/compile.sh b/compile.sh
index 3a0869a..341a163 100755
--- a/compile.sh
+++ b/compile.sh
@@ -91,10 +91,10 @@
   new_step 'Building Bazel with Bazel'
   display "."
   log "Building output/bazel"
-  bazel_build src:bazel
-  cp -f bazel-bin/src/bazel output/bazel
-  chmod 0755 output/bazel
-  BAZEL=$(pwd)/output/bazel
+  bazel_build "src:bazel${EXE_EXT}"
+  cp -f "bazel-bin/src/bazel${EXE_EXT}" "output/bazel${EXE_EXT}"
+  chmod 0755 "output/bazel${EXE_EXT}"
+  BAZEL="$(pwd)/output/bazel${EXE_EXT}"
 fi
 
 #
diff --git a/scripts/bootstrap/buildenv.sh b/scripts/bootstrap/buildenv.sh
index c2b30fa..63d0897 100755
--- a/scripts/bootstrap/buildenv.sh
+++ b/scripts/bootstrap/buildenv.sh
@@ -36,6 +36,13 @@
   MACHINE_IS_ARM='yes'
 fi
 
+# Extension for executables.
+EXE_EXT=""
+case "${PLATFORM}" in
+msys*|mingw*)
+  EXE_EXT=".exe"
+esac
+
 ATEXIT_=""
 function atexit() {
   ATEXIT_="$1; ${ATEXIT_}"
diff --git a/scripts/bootstrap/compile.sh b/scripts/bootstrap/compile.sh
index f9e6d31..9195e7a 100755
--- a/scripts/bootstrap/compile.sh
+++ b/scripts/bootstrap/compile.sh
@@ -31,9 +31,6 @@
 
 LDFLAGS=${LDFLAGS:-""}
 
-# Extension for executables (.exe on Windows).
-EXE_EXT=""
-
 MSYS_DLLS=""
 PATHSEP=":"
 
@@ -76,8 +73,6 @@
 msys*|mingw*)
   # Use a simplified platform string.
   PLATFORM="mingw"
-  # Workaround for msys issue which causes omission of std::to_string.
-  EXE_EXT=".exe"
   PATHSEP=";"
   # Find the latest available version of the SDK.
   JAVA_HOME="${JAVA_HOME:-$(ls -d /c/Program\ Files/Java/jdk* | sort | tail -n 1)}"
diff --git a/src/BUILD b/src/BUILD
index 9741c3d..af54201 100644
--- a/src/BUILD
+++ b/src/BUILD
@@ -161,6 +161,26 @@
     "_notools",
 ]]
 
+# Build an executable named `bazel.exe`.
+# Works on all platforms but only makes sense on Windows.
+# Workaround for non-configurability of genrule's `outs` attribute.
+[genrule(
+    name = "bazel-bin" + suffix + ".exe",
+    srcs = [":bazel-bin" + suffix],
+    outs = ["bazel" + suffix + ".exe"],
+    cmd = "cp $(location :bazel-bin" + suffix + ") $@",
+    executable = 1,
+    output_to_bindir = 1,
+    visibility = [
+        "//scripts:__pkg__",  # For bash completion generation
+        "//scripts/packages:__pkg__",  # For installer generation
+        "//src/test:__subpackages__",  # For integration tests
+    ],
+) for suffix in [
+    "",
+    "_notools",
+]]
+
 config_setting(
     name = "darwin",
     values = {"cpu": "darwin"},