Support MSVC 15.0

New compiler changes quite some stuff:

* Compiler detection done based on different registry key
* .NET SDK detection done based on different registry key
* Msbuild installation directory changed
* Merge modules installation directory changed
* SDK number in registry doesn't match the directory name:
  (registry key: 10.0.14393, directory name: 10.0.14393.0)
* Compiler, include and library location directories changed
* Architecture specific directory changed: x64 instead of amd64
* Compiler own include directory must be added with -I option
* To force usage of SDK 10 (8.1 is selected per default) new
  switch WindowsTargetPlatformVersion is passed to msbuild, to
  avoid patching VC project files with this line:
<WindowsTargetPlatformVersion><SDK>/WindowsTargetPlatformVersion>

Known issues:

* Firebird is broken: http://paste.openstack.org/show/594333

Change-Id: I148d7932aff43bbbd07bd493504df974726234c2
Reviewed-on: https://gerrit.libreoffice.org/31279
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: David Ostrovsky <david@ostrovsky.org>
This commit is contained in:
David Ostrovsky
2016-11-23 23:53:55 +01:00
parent 6054276948
commit b862cbdd34
10 changed files with 192 additions and 37 deletions

View File

@@ -42,7 +42,7 @@ $(eval $(call gb_CppunitTest_use_libraries,basic_macros, \
ifeq ($(OS),WNT) ifeq ($(OS),WNT)
$(eval $(call gb_CppunitTest_use_system_win32_libs,basic_macros, \ $(eval $(call gb_CppunitTest_use_system_win32_libs,basic_macros, \
oleaut32 \ oleaut32 \
$(if $(filter 140,$(VCVER)),legacy_stdio_definitions) \ $(if $(filter 140 150,$(VCVER)),legacy_stdio_definitions) \
odbc32 \ odbc32 \
odbccp32 \ odbccp32 \
)) ))

View File

@@ -20,7 +20,7 @@
#ifndef INCLUDED_BRIDGES_INC_EXCEPT_HXX #ifndef INCLUDED_BRIDGES_INC_EXCEPT_HXX
#define INCLUDED_BRIDGES_INC_EXCEPT_HXX #define INCLUDED_BRIDGES_INC_EXCEPT_HXX
#if _MSC_VER >= 1900 // VC 2015 (and later?) #if _MSC_VER >= 1900 // VC 2015/2017 (and later?)
// extern "C" void** __cdecl __current_exception() // extern "C" void** __cdecl __current_exception()
// is defined in MSVS14.0/VC/crt/src/vcruntime/frame.cpp: // is defined in MSVS14.0/VC/crt/src/vcruntime/frame.cpp:
// return &__vcrt_getptd()->_curexception; // return &__vcrt_getptd()->_curexception;

View File

@@ -803,7 +803,7 @@ int mscx_filterCppException(
if (rethrow && pRecord == pPointers->ExceptionRecord) if (rethrow && pRecord == pPointers->ExceptionRecord)
{ {
pRecord = *reinterpret_cast< EXCEPTION_RECORD ** >( pRecord = *reinterpret_cast< EXCEPTION_RECORD ** >(
#if _MSC_VER >= 1900 // VC 2015 (and later?) #if _MSC_VER >= 1900 // VC 2015/2017 (and later?)
__current_exception() __current_exception()
#else #else
// Hack to get msvcrt internal _curexception field // Hack to get msvcrt internal _curexception field

View File

@@ -2112,10 +2112,10 @@ libo_FUZZ_ARG_WITH(doxygen,
,with_doxygen=yes) ,with_doxygen=yes)
AC_ARG_WITH(visual-studio, AC_ARG_WITH(visual-studio,
AS_HELP_STRING([--with-visual-studio=<2013/2015>], AS_HELP_STRING([--with-visual-studio=<2013/2015/2017>],
[Specify which Visual Studio version to use in case several are [Specify which Visual Studio version to use in case several are
installed. If not specified, only 2013 is detected automatically installed. If not specified, only 2013 is detected automatically
because 2015 support is currently experimental.]), because 2015 and 2017 support is currently experimental.]),
,) ,)
AC_ARG_WITH(windows-sdk, AC_ARG_WITH(windows-sdk,
@@ -3288,6 +3288,8 @@ map_vs_year_to_version()
vsversion=12.0;; vsversion=12.0;;
2015) 2015)
vsversion=14.0;; vsversion=14.0;;
2017)
vsversion=15.0;;
*) *)
AC_MSG_ERROR([Assertion failure - invalid argument "$1" to map_vs_year_to_version()]);; AC_MSG_ERROR([Assertion failure - invalid argument "$1" to map_vs_year_to_version()]);;
esac esac
@@ -3304,16 +3306,22 @@ vs_versions_to_check()
map_vs_year_to_version "$1" map_vs_year_to_version "$1"
vsversions=$vsversion vsversions=$vsversion
else else
# By default we prefer 2013/2015, in this order # By default we prefer 2013/2015/2017, in this order
vsversions="12.0 14.0" vsversions="12.0 14.0 15.0"
fi fi
} }
win_get_env_from_vsvars32bat() win_get_env_from_vsvars32bat()
{ {
WRAPPERBATCHFILEPATH="`mktemp -t wrpXXXXXX.bat`" WRAPPERBATCHFILEPATH="`mktemp -t wrpXXXXXX.bat`"
if test $vcnum = "150"; then
# Also seems to be located in another directory under the same name: vsvars32.bat
# https://github.com/bazelbuild/bazel/blob/master/src/main/native/build_windows_jni.sh#L56-L57
echo -e "@call \"`cygpath -w $VC_PRODUCT_DIR`/../Common7/Tools/VsDevCmd.bat\" /no_logo\r\n" >> $WRAPPERBATCHFILEPATH
else
echo -e "@call \"`cygpath -w $VC_PRODUCT_DIR`/../Common7/Tools/vsvars32.bat\"\r\n" >> $WRAPPERBATCHFILEPATH
fi
echo -e "@setlocal\r\n" >> $WRAPPERBATCHFILEPATH echo -e "@setlocal\r\n" >> $WRAPPERBATCHFILEPATH
echo -e "@call \"`cygpath -w $VC_PRODUCT_DIR`/../Common7/Tools/vsvars32.bat\"\r\n" >> $WRAPPERBATCHFILEPATH
echo -e "@echo %$1%\r\n" >> $WRAPPERBATCHFILEPATH echo -e "@echo %$1%\r\n" >> $WRAPPERBATCHFILEPATH
echo -e "@endlocal\r\n" >> $WRAPPERBATCHFILEPATH echo -e "@endlocal\r\n" >> $WRAPPERBATCHFILEPATH
chmod +x $WRAPPERBATCHFILEPATH chmod +x $WRAPPERBATCHFILEPATH
@@ -3330,27 +3338,43 @@ find_ucrt()
UCRTSDKDIR=$formatted_path UCRTSDKDIR=$formatted_path
reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v10.0/ProductVersion" reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v10.0/ProductVersion"
UCRTVERSION=$regvalue UCRTVERSION=$regvalue
# Rest if not exist
if ! test -d "${UCRTSDKDIR}Include/$UCRTVERSION/ucrt"; then
UCRTSDKDIR=
AC_MSG_RESULT([UCRT: give up registry detection and retrieve from IDE env file])
fi
fi fi
if test -z "$UCRTSDKDIR"; then if test -z "$UCRTSDKDIR"; then
if test -f "$VC_PRODUCT_DIR/../Common7/Tools/vsvars32.bat"; then ide_env_dir="$VC_PRODUCT_DIR/../Common7/Tools/"
if test "$vcnum" = "150"; then
ide_env_file="${ide_env_dir}VsDevCmd.bat"
else
ide_env_file="${ide_env_dir}/vsvars32.bat"
fi
if test -f "$ide_env_file"; then
PathFormat "`win_get_env_from_vsvars32bat "UniversalCRTSdkDir"`" PathFormat "`win_get_env_from_vsvars32bat "UniversalCRTSdkDir"`"
UCRTSDKDIR=$formatted_path UCRTSDKDIR=$formatted_path
UCRTVERSION=`win_get_env_from_vsvars32bat "UCRTVersion"` UCRTVERSION=`win_get_env_from_vsvars32bat "UCRTVersion"`
else
AC_MSG_ERROR([No UCRT found])
fi fi
fi fi
} }
find_msvc() find_msvc()
{ {
# Find Visual C++ 2013/2015 # Find Visual C++ 2013/2015/2017
# Args: $1 (optional) : The VS version year # Args: $1 (optional) : The VS version year
# Return values: $vctest, $vcyear, $vcnum, $vcnumwithdot # Return values: $vctest, $vcyear, $vcnum, $vcnumwithdot, $vcbuildnumber
unset vctest vcnum vcnumwithdot vcexpress unset vctest vcnum vcnumwithdot vcexpress vcbuildnumber
vs_versions_to_check "$1" vs_versions_to_check "$1"
AC_MSG_CHECKING([whether vs inst is $vsversions])
for ver in $vsversions; do for ver in $vsversions; do
AC_MSG_CHECKING([ver is now: $ver])
reg_get_value_32 HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/VisualStudio/$ver/Setup/VC/ProductDir reg_get_value_32 HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/VisualStudio/$ver/Setup/VC/ProductDir
if test -n "$regvalue"; then if test -n "$regvalue"; then
vctest=$regvalue vctest=$regvalue
@@ -3361,6 +3385,14 @@ find_msvc()
vctest=$regvalue vctest=$regvalue
break break
fi fi
# As always MSVC 15.0 is special here
reg_get_value_32 HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/VisualStudio/SxS/VS7/$ver
if test -n "$regvalue"; then
AC_MSG_RESULT([found: $regvalue])
PathFormat "$regvalue"
vctest=$formatted_path
break
fi
done done
if test -n "$vctest"; then if test -n "$vctest"; then
vcnumwithdot=$ver vcnumwithdot=$ver
@@ -3373,6 +3405,11 @@ find_msvc()
vcyear=2015 vcyear=2015
vcnum=140 vcnum=140
;; ;;
15.0)
vcyear=2017
vcnum=150
vcbuildnumber=`ls $vctest/VC/Tools/MSVC -A1r | head -1`
;;
esac esac
reg_get_value_32 HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/VCExpress/$vcnumwithdot/Setup/VC/ProductDir reg_get_value_32 HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/VCExpress/$vcnumwithdot/Setup/VC/ProductDir
if test -n "$regvalue" -a "$regvalue" = "$vctest" ; then if test -n "$regvalue" -a "$regvalue" = "$vctest" ; then
@@ -3393,24 +3430,28 @@ if test "$_os" = "WINNT"; then
if test -n "$with_visual_studio"; then if test -n "$with_visual_studio"; then
AC_MSG_ERROR([No Visual Studio $with_visual_studio installation found]) AC_MSG_ERROR([No Visual Studio $with_visual_studio installation found])
else else
AC_MSG_ERROR([No Visual Studio 2013/2015 installation found]) AC_MSG_ERROR([No Visual Studio 2013/2015/2017 installation found])
fi fi
fi fi
if test "$BITNESS_OVERRIDE" = ""; then if test "$BITNESS_OVERRIDE" = ""; then
if test -f "$vctest/bin/cl.exe"; then if test -f "$vctest/bin/cl.exe"; then
VC_PRODUCT_DIR=$vctest VC_PRODUCT_DIR=$vctest
elif test -f "$vctest/VC/Tools/MSVC/$vcbuildnumber/bin/HostX86/x86/cl.exe"; then
VC_PRODUCT_DIR=$vctest/VC
else else
AC_MSG_ERROR([No compiler (cl.exe) in $vctest/bin/cl.exe]) AC_MSG_ERROR([No compiler (cl.exe) in $vctest/bin/cl.exe])
fi fi
else else
if test -f "$vctest/bin/amd64/cl.exe"; then if test -f "$vctest/bin/amd64/cl.exe"; then
VC_PRODUCT_DIR=$vctest VC_PRODUCT_DIR=$vctest
elif test -f "$vctest/VC/Tools/MSVC/$vcbuildnumber/bin/HostX64/x64/cl.exe"; then
VC_PRODUCT_DIR=$vctest/VC
else else
if test -f "$vctest/bin/x86_amd64/cl.exe" -a "$vcexpress" = "Express"; then if test -f "$vctest/bin/x86_amd64/cl.exe" -a "$vcexpress" = "Express"; then
VC_PRODUCT_DIR=$vctest VC_PRODUCT_DIR=$vctest
else else
AC_MSG_ERROR([No compiler (cl.exe) in $vctest/bin/amd64/cl.exe or $vctest/bin/x86_amd64/cl.exe]) AC_MSG_ERROR([No compiler (cl.exe) in $vctest/VC/Tools/MSVC/$vcbuildnumber/bin/HostX64/x64/cl.exe or $vctest/bin/amd64/cl.exe or $vctest/bin/x86_amd64/cl.exe])
fi fi
fi fi
fi fi
@@ -3453,10 +3494,23 @@ if test "$_os" = "WINNT"; then
AC_SUBST(UCRTSDKDIR) AC_SUBST(UCRTSDKDIR)
AC_SUBST(UCRTVERSION) AC_SUBST(UCRTVERSION)
AC_MSG_CHECKING([for MSBuild.exe location for: $vcnumwithdot])
# Find the proper version of MSBuild.exe to use based on the VS version # Find the proper version of MSBuild.exe to use based on the VS version
reg_get_value_32 HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/MSBuild/$vcnumwithdot/MSBuildOverrideTasksPath reg_get_value_32 HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/MSBuild/$vcnumwithdot/MSBuildOverrideTasksPath
if test -n "$regvalue" ; then if test -n "$regvalue" ; then
AC_MSG_RESULT([found: $regvalue])
MSBUILD_PATH=`win_short_path_for_make "$regvalue"` MSBUILD_PATH=`win_short_path_for_make "$regvalue"`
else
if test $vcnum = "150"; then
if test "$BITNESS_OVERRIDE" = ""; then
regvalue="$VC_PRODUCT_DIR/../MSBuild/$vcnumwithdot/Bin"
else
regvalue="$VC_PRODUCT_DIR/../MSBuild/$vcnumwithdot/Bin/amd64"
fi
MSBUILD_PATH=`win_short_path_for_make "$regvalue"`
else
AC_MSG_ERROR([No msbuild found, Visual Studio installation broken?])
fi
fi fi
# Find the version of devenv.exe # Find the version of devenv.exe
@@ -3474,22 +3528,38 @@ if test "$_os" = "WINNT"; then
dnl =========================================================== dnl ===========================================================
MSPDB_PATH= MSPDB_PATH=
CL_DIR=
CL_LIB=
if test "$BITNESS_OVERRIDE" = ""; then if test "$BITNESS_OVERRIDE" = ""; then
if test "$vcnum" = "120"; then if test "$vcnum" = "120"; then
MSPDB_PATH="$VC_PRODUCT_DIR/../VC/bin" MSPDB_PATH="$VC_PRODUCT_DIR/../VC/bin"
CL_DIR=bin
else else
MSPDB_PATH="$VC_PRODUCT_DIR/../Common7/IDE" MSPDB_PATH="$VC_PRODUCT_DIR/../Common7/IDE"
CL_DIR=bin
fi fi
else else
if test "$vcexpress" = "Express"; then if test "$vcexpress" = "Express"; then
MSPDB_PATH="$VC_PRODUCT_DIR/bin" MSPDB_PATH="$VC_PRODUCT_DIR/bin"
CL_DIR=bin
else else
MSPDB_PATH="$VC_PRODUCT_DIR/bin/amd64" if test "$vcnum" = "150"; then
MSPDB_PATH="$VC_PRODUCT_DIR/Tools/MSVC/$vcbuildnumber/bin/HostX64/x64"
CL_DIR=Tools/MSVC/$vcbuildnumber/bin/HostX64/x64
else
MSPDB_PATH="$VC_PRODUCT_DIR/bin/amd64"
CL_DIR=bin/amd64
fi
fi fi
fi fi
mspdbnum=$vcnum # MSVC 15.0 has libraries from 14.0?
if test "$vcnum" = "150"; then
mspdbnum="140"
else
mspdbnum=$vcnum
fi
if test ! -e "$MSPDB_PATH/mspdb${mspdbnum}.dll"; then if test ! -e "$MSPDB_PATH/mspdb${mspdbnum}.dll"; then
AC_MSG_ERROR([No mspdb${mspdbnum}.dll in $MSPDB_PATH, Visual Studio installation broken?]) AC_MSG_ERROR([No mspdb${mspdbnum}.dll in $MSPDB_PATH, Visual Studio installation broken?])
@@ -3511,7 +3581,7 @@ if test "$_os" = "WINNT"; then
if test -z "$CC"; then if test -z "$CC"; then
if test "$BITNESS_OVERRIDE" = ""; then if test "$BITNESS_OVERRIDE" = ""; then
if test -f "$VC_PRODUCT_DIR/bin/cl.exe"; then if test -f "$VC_PRODUCT_DIR/bin/cl.exe"; then
CC="$VC_PRODUCT_DIR/bin/cl.exe" CC="$VC_PRODUCT_DIR/$CL_DIR/cl.exe"
fi fi
else else
if test "$vcexpress" = "Express"; then if test "$vcexpress" = "Express"; then
@@ -3519,8 +3589,8 @@ if test "$_os" = "WINNT"; then
CC="$VC_PRODUCT_DIR/bin/x86_amd64/cl.exe" CC="$VC_PRODUCT_DIR/bin/x86_amd64/cl.exe"
fi fi
else else
if test -f "$VC_PRODUCT_DIR/bin/amd64/cl.exe"; then if test -f "$VC_PRODUCT_DIR/$CL_DIR/cl.exe"; then
CC="$VC_PRODUCT_DIR/bin/amd64/cl.exe" CC="$VC_PRODUCT_DIR/$CL_DIR/cl.exe"
fi fi
fi fi
fi fi
@@ -3543,7 +3613,13 @@ if test "$_os" = "WINNT"; then
dnl since MSVC 2012, default for x86 is -arch:SSE2: dnl since MSVC 2012, default for x86 is -arch:SSE2:
CC="$CC -arch:SSE" CC="$CC -arch:SSE"
fi fi
export INCLUDE=`cygpath -d "$COMPATH/Include"`
if test "$vcnum" = "150"; then
COMPATH="$COMPATH/Tools/MSVC/$vcbuildnumber"
fi
export INCLUDE=`cygpath -d "$COMPATH\Include"`
AC_MSG_RESULT([INCLUDE is: ($INCLUDE)])
PathFormat "$COMPATH" PathFormat "$COMPATH"
COMPATH="$formatted_path" COMPATH="$formatted_path"
@@ -3563,6 +3639,10 @@ if test "$_os" = "WINNT"; then
COMEX=19 COMEX=19
WINDOWS_SDK_ACCEPTABLE_VERSIONS="10.0A 10.0 8.1A 8.1 8.0 7.1A" WINDOWS_SDK_ACCEPTABLE_VERSIONS="10.0A 10.0 8.1A 8.1 8.0 7.1A"
;; ;;
150)
COMEX=19
WINDOWS_SDK_ACCEPTABLE_VERSIONS="10.0A 10.0 8.1A 8.1 8.0 7.1A"
;;
esac esac
# The expectation is that --with-windows-sdk should not need to be used # The expectation is that --with-windows-sdk should not need to be used
@@ -3622,6 +3702,7 @@ if test "$_os" = "WINNT"; then
LINK_X64_BINARY= LINK_X64_BINARY=
if test "$BITNESS_OVERRIDE" = ""; then if test "$BITNESS_OVERRIDE" = ""; then
# TODO(davido): This is probably broken for MSVC 15.0
AC_MSG_CHECKING([for a x64 compiler and libraries for 64-bit Explorer extensions]) AC_MSG_CHECKING([for a x64 compiler and libraries for 64-bit Explorer extensions])
if test -f "$VC_PRODUCT_DIR/atlmfc/lib/amd64/atls.lib"; then if test -f "$VC_PRODUCT_DIR/atlmfc/lib/amd64/atls.lib"; then
# Prefer native x64 compiler to cross-compiler, in case we are running # Prefer native x64 compiler to cross-compiler, in case we are running
@@ -3642,6 +3723,12 @@ if test "$_os" = "WINNT"; then
AC_MSG_RESULT([not found]) AC_MSG_RESULT([not found])
AC_MSG_WARN([Installation set will not contain 64-bit Explorer extensions]) AC_MSG_WARN([Installation set will not contain 64-bit Explorer extensions])
fi fi
if test "$BUILD_X64" = TRUE; then
AC_MSG_RESULT([found])
else
AC_MSG_RESULT([not found])
AC_MSG_WARN([Installation set will not contain 64-bit Explorer extensions])
fi
fi fi
AC_SUBST(BUILD_X64) AC_SUBST(BUILD_X64)
@@ -5140,6 +5227,14 @@ find_al()
return return
fi fi
done done
# TODO(davido): We need this additional check to detect 4.6.2
# This should be made generic, though
reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/NETFXSDK/4.6.2\WinSDK-NetFx40Tools/InstallationFolder"
if test -n "$regvalue" -a \( -f "$regvalue/al.exe" -o -f "$regvalue/bin/al.exe" \); then
altest=$regvalue
return
fi
} }
find_dotnetsdk() find_dotnetsdk()
@@ -5161,7 +5256,7 @@ find_dotnetsdk46()
{ {
unset frametest unset frametest
for ver in 4.6.1 4.6; do for ver in 4.6.2 4.6.1 4.6; do
reg_get_value_64 "HKEY_LOCAL_MACHINE/SOFTWARE/Wow6432Node/Microsoft/Microsoft SDKs/NETFXSDK/$ver/KitsInstallationFolder" reg_get_value_64 "HKEY_LOCAL_MACHINE/SOFTWARE/Wow6432Node/Microsoft/Microsoft SDKs/NETFXSDK/$ver/KitsInstallationFolder"
if test -n "$regvalue"; then if test -n "$regvalue"; then
frametest=$regvalue frametest=$regvalue
@@ -5214,6 +5309,9 @@ find_winsdk_version()
winsdktest=$regvalue winsdktest=$regvalue
reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v${1}/ProductVersion" reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v${1}/ProductVersion"
winsdklibsubdir=$regvalue winsdklibsubdir=$regvalue
if test "$regvalue" = "10.0.14393"; then
winsdklibsubdir="10.0.14393.0"
fi
return return
fi fi
;; ;;
@@ -5240,7 +5338,7 @@ find_msms()
my_msm_file=Microsoft_VC${VCVER}_CRT_x86.msm my_msm_file=Microsoft_VC${VCVER}_CRT_x86.msm
AC_MSG_CHECKING([for $my_msm_file]) AC_MSG_CHECKING([for $my_msm_file])
msmdir= msmdir=
for ver in 12.0 14.0; do for ver in 12.0 14.0 15.0; do
reg_get_value_32 HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/VisualStudio/$ver/Setup/VS/MSMDir reg_get_value_32 HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/VisualStudio/$ver/Setup/VS/MSMDir
if test -n "$regvalue"; then if test -n "$regvalue"; then
if test -e "$regvalue/$my_msm_file"; then if test -e "$regvalue/$my_msm_file"; then
@@ -5264,6 +5362,15 @@ find_msms()
msmdir=$my_msm_dir msmdir=$my_msm_dir
fi fi
fi fi
dnl Starting from MSVC 15.0, merge modules are located in different directory
if test $VCVER = 150; then
my_msm_dir="$VC_PRODUCT_DIR/redist/MSVC/$vcbuildnumber/MergeModules/"
if test -e "$my_msm_dir/$my_msm_file"; then
msmdir=$my_msm_dir
fi
fi
if test -n "$msmdir"; then if test -n "$msmdir"; then
msmdir=`cygpath -m "$msmdir"` msmdir=`cygpath -m "$msmdir"`
AC_MSG_RESULT([$msmdir]) AC_MSG_RESULT([$msmdir])
@@ -5279,11 +5386,17 @@ find_msms()
find_msvc_x64_dlls() find_msvc_x64_dlls()
{ {
msvcdllpath="$VC_PRODUCT_DIR/redist/x64/Microsoft.VC${VCVER}.CRT" msvcdllpath="$VC_PRODUCT_DIR/redist/x64/Microsoft.VC${VCVER}.CRT"
if test "$VCVER" = 150; then
msvcdllpath="$VC_PRODUCT_DIR/redist/MSVC/$vcbuildnumber/x64/Microsoft.VC${VCVER}.CRT"
fi
# http://blogs.msdn.com/b/vcblog/archive/2014/06/03/visual-studio-14-ctp.aspx # http://blogs.msdn.com/b/vcblog/archive/2014/06/03/visual-studio-14-ctp.aspx
# Refactored C Runtime (CRT): This CTP contains the first preview of the substantially refactored CRT. # Refactored C Runtime (CRT): This CTP contains the first preview of the substantially refactored CRT.
# msvcr140.dll no longer exists. It is replaced by a trio of DLLs: vcruntime140.dll, appcrt140.dll, # msvcr140.dll no longer exists. It is replaced by a trio of DLLs: vcruntime140.dll, appcrt140.dll,
# and desktopcrt140.dll. # and desktopcrt140.dll.
if test "$VCVER" = 140; then
if test "$VCVER" = 150; then
msvcdlls="msvcp140.dll vcruntime140.dll"
elif test "$VCVER" = 140; then
msvcdlls="msvcp${VCVER}.dll vcruntime${VCVER}.dll" msvcdlls="msvcp${VCVER}.dll vcruntime${VCVER}.dll"
else else
msvcdlls="msvcp${VCVER}.dll msvcr${VCVER}.dll" msvcdlls="msvcp${VCVER}.dll msvcr${VCVER}.dll"
@@ -9533,7 +9646,7 @@ the Windows SDK are installed.])
PathFormat "$WINDOWS_SDK_HOME" PathFormat "$WINDOWS_SDK_HOME"
WINDOWS_SDK_HOME="$formatted_path" WINDOWS_SDK_HOME="$formatted_path"
if test "$build_os" = "cygwin"; then if test "$build_os" = "cygwin"; then
SOLARINC="$SOLARINC -I$WINDOWS_SDK_HOME/include -I$COMPATH/include" SOLARINC="$SOLARINC -I$WINDOWS_SDK_HOME/include -I$COMPATH/Include"
if test -d "$WINDOWS_SDK_HOME/include/um"; then if test -d "$WINDOWS_SDK_HOME/include/um"; then
SOLARINC="$SOLARINC -I$WINDOWS_SDK_HOME/include/um -I$WINDOWS_SDK_HOME/include/shared" SOLARINC="$SOLARINC -I$WINDOWS_SDK_HOME/include/um -I$WINDOWS_SDK_HOME/include/shared"
elif test -d "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um"; then elif test -d "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um"; then
@@ -9705,7 +9818,7 @@ if test "$_os" = "WINNT"; then
assembler_bin=bin/x86_amd64 assembler_bin=bin/x86_amd64
else else
assembler=ml64.exe assembler=ml64.exe
assembler_bin=bin/amd64 assembler_bin=$CL_DIR
fi fi
fi fi
@@ -12205,23 +12318,33 @@ if test "$build_os" = "cygwin"; then
fi fi
ILIB1=-link ILIB1=-link
if test "$BITNESS_OVERRIDE" = 64; then if test "$BITNESS_OVERRIDE" = 64; then
ILIB="$ILIB;$COMPATH/lib/amd64" if test $vcnum = "150"; then
ILIB1="$ILIB1 -LIBPATH:$COMPATH/lib/amd64" ILIB="$ILIB;$COMPATH/lib/x64"
ILIB1="$ILIB1 -LIBPATH:$COMPATH/lib/x64"
else
ILIB="$ILIB;$COMPATH/lib/amd64"
ILIB1="$ILIB1 -LIBPATH:$COMPATH/lib/amd64"
fi
ILIB="$ILIB;$WINDOWS_SDK_HOME/lib/x64" ILIB="$ILIB;$WINDOWS_SDK_HOME/lib/x64"
ILIB1="$ILIB1 -LIBPATH:$WINDOWS_SDK_HOME/lib/x64" ILIB1="$ILIB1 -LIBPATH:$WINDOWS_SDK_HOME/lib/x64"
if test $WINDOWS_SDK_VERSION = 80 -o $WINDOWS_SDK_VERSION = 81 -o $WINDOWS_SDK_VERSION = 10; then if test $WINDOWS_SDK_VERSION = 80 -o $WINDOWS_SDK_VERSION = 81 -o $WINDOWS_SDK_VERSION = 10; then
ILIB="$ILIB;$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/x64" ILIB="$ILIB;$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/x64"
ILIB1="$ILIB1 -LIBPATH:$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/x64" ILIB1="$ILIB1 -LIBPATH:$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/x64"
fi fi
if test $VCVER = 140; then if test $VCVER = 140 -o $VCVER = 150; then
PathFormat "${UCRTSDKDIR}lib/$UCRTVERSION/ucrt/x64" PathFormat "${UCRTSDKDIR}lib/$UCRTVERSION/ucrt/x64"
ucrtlibpath_formatted=$formatted_path ucrtlibpath_formatted=$formatted_path
ILIB="$ILIB;$ucrtlibpath_formatted" ILIB="$ILIB;$ucrtlibpath_formatted"
ILIB1="$ILIB1 -LIBPATH:$ucrtlibpath_formatted" ILIB1="$ILIB1 -LIBPATH:$ucrtlibpath_formatted"
fi fi
else else
ILIB="$ILIB;$COMPATH/lib" if test $vcnum = "150"; then
ILIB1="$ILIB1 -LIBPATH:$COMPATH/lib" ILIB="$ILIB;$COMPATH/lib/x86"
ILIB1="$ILIB1 -LIBPATH:$COMPATH/lib/x86"
else
ILIB="$ILIB;$COMPATH/lib"
ILIB1="$ILIB1 -LIBPATH:$COMPATH/lib"
fi
ILIB="$ILIB;$WINDOWS_SDK_HOME/lib" ILIB="$ILIB;$WINDOWS_SDK_HOME/lib"
ILIB1="$ILIB1 -LIBPATH:$WINDOWS_SDK_HOME/lib" ILIB1="$ILIB1 -LIBPATH:$WINDOWS_SDK_HOME/lib"
if test $WINDOWS_SDK_VERSION = 80 -o $WINDOWS_SDK_VERSION = 81 -o $WINDOWS_SDK_VERSION = 10; then if test $WINDOWS_SDK_VERSION = 80 -o $WINDOWS_SDK_VERSION = 81 -o $WINDOWS_SDK_VERSION = 10; then
@@ -12437,7 +12560,11 @@ if test "$build_os" = "cygwin"; then
ATL_INCLUDE="$WINDOWS_SDK_HOME/include/atl" ATL_INCLUDE="$WINDOWS_SDK_HOME/include/atl"
fi fi
if test "$BITNESS_OVERRIDE" = 64; then if test "$BITNESS_OVERRIDE" = 64; then
ATL_LIB="$ATL_LIB/amd64" if test $VCVER = "150"; then
ATL_LIB="$ATL_LIB/x64"
else
ATL_LIB="$ATL_LIB/amd64"
fi
fi fi
# sort.exe and find.exe also exist in C:/Windows/system32 so need /usr/bin/ # sort.exe and find.exe also exist in C:/Windows/system32 so need /usr/bin/
PathFormat "/usr/bin/find.exe" PathFormat "/usr/bin/find.exe"

View File

@@ -21,6 +21,8 @@ $(call gb_ExternalProject_get_state_target,coinmp,build) :
/p:Platform=$(if $(filter INTEL,$(CPUNAME)),Win32,x64) \ /p:Platform=$(if $(filter INTEL,$(CPUNAME)),Win32,x64) \
$(if $(filter 120,$(VCVER)),/p:PlatformToolset=v120 /p:VisualStudioVersion=12.0 /ToolsVersion:12.0) \ $(if $(filter 120,$(VCVER)),/p:PlatformToolset=v120 /p:VisualStudioVersion=12.0 /ToolsVersion:12.0) \
$(if $(filter 140,$(VCVER)),/p:PlatformToolset=v140 /p:VisualStudioVersion=14.0 /ToolsVersion:14.0) \ $(if $(filter 140,$(VCVER)),/p:PlatformToolset=v140 /p:VisualStudioVersion=14.0 /ToolsVersion:14.0) \
$(if $(filter 150,$(VCVER)),/p:PlatformToolset=v141 /p:VisualStudioVersion=15.0 /ToolsVersion:15.0) \
$(if $(filter $(UCRTVERSION),),,/p:WindowsTargetPlatformVersion=$(UCRTVERSION)) \
,CoinMP/MSVisualStudio/v9) ,CoinMP/MSVisualStudio/v9)
else else

