summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLukas Larsson <lukas@erlang.org>2020-01-23 13:21:26 +0100
committerDan Gudmundsson <dgud@erlang.org>2020-01-24 12:06:18 +0100
commita6ac3098027dc2eeb3506cf9ae4cc43be225222c (patch)
tree5411fa42a9263913457d97f7b3403bfcf382d34d
parent5371e92a72e54407e2c466b8fb64306200817a32 (diff)
downloaderlang-a6ac3098027dc2eeb3506cf9ae4cc43be225222c.tar.gz
kernel: Find executable from WSLPATH on windows
-rw-r--r--erts/etc/win32/erl.c21
-rwxr-xr-xotp_build19
2 files changed, 36 insertions, 4 deletions
diff --git a/erts/etc/win32/erl.c b/erts/etc/win32/erl.c
index b230aa6a40..7cbd0d027c 100644
--- a/erts/etc/win32/erl.c
+++ b/erts/etc/win32/erl.c
@@ -53,8 +53,9 @@ int wmain(int argc, wchar_t **argv)
HANDLE erlexec_handle; /* Instance */
ErlexecFunction *win_erlexec;
wchar_t *path = malloc(100*sizeof(wchar_t));
+ wchar_t *wslpath = malloc(100*sizeof(wchar_t));
wchar_t *npath;
- int pathlen;
+ int pathlen, wslpathlen;
char ** utf8argv;
int i, len;
@@ -66,9 +67,23 @@ int wmain(int argc, wchar_t **argv)
path = realloc(path,pathlen*sizeof(wchar_t));
GetEnvironmentVariableW(L"PATH",path,pathlen);
}
- pathlen = (wcslen(path) + wcslen(erlexec_dir) + 2);
+
+ if ((wslpathlen = GetEnvironmentVariableW(L"WSLENV",wslpath,100)) > 0) {
+ if ((wslpathlen = GetEnvironmentVariableW(L"WSLPATH",wslpath,100)) > 0) {
+ if (wslpathlen > 100) {
+ wslpath = realloc(wslpath,wslpathlen*sizeof(wchar_t));
+ GetEnvironmentVariableW(L"WSLPATH",wslpath,wslpathlen);
+ }
+ wslpathlen = wcslen(wslpath);
+ }
+ }
+ pathlen = (wcslen(path) + wslpathlen + wcslen(erlexec_dir) + 2);
npath = (wchar_t *) malloc(pathlen*sizeof(wchar_t));
- swprintf(npath,pathlen,L"%s;%s",erlexec_dir,path);
+ if(wslpathlen > 0) {
+ swprintf(npath,pathlen,L"%s;%s;%s",erlexec_dir,path,wslpath);
+ } else {
+ swprintf(npath,pathlen,L"%s;%s",erlexec_dir,path);
+ }
SetEnvironmentVariableW(L"PATH",npath);
if ((erlexec_handle = LoadLibraryW(erlexec_name)) == NULL) {
diff --git a/otp_build b/otp_build
index 8f611240e7..2027896446 100755
--- a/otp_build
+++ b/otp_build
@@ -811,7 +811,24 @@ setup_win32_cl_env ()
echo_setenv LIB "$LIB" ';'
echo_setenv LIBPATH "$LIBPATH" ';'
echo_setenv VCToolsRedistDir "$VCToolsRedistDir" ';'
- echo_setenv WSLENV "$WSLENV" ';'
+ echo_setenv WSLENV "$WSLENV:WSLPATH/l:CLASSPATH/l" ';'
+
+ save_ifs=$IFS
+ IFS=:
+ WSLPATH=""
+ for p in $PATH; do
+ if [ -d "$p" ]; then
+ case "$p" in
+ /mnt/c/*)
+ WSLPATH=$WSLPATH:$p
+ ;;
+ *)
+ ;;
+ esac
+ fi
+ done
+ IFS=$save_ifs
+ echo_setenv WSLPATH "$WSLPATH" ';'
}
lookup_prog_in_path ()