File 4701-Add-wsl-config-as-an-environment-to-otp-build-tools.patch of Package erlang

From 3a162745c62b1f46580bdc0851f17ac46937197c Mon Sep 17 00:00:00 2001
From: Dan Gudmundsson <dgud@erlang.org>
Date: Mon, 11 Nov 2019 15:41:43 +0100
Subject: [PATCH 1/6] Add wsl config as an environment to otp build tools

Allows "cross" building with native windows from WSL linux.

Currently we only support building on the windows disk,
old WSL installations can not access WSL disk at all and
on the newer ones it is still problematic.

Thus, create the erlang src/git on /mnt/c/<dir>/otp/
and don't create links from wsl to windows, that will
cause problems for the scripts and will not work.
Use:
  cd /mnt/c/<dir>/otp
  eval `./otp_build env_win32 ARCH`
  ./otp_build

To build with emu_cc (32 and 64) it needs mingw-gcc
On wsl ubuntu use: 'sudo apt-get install gcc-mingw-w64'
to install everything for both build targets.

Additional commit comments:
- Let configure (crypto/wx) search in '/mnt/c/DocumentedPaths'

- Use -Z7 for debug info
   Add debug info into .o files instead of vc120.pdb which
   makes parallel compilation more stable.

- Use mingw-gcc as emu_cc
   Packages available in ubuntu.

- Use $ERL_TOP/tmp for temporary directories
   Linux /tmp is not accessable in older wsl (arrived in Win 10 19.03).

- Quoting is problematic
   It seems to be impossible to handle 'spaces' in paths correct,
   the autotools are just not prepared to handle that
   and we depend on them.

Currently NOT supported but have been prepared for:
-Using wsl as disk
-- Ensure directory exists
    If linux file server is overloaded it may take a while until the
    directory is visible for windows programs.
-- Use absolute paths
    Windows tools needs absolute (the network path) to access
    files on the wsl drive.
    Also we can not use mixed mode (forward slashes) for network paths,
    windows programs don't recognize //wsl$/<install>/
---
 erts/aclocal.m4                                |  18 +-
 erts/etc/win32/wsl_tools/erl                   |  45 +++
 erts/etc/win32/wsl_tools/erlc                  |  60 ++++
 erts/etc/win32/wsl_tools/javac.sh              |  66 +++++
 erts/etc/win32/wsl_tools/make_bootstrap_ini.sh |  43 +++
 erts/etc/win32/wsl_tools/make_local_ini.sh     |  40 +++
 erts/etc/win32/wsl_tools/reg_query.sh          |  19 ++
 erts/etc/win32/wsl_tools/vc/ar.sh              |  48 ++++
 erts/etc/win32/wsl_tools/vc/cc.sh              | 382 +++++++++++++++++++++++++
 erts/etc/win32/wsl_tools/vc/coffix.c           | 161 +++++++++++
 erts/etc/win32/wsl_tools/vc/emu_cc.sh          | 100 +++++++
 erts/etc/win32/wsl_tools/vc/ld.sh              | 210 ++++++++++++++
 erts/etc/win32/wsl_tools/vc/mc.sh              |  96 +++++++
 erts/etc/win32/wsl_tools/vc/rc.sh              |  94 ++++++
 erts/etc/win32/wsl_tools/w32_path.sh           |  70 +++++
 lib/crypto/configure.in                        |  14 +-
 lib/wx/configure.in                            |  57 +++-
 otp_build                                      |  50 +++-
 18 files changed, 1550 insertions(+), 23 deletions(-)
 create mode 100755 erts/etc/win32/wsl_tools/erl
 create mode 100755 erts/etc/win32/wsl_tools/erlc
 create mode 100755 erts/etc/win32/wsl_tools/javac.sh
 create mode 100755 erts/etc/win32/wsl_tools/make_bootstrap_ini.sh
 create mode 100755 erts/etc/win32/wsl_tools/make_local_ini.sh
 create mode 100755 erts/etc/win32/wsl_tools/reg_query.sh
 create mode 100755 erts/etc/win32/wsl_tools/vc/ar.sh
 create mode 100755 erts/etc/win32/wsl_tools/vc/cc.sh
 create mode 100755 erts/etc/win32/wsl_tools/vc/coffix.c
 create mode 100755 erts/etc/win32/wsl_tools/vc/emu_cc.sh
 create mode 100755 erts/etc/win32/wsl_tools/vc/ld.sh
 create mode 100755 erts/etc/win32/wsl_tools/vc/mc.sh
 create mode 100755 erts/etc/win32/wsl_tools/vc/rc.sh
 create mode 100755 erts/etc/win32/wsl_tools/w32_path.sh

diff --git a/erts/aclocal.m4 b/erts/aclocal.m4
index 5437cf8255..6ad96222bb 100644
--- a/erts/aclocal.m4
+++ b/erts/aclocal.m4
@@ -127,13 +127,14 @@ if test "X$windows_environment_" != "Xchecked"; then
 windows_environment_=checked
 MIXED_CYGWIN=no
 MIXED_MSYS=no
+MIXED_VSL=no
 
 dnl MIXED_VC is Microsoft Visual C++ used as standard compiler
 MIXED_VC=no
 dnl MIXED_MINGW is mingw(32|64) used as standard compiler
 MIXED_MINGW=no
 
-AC_MSG_CHECKING(for mixed cygwin or msys and native VC++ environment)
+AC_MSG_CHECKING(for mixed mingw-gcc and native VC++ environment)
 if test "X$host" = "Xwin32" -a "x$GCC" != "xyes"; then
 	if test -x /usr/bin/msys-?.0.dll; then
 	        CFLAGS="$CFLAGS -O2"
@@ -147,9 +148,15 @@ if test "X$host" = "Xwin32" -a "x$GCC" != "xyes"; then
 		AC_MSG_RESULT([Cygwin and VC])
 		MIXED_VC=yes
 		CPPFLAGS="$CPPFLAGS -DERTS_MIXED_VC"
+        elif test -x /bin/wslpath; then
+		CFLAGS="$CFLAGS -O2"
+		MIXED_WSL=yes
+		AC_MSG_RESULT([WSL and VC])
+		MIXED_VC=yes
+		CPPFLAGS="$CPPFLAGS -DERTS_MIXED_VC"
 	else
 		AC_MSG_RESULT([undeterminable])
-		AC_MSG_ERROR(Seems to be mixed windows but not with cygwin, cannot handle this!)
+		AC_MSG_ERROR(Seems to be mixed windows but not within any known env, cannot handle this!)
 	fi
 else
 	AC_MSG_RESULT([no])
@@ -204,6 +211,13 @@ else
 	AC_MSG_RESULT([no])
 fi
 
+AC_MSG_CHECKING(if we mix WSL with another native compiler)
+if test "X$MIXED_WSL" = "Xyes" ; then
+	AC_MSG_RESULT([yes])
+else
+	AC_MSG_RESULT([no])
+fi
+
 fi
 ])
 