View File

@@ -19,7 +19,9 @@ $(call gb_ExternalProject_get_state_target,cppunit,build) :
PROFILEFLAGS="$(if $(MSVC_USE_DEBUG_RUNTIME),Debug,Release) \ PROFILEFLAGS="$(if $(MSVC_USE_DEBUG_RUNTIME),Debug,Release) \
/p:Platform=$(if $(filter INTEL,$(CPUNAME)),Win32,x64) \ /p:Platform=$(if $(filter INTEL,$(CPUNAME)),Win32,x64) \
$(if $(filter 120,$(VCVER)),/p:PlatformToolset=v120 /p:VisualStudioVersion=12.0 /ToolsVersion:12.0) \ $(if $(filter 120,$(VCVER)),/p:PlatformToolset=v120 /p:VisualStudioVersion=12.0 /ToolsVersion:12.0) \
$(if $(filter 140,$(VCVER)),/p:PlatformToolset=v140 /p:VisualStudioVersion=14.0 /ToolsVersion:14.0)" \ $(if $(filter 140,$(VCVER)),/p:PlatformToolset=v140 /p:VisualStudioVersion=14.0 /ToolsVersion:14.0) \
$(if $(filter 150,$(VCVER)),/p:PlatformToolset=v141 /p:VisualStudioVersion=15.0 /ToolsVersion:15.0) \
$(if $(filter $(UCRTVERSION),),,/p:WindowsTargetPlatformVersion=$(UCRTVERSION))" \
&& msbuild.exe cppunit_dll.vcxproj /p:Configuration=$${PROFILEFLAGS} \ && msbuild.exe cppunit_dll.vcxproj /p:Configuration=$${PROFILEFLAGS} \
&& cd ../DllPlugInTester \ && cd ../DllPlugInTester \
&& msbuild.exe DllPlugInTester.vcxproj /p:Configuration=$${PROFILEFLAGS} \ && msbuild.exe DllPlugInTester.vcxproj /p:Configuration=$${PROFILEFLAGS} \

