[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