<div dir="ltr">A github pull request with the changes would be best way for us to review this.<div dir="ltr"><div><br><div>/Dan</div></div></div><br><div class="gmail_quote"><div dir="ltr">On Tue, Apr 25, 2017 at 4:25 PM Michael Stellar <<a href="mailto:unexplained@gmail.com" target="_blank">unexplained@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello,<br>
<br>
       I don't know if either this question should be belong in<br>
erlang-questions but i wanted to gather info or direction from erlang<br>
windows developer specifically, since i have a fair practice and might<br>
be known that it's better to use newest/newer msvc/windows c++<br>
compiler for it's better in assemblies generation and might be have<br>
less bug in it for assemblies generation, so for those reasoning i<br>
have been able to compile latest github vanilla using either msvc 2015<br>
or msvc 2017 using cygwin x64, i haven't test thorough-fully all of<br>
the erlang functionality whether it's working fine in these newer<br>
compiler.<br>
<br>
The used .bash_profile for msvc 2017 enterprise will be attached below<br>
(some minor adjustments might be needed), other changes that needed to<br>
compile is :<br>
#Edit C:\cygwin64\home\Prodigy\src\otp\lib\wx\c_src\egl_impl.h , line 114<br>
###############START OF CHANGES##################################<br>
#elif defined(WIN32) && defined(_MSC_VER)<br>
#if _MSC_VER == 1900 || _MSC_VER == 1910<br>
typedef int int32_t;<br>
typedef __int64 int64_t;<br>
typedef unsigned __int64 uint64_t;<br>
#elif _MSC_VER < 1900<br>
typedef long int int32_t;<br>
typedef __int64 int64_t;<br>
typedef unsigned __int64 uint64_t;<br>
#endif<br>
###############END OF CHANGES##################################<br>
<br>
and<br>
<br>
##ON LINE 4371 in erts/<a href="http://configure.in" rel="noreferrer" target="_blank">configure.in</a> add the following<br>
############### CHANGE INTO THE FOLLOWING ##################################<br>
AC_EGREP_CPP(yes,[<br>
###############END OF CHANGES##################################<br>
<br>
The only last remaining problem is<br>
src\otp\erts\etc\win32\nsis\find_redist.sh seems failed to finding<br>
"vcredist_x64.exe"which is located in "C:\Program Files<br>
(x86)\Microsoft Visual<br>
Studio\2017\Enterprise\VC\Redist\MSVC\14.10.25008".<br>
<br>
The cl.exe for msvc 2017 enterprise is located in " C:\Program Files<br>
(x86)\Microsoft Visual Studio 14.0\VC\bin\amd64"<br>
<br>
Based on INSTAL_WIN32.md direction of recommending visual studio 12.0<br>
or 2013, the cl.exe location for msvc 2013 x64 is "C:\Program Files<br>
(x86)\Microsoft Visual Studio 12.0\VC\bin\amd64".<br>
<br>
And the vcredist_x64.exe for msvc 2013 is "C:\Program Files<br>
(x86)\Microsoft Visual Studio 12.0\VC\redist\1033".<br>
<br>
Based on these informations, and my noob attempt at sh shell scripting<br>
i have got the following :<br>
###############START OF MODIFIED<br>
find_redist.sh##################################<br>
#! /bin/sh<br>
#<br>
# %CopyrightBegin%<br>
#<br>
# Copyright Ericsson AB 2007-2016. All Rights Reserved.<br>
#<br>
# Licensed under the Apache License, Version 2.0 (the "License");<br>
# you may not use this file except in compliance with the License.<br>
# You may obtain a copy of the License at<br>
#<br>
#     <a href="http://www.apache.org/licenses/LICENSE-2.0" rel="noreferrer" target="_blank">http://www.apache.org/licenses/LICENSE-2.0</a><br>
#<br>
# Unless required by applicable law or agreed to in writing, software<br>
# distributed under the License is distributed on an "AS IS" BASIS,<br>
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<br>
# See the License for the specific language governing permissions and<br>
# limitations under the License.<br>
#<br>
# %CopyrightEnd%<br>
#<br>
<br>
# first find some tool we know exists, i.e. cl.exe<br>
lookup_prog_in_path ()<br>
{<br>
    PROG=$1<br>
    save_ifs=$IFS<br>
    IFS=:<br>
    for p in $PATH; do<br>
# In cygwin the programs are not always executable and have .exe suffix...<br>
if [ "X$TARGET" = "Xwin32" ]; then<br>
   if [ -f $p/$PROG.exe ]; then<br>
echo $p/$PROG<br>
break;<br>
   fi<br>
else<br>
   if [ -x $p/$PROG ]; then<br>
echo $p/$PROG<br>
break;<br>
   fi<br>
fi<br>
    done<br>
    IFS=$save_ifs<br>
}<br>
<br>
remove_path_element()<br>
{<br>
    EL=$1<br>
    PA=$2<br>
    ACC=""<br>
    save_ifs=$IFS<br>
    IFS=/<br>
    set $PA<br>
    N=$#<br>
    while [ $N -gt 1 ]; do<br>
if [ '!' -z "$1" ]; then<br>
   ACC="${ACC}/$1"<br>
fi<br>
N=`expr $N - 1`<br>
shift<br>
    done<br>
    UP=`echo $1 | tr [:lower:] [:upper:]`<br>
    ELUP=`echo $EL | tr [:lower:] [:upper:]`<br>
    IFS=$save_ifs<br>
    if [ "$UP" = "$ELUP" ]; then<br>
echo "$ACC"<br>
    else<br>
echo "${ACC}/$1"<br>
    fi<br>
    #echo "ACC=$ACC" >&2<br>
    #echo "1=$1" >&2<br>
}<br>
add_path_element()<br>
{<br>
    EL=$1<br>
    PA=$2<br>
<br>
    ELUP=`echo $EL | tr [:lower:] [:upper:]`<br>
    #echo "PA=$PA" >&2<br>
    for x in ${PA}/*; do<br>
#echo "X=$x" >&2<br>
UP=`basename "$x" | tr [:lower:] [:upper:]`<br>
#echo "UP=$UP" >&2<br>
if [ "$UP" = "$ELUP" ]; then<br>
   echo "$x"<br>
   return 0;<br>
fi<br>
    done<br>
    echo "$PA"<br>
}<br>
<br>
<br>
CLPATH=`lookup_prog_in_path cl`<br>
<br>
if [ -z "$CLPATH" ]; then<br>
    echo "Can not locate cl.exe and vcredist_x86/x64.exe - OK if using<br>
mingw" >&2<br>
    exit 1<br>
fi<br>
<br>
# Look to see if it's 64bit<br>
XX=`remove_path_element cl "$CLPATH"`<br>
YY=`remove_path_element x64 "$XX"`<br>
if [ "$YY" != "$XX" ]; then<br>
    AMD64DIR=true<br>
    VCREDIST=vcredist_x64<br>
    COMPONENTS="cl x64 hostx64 bin 14.10.25017 msvc tools vc"<br>
else<br>
    AMD64DIR=false<br>
    VCREDIST=vcredist_x86<br>
    COMPONENTS="cl bin vc"<br>
fi<br>
<br>
if [ X"$1" = X"-n" ]; then<br>
    echo $VCREDIST.exe<br>
    exit 0<br>
fi<br>
<br>
# echo $CLPATH<br>
BPATH=$CLPATH<br>
for x in $COMPONENTS; do<br>
    # echo $x<br>
    NBPATH=`remove_path_element $x "$BPATH"`<br>
    if [ "$NBPATH" = "$BPATH" ]; then<br>
echo "Failed to locate $VCREDIST.exe because cl.exe was in an<br>
unexpected location" >&2<br>
exit 2<br>
    fi<br>
    BPATH="$NBPATH"<br>
done<br>
BPATH_LIST=$BPATH<br>
<br>
# rc.exe is in the Microsoft SDK directory of VS2008<br>
RCPATH=`lookup_prog_in_path rc`<br>
fail=false<br>
if [ '!' -z "$RCPATH" ]; then<br>
    BPATH=$RCPATH<br>
    allow_fail=false<br>
    if [ $AMD64DIR = true ]; then<br>
COMPONENTS="rc x64 bin @ANY v6.0A v7.0A v7.1"<br>
    else<br>
COMPONENTS="rc bin @ANY v6.0A v7.0A v7.1"<br>
    fi<br>
    for x in $COMPONENTS; do<br>
if [ $x = @ANY ]; then<br>
   allow_fail=true<br>
else<br>
   NBPATH=`remove_path_element $x "$BPATH"`<br>
   if [ $allow_fail = false -a "$NBPATH" = "$BPATH" ]; then<br>
fail=true<br>
break;<br>
   fi<br>
   BPATH="$NBPATH"<br>
fi<br>
    done<br>
    if [ $fail = false ]; then<br>
BPATH_LIST="$BPATH_LIST $BPATH"<br>
    fi<br>
fi<br>
# echo "BPATH_LIST=$BPATH_LIST"<br>
<br>
# Frantic search through two roots with different<br>
# version directories. We want to be very specific about the<br>
# directory structures as we wouldnt want to find the wrong<br>
# redistributables...<br>
<br>
#echo $BPATH_LIST<br>
for BP in $BPATH_LIST; do<br>
    for verdir in "sdk v2.0" "sdk v3.5" "v6.0A" "v7.0" "v7.0A" "v7.1"<br>
"VC redist 1033" "VC Redist MSVC 14.10.25008"; do<br>
BPATH=$BP<br>
fail=false<br>
allow_fail=false<br>
for x in $verdir @ANY bootstrapper packages $VCREDIST Redist VC @ALL<br>
$VCREDIST.exe; do<br>
   #echo "x=$x"<br>
   #echo "BPATH=$BPATH"<br>
   #echo "allow_fail=$allow_fail"<br>
   if [ $x = @ANY ]; then<br>
allow_fail=true<br>
   elif [ $x = @ALL ]; then<br>
allow_fail=false<br>
   else<br>
NBPATH=`add_path_element $x "$BPATH"`<br>
if [ $allow_fail = false -a "$NBPATH" = "$BPATH" ]; then<br>
   fail=true<br>
   break;<br>
fi<br>
BPATH="$NBPATH"<br>
   fi<br>
done<br>
if [ $fail = false ]; then<br>
   break;<br>
fi<br>
    done<br>
    if [ $fail = false ]; then<br>
echo $BPATH<br>
exit 0<br>
    fi<br>
done<br>
<br>
# shortcut for locating $VCREDIST.exe is to put it into $ERL_TOP<br>
if [ -f $ERL_TOP/$VCREDIST.exe ]; then<br>
    echo $ERL_TOP/$VCREDIST.exe<br>
    exit 0<br>
fi<br>
<br>
# or $ERL_TOP/.. to share across multiple builds<br>
if [ -f $ERL_TOP/../$VCREDIST.exe ]; then<br>
    echo $ERL_TOP/../$VCREDIST.exe<br>
    exit 0<br>
fi<br>
<br>
echo "Failed to locate $VCREDIST.exe because directory structure was<br>
unexpected" >&2<br>
exit 3<br>
<br>
###############END OF MODIFIED find_redist.sh##################################<br>
<br>
When running "./otp_build installer_win32" i have got the following<br>
error "Failed to locate vcredist_x64.exe because cl.exe was in an<br>
unexpected location".<br>
<br>
<br>
Any of erlang windows developer wanted to add some more info about<br>
these problems?.<br>
<br>
Cheers,<br>
<br>
<br>
Michael<br>
_______________________________________________<br>
erlang-patches mailing list<br>
<a href="mailto:erlang-patches@erlang.org" target="_blank">erlang-patches@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-patches" rel="noreferrer" target="_blank">http://erlang.org/mailman/listinfo/erlang-patches</a><br>
</blockquote></div></div>