@@ -11,3 +11,161 @@ index 384d018..2cbbb4a 100644
11
11
},
12
12
}),
13
13
visibility = ["//browsers:__subpackages__"],
14
+ - -
15
+ 2.20.1
16
+
17
+ From a7c1f6b825640a95e687adc884a442fde23ccd95 Mon Sep 17 00:00:00 2001
18
+ From: Yun Peng <pcloudy@google.com>
19
+ Date: Tue, 3 Sep 2019 19:24:02 +0200
20
+ Subject: [PATCH] Update rlocation funciton in windows_utils.bzl (#387)
21
+
22
+ ---
23
+ web/internal/windows_utils.bzl | 76 ++++++++++++++++++++++++++--------
24
+ 1 file changed, 59 insertions(+), 17 deletions(-)
25
+
26
+ diff --git a/web/internal/windows_utils.bzl b/web/internal/windows_utils.bzl
27
+ index 429a01a..576053a 100644
28
+ --- a/web/internal/windows_utils.bzl
29
+ +++ b/web/internal/windows_utils.bzl
30
+ @@ -17,6 +17,49 @@
31
+ These functions help making rules work on Windows.
32
+ """
33
+
34
+ + BATCH_RLOCATION_FUNCTION = r"""
35
+ + rem Usage of rlocation function:
36
+ + rem call :rlocation <runfile_path> <abs_path>
37
+ + rem The rlocation function maps the given <runfile_path> to its absolute
38
+ + rem path and stores the result in a variable named <abs_path>.
39
+ + rem This function fails if the <runfile_path> doesn't exist in mainifest
40
+ + rem file.
41
+ + :: Start of rlocation
42
+ + goto :rlocation_end
43
+ + :rlocation
44
+ + if "%~2" equ "" (
45
+ + echo>&2 ERROR: Expected two arguments for rlocation function.
46
+ + exit 1
47
+ + )
48
+ + if "%RUNFILES_MANIFEST_ONLY%" neq "1" (
49
+ + set %~2=%~1
50
+ + exit /b 0
51
+ + )
52
+ + if "%RUNFILES_MANIFEST_FILE%" equ "" (
53
+ + set RUNFILES_MANIFEST_FILE=%~f0.runfiles\MANIFEST
54
+ + )
55
+ + if not exist "%RUNFILES_MANIFEST_FILE%" (
56
+ + set RUNFILES_MANIFEST_FILE=%~f0.runfiles_manifest
57
+ + )
58
+ + set MF=%RUNFILES_MANIFEST_FILE:/=\%
59
+ + if not exist "%MF%" (
60
+ + echo>&2 ERROR: Manifest file %MF% does not exist.
61
+ + exit 1
62
+ + )
63
+ + set runfile_path=%~1
64
+ + for /F "tokens=2* usebackq" %%i in (`%SYSTEMROOT%\system32\findstr.exe /l /c:"!runfile_path! " "%MF%"`) do (
65
+ + set abs_path=%%i
66
+ + )
67
+ + if "!abs_path!" equ "" (
68
+ + echo>&2 ERROR: !runfile_path! not found in runfiles manifest
69
+ + exit 1
70
+ + )
71
+ + set %~2=!abs_path!
72
+ + exit /b 0
73
+ + :rlocation_end
74
+ + :: End of rlocation
75
+ + """
76
+ +
77
+ def is_windows(ctx):
78
+ """
79
+ Check if we are building for Windows.
80
+ @@ -27,6 +70,14 @@ def is_windows(ctx):
81
+ # https://github.com/bazelbuild/bazel/issues/9209 is resolved.
82
+ return ctx.configuration.host_path_separator == ";"
83
+
84
+ + # Helper function to convert a file to a path in the MANIFEST file
85
+ + def _file_to_manifest_path(ctx, f):
86
+ + p = f.short_path
87
+ + if p.startswith("../"):
88
+ + return p[3:]
89
+ + else:
90
+ + return ctx.workspace_name + "/" + p
91
+ +
92
+ def create_windows_native_launcher_script(ctx, shell_script):
93
+ """
94
+ Create a Windows Batch file to launch the given shell script.
95
+ @@ -41,25 +92,16 @@ def create_windows_native_launcher_script(ctx, shell_script):
96
+ content = r"""@echo off
97
+ SETLOCAL ENABLEEXTENSIONS
98
+ SETLOCAL ENABLEDELAYEDEXPANSION
99
+ - if "%RUNFILES_MANIFEST_ONLY%" neq "1" (
100
+ - set run_script={sh_script}
101
+ - goto :run
102
+ - )
103
+ - set MF=%RUNFILES_MANIFEST_FILE:/=\%
104
+ - set script={sh_script}
105
+ - if "!script:~0,9!" equ "external/" (set script=!script:~9!) else (set script=!TEST_WORKSPACE!/!script!)
106
+ - for /F "tokens=2* usebackq" %%i in (`findstr.exe /l /c:"!script! " "%MF%"`) do (
107
+ - set run_script=%%i
108
+ - )
109
+ - if "!run_script!" equ "" (
110
+ - echo>&2 ERROR: !script! not found in runfiles manifest
111
+ - exit /b 1
112
+ - )
113
+ - :run
114
+ - {bash_bin} -c "!run_script!"
115
+ + set RUNFILES_MANIFEST_ONLY=1
116
+ + {rlocation_function}
117
+ + call :rlocation "{sh_script}" run_script
118
+ + for %%a in ("{bash_bin}") do set "bash_bin_dir=%%~dpa"
119
+ + set PATH=%bash_bin_dir%;%PATH%
120
+ + {bash_bin} -c "!run_script! %*"
121
+ """.format(
122
+ bash_bin = ctx.toolchains["@bazel_tools//tools/sh:toolchain_type"].path,
123
+ - sh_script = shell_script.short_path,
124
+ + sh_script = _file_to_manifest_path(ctx, shell_script),
125
+ + rlocation_function = BATCH_RLOCATION_FUNCTION,
126
+ ),
127
+ is_executable = True,
128
+ )
129
+ - -
130
+ 2.20.1
131
+
132
+ From 9c1e6ce41e458f41654fe609d76220770562c9b4 Mon Sep 17 00:00:00 2001
133
+ From: Paul Gschwendtner <paulgschwendtner@gmail.com>
134
+ Date: Mon, 9 Sep 2019 20:43:49 +0200
135
+ Subject: [PATCH] web test not launching on windows if shell toolchain path
136
+ contains whitespace (#389)
137
+
138
+ The windows launcher code does currently break if the path to the bash binary contains
139
+ a whitespace. This is common on windows where programs are stored under `C:\Program Files`.
140
+
141
+ e.g.
142
+
143
+ ```
144
+ :run
145
+ C:/Program Files/msys2/usr/bin/bash.exe -c "!run_script!"
146
+ ```
147
+
148
+ The path needs to be quoted so that it won't be incorrectly picked up as two separate commands. Resulting in an
149
+ exception like:
150
+
151
+ ```
152
+ 'C:/Program' is not recognized as an internal or external command,
153
+ operable program or batch file.
154
+ ```
155
+ ---
156
+ web/internal/windows_utils.bzl | 2 +-
157
+ 1 file changed, 1 insertion(+), 1 deletion(-)
158
+
159
+ diff --git a/web/internal/windows_utils.bzl b/web/internal/windows_utils.bzl
160
+ index 576053a..4bec20e 100644
161
+ --- a/web/internal/windows_utils.bzl
162
+ +++ b/web/internal/windows_utils.bzl
163
+ @@ -97,7 +97,7 @@ set RUNFILES_MANIFEST_ONLY=1
164
+ call :rlocation "{sh_script}" run_script
165
+ for %%a in ("{bash_bin}") do set "bash_bin_dir=%%~dpa"
166
+ set PATH=%bash_bin_dir%;%PATH%
167
+ - {bash_bin} -c "!run_script! %*"
168
+ + "{bash_bin}" -c "!run_script! %*"
169
+ """.format(
170
+ bash_bin = ctx.toolchains["@bazel_tools//tools/sh:toolchain_type"].path,
171
+ sh_script = _file_to_manifest_path(ctx, shell_script),
0 commit comments