From unexplained@REDACTED Tue Apr 25 16:21:38 2017 From: unexplained@REDACTED (Michael Stellar) Date: Tue, 25 Apr 2017 21:21:38 +0700 Subject: [erlang-patches] otp_build installer_win32 problems with visual studio 2017 Message-ID: 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 -------------- next part -------------- A non-text attachment was scrubbed... Name: .bash_profile Type: application/octet-stream Size: 4931 bytes Desc: not available URL: From dangud@REDACTED Fri Apr 28 10:01:34 2017 From: dangud@REDACTED (Dan Gudmundsson) Date: Fri, 28 Apr 2017 08:01:34 +0000 Subject: [erlang-patches] otp_build installer_win32 problems with visual studio 2017 In-Reply-To: References: Message-ID: 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 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: