windows: make zsyscall_windows.go generatable on non-WSL env

mkerrors.bash requires a Windows host, as it hard-codes paths like
/mnt/c/Program Files (x86)/Windows Kits.
But this does not allow to generate in non-WSL env.

Currently mkerrors.bash runs earlier than mksyscall_windows.go
when we run `go generate` and it fails on non-WSL env.
So zsyscall_windows.go is not generated in that case.

To fix that, I reoreder of code generation in this CL so that we can
generate zsyscall_windows.go in non-WSL env.

Also update error message in mkerrors.bash.

Change-Id: I04eccdbfe1e1ff56f8c405250f0724000d66d579
Reviewed-on: https://go-review.googlesource.com/c/sys/+/178781
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
diff --git a/windows/mkerrors.go b/windows/gen.go
similarity index 79%
rename from windows/mkerrors.go
rename to windows/gen.go
index a204e6c..d08e277 100644
--- a/windows/mkerrors.go
+++ b/windows/gen.go
@@ -6,4 +6,4 @@
 
 package windows
 
-//go:generate ./mkerrors.bash zerrors_windows.go
+//go:generate ./generate.bash
diff --git a/windows/generate.bash b/windows/generate.bash
new file mode 100755
index 0000000..9916aa1
--- /dev/null
+++ b/windows/generate.bash
@@ -0,0 +1,15 @@
+#!/bin/bash
+
+# Copyright 2019 The Go Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style
+# license that can be found in the LICENSE file.
+
+set -e
+
+# For successful zsyscall_windows.go generation on non-WSL env, this should
+# run before mkerrors.bash.
+echo "# Generating zsyscall_windows.go ..."
+go run $(go env GOROOT)/src/syscall/mksyscall_windows.go -output zsyscall_windows.go eventlog.go service.go syscall_windows.go security_windows.go
+
+echo "# Generating zerrors_windows.go ..."
+./mkerrors.bash zerrors_windows.go
diff --git a/windows/mkerrors.bash b/windows/mkerrors.bash
index a70b24f..8e59e93 100755
--- a/windows/mkerrors.bash
+++ b/windows/mkerrors.bash
@@ -9,7 +9,7 @@
 
 [[ $# -eq 1 ]] || { echo "Usage: $0 OUTPUT_FILE.go" >&2; exit 1; }
 winerror="$(printf '%s\n' "/mnt/c/Program Files (x86)/Windows Kits/"/*/Include/*/shared/winerror.h | sort -Vr | head -n 1)"
-[[ -n $winerror ]] || { echo "Unable to find winerror.h" >&2; exit 1; }
+[[ -n $winerror ]] || { echo "Unable to find winerror.h; this expects to be run on Windows with WSL" >&2; exit 1; }
 
 declare -A errors
 
diff --git a/windows/mksyscall.go b/windows/mksyscall.go
deleted file mode 100644
index 6277057..0000000
--- a/windows/mksyscall.go
+++ /dev/null
@@ -1,9 +0,0 @@
-// Copyright 2009 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// +build generate
-
-package windows
-
-//go:generate go run $GOROOT/src/syscall/mksyscall_windows.go -output zsyscall_windows.go eventlog.go service.go syscall_windows.go security_windows.go