diff options
author | Lukas Larsson <lukas@erlang.org> | 2020-01-23 13:21:26 +0100 |
---|---|---|
committer | Dan Gudmundsson <dgud@erlang.org> | 2020-01-24 12:06:18 +0100 |
commit | a6ac3098027dc2eeb3506cf9ae4cc43be225222c (patch) | |
tree | 5411fa42a9263913457d97f7b3403bfcf382d34d | |
parent | 5371e92a72e54407e2c466b8fb64306200817a32 (diff) | |
download | erlang-a6ac3098027dc2eeb3506cf9ae4cc43be225222c.tar.gz |
kernel: Find executable from WSLPATH on windows
-rw-r--r-- | erts/etc/win32/erl.c | 21 | ||||
-rwxr-xr-x | otp_build | 19 |
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) { @@ -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 () |