View File

@@ -19,7 +19,10 @@ $(call gb_ExternalProject_get_state_target,lcms2,build):
$(call gb_ExternalProject_run,build,\ $(call gb_ExternalProject_run,build,\
$(if $(filter 140,$(VCVER)),$(DEVENV) /Upgrade lcms2_DLL.vcxproj,echo up-to-date) && \ $(if $(filter 140,$(VCVER)),$(DEVENV) /Upgrade lcms2_DLL.vcxproj,echo up-to-date) && \
MSBuild.exe lcms2_DLL.vcxproj \ MSBuild.exe lcms2_DLL.vcxproj \
$(if $(filter 140,$(VCVER)),/p:PlatformToolset=v140,/p:PlatformToolset=v120) \ $(if $(filter 120,$(VCVER)),/p:PlatformToolset=v120 /p:VisualStudioVersion=12.0 /ToolsVersion:12.0) \
$(if $(filter 140,$(VCVER)),/p:PlatformToolset=v140 /p:VisualStudioVersion=14.0 /ToolsVersion:14.0) \
$(if $(filter 150,$(VCVER)),/p:PlatformToolset=v141 /p:VisualStudioVersion=15.0 /ToolsVersion:15.0) \
$(if $(filter $(UCRTVERSION),),,/p:WindowsTargetPlatformVersion=$(UCRTVERSION)) \
/p:Configuration=$(if $(MSVC_USE_DEBUG_RUNTIME),Debug,Release) \ /p:Configuration=$(if $(MSVC_USE_DEBUG_RUNTIME),Debug,Release) \
/p:Platform=$(if $(filter INTEL,$(CPUNAME)),Win32,x64) /p:TargetName=lcms2 \ /p:Platform=$(if $(filter INTEL,$(CPUNAME)),Win32,x64) /p:TargetName=lcms2 \
,Projects/VC2013/lcms2_DLL) ,Projects/VC2013/lcms2_DLL)

