[erlang-patches] otp_build installer_win32 problems with visual studio 2017

Dan Gudmundsson dangud@REDACTED
Fri Apr 28 10:01:34 CEST 2017


A github pull request with the changes would be best way for us to review
this.

/Dan

On Tue, Apr 25, 2017 at 4:25 PM Michael Stellar <unexplained@REDACTED>
wrote:

> Hello,
>
>        I don't know if either this question should be belong in
> erlang-questions but i wanted to gather info or direction from erlang
> windows developer specifically, since i have a fair practice and might
> be known that it's better to use newest/newer msvc/windows c++
> compiler for it's better in assemblies generation and might be have
> less bug in it for assemblies generation, so for those reasoning i
> have been able to compile latest github vanilla using either msvc 2015
> or msvc 2017 using cygwin x64, i haven't test thorough-fully all of
> the erlang functionality whether it's working fine in these newer
> compiler.
>
> The used .bash_profile for msvc 2017 enterprise will be attached below
> (some minor adjustments might be needed), other changes that needed to
> compile is :
> #Edit C:\cygwin64\home\Prodigy\src\otp\lib\wx\c_src\egl_impl.h , line 114
> ###############START OF CHANGES##################################
> #elif defined(WIN32) && defined(_MSC_VER)
> #if _MSC_VER == 1900 || _MSC_VER == 1910
> typedef int int32_t;
> typedef __int64 int64_t;
> typedef unsigned __int64 uint64_t;
> #elif _MSC_VER < 1900
> typedef long int int32_t;
> typedef __int64 int64_t;
> typedef unsigned __int64 uint64_t;
> #endif
> ###############END OF CHANGES##################################
>
> and
>
> ##ON LINE 4371 in erts/configure.in add the following
> ############### CHANGE INTO THE FOLLOWING
> ##################################
> AC_EGREP_CPP(yes,[
> ###############END OF CHANGES##################################
>
> The only last remaining problem is
> src\otp\erts\etc\win32\nsis\find_redist.sh seems failed to finding
> "vcredist_x64.exe"which is located in "C:\Program Files
> (x86)\Microsoft Visual
> Studio\2017\Enterprise\VC\Redist\MSVC\14.10.25008".
>
> The cl.exe for msvc 2017 enterprise is located in " C:\Program Files
> (x86)\Microsoft Visual Studio 14.0\VC\bin\amd64"
>
> Based on INSTAL_WIN32.md direction of recommending visual studio 12.0
> or 2013, the cl.exe location for msvc 2013 x64 is "C:\Program Files
> (x86)\Microsoft Visual Studio 12.0\VC\bin\amd64".
>
> And the vcredist_x64.exe for msvc 2013 is "C:\Program Files
> (x86)\Microsoft Visual Studio 12.0\VC\redist\1033".
>
> Based on these informations, and my noob attempt at sh shell scripting
> i have got the following :
> ###############START OF MODIFIED
> find_redist.sh##################################
> #! /bin/sh
> #
> # %CopyrightBegin%
> #
> # Copyright Ericsson AB 2007-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%
> #
>
> # first find some tool we know exists, i.e. cl.exe
> lookup_prog_in_path ()
> {
>     PROG=$1
>     save_ifs=$IFS
>     IFS=:
>     for p in $PATH; do
> # In cygwin the programs are not always executable and have .exe suffix...
> if [ "X$TARGET" = "Xwin32" ]; then
>    if [ -f $p/$PROG.exe ]; then
> echo $p/$PROG
> break;
>    fi
> else
>    if [ -x $p/$PROG ]; then
> echo $p/$PROG
> break;
>    fi
> fi
>     done
>     IFS=$save_ifs
> }
>
> remove_path_element()
> {
>     EL=$1
>     PA=$2
>     ACC=""
>     save_ifs=$IFS
>     IFS=/
>     set $PA
>     N=$#
>     while [ $N -gt 1 ]; do
> if [ '!' -z "$1" ]; then
>    ACC="${ACC}/$1"
> fi
> N=`expr $N - 1`
> shift
>     done
>     UP=`echo $1 | tr [:lower:] [:upper:]`
>     ELUP=`echo $EL | tr [:lower:] [:upper:]`
>     IFS=$save_ifs
>     if [ "$UP" = "$ELUP" ]; then
> echo "$ACC"
>     else
> echo "${ACC}/$1"
>     fi
>     #echo "ACC=$ACC" >&2
>     #echo "1=$1" >&2
> }
> add_path_element()
> {
>     EL=$1
>     PA=$2
>
>     ELUP=`echo $EL | tr [:lower:] [:upper:]`
>     #echo "PA=$PA" >&2
>     for x in ${PA}/*; do
> #echo "X=$x" >&2
> UP=`basename "$x" | tr [:lower:] [:upper:]`
> #echo "UP=$UP" >&2
> if [ "$UP" = "$ELUP" ]; then
>    echo "$x"
>    return 0;
> fi
>     done
>     echo "$PA"
> }
>
>
> CLPATH=`lookup_prog_in_path cl`
>
> if [ -z "$CLPATH" ]; then
>     echo "Can not locate cl.exe and vcredist_x86/x64.exe - OK if using
> mingw" >&2
>     exit 1
> fi
>
> # Look to see if it's 64bit
> XX=`remove_path_element cl "$CLPATH"`
> YY=`remove_path_element x64 "$XX"`
> if [ "$YY" != "$XX" ]; then
>     AMD64DIR=true
>     VCREDIST=vcredist_x64
>     COMPONENTS="cl x64 hostx64 bin 14.10.25017 msvc tools vc"
> else
>     AMD64DIR=false
>     VCREDIST=vcredist_x86
>     COMPONENTS="cl bin vc"
> fi
>
> if [ X"$1" = X"-n" ]; then
>     echo $VCREDIST.exe
>     exit 0
> fi
>
> # echo $CLPATH
> BPATH=$CLPATH
> for x in $COMPONENTS; do
>     # echo $x
>     NBPATH=`remove_path_element $x "$BPATH"`
>     if [ "$NBPATH" = "$BPATH" ]; then
> echo "Failed to locate $VCREDIST.exe because cl.exe was in an
> unexpected location" >&2
> exit 2
>     fi
>     BPATH="$NBPATH"
> done
> BPATH_LIST=$BPATH
>
> # rc.exe is in the Microsoft SDK directory of VS2008
> RCPATH=`lookup_prog_in_path rc`
> fail=false
> if [ '!' -z "$RCPATH" ]; then
>     BPATH=$RCPATH
>     allow_fail=false
>     if [ $AMD64DIR = true ]; then
> COMPONENTS="rc x64 bin @ANY v6.0A v7.0A v7.1"
>     else
> COMPONENTS="rc bin @ANY v6.0A v7.0A v7.1"
>     fi
>     for x in $COMPONENTS; do
> if [ $x = @ANY ]; then
>    allow_fail=true
> else
>    NBPATH=`remove_path_element $x "$BPATH"`
>    if [ $allow_fail = false -a "$NBPATH" = "$BPATH" ]; then
> fail=true
> break;
>    fi
>    BPATH="$NBPATH"
> fi
>     done
>     if [ $fail = false ]; then
> BPATH_LIST="$BPATH_LIST $BPATH"
>     fi
> fi
> # echo "BPATH_LIST=$BPATH_LIST"
>
> # Frantic search through two roots with different
> # version directories. We want to be very specific about the
> # directory structures as we wouldnt want to find the wrong
> # redistributables...
>
> #echo $BPATH_LIST
> for BP in $BPATH_LIST; do
>     for verdir in "sdk v2.0" "sdk v3.5" "v6.0A" "v7.0" "v7.0A" "v7.1"
> "VC redist 1033" "VC Redist MSVC 14.10.25008"; do
> BPATH=$BP
> fail=false
> allow_fail=false
> for x in $verdir @ANY bootstrapper packages $VCREDIST Redist VC @ALL
> $VCREDIST.exe; do
>    #echo "x=$x"
>    #echo "BPATH=$BPATH"
>    #echo "allow_fail=$allow_fail"
>    if [ $x = @ANY ]; then
> allow_fail=true
>    elif [ $x = @ALL ]; then
> allow_fail=false
>    else
> NBPATH=`add_path_element $x "$BPATH"`
> if [ $allow_fail = false -a "$NBPATH" = "$BPATH" ]; then
>    fail=true
>    break;
> fi
> BPATH="$NBPATH"
>    fi
> done
> if [ $fail = false ]; then
>    break;
> fi
>     done
>     if [ $fail = false ]; then
> echo $BPATH
> exit 0
>     fi
> done
>
> # shortcut for locating $VCREDIST.exe is to put it into $ERL_TOP
> if [ -f $ERL_TOP/$VCREDIST.exe ]; then
>     echo $ERL_TOP/$VCREDIST.exe
>     exit 0
> fi
>
> # or $ERL_TOP/.. to share across multiple builds
> if [ -f $ERL_TOP/../$VCREDIST.exe ]; then
>     echo $ERL_TOP/../$VCREDIST.exe
>     exit 0
> fi
>
> echo "Failed to locate $VCREDIST.exe because directory structure was
> unexpected" >&2
> exit 3
>
> ###############END OF MODIFIED
> find_redist.sh##################################
>
> When running "./otp_build installer_win32" i have got the following
> error "Failed to locate vcredist_x64.exe because cl.exe was in an
> unexpected location".
>
>
> Any of erlang windows developer wanted to add some more info about
> these problems?.
>
> Cheers,
>
>
> Michael
> _______________________________________________
> erlang-patches mailing list
> erlang-patches@REDACTED
> http://erlang.org/mailman/listinfo/erlang-patches
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-patches/attachments/20170428/f54e655b/attachment.htm>


More information about the erlang-patches mailing list