diff --git a/erts/etc/win32/wsl_tools/erl b/erts/etc/win32/wsl_tools/erl
new file mode 100755
index 0000000000..db24f6b4fe
--- /dev/null
+++ b/erts/etc/win32/wsl_tools/erl
@@ -0,0 +1,45 @@
+#! /bin/sh
+#
+# %CopyrightBegin%
+#
+# Copyright Ericsson AB 2002-2016. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# %CopyrightEnd%
+#
+# Note! This shellscript expects to be run in a wsl environment,
+# it converts erlc command lines to native windows erlc commands, which
+# basically means running the command wslpath on whatever is a path...
+
+CMD=""
+for x in "$@"; do
+    case "$x" in
+	-I/*|-o/*)
+	    y=`echo $x | sed 's,^-[Io]\(/.*\),\1,g'`;
+	    z=`echo $x | sed 's,^-\([Io]\)\(/.*\),\1,g'`;
+	    MPATH=`wslpath -m $y`;
+	    CMD="$CMD -$z\"$MPATH\"";;
+	/*)
+	    MPATH=`wslpath -m $x`;
+	    CMD="$CMD \"$MPATH\"";;
+	*)
+	    y=`echo $x | sed 's,",\\\",g'`;
+	    CMD="$CMD \"$y\"";;
+    esac
+done
+ERL_TOP=`wslpath -m $ERL_TOP`
+WSLENV="ERL_TOP/w:$WSLENV"
+export WSLENV
+export ERL_TOP
+eval erl.exe $CMD
diff --git a/erts/etc/win32/wsl_tools/erlc b/erts/etc/win32/wsl_tools/erlc
new file mode 100755
index 0000000000..956ac19abd
--- /dev/null
+++ b/erts/etc/win32/wsl_tools/erlc
@@ -0,0 +1,60 @@
+#! /bin/sh
+#
+# %CopyrightBegin%
+#
+# Copyright Ericsson AB 2002-2016. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# %CopyrightEnd%
+#
+
+
+CMD=""
+ECHO_ONLY=false
+for x in "$@"; do
+    case "$x" in
+	--echo_only)
+	    ECHO_ONLY=true;;
+	-I/*|-o/*)
+	    y=`echo $x | sed 's,^-[Io]\(/.*\),\1,g'`;
+	    z=`echo $x | sed 's,^-\([Io]\)\(/.*\),\1,g'`;
+	    MPATH=`wslpath -m $y`;
+	    CMD="$CMD -$z$MPATH";;
+	-pa/*)
+	    y=`echo $x | sed 's,^-pa\(/.*\),\1,g'`;
+	    MPATH=`wslpath -m $y`;
+	    CMD="$CMD -pa $MPATH";;
+	/*)
+	    MPATH=`wslpath -m $x`;
+	    CMD="$CMD \"$MPATH\"";;
+# Needed for  +'{preproc_flags,whatever}'
+	+{preproc_flags,*})
+	     y=`echo $x | sed 's,^+{preproc_flags\,"\(.*\)"},\1,g'`;
+	     z=`eval $0 --echo_only $y`;
+	     case "$z" in # Dont "doubledoublequote"
+		 \"*\")
+		 CMD="$CMD +'{preproc_flags,$z}'";;
+		 *)
+		 CMD="$CMD +'{preproc_flags,\"$z\"}'";;
+	     esac;;
+	*)
+	    y=`echo $x | sed 's,",\\\",g'`;
+	    CMD="$CMD \"$y\"";;
+    esac
+done
+if [ $ECHO_ONLY = true ]; then
+    echo $CMD
+else
+    eval erlc.exe $CMD
+fi
diff --git a/erts/etc/win32/wsl_tools/javac.sh b/erts/etc/win32/wsl_tools/javac.sh
new file mode 100755
index 0000000000..a37dc9450d
--- /dev/null
+++ b/erts/etc/win32/wsl_tools/javac.sh
@@ -0,0 +1,66 @@
+#! /bin/sh
+#
+# %CopyrightBegin%
+#
+# Copyright Ericsson AB 2002-2016. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# %CopyrightEnd%
+#
+# Note! This shellscript expects to be run in a WSL environment,
+# it converts erlc command lines to native windows erlc commands, which
+# basically means running the command wslpath on whatever is a path...
+
+CMD=""
+save_IFS=$IFS
+IFS=":"
+NEWCLASSPATH=""
+for x in $CLASSPATH; do
+  TMP=`wslpath -m $x`
+  if [ -z "$NEWCLASSPATH" ]; then
+      NEWCLASSPATH="$TMP"
+  else
+      NEWCLASSPATH="$NEWCLASSPATH;$TMP"
+  fi
+done
+IFS=$save_IFS
+CLASSPATH="$NEWCLASSPATH"
+export CLASSPATH
+#echo "CLASSPATH=$CLASSPATH"
+SAVE="$@"
+while test -n "$1" ; do
+    x="$1"
+    case "$x" in
+	-I/*|-o/*|-d/*)
+	    y=`echo $x | sed 's,^-[Iod]\(/.*\),\1,g'`;
+	    z=`echo $x | sed 's,^-\([Iod]\)\(/.*\),\1,g'`;
+	    #echo "Foooo:$z"
+	    MPATH=`wslpath -m $y`;
+	    CMD="$CMD -$z\"$MPATH\"";;
+	-d|-I|-o)
+	    shift;
+	    MPATH=`wslpath -m $1`;
+	    CMD="$CMD $x $MPATH";;
+	/*)
+	    #echo "absolute:"$x;
+	    MPATH=`wslpath -m $x`;
+	    CMD="$CMD \"$MPATH\"";;
+	*)
+	    y=`echo $x | sed 's,",\\\",g'`;
+	    CMD="$CMD \"$y\"";;
+    esac
+    shift
+done
+#echo javac.exe "$CMD"
+eval javac.exe "$CMD"
diff --git a/erts/etc/win32/wsl_tools/make_bootstrap_ini.sh b/erts/etc/win32/wsl_tools/make_bootstrap_ini.sh
new file mode 100755
index 0000000000..c33d328ea0
--- /dev/null
+++ b/erts/etc/win32/wsl_tools/make_bootstrap_ini.sh
@@ -0,0 +1,43 @@
+#! /bin/bash
+#
+# %CopyrightBegin%
+#
+# Copyright Ericsson AB 2003-2016. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# %CopyrightEnd%
+#
+# Create a local init-file for erlang in the build environment.
+if [ -z "$1" ]; then
+    echo "error: $0: No rootdir given"
+    exit 1
+else
+    RDIR=$1
+fi
+if [ -z "$2" ]; then
+    echo "error: $0: No bindir given"
+    exit 1
+else
+    BDIR=$2
+fi
+
+DRDIR=`w32_path.sh -d $RDIR`
+DBDIR=`w32_path.sh -d $BDIR`
+
+cat > $RDIR/bin/erl.ini <<EOF
+[erlang]
+Bindir=$DBDIR
+Progname=erl
+Rootdir=$DRDIR
+EOF
diff --git a/erts/etc/win32/wsl_tools/make_local_ini.sh b/erts/etc/win32/wsl_tools/make_local_ini.sh
new file mode 100755
index 0000000000..85ec4e40aa
--- /dev/null
+++ b/erts/etc/win32/wsl_tools/make_local_ini.sh
@@ -0,0 +1,40 @@
+#! /bin/bash
+#
+# %CopyrightBegin%
+#
+# Copyright Ericsson AB 2003-2016. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# %CopyrightEnd%
+#
+# Create a local init-file for erlang in the build environment.
+if [ -z "$1" ]; then
+    if [ -z $ERL_TOP ]; then
+	echo "error: $0: No rootdir available"
+	exit 1
+    else
+	RDIR=$ERL_TOP
+    fi
+else
+    RDIR=$1
+fi
+
+DDIR=`w32_path.sh -d $RDIR`
+
+cat > $RDIR/bin/erl.ini <<EOF
+[erlang]
+Bindir=$DDIR\\\\bin\\\\win32
+Progname=erl
+Rootdir=$DDIR
+EOF
diff --git a/erts/etc/win32/wsl_tools/reg_query.sh b/erts/etc/win32/wsl_tools/reg_query.sh
new file mode 100755
index 0000000000..c05f00dfa1
--- /dev/null
+++ b/erts/etc/win32/wsl_tools/reg_query.sh
@@ -0,0 +1,19 @@
+#! /bin/sh
+
+mkdir -p $ERL_TOP/tmp
+BAT_FILE=$ERL_TOP/tmp/w$$.bat
+if [ -z "$1" -o -z "$2" ]; then
+    echo "Usage:" "$0" '<key> <valuename>'
+    exit 1
+fi
+BACKED=`echo "$1" | sed 's,/,\\\\,g'`
+
+if [ $CONFIG_SUBTYPE = "win64" ]; then
+    REG_OPT=" /reg:64"
+else
+    REG_OPT=" /reg:32"
+fi
+
+WIN_BAT_FILE=`w32_path.sh -w $BAT_FILE`
+RESULT=`reg.exe query "$BACKED" /v "$2" $REG_OPT | sed 's@\\\@/@g' | tr -d '\r\n'`
+echo "$RESULT" | sed "s,.*REG_[^ ]* *,,g"
diff --git a/erts/etc/win32/wsl_tools/vc/ar.sh b/erts/etc/win32/wsl_tools/vc/ar.sh
new file mode 100755
index 0000000000..4d3b8ffdb5
--- /dev/null
+++ b/erts/etc/win32/wsl_tools/vc/ar.sh
@@ -0,0 +1,48 @@
+#! /bin/sh
+#
+# %CopyrightBegin%
+#
+# Copyright Ericsson AB 2002-2016. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# %CopyrightEnd%
+#
+CMD=""
+while test -n "$1" ; do
+    x="$1"
+    case "$x" in
+	-out:)
+	    shift
+	    case "$1" in
+		/*)
+		    MPATH=`w32_path.sh -d $1`;;
+		 *)
+		    MPATH=$1;;
+	    esac
+	    CMD="$CMD -out:\"$MPATH\"";;
+	-out:/*)
+	    y=`echo $x | sed 's,^-out:\(/.*\),\1,g'`;
+	    MPATH=`w32_path.sh -d $y`;
+	    CMD="$CMD -out:\"$MPATH\"";;
+	/*)
+	    MPATH=`w32_path.sh -d $x`;
+	    CMD="$CMD \"$MPATH\"";;
+	*)
+	    y=`echo $x | sed 's,",\\\",g'`;
+	    CMD="$CMD \"$y\"";;
+    esac
+    shift
+done
+
+eval lib.exe /nologo $CMD
diff --git a/erts/etc/win32/wsl_tools/vc/cc.sh b/erts/etc/win32/wsl_tools/vc/cc.sh
new file mode 100755
index 0000000000..036e00681c
--- /dev/null
+++ b/erts/etc/win32/wsl_tools/vc/cc.sh
@@ -0,0 +1,382 @@
+#! /bin/sh
+#
+# %CopyrightBegin%
+#
+# Copyright Ericsson AB 2002-2016. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# %CopyrightEnd%
+#
+# Icky cl wrapper that does it's best to behave like a Unixish cc.
+# Made to work for Erlang builds and to make configure happy, not really
+# general I suspect.
+# set -x
+# Save the command line for debug outputs
+
+SAVE="$@"
+
+# Constants
+COMMON_CFLAGS="-nologo -D__WIN32__ -DWIN32 -DWINDOWS -D_WIN32 -DNT -D_CRT_SECURE_NO_DEPRECATE"
+
+# Variables
+# The stdout and stderr for the compiler
+MSG_FILE=/tmp/cl.exe.$$.1
+ERR_FILE=/tmp/cl.exe.$$.2
+
+# "Booleans" determined during "command line parsing"
+# If the stdlib option is explicitly passed to this program
+MD_FORCED=false
+# If we're preprocession (only) i.e. -E
+PREPROCESSING=false
+# If we're generating dependencies (implies preprocesing)
+DEPENDENCIES=false
+# If this is supposed to be a debug build
+DEBUG_BUILD=false
+# If this is supposed to be an optimized build (there can only be one...)
+OPTIMIZED_BUILD=false
+# If we're linking or only compiling
+LINKING=true
+
+# This data is accumulated during command line "parsing"
+# The stdlibrary option, default multithreaded dynamic
+MD=-MD
+# Flags for debug compilation
+DEBUG_FLAGS=""
+# Flags for optimization
+OPTIMIZE_FLAGS=""
+# The specified output filename (if any), may be either object or exe.
+OUTFILE=""
+# Unspecified command line options for the compiler
+CMD=""
+# All the c source files, in unix style
+SOURCES=""
+# All the options to pass to the linker, kept in Unix style
+LINKCMD=""
+
+
+# Loop through the parameters and set the above variables accordingly
+# Also convert some filenames to "windows style"
+# except for anything passed to the linker, that script
+# handles those and the sources, which are also kept unixish for now
+
+# If we are in "unix" directory we can't use relative paths
+# since cl.exe can't find that path
+WINCHECK=`w32_path.sh -m $PWD`
+case $WINCHECK in
+    //wsl$/*)
+        USEABSPATH=true
+        ;;
+    *)
+        USEABSPATH=false
+        ;;
+esac
+
+while test -n "$1" ; do
+    x="$1"
+    case "$x" in
+	-Wall)
+	    ;;
+	-c)
+	    LINKING=false;;
+	    #CMD="$CMD -c";;
+	-MM)
+	    PREPROCESSING=true;
+	    LINKING=false;
+	    DEPENDENCIES=true;;
+	-E)
+	    PREPROCESSING=true;
+	    LINKING=false;; # Obviously...
+	    #CMD="$CMD -E";;
+	-Owx)
+	    # Optimization hardcoded of wxErlang
+	    OPTIMIZE_FLAGS="-Ob2ity -Gs -Z7";
+	    DEBUG_FLAGS="";
+	    DEBUG_BUILD=false;
+	    if [ $MD_FORCED = false ]; then
+		MD=-MD;
+	    fi
+	    OPTIMIZED_BUILD=true;;
+	-O*)
+	    # Optimization hardcoded
+	    OPTIMIZE_FLAGS="-Ox -Z7";
+	    DEBUG_FLAGS="";
+	    DEBUG_BUILD=false;
+	    if [ $MD_FORCED = false ]; then
+		MD=-MD;
+	    fi
+	    OPTIMIZED_BUILD=true;;
+	-g|-ggdb)
+	    if [ $OPTIMIZED_BUILD = false ];then
+		# Hardcoded windows debug flags
+		DEBUG_FLAGS="-Z7";
+		if [ $MD_FORCED = false ]; then
+		    MD=-MDd;
+		fi
+		LINKCMD="$LINKCMD -g";
+		DEBUG_BUILD=true;
+	    fi;;
+	# Allow forcing of stdlib
+	-mt|-MT)
+	    MD="-MT";
+	    MD_FORCED=true;;
+	-md|-MD)
+	    MD="-MD";
+	    MD_FORCED=true;;
+	-ml|-ML)
+	    MD="-ML";
+	    MD_FORCED=true;;
+	-mdd|-MDD|-MDd)
+	    MD="-MDd";
+	    MD_FORCED=true;;
+	-mtd|-MTD|-MTd)
+	    MD="-MTd";
+	    MD_FORCED=true;;
+	-mld|-MLD|-MLd)
+	    MD="-MLd";
+	    MD_FORCED=true;;
+	-o)
+	    shift;
+	    OUTFILE="$1";;
+	-o*)
+	    y=`echo $x | sed 's,^-[Io]\(.*\),\1,g'`;
+	    OUTFILE="$y";;
+	-I/*)
+	    y=`echo $x | sed 's,^-[Io]\(/.*\),\1,g'`;
+	    z=`echo $x | sed 's,^-\([Io]\)\(/.*\),\1,g'`;
+	    MPATH=`w32_path.sh -d "$y"`;
+	    CMD="$CMD -$z\"$MPATH\"";;
+	-I\"/*)
+	    y=`echo $x | sed 's,^\"-[Io]\(/.*\)\",\1,g'`;
+	    z=`echo $x | sed 's,^\"-\([Io]\)\(/.*\)\",\1,g'`;
+	    MPATH=`w32_path.sh -d "$y"`;
+	    CMD="$CMD -$z\"$MPATH\"";;
+	-I*)
+            if [ $USEABSPATH = true ]; then
+                y=`echo $x | sed 's,^-[Io]\(.*\),\1,g'`;
+	        z=`echo $x | sed 's,^-\([Io]\)\(.*\),\1,g'`;
+                MPATH=`w32_path.sh -a -d "$y"`;
+                CMD="$CMD -$z$MPATH";
+            else
+                y=`echo $x | sed 's,",\\\",g'`;
+	        CMD="$CMD $y"
+            fi;;
+	-D*)
+	    y=`echo $x | sed 's,",\\\",g'`;
+	    CMD="$CMD $y";;
+	-EH*)
+	    y=`echo $x | sed 's,",\\\",g'`;
+	    CMD="$CMD $y";;
+	-TP|-Tp)
+	    y=`echo $x | sed 's,",\\\",g'`;
+	    CMD="$CMD $y";;
+	-l*)
+	    y=`echo $x | sed 's,^-l\(.*\),\1,g'`;
+	    LINKCMD="$LINKCMD $x";;
+	/*.c)
+	    SOURCES="$SOURCES $x";;
+	*.c)
+	    SOURCES="$SOURCES $x";;
+	/*.cc)
+	    SOURCES="$SOURCES $x";;
+	*.cc)
+	    SOURCES="$SOURCES $x";;
+	/*.cpp)
+	    SOURCES="$SOURCES $x";;
+	*.cpp)
+	    SOURCES="$SOURCES $x";;
+	/*.o)
+	    LINKCMD="$LINKCMD $x";;
+	*.o)
+	    LINKCMD="$LINKCMD $x";;
+	*)
+	    # Try to quote uninterpreted options
+	    y=`echo $x | sed 's,",\\\",g'`;
+	    LINKCMD="$LINKCMD $y";;
+    esac
+    shift
+done
+
+#Return code from compiler, linker.sh and finally this script...
+RES=0
+
+# Accumulated object names
+ACCUM_OBJECTS=""
+
+# A temporary object file location
+TMPOBJDIR=$ERL_TOP/tmpobj$$
+mkdir $TMPOBJDIR
+
+WINTMPDIR=`w32_path.sh -w $TMPOBJDIR`
+
+# Sometimes the file server doesn't keep up (paralell file creation)
+while true ; do
+    DIR_EXISTS=$(cd /mnt/c; cmd.exe /C "IF EXIST $WINTMPDIR (echo yes) ELSE (echo no)")
+    case $DIR_EXISTS in   # Contains trash in the end of string
+         yes*)
+              break
+              ;;
+         *)
+             if [ "X$CC_SH_DEBUG_LOG" != "X" ]; then
+                 echo "sleep 1" >> $CC_SH_DEBUG_LOG
+             fi;
+             echo sleep $WINTMPDIR does not exist >&2
+             sleep 1
+    esac
+done
+
+# Compile
+for x in $SOURCES; do
+    # Compile each source
+    if [ $LINKING = false ]; then
+	# We should have an output defined, which is a directory
+	# or an object file
+	case $OUTFILE in
+	    /*.o)
+		# Simple output, SOURCES should be one single
+		n=`echo $SOURCES | wc -w`;
+		if [ $n -gt 1 ]; then
+		    echo "cc.sh:Error, multiple sources, one object output.";
+		    exit 1;
+		else
+		    output_filename=`echo $OUTFILE`;
+		fi;;
+	    *.o)
+		# Relative path needs no translation
+		n=`echo $SOURCES | wc -w`
+		if [ $n -gt 1 ]; then
+		    echo "cc.sh:Error, multiple sources, one object output."
+		    exit 1
+		else
+		    output_filename=$OUTFILE
+		fi;;
+	    /*)
+		# Absolute directory
+		o=`echo $x | sed 's,.*/,,' | sed 's,\.c$,.o,'`
+		output_filename=`echo $OUTFILE`
+		output_filename="$output_filename/${o}";;
+	    *)
+		# Relative_directory or empty string (.//x.o is valid)
+		o=`echo $x | sed 's,.*/,,' | sed 's,\.cp*$,.o,'`
+		output_filename="./${OUTFILE}/${o}";;
+	esac
+    else
+	# We are linking, which means we build objects in a temporary
+	# directory and link from there. We should retain the basename
+	# of each source to make examining the exe easier...
+	o=`echo $x | sed 's,.*/,,' | sed 's,\.c$,.o,'`
+	output_filename=$TMPOBJDIR/$o
+	ACCUM_OBJECTS="$ACCUM_OBJECTS $output_filename"
+    fi
+    # Now we know enough, lets try a compilation...
+    if [ $USEABSPATH = true ]; then
+        MPATH=`w32_path.sh -a -d $x`
+    else
+        MPATH=`w32_path.sh -d $x`
+    fi
+    if [ $PREPROCESSING = true ]; then
+	output_flag="-E"
+    else
+	output_flag="/FS -c -Fo`w32_path.sh -a -d ${output_filename}`"
+    fi
+    params="$COMMON_CFLAGS $MD $DEBUG_FLAGS $OPTIMIZE_FLAGS \
+	    $CMD ${output_flag} $MPATH"
+    if [ "X$CC_SH_DEBUG_LOG" != "X" ]; then
+	echo cc.sh "$SAVE" >>$CC_SH_DEBUG_LOG
+	echo cl.exe $params >>$CC_SH_DEBUG_LOG
+    fi
+    eval cl.exe $params >$MSG_FILE 2>$ERR_FILE
+    RES=$?
+    if test $PREPROCESSING = false; then
+	cat $ERR_FILE >&2
+	tail -n +2 $MSG_FILE
+    else
+	tail -n +2 $ERR_FILE >&2
+	if test $DEPENDENCIES = true; then
+	    perl -e '
+my $file = "'$x'";
+while (<>) {
+      next unless /^#line/;
+      next if /$file/o;
+      (undef,$_) = split(/\"/);
+      next if / /;
+      $all{$_} = 1;
+}
+foreach (sort keys %all) {
+      my $w_file;
+      ($w_file) = split("\n",`(w32_path.sh -u $_)`);
+      push @f, "\\\n $w_file ";
+}
+if (@f) {
+     my $oname = $file;
+     $oname =~ s@.*/@@;
+     $oname =~ s@[.]cp*@.o@;
+     print $oname, ":", @f;
+     print "\n\n";
+     print STDERR "Made dependencies for $file\n";
+}' $MSG_FILE
+	else
+	    cat $MSG_FILE
+	fi
+    fi
+    rm -f $ERR_FILE $MSG_FILE
+    if [ $RES != 0 ]; then
+	echo Failed: cl.exe $params
+	rm -rf $TMPOBJDIR
+	exit $RES
+    fi
+done
+
+# If we got here, we succeeded in compiling (if there were anything to compile)
+# The output filename should name an executable if we're linking
+if [ $LINKING = true ]; then
+    case $OUTFILE in
+	"")
+	    # Use the first source name to name the executable
+	    first_source=""
+	    for x in $SOURCES; do first_source=$x; break; done;
+	    if [ -n "$first_source" ]; then
+		e=`echo $x | sed 's,.*/,,' | sed 's,\.c$,.exe,'`;
+		out_spec="-o $e";
+	    else
+		out_spec="";
+	    fi;;
+	*)
+	    out_spec="-o $OUTFILE";;
+    esac
+    # Descide which standard library to link against
+    case $MD in
+	-ML)
+	    stdlib="-lLIBC";;
+	-MLd)
+	    stdlib="-lLIBCD";;
+	-MD)
+	    stdlib="-lMSVCRT";;
+	-MDd)
+	    stdlib="-lMSVCRTD";;
+	-MT)
+	    stdlib="-lLIBCMT";;
+	-MTd)
+	    stdlib="-lLIBMTD";;
+    esac
+    # And finally call the next script to do the linking...
+    params="$out_spec $LINKCMD $stdlib"
+    if [ "X$CC_SH_DEBUG_LOG" != "X" ]; then
+	echo ld.sh $ACCUM_OBJECTS $params >>$CC_SH_DEBUG_LOG
+    fi
+    eval ld.sh $ACCUM_OBJECTS $params
+    RES=$?
+fi
+rm -rf $TMPOBJDIR
+
+exit $RES
diff --git a/erts/etc/win32/wsl_tools/vc/coffix.c b/erts/etc/win32/wsl_tools/vc/coffix.c
new file mode 100755
index 0000000000..7428f9cd41
--- /dev/null
+++ b/erts/etc/win32/wsl_tools/vc/coffix.c
@@ -0,0 +1,161 @@
+/*
+ * %CopyrightBegin%
+ *
+ * Copyright Ericsson AB 1999-2016. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * %CopyrightEnd%
+ */
+/*
+** This mini tool fixes an incompatibility between
+** Microsoft's tools, who dont like the virtual size being put in
+** the physical address field, but rely on the raw size field for
+** sizing the ".bss" section.
+** This fixes some of the problems with linking gcc compiled objects
+** together with MSVC dito.
+**
+** Courtesy DJ Delorie for describing the COFF file format on
+** http://www.delorie.com/djgpp/doc/coff/
+** The coff structures are fetched from Microsofts headers though.
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdarg.h>
+
+#include <windows.h>
+#include <winnt.h> /* Structure definitions for PE (COFF) */
+
+static int dump_edit(char *filename, int edit);
+static int v_printf(char *format, ...);
+
+
+char *progname;
+int verbouse = 0;
+
+int main(int argc, char **argv)
+{
+    int findex = 1;
+    int edit = 0;
+    int ret;
+
+    progname = argv[0];
+    if (argc == 1) {
+	fprintf(stderr,"Format : %s [-e] [-v] <filename>\n", progname);
+	return 1;
+    }
+    for (findex = 1;
+	 findex < argc && (*argv[findex] == '-' || *argv[findex] == '/');
+	 ++findex)
+	switch (argv[findex][1]) {
+	case 'e':
+	case 'E':
+	    edit = 1;
+	    break;
+	case 'v':
+	case 'V':
+	    verbouse = 1;
+	default:
+	    fprintf(stderr, "%s: unknown option %s\n", progname, argv[findex]);
+	    break;
+	}
+    if (findex == argc) {
+	fprintf(stderr,"%s: No filenames given.\n", progname);
+	return 1;
+    }
+    for(; findex < argc; ++findex)
+	if ((ret = dump_edit(argv[findex],edit)) != 0)
+	    return ret;
+    return 0;
+}
+
+int dump_edit(char *filename, int edit)
+{
+    FILE *f = fopen(filename, (edit) ? "r+b" : "rb");
+    IMAGE_FILE_HEADER filhdr;
+    IMAGE_SECTION_HEADER scnhdr;
+    int i;
+
+    if (f == NULL) {
+	fprintf(stderr, "%s: cannot open %s.\n", progname, filename);
+	return 1;
+    }
+
+    if (fread(&filhdr, sizeof(filhdr), 1, f) == 0) {
+	fprintf(stderr,"%s: Could not read COFF header from %s,"
+		" is this a PE (COFF) file?\n", progname, filename);
+	fclose(f);
+	return 1;
+    }
+    v_printf("File: %s\n", filename);
+    v_printf("Magic number: 0x%08x\n", filhdr.Machine);
+    v_printf("Number of sections: %d\n",filhdr.NumberOfSections);
+
+    if (fseek(f, (long) filhdr.SizeOfOptionalHeader, SEEK_CUR) != 0) {
+	fprintf(stderr,"%s: Could not read COFF optional header from %s,"
+		" is this a PE (COFF) file?\n", progname, filename);
+	fclose(f);
+	return 1;
+    }
+
+    for (i = 0; i < filhdr.NumberOfSections; ++i) {
+	if (fread(&scnhdr, sizeof(scnhdr), 1, f) == 0) {
+	    fprintf(stderr,"%s: Could not read section header from %s,"
+		    " is this a PE (COFF) file?\n", progname, filename);
+	    fclose(f);
+	    return 1;
+	}
+	v_printf("Section %s:\n", scnhdr.Name);
+	v_printf("Physical address: 0x%08x\n", scnhdr.Misc.PhysicalAddress);
+	v_printf("Size: 0x%08x\n", scnhdr.SizeOfRawData);
+	if (scnhdr.Misc.PhysicalAddress != 0 &&
+	    scnhdr.SizeOfRawData == 0) {
+	    printf("Section header %s in file %s will confuse MSC linker, "
+		   "virtual size is 0x%08x and raw size is 0\n",
+		   scnhdr.Name, filename, scnhdr.Misc.PhysicalAddress,
+		   scnhdr.SizeOfRawData);
+	    if (edit) {
+		scnhdr.SizeOfRawData = scnhdr.Misc.PhysicalAddress;
+		scnhdr.Misc.PhysicalAddress = 0;
+		if (fseek(f, (long) -((long)sizeof(scnhdr)), SEEK_CUR) != 0 ||
+		    fwrite(&scnhdr, sizeof(scnhdr), 1, f) == 0) {
+		    fprintf(stderr,"%s: could not edit file %s.\n",
+			    progname, filename);
+		    fclose(f);
+		    return 1;
+		}
+		printf("Edited object, virtual size is now 0, and "
+		       "raw size is 0x%08x.\n", scnhdr.SizeOfRawData);
+	    } else {
+		printf("Specify option '-e' to correct the problem.\n");
+	    }
+	}
+    }
+    fclose(f);
+    return 0;
+}
+
+
+static int v_printf(char *format, ...)
+{
+    va_list ap;
+    int ret = 0;
+    if (verbouse) {
+	va_start(ap, format);
+	ret = vfprintf(stdout, format, ap);
+	va_end(ap);
+    }
+    return ret;
+}
diff --git a/erts/etc/win32/wsl_tools/vc/emu_cc.sh b/erts/etc/win32/wsl_tools/vc/emu_cc.sh
new file mode 100755
index 0000000000..00b8555d2b
--- /dev/null
+++ b/erts/etc/win32/wsl_tools/vc/emu_cc.sh
@@ -0,0 +1,100 @@
+#! /bin/sh
+#
+# %CopyrightBegin%
+#
+# Copyright Ericsson AB 2002-2016. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# %CopyrightEnd%
+#
+
+# sudo apt-get install gcc-mingw-w64 on (wsl ubuntu)
+
+if [ X"$CONFIG_SUBTYPE" = X"win64" ]; then
+    GCC="x86_64-w64-mingw32-gcc -m64"
+else
+    GCC="x86_64-w64-mingw32-gcc -m32"
+fi
+TOOLDIR=$ERL_TOP/erts/etc/win32/wsl_tools/vc
+COFFIX=$TOOLDIR/coffix
+WTOOLDIR=`w32_path.sh -d "$TOOLDIR"`
+# Do primitive 'make'
+newer_exe=`find $TOOLDIR -newer $COFFIX.c -name coffix.exe -print`
+
+if [ -z $newer_exe ]; then
+    echo recompiling $COFFIX.exe
+    cl.exe -Fe${WTOOLDIR}/coffix.exe ${WTOOLDIR}/coffix.c
+    rm -f $COFFIX.obj coffix.obj $COFFIX.pdb coffix.pdb
+fi
+
+# Try to find out the output filename and remove it from command line
+CMD=""
+OUTFILE=""
+INFILE=""
+SKIP_COFFIX=false
+while test -n "$1" ; do
+    x="$1"
+    case "$x" in
+	-o/*)
+	    OUTFILE=`echo $x | sed 's,^-[Io]\(/.*\),\1,g'`;;
+	-o)
+	    shift
+	    OUTFILE=$1;;
+	-MM)
+	    SKIP_COFFIX=true
+	    CMD="$CMD \"$x\"";;
+	*.c)
+	    INFILE="$INFILE $x";
+	    CMD="$CMD \"$x\"";;
+	*)
+	    CMD="$CMD \"$x\"";;
+    esac
+    shift
+done
+if [ -z "$INFILE" ]; then
+    echo 'emu_cc.sh: please give an input filename for the compiler' >&2
+    exit 1
+fi
+if [ -z "$OUTFILE" ]; then
+    OUTFILE=`echo $INFILE | sed 's,\.c$,.o,'`
+fi
+
+if [ $SKIP_COFFIX = false ]; then
+    n=`echo $INFILE | wc -w`;
+    if [ $n -gt 1 ]; then
+	echo "emu_cc.sh:Error, multiple sources, one object output.";
+	exit 1;
+    fi
+    mkdir -p $ERL_TOP/tmp
+    TEMPFILE=$ERL_TOP/tmp/tmp_emu_cc$$.o
+    if [ "X$EMU_CC_SH_DEBUG_LOG" != "X" ]; then
+	echo "$GCC -o $TEMPFILE -D__WIN32__ -DWIN32 -DWINDOWS -fomit-frame-pointer $CMD" >> $EMU_CC_SH_DEBUG_LOG 2>&1
+    fi
+    eval $GCC -o $TEMPFILE -D__WIN32__ -DWIN32 -DWINDOWS -fomit-frame-pointer $CMD
+    RES=$?
+    if [ $RES = 0 ]; then
+	$COFFIX.exe -e `w32_path.sh -w $TEMPFILE`
+	RES=$?
+	if [ $RES = 0 ]; then
+	    cp $TEMPFILE $OUTFILE
+	else
+	    echo "emu_cc.sh: fatal: coffix failed!" >&2
+	fi
+    fi
+    rm -f $TEMPFILE
+    exit $RES
+else
+    eval $GCC -D__WIN32__ -DWIN32 -DWINDOWS -fomit-frame-pointer -fno-tree-copyrename $CMD 2>/dev/null
+    exit $?
+fi
diff --git a/erts/etc/win32/wsl_tools/vc/ld.sh b/erts/etc/win32/wsl_tools/vc/ld.sh
new file mode 100755
index 0000000000..fc115bec8c
--- /dev/null
+++ b/erts/etc/win32/wsl_tools/vc/ld.sh
@@ -0,0 +1,210 @@
+#! /bin/sh
+# set -x
+#
+# %CopyrightBegin%
+#
+# Copyright Ericsson AB 2002-2016. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# %CopyrightEnd%
+#
+# Save the command line for debug outputs
+
+SAVE="$@"
+kernel_libs="kernel32.lib advapi32.lib"
+gdi_libs="gdi32.lib user32.lib comctl32.lib comdlg32.lib shell32.lib"
+DEFAULT_LIBRARIES="$kernel_libs $gdi_libs"
+
+CMD=""
+STDLIB=MSVCRT.LIB
+DEBUG_BUILD=false
+STDLIB_FORCED=false
+BUILD_DLL=false
+OUTPUT_FILENAME=""
+
+while test -n "$1" ; do
+    x="$1"
+    case "$x" in
+	-dll| -DLL)
+	    BUILD_DLL=true;;
+	-L/*|-L.*)
+	    y=`echo $x | sed 's,^-L\(.*\),\1,g'`;
+	    MPATH=`w32_path.sh -d $y`;
+	    CMD="$CMD -libpath:\"$MPATH\"";;
+	-lMSVCRT|-lmsvcrt)
+	    STDLIB_FORCED=true;
+	    STDLIB=MSVCRT.LIB;;
+	-lMSVCRTD|-lmsvcrtd)
+	    STDLIB_FORCED=true;
+	    STDLIB=MSVCRTD.LIB;;
+	-lLIBCMT|-llibcmt)
+	    STDLIB_FORCED=true;
+	    STDLIB=LIBCMT.LIB;;
+	-lLIBCMTD|-llibcmtd)
+	    STDLIB_FORCED=true;
+	    STDLIB=LIBCMTD.LIB;;
+	-lsocket)
+	    DEFAULT_LIBRARIES="$DEFAULT_LIBRARIES WS2_32.LIB IPHLPAPI.LIB";;
+	-l*)
+	    y=`echo $x | sed 's,^-l\(.*\),\1,g'`;
+	    MPATH=`w32_path.sh -d $y`;
+	    CMD="$CMD \"${MPATH}.lib\"";;
+	-g)
+	    DEBUG_BUILD=true;;
+	-pdb:none|-incremental:no)
+	    ;;
+	-implib:*)
+	    y=`echo $x | sed 's,^-implib:\(.*\),\1,g'`;
+	    MPATH=`w32_path.sh -d $y`;
+	    CMD="$CMD -implib:\"${MPATH}\"";;
+	-def:*)
+	    y=`echo $x | sed 's,^-def:\(.*\),\1,g'`;
+	    MPATH=`w32_path.sh -d $y`;
+	    CMD="$CMD -def:\"${MPATH}\"";;
+	-o)
+	    shift
+	    MPATH=`w32_path.sh -a -d $1`;
+	    OUTPUT_FILENAME="$MPATH";;
+	-o/*)
+	    y=`echo $x | sed 's,^-[Io]\(/.*\),\1,g'`;
+	    MPATH=`w32_path.sh -a -d $y`;
+	    OUTPUT_FILENAME="$MPATH";;
+	/*)
+	    MPATH=`w32_path.sh -d $x`;
+	    CMD="$CMD \"$MPATH\"";;
+	*)
+	    y=`echo $x | sed 's,",\\\",g'`;
+	    CMD="$CMD \"$y\"";;
+    esac
+    shift
+done
+if [ $DEBUG_BUILD = true ]; then
+    linktype="-debug -pdb:none"
+    if [ $STDLIB_FORCED = false ]; then
+	STDLIB=MSVCRTD.LIB
+    fi
+fi
+# Generate a PDB
+linkadd_pdb=""
+case "$OUTPUT_FILENAME" in
+    *.exe|*.EXE)
+        fn=`echo "$OUTPUT_FILENAME" | sed 's,[eE][xX][eE]$,,g'`;
+        # fn=`w32_path.sh -a -d $fn0`
+	# echo EXE "$OUTPUT_FILENAME" $fn
+	linkadd_pdb="-pdb:\"${fn}pdb\"";;
+    *.dll|*.DLL)
+        fn=`echo "$OUTPUT_FILENAME" | sed 's,[dD][lL][lL]$,,g'`;
+        # fn=`w32_path.sh -a -d $fn0`
+	# echo DLL "$OUTPUT_FILENAME" $fn
+	linkadd_pdb="-pdb:\"${fn}pdb\"";;
+    "")
+	linkadd_pdb="-pdb:\"a.pdb\"";;
+    *)
+	fn="$OUTPUT_FILENAME"
+        # fn=`w32_path.sh -a -d $OUTPUT_FILENAME`
+	# echo * "$OUTPUT_FILENAME" $fn
+	linkadd_pdb="-pdb:\"${fn}.pdb\"";;
+esac
+
+linktype="-debug $linkadd_pdb"
+
+CHMOD_FILE=""
+
+if [ $BUILD_DLL = true ];then
+    case "$OUTPUT_FILENAME" in
+	*.exe|*.EXE)
+	    echo "Warning, output set to .exe when building DLL" >&2
+	    CHMOD_FILE="$OUTPUT_FILENAME";
+	    CMD="-dll -out:\"$OUTPUT_FILENAME\" $CMD";
+	    OUTPUTRES="${OUTPUT_FILENAME}\;2";
+	    MANIFEST="${OUTPUT_FILENAME}.manifest";;
+	*.dll|*.DLL)
+	    CMD="-dll -out:\"$OUTPUT_FILENAME\" $CMD";
+	    OUTPUTRES="${OUTPUT_FILENAME}\;2";
+	    MANIFEST="${OUTPUT_FILENAME}.manifest";;
+	"")
+	    CMD="-dll -out:\"a.dll\" $CMD";
+	    OUTPUTRES="a.dll\;2";
+	    MANIFEST="a.dll.manifest";;
+	*)
+	    CMD="-dll -out:\"${OUTPUT_FILENAME}.dll\" $CMD";
+	    OUTPUTRES="${OUTPUT_FILENAME}.dll\;2";
+	    MANIFEST="${OUTPUT_FILENAME}.dll.manifest";;
+    esac
+else
+    case "$OUTPUT_FILENAME" in
+	*.exe|*.EXE)
+	    CHMOD_FILE="$OUTPUT_FILENAME";
+	    CMD="-out:\"$OUTPUT_FILENAME\" $CMD";
+	    OUTPUTRES="${OUTPUT_FILENAME}\;1"
+	    MANIFEST="${OUTPUT_FILENAME}.manifest";;
+	*.dll|*.DLL)
+	    echo "Warning, output set to .dll when building EXE" >&2
+	    CMD="-out:\"$OUTPUT_FILENAME\" $CMD";
+	    OUTPUTRES="${OUTPUT_FILENAME}\;1";
+	    MANIFEST="${OUTPUT_FILENAME}.manifest";;
+	"")
+	    CHMOD_FILE="a.exe";
+	    CMD="-out:\"a.exe\" $CMD";
+	    OUTPUTRES="a.exe\;1";
+	    MANIFEST="a.exe.manifest";;
+	*)
+	    CMD="-out:\"${OUTPUT_FILENAME}.exe\" $CMD";
+	    OUTPUTRES="${OUTPUT_FILENAME}.exe\;1";
+	    MANIFEST="${OUTPUT_FILENAME}.exe.manifest";;
+    esac
+fi
+
+p=$$
+CMD="$linktype -nologo -incremental:no $CMD $STDLIB $DEFAULT_LIBRARIES"
+if [ "X$LD_SH_DEBUG_LOG" != "X" ]; then
+    echo ld.sh "$SAVE" >>$LD_SH_DEBUG_LOG
+    echo link.exe $CMD >>$LD_SH_DEBUG_LOG
+fi
+eval link.exe "$CMD"  >/tmp/link.exe.${p}.1 2>/tmp/link.exe.${p}.2
+RES=$?
+
+CMANIFEST=`w32_path.sh -u $MANIFEST`
+
+if [ "$RES" = "0" -a -f "$CMANIFEST" ]; then
+    # Add stuff to manifest to turn off "virtualization"
+    sed -n -i '1h;1!H;${;g;s,<trustInfo.*</trustInfo>.,,g;p;}' $CMANIFEST 2>/dev/null
+    sed -i "s/<\/assembly>/ <ms_asmv2:trustInfo xmlns:ms_asmv2=\"urn:schemas-microsoft-com:asm.v2\">\n  <ms_asmv2:security>\n   <ms_asmv2:requestedPrivileges>\n    <ms_asmv2:requestedExecutionLevel level=\"AsInvoker\" uiAccess=\"false\"\/>\n   <\/ms_asmv2:requestedPrivileges>\n  <\/ms_asmv2:security>\n <\/ms_asmv2:trustInfo>\n<\/assembly>/" $CMANIFEST 2>/dev/null
+
+    eval mt.exe -nologo -manifest "$MANIFEST" -outputresource:"$OUTPUTRES" >>/tmp/link.exe.${p}.1 2>>/tmp/link.exe.${p}.2
+    RES=$?
+    if [ "$RES" != "0" ]; then
+	REMOVE=`echo "$OUTPUTRES" | sed 's,\\\;[12]$,,g'`
+	CREMOVE=`wslpath -u $REMOVE`
+        ## If Defender or Search are enabled, they will lock just created files
+        ## and then mt will fail :/
+        echo "If you get this error, make sure Windows Defender AND Windows Search is disabled">>/tmp/link.exe.${p}.1
+	rm -f "$CREMOVE"
+    fi
+    rm -f "$CMANIFEST"
+fi
+
+# This works around some strange behaviour
+# in cygwin 1.7 Beta on Windows 7 with samba drive.
+# Configure will think the compiler failed if test -x fails,
+# which it might do as we might not be the owner of the
+# file.
+if [ '!' -z "$CHMOD_FILE" -a -s "$CHMOD_FILE" -a '!' -x "$CHMOD_FILE" ]; then
+    chmod +x $CHMOD_FILE
+fi
+
+tail -n +2 /tmp/link.exe.${p}.2 >&2
+cat /tmp/link.exe.${p}.1
+rm -f /tmp/link.exe.${p}.2 /tmp/link.exe.${p}.1
+exit $RES
diff --git a/erts/etc/win32/wsl_tools/vc/mc.sh b/erts/etc/win32/wsl_tools/vc/mc.sh
new file mode 100755
index 0000000000..4ed7e7e2a3
--- /dev/null
+++ b/erts/etc/win32/wsl_tools/vc/mc.sh
@@ -0,0 +1,96 @@
+#! /bin/sh
+# set -x
+#
+# %CopyrightBegin%
+#
+# Copyright Ericsson AB 2002-2016. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# %CopyrightEnd%
+#
+# Save the command line for debug outputs
+SAVE="$@"
+CMD=""
+OUTPUT_DIRNAME=""
+
+# Find the correct mc.exe. This could be done by the configure script,
+# But as we seldom use the message compiler, it might as well be done here...
+MCC=""
+save_ifs=$IFS
+IFS=:
+for p in $PATH; do
+    if [ -f $p/mc.exe ]; then
+	if [ -n "`$p/mc.exe -? 2>&1 >/dev/null </dev/null \
+                 | grep -i \"message compiler\"`" ]; then
+	    MCC=`echo "mc.exe" | sed 's/ /\\\\ /g'`
+            break
+        else
+            echo "Bad mc.exe in path"  >&2
+            exit 1
+	fi
+    fi
+done
+IFS=$save_ifs
+
+if [ -z "$MCC" ]; then
+    echo 'mc.exe not found!' >&2
+    exit 1
+fi
+
+while test -n "$1" ; do
+    x="$1"
+    case "$x" in
+	-o)
+	    shift
+	    OUTPUT_DIRNAME="$1";;
+	-o/*)
+	    y=`echo $x | sed 's,^-[Io]\(/.*\),\1,g'`;
+	    OUTPUT_DIRNAME="$y";;
+	-I)
+	    shift
+	    MPATH=`w32_path.sh -d $1`;
+	    CMD="$CMD -I\"$MPATH\"";;
+	-I/*)
+	    y=`echo $x | sed 's,^-[Io]\(/.*\),\1,g'`;
+	    MPATH=`w32_path.sh -d $y`;
+	    CMD="$CMD -I\"$MPATH\"";;
+	*)
+	    MPATH=`w32_path.sh -d -a $x`;
+	    CMD="$CMD \"$MPATH\"";;
+    esac
+    shift
+done
+p=$$
+if [ "X$MC_SH_DEBUG_LOG" != "X" ]; then
+    echo mc.sh "$SAVE" >>$MC_SH_DEBUG_LOG
+    echo mc.exe $CMD >>$MC_SH_DEBUG_LOG
+fi
+if [ -n "$OUTPUT_DIRNAME" ]; then
+    cd $OUTPUT_DIRNAME
+    RES=$?
+    if [ "$RES" != "0" ]; then
+	echo "mc.sh: Error: could not cd to $OUTPUT_DIRNAME">&2
+	exit $RES
+    fi
+fi
+
+eval $MCC "$CMD"  >/tmp/mc.exe.${p}.1 2>/tmp/mc.exe.${p}.2
+RES=$?
+if [ $RES != 0 ]; then
+    echo Failed: $MCC "$CMD"
+fi
+tail -n +2 /tmp/mc.exe.${p}.2 >&2
+cat /tmp/mc.exe.${p}.1
+rm -f /tmp/mc.exe.${p}.2 /tmp/mc.exe.${p}.1
+exit $RES
diff --git a/erts/etc/win32/wsl_tools/vc/rc.sh b/erts/etc/win32/wsl_tools/vc/rc.sh
new file mode 100755
index 0000000000..bbd5c9a773
--- /dev/null
+++ b/erts/etc/win32/wsl_tools/vc/rc.sh
@@ -0,0 +1,94 @@
+#! /bin/sh
+# set -x
+#
+# %CopyrightBegin%
+#
+# Copyright Ericsson AB 2002-2016. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# %CopyrightEnd%
+#
+# Save the command line for debug outputs
+SAVE="$@"
+CMD=""
+OUTPUT_FILENAME=""
+
+# Find the correct rc.exe. This could be done by the configure script,
+# But as we seldom use the resource compiler, it might as well be done here...
+RCC=""
+save_ifs=$IFS
+IFS=:
+for p in $PATH; do
+    if [ -f $p/rc.exe ]; then
+	if [ -n "`$p/rc.exe -? 2>&1 | grep -i "resource compiler"`" ]; then
+            RCC="rc.exe /nologo"
+            break
+        else
+            echo "Bad rc.exe in path"  >&2
+            exit 1
+	fi
+    fi
+done
+IFS=$save_ifs
+
+if [ -z "$RCC" ]; then
+    echo 'rc.exe not found!' >&2
+    exit 1
+fi
+
+while test -n "$1" ; do
+    x="$1"
+    case "$x" in
+	-o)
+	    shift
+	    MPATH=`w32_path.sh -d $1`;
+	    OUTPUT_FILENAME="$MPATH";;
+	-o/*)
+	    y=`echo $x | sed 's,^-[Io]\(/.*\),\1,g'`;
+	    MPATH=`w32_path.sh -d $y`;
+	    OUTPUT_FILENAME="$MPATH";;
+	-I)
+	    shift
+	    MPATH=`w32_path.sh -d $1`;
+	    CMD="$CMD -I\"$MPATH\"";;
+	-I/*)
+	    y=`echo $x | sed 's,^-[Io]\(/.*\),\1,g'`;
+	    MPATH=`w32_path.sh -d $y`;
+	    CMD="$CMD -I\"$MPATH\"";;
+	/*)
+	    MPATH=`w32_path.sh -d $x`;
+	    CMD="$CMD \"$MPATH\"";;
+	*)
+	    y=`echo $x | sed 's,",\\\",g'`;
+	    CMD="$CMD \"$y\"";;
+    esac
+    shift
+done
+p=$$
+if [ -n "$OUTPUT_FILENAME" ]; then
+    CMD="-Fo$OUTPUT_FILENAME $CMD"
+fi
+if [ "X$RC_SH_DEBUG_LOG" != "X" ]; then
+    echo rc.sh "$SAVE" >>$RC_SH_DEBUG_LOG
+    echo rc.exe /nologo $CMD >>$RC_SH_DEBUG_LOG
+fi
+eval $RCC "$CMD"  >/tmp/rc.exe.${p}.1 2>/tmp/rc.exe.${p}.2
+RES=$?
+if [ $RES != 0 ]; then
+    echo Failed: $RCC "$CMD"
+fi
+tail -n +2 /tmp/rc.exe.${p}.2 >&2
+cat /tmp/rc.exe.${p}.1
+rm -f /tmp/rc.exe.${p}.2 /tmp/rc.exe.${p}.1
+exit $RES
diff --git a/erts/etc/win32/wsl_tools/w32_path.sh b/erts/etc/win32/wsl_tools/w32_path.sh
new file mode 100755
index 0000000000..55fbd76174
--- /dev/null
+++ b/erts/etc/win32/wsl_tools/w32_path.sh
@@ -0,0 +1,70 @@
+#!/bin/bash
+
+WIN32=false
+SEPARATOR=""
+ABSOLUTE=""
+UNIX=false
+done=false
+while [ $done = false ]; do
+    case "$1" in
+	-w)
+	    WIN32=true;
+	    SEPARATOR=backslash;
+	    shift;;
+	-d)
+	    WIN32=true;
+	    SEPARATOR=double;
+	    shift;;
+	-m)
+	    WIN32=true;
+	    SEPARATOR=slash;
+	    shift;;
+	-u)
+	    UNIX=true;
+	    shift;;
+	-a)
+	    ABSOLUTE="-a";
+	    shift;;
+
+	*)
+	    done=true;;
+    esac
+done
+
+if [ $WIN32 = false -a $UNIX = false ]; then
+    echo "Usage: $0 -m|-w|-d|-u [-a] <path>" >&2
+    exit 1;
+fi
+
+if [ -z "$1" ]; then
+    echo "Usage: $0 -m|-w|-u [-a] <path>" >&2
+    exit 1;
+fi
+
+if [ $UNIX = true ]; then
+    # cl.exe loses //// in the beginning which make dependencies fail
+    # and sometimes lowercases the path
+    case $1 in
+        \\*wsl$\\*)
+            y=`echo $1 | sed 's,\\\\\+,/,g'`;
+            z=`echo $y | sed 's,^/wsl$/[^/]*\(.*\),\1,g' | sed 's, ,\\ ,g'`;
+            echo "$z";
+            ;;
+        *)
+            echo `wslpath -u $ABSOLUTE "$1" | sed 's, ,\\ ,g'`
+            ;;
+    esac
+else
+    case "$SEPARATOR" in
+	slash)
+	    echo `wslpath -m $ABSOLUTE "$1"`;
+	    ;;
+	backslash)
+	    echo `wslpath -w $ABSOLUTE "$1"`;
+	    ;;
+	double)
+	    DOUBLE=`wslpath -w $ABSOLUTE "$1" | sed 's,\\\\,\\\\\\\\,g'`;
+	    echo $DOUBLE
+	    ;;
+    esac
+fi
diff --git a/lib/crypto/configure.in b/lib/crypto/configure.in
index 5f270e8ffb..3ac7ded9e6 100644
--- a/lib/crypto/configure.in
+++ b/lib/crypto/configure.in
@@ -227,7 +227,7 @@ case "$erl_xcomp_without_sysroot-$with_ssl" in
 		key="Inno Setup: App Path"
 		if "$ac_cv_prog_REGTOOL" "$rp" "$key" > /dev/null; then
 			ssl_install_dir=`"$ac_cv_prog_REGTOOL" "$rp" "$key"`
-			extra_dir=`win32_path.sh "$ssl_install_dir"`
+			extra_dir=`w32_path.sh -u "$ssl_install_dir"`
 		fi
 	fi
     fi
@@ -241,9 +241,9 @@ case "$erl_xcomp_without_sysroot-$with_ssl" in
     
     if  test "$host_os" = "win32" ; then
     	if test "x$ac_cv_sizeof_void_p" = "x8"; then
-	  std_win_ssl_locations="/cygdrive/c/OpenSSL-Win64 /c/OpenSSL-Win64 /opt/local64/pgm/OpenSSL"
+	  std_win_ssl_locations="/mnt/c/OpenSSL-Win64 /c/OpenSSL-Win64 /mnt/c/opt/local64/pgm/OpenSSL /opt/local64/pgm/OpenSSL /cygdrive/c/OpenSSL-Win64"
 	else
-	  std_win_ssl_locations="/cygdrive/c/OpenSSL-Win32 /c/OpenSSL-Win32 /cygdrive/c/OpenSSL /c/OpenSSL /opt/local/pgm/OpenSSL"
+	  std_win_ssl_locations="/mnt/c/OpenSSL-Win32 /c/OpenSSL-Win32 /mnt/c/OpenSSL /c/OpenSSL /cygdrive/c/OpenSSL /opt/local/pgm/OpenSSL /opt/local32/pgm/OpenSSL /mnt/c/opt/local/pgm/OpenSSL /mnt/c/opt/local32/pgm/OpenSSL /cygdrive/c/OpenSSL-Win32"
 	fi
     else
         std_win_ssl_locations=""
@@ -251,7 +251,7 @@ case "$erl_xcomp_without_sysroot-$with_ssl" in
 
 
     AC_MSG_CHECKING(for OpenSSL >= 0.9.8c in standard locations)
-    for rdir in $extra_dir $std_win_ssl_locations $std_ssl_locations; do
+    for rdir in "$extra_dir" $std_win_ssl_locations $std_ssl_locations; do
 	dir="$erl_xcomp_sysroot$rdir"
 	if test -f "$erl_xcomp_isysroot$rdir/include/openssl/opensslv.h"; then
 		is_real_ssl=yes
@@ -265,11 +265,11 @@ case "$erl_xcomp_without_sysroot-$with_ssl" in
 			elif test -f "$dir/lib/VC/openssl.lib"; then 
 				SSL_RUNTIME_LIBDIR="$rdir/lib/VC"
 				SSL_LIBDIR="$dir/lib/VC"
-			elif test -f $dir/lib/VC/libeay32MD.lib; then
+			elif test -f "$dir/lib/VC/libeay32MD.lib"; then
 		            SSL_CRYPTO_LIBNAME=libeay32MD
 		            SSL_SSL_LIBNAME=ssleay32MD
 			    if test "x$enable_dynamic_ssl" = "xno" && \
-	                       test -f  $dir/lib/VC/static/libeay32MD.lib; then
+	                       test -f "$dir/lib/VC/static/libeay32MD.lib"; then
 				  SSL_RUNTIME_LIBDIR="$rdir/lib/VC/static"
 				  SSL_LIBDIR="$dir/lib/VC/static"
 		            else
@@ -324,7 +324,7 @@ case "$erl_xcomp_without_sysroot-$with_ssl" in
 			SSL_INCLUDE="-I$dir/include"
 			old_CPPFLAGS=$CPPFLAGS
 			CPPFLAGS=$SSL_INCLUDE
-			AC_EGREP_CPP(^yes$,[
+			AC_EGREP_CPP(^yes.?$,[
 #include <openssl/opensslv.h>
 #if OPENSSL_VERSION_NUMBER >= 0x0090803fL
 yes
diff --git a/lib/wx/configure.in b/lib/wx/configure.in
index 9e62d81c5f..5a69738544 100644
--- a/lib/wx/configure.in
+++ b/lib/wx/configure.in
@@ -392,7 +392,7 @@ define(wx_warn_text,[
     fi
 else
     AC_MSG_CHECKING(for wxWidgets in standard locations)
-
+    echo
     # Check whether --with-wxdir was given.
     AC_MSG_NOTICE(OptionCheck: [$with_wxdir $with_wx_prefix])
 
@@ -403,7 +403,6 @@ else
       if test "${with_wx_prefix+set}" = set; then :
         withval=$with_wx_prefix; CWXWIN0=$withval
       else
-        echo Setting it empty
         CWXWIN0=""
       fi
     fi
@@ -413,7 +412,7 @@ else
     CWXWIN2=`dirname $CWXWIN1 2>/dev/null`
 
     if test -z "$PROGRAMFILES" ; then 
-       PROGRAMFILES="c:/Program\ Files"
+       PROGRAMFILES="c:/Program Files"
     fi
 
     CWXWIN_PROG=`win32_path.sh -u "$PROGRAMFILES" 2>/dev/null`
@@ -421,18 +420,23 @@ else
     CWXWIN3="$CWXWIN_PROG/wxWidgets-3.*.* $CWXWIN_PROG/wxWidgets-2.*.*"
     CWXWIN4="$CWXWIN_PROG/wxMSW-3.*.* $CWXWIN_PROG/wxMSW-2.*.*"
 
-    DOC_OPT=/opt/local/pgm
-    CWX_DOCUMENTED="$DOC_OPT/wxWidgets-2.*.* $DOC_OPT/wxMSW-2.*.*"
-    CWX_DOCUMENTED="$DOC_OPT/wxWidgets-3.*.* $DOC_OPT/wxMSW-3.*.* $CWX_DOCUMENTED"
+    DOC_OPT1=/opt/local/pgm
+    DOC_OPT2=/mnt/c/opt/local/pgm
+    CWX_DOCUMENTED="$DOC_OPT1/wxWidgets-3.*.* $DOC_OPT1/wxMSW-3.*.*"
+    CWX_DOCUMENTED="$DOC_OPT2/wxWidgets-3.*.* $DOC_OPT2/wxMSW-3.*.* $CWX_DOCUMENTED"
 
     case $ac_cv_sizeof_void_p in
     	 8)
-		DOC_OPT64=/opt/local64/pgm
-		CWX_DOCUMENTED="$DOC_OPT64/wxWidgets-2.*.* $DOC_OPT64/wxMSW-2.*.* $CWX_DOCUMENTED"
-		CWX_DOCUMENTED="$DOC_OPT64/wxWidgets-3.*.* $DOC_OPT64/wxMSW-3.*.* $CWX_DOCUMENTED"
+		DOC_OPT64_1=/opt/local64/pgm
+		DOC_OPT64_2=/mnt/c/opt/local64/pgm
+		CWX_DOCUMENTED="$DOC_OPT64_1/wxWidgets-3.*.* $DOC_OPT64_1/wxMSW-3.*.* $CWX_DOCUMENTED"
+		CWX_DOCUMENTED="$DOC_OPT64_2/wxWidgets-3.*.* $DOC_OPT64_2/wxMSW-3.*.* $CWX_DOCUMENTED"
 		;;
          *)
-		true
+		DOC_OPT3=/opt/local32/pgm
+		DOC_OPT4=/mnt/c/opt/local32/pgm
+		CWX_DOCUMENTED="$DOC_OPT3/wxWidgets-3.*.* $DOC_OPT3/wxMSW-3.*.* $CWX_DOCUMENTED"
+		CWX_DOCUMENTED="$DOC_OPT4/wxWidgets-3.*.* $DOC_OPT4/wxMSW-3.*.* $CWX_DOCUMENTED"
 		;;
     esac
 
@@ -451,7 +455,7 @@ else
 	    WX_RESCOMP="rc.sh -I$WXINCLUDE_PLAIN -D __WIN32__"
 	    RC_FILE_TYPE=res
 	    for lib in $WX_LIBDIR $WX_LIBDIR64; do
-		maybe=`ls $lib/wxbase*.lib | egrep 'wxbase[[0-9]]*u\.lib'`
+		maybe=`ls $lib/wxbase*.lib 2> /dev/null | egrep 'wxbase[[0-9]]*u\.lib'`
 		if test '!' -z "$maybe"; then
 		   corelib_number=`echo $maybe | sed 's,.*\([[0-9]].\)u\.lib,\1,'`
 		   WX_LIBDIR=$lib
@@ -493,7 +497,36 @@ if test "$WXERL_CAN_BUILD_DRIVER" != "false"; then
 AC_SUBST(WX_HAVE_STATIC_LIBS)
 AC_SUBST(RC_FILE_TYPE)
 
-AC_MSG_CHECKING(if wxwidgets have opengl support)
+AC_MSG_CHECKING(for wxwidgets 2.8 compatibility )
+AC_LANG_PUSH(C++)
+saved_CXXFLAGS=$CXXFLAGS
+CXXFLAGS="$CXXFLAGS $WX_CXXFLAGS"
+
+AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM([[
+  #ifdef WIN32
+  # include <windows.h>
+  #endif
+  #include "wx/wx.h"
+  ]], [[
+  #if wxMAJOR_VERSION > 2 && WXWIN_COMPATIBILITY_2_8 == 1
+  ;
+  #else
+  #error barf
+  #endif
+  ]])],
+  HAVE_COMPAT28_SUPPORT=yes, HAVE_COMPAT28_SUPPORT=no)
+
+CXXFLAGS=$saved_CXXFLAGS
+AC_LANG_POP(C++)
+AC_MSG_RESULT($HAVE_COMPAT28_SUPPORT)
+
+if test X"$HAVE_COMPAT28_SUPPORT" != X"yes" ; then
+   echo "wxWidgets was not compiled with --enable-compat28, wx will NOT be useable" >> ./CONF_INFO
+   WXERL_CAN_BUILD_DRIVER=false
+fi
+
+AC_MSG_CHECKING(for wxwidgets opengl support)
 AC_LANG_PUSH(C++)
 saved_CXXFLAGS=$CXXFLAGS
 CXXFLAGS="$CXXFLAGS $WX_CXXFLAGS"
diff --git a/otp_build b/otp_build
index 58bf617cf0..ed00a3ed7e 100755
--- a/otp_build
+++ b/otp_build
@@ -760,6 +760,48 @@ echo_env_msys ()
     echo_envinfo
 }
 
+echo_env_wsl ()
+{
+    X64=$1
+    #echo_envinfo
+    if [ X"$SHELL" = X"" ]; then
+	echo "You need to export the shell variable first," \
+		"for bourne-like shells, type:" >&2
+	echo 'export SHELL' >&2
+	echo "and for csh-like shells, type:" >&2
+	echo 'setenv SHELL $SHELL' >&2
+	echo " - then try again." >&2
+	exit 1
+    fi
+    echo_env_erltop
+
+    WIN32_WRAPPER_PATH="$ERL_TOP/erts/etc/win32/wsl_tools/vc:$ERL_TOP/erts/etc/win32/wsl_tools"
+
+    echo_setenv OVERRIDE_TARGET win32 ';'
+    if [ X"$X64" = X"true" ]; then
+        echo_setenv CONFIG_SUBTYPE win64 ';'
+    fi
+    echo_setenv WSLcross true ';'
+    echo_setenv CC cc.sh ';'
+    echo_setenv CXX cc.sh ';'
+    echo_setenv AR ar.sh ';'
+    echo_setenv RANLIB true ';'
+    if [ X"$X64" = X"true" ]; then
+        if [ -f "$ERL_TOP/erts/autoconf/win64.config.cache.static" ]; then
+	    echo_setenv OVERRIDE_CONFIG_CACHE_STATIC  "$ERL_TOP/erts/autoconf/win64.config.cache.static" ';'
+        fi
+        echo_setenv OVERRIDE_CONFIG_CACHE "$ERL_TOP/erts/autoconf/win64.config.cache" ';'
+    else
+        if [ -f "$ERL_TOP/erts/autoconf/win32.config.cache.static" ]; then
+	    echo_setenv OVERRIDE_CONFIG_CACHE_STATIC  "$ERL_TOP/erts/autoconf/win32.config.cache.static" ';'
+        fi
+        echo_setenv OVERRIDE_CONFIG_CACHE "$ERL_TOP/erts/autoconf/win32.config.cache" ';'
+    fi
+    echo_setenv WIN32_WRAPPER_PATH "$WIN32_WRAPPER_PATH" ';'
+    echo_setenv PATH "$WIN32_WRAPPER_PATH:$PATH" ';'
+    echo_envinfo
+}
+
 lookup_prog_in_path ()
 {
     PROG=$1
@@ -1162,7 +1204,9 @@ case "$1" in
 	        if [ x"$2" = x"x64" -o x"$2" = x"amd64" ]; then
                     ISX64=true
 		fi
-		if [ -x /usr/bin/msys-?.0.dll ]; then
+                if [ -x /bin/wslpath ]; then
+                    echo_env_wsl $ISX64
+                elif [ -x /usr/bin/msys-?.0.dll ]; then
 		    echo_env_msys $ISX64
 		else
 		    echo_env_cygwin $ISX64
@@ -1170,7 +1214,9 @@ case "$1" in
 	env_mingw32)
 		echo_env_mingw32;;
 	env_win64)
-	        if [ -x /usr/bin/msys-?.0.dll ]; then
+                if [ -x /bin/wslpath ]; then
+                    echo_env_wsl true
+                elif [ -x /usr/bin/msys-?.0.dll ]; then
 		    echo_env_msys true
 		else
 		    echo_env_cygwin true
-- 
2.16.4

openSUSE Build Service is sponsored by