View File

@@ -44,6 +44,8 @@ $(call gb_ExternalProject_get_state_target,libgltf,build) :
/p:Configuration=$(if $(MSVC_USE_DEBUG_RUNTIME),Debug,Release) \ /p:Configuration=$(if $(MSVC_USE_DEBUG_RUNTIME),Debug,Release) \
$(if $(filter 120,$(VCVER)),/p:PlatformToolset=v120 /p:VisualStudioVersion=12.0 /ToolsVersion:12.0) \ $(if $(filter 120,$(VCVER)),/p:PlatformToolset=v120 /p:VisualStudioVersion=12.0 /ToolsVersion:12.0) \
$(if $(filter 140,$(VCVER)),/p:PlatformToolset=v140 /p:VisualStudioVersion=14.0 /ToolsVersion:14.0) \ $(if $(filter 140,$(VCVER)),/p:PlatformToolset=v140 /p:VisualStudioVersion=14.0 /ToolsVersion:14.0) \
$(if $(filter 150,$(VCVER)),/p:PlatformToolset=v141 /p:VisualStudioVersion=15.0 /ToolsVersion:15.0) \
$(if $(filter $(UCRTVERSION),),,/p:WindowsTargetPlatformVersion=$(UCRTVERSION)) \
'/p:AdditionalIncludeDirectories=$(subst $(WHITESPACE),;,$(subst /,\,$(strip $(libgltf_AdditionalIncludes))))' \ '/p:AdditionalIncludeDirectories=$(subst $(WHITESPACE),;,$(subst /,\,$(strip $(libgltf_AdditionalIncludes))))' \
/p:AdditionalLibraryDirectories=$(if $(SYSTEM_EPOXY),,"$(subst /,\,$(call gb_UnpackedTarball_get_dir,epoxy))\lib\$(if $(MSVC_USE_DEBUG_RUNTIME),Debug,Release)\Win32") \ /p:AdditionalLibraryDirectories=$(if $(SYSTEM_EPOXY),,"$(subst /,\,$(call gb_UnpackedTarball_get_dir,epoxy))\lib\$(if $(MSVC_USE_DEBUG_RUNTIME),Debug,Release)\Win32") \
,build/win32) ,build/win32)

View File

@@ -35,10 +35,10 @@ $(call gb_ExternalProject_get_state_target,python3,build) :
MAKEFLAGS= MSBuild.exe pcbuild.sln /t:Build \ MAKEFLAGS= MSBuild.exe pcbuild.sln /t:Build \
/p:Configuration=$(if $(MSVC_USE_DEBUG_RUNTIME),Debug,Release) \ /p:Configuration=$(if $(MSVC_USE_DEBUG_RUNTIME),Debug,Release) \
/p:Platform=$(if $(filter INTEL,$(CPUNAME)),Win32,x64) \ /p:Platform=$(if $(filter INTEL,$(CPUNAME)),Win32,x64) \
$(if $(filter 120,$(VCVER)),/p:PlatformToolset=v120 \ $(if $(filter 120,$(VCVER)),/p:PlatformToolset=v120 /p:VisualStudioVersion=12.0 /ToolsVersion:12.0) \
/p:VisualStudioVersion=12.0 /ToolsVersion:12.0) \ $(if $(filter 140,$(VCVER)),/p:PlatformToolset=v140 /p:VisualStudioVersion=14.0 /ToolsVersion:14.0) \
$(if $(filter 140,$(VCVER)),/p:PlatformToolset=v140 \ $(if $(filter 150,$(VCVER)),/p:PlatformToolset=v141 /p:VisualStudioVersion=15.0 /ToolsVersion:15.0) \
/p:VisualStudioVersion=14.0 /ToolsVersion:14.0) \ $(if $(filter $(UCRTVERSION),),,/p:WindowsTargetPlatformVersion=$(UCRTVERSION)) \
,PCBuild) ,PCBuild)
else else

View File

@@ -56,3 +56,22 @@ End
#endif #endif
#if defined(WITH_VC150_REDIST)
#if defined WINDOWS_X64
MergeModule gid_MergeModule_Microsoft_VC150_CRT_x64
#else
MergeModule gid_MergeModule_Microsoft_VC150_CRT_x86
#endif
Feature = gm_Root;
#if defined WINDOWS_X64
Name = "Microsoft_VC150_CRT_x64.msm";
#else
Name = "Microsoft_VC150_CRT_x86.msm";
#endif
RootDir = "TARGETDIR";
ComponentCondition = "VC_REDIST=1";
End
#endif