make 64-bit shell extensions work, put 64-bit VC runtime in the same dir
Unlike in case of msvcr90.dll, which went to WinSxS, msvcr100.dll is installed
to the "system32" folder. Windows installer automatically replaces it to
SysWOW64. The problem is that this way 64-bit dlls end up in the wrong directory.
They conflict with the 32-bit dlls, and will not be installed. Therefore
64-bit shell extensions will not work, unless the 64-bit VC runtime is
installed from other source. It is not possible to install both 32-bit and
64-bit VC Runtime with merge modules in case of VS 2010 and VS 2012.
For the 64-bit shell extensions, we can install the runtime dlls next to the files.
Change-Id: I157048a521662bbac568d1660e46576935f0ea9f
diff --git a/configure.ac b/configure.ac
index c5aeffb..dcff809 100644
--- a/configure.ac
+++ b/configure.ac
@@ -4877,48 +4877,30 @@ find_msms()
else
AC_MSG_ERROR([Merge module Microsoft_VC90_CRT_x86_x64.msm not found])
fi
else
if test -e $msmdir/Microsoft_VC${VCVER}_CRT_x64.msm; then
msms="$msms Microsoft_VC${VCVER}_CRT_x64.msm"
else
AC_MSG_ERROR([Merge module Microsoft_VC${VCVER}_CRT_x64.msm not found])
fi
fi
fi
}
find_msvc_dlls()
find_msvc_x64_dlls()
{
if test "$CPUNAME" = "INTEL"; then
vsarch=x86
elif test $VCVER = 9; then
vsarch=amd64
else
vsarch=x64
fi
msvcdllpath="$VC_PRODUCT_DIR/redist/$vsarch/Microsoft.VC${VCVER}.CRT"
MSVC_DEBUG_DLL_PATH="$VC_PRODUCT_DIR/redist/Debug_NonRedist/$vsarch/Microsoft.VC${VCVER}.DebugCRT"
msvcdlls="msvcp${VCVER}.dll msvcr${VCVER}.dll"
MSVC_DEBUG_DLLS="msvcp${VCVER}d.dll msvcr${VCVER}d.dll"
if test "$VCVER" = "90"; then
msvcdlls="$msvcdlls msvcm90.dll Microsoft.VC90.CRT.manifest"
MSVC_DEBUG_DLLS="$MSVC_DEBUG_DLLS msvcm90d.dll Microsoft.VC90.DebugCRT.manifest"
fi
for dll in $msvcdlls; do
if ! test -f "$msvcdllpath/$dll"; then
AC_MSG_ERROR([can not find $dll in $msvcdllpath])
fi
done
if test -n "$MSVC_USE_DEBUG_RUNTIME"; then
for dll in $MSVC_DEBUG_DLLS; do
if ! test -f "$MSVC_DEBUG_DLL_PATH/$dll"; then
AC_MSG_ERROR([can not find $dll in $MSVC_DEBUG_DLL_PATH])
if test "$VCVER" != "90"; then
msvcdllpath="$VC_PRODUCT_DIR/redist/x64/Microsoft.VC${VCVER}.CRT"
MSVC_DEBUG_DLL_PATH="$VC_PRODUCT_DIR/redist/Debug_NonRedist/$vsarch/Microsoft.VC${VCVER}.DebugCRT"
msvcdlls="msvcp${VCVER}.dll msvcr${VCVER}.dll"
MSVC_DEBUG_DLLS="msvcp${VCVER}d.dll msvcr${VCVER}d.dll"
for dll in $msvcdlls; do
if ! test -f "$msvcdllpath/$dll"; then
AC_MSG_ERROR([can not find $dll in $msvcdllpath])
fi
done
if test -n "$MSVC_USE_DEBUG_RUNTIME"; then
for dll in $MSVC_DEBUG_DLLS; do
if ! test -f "$MSVC_DEBUG_DLL_PATH/$dll"; then
AC_MSG_ERROR([can not find $dll in $MSVC_DEBUG_DLL_PATH])
fi
done
fi
fi
}
if test "$build_os" = "cygwin"; then
@@ -6086,7 +6068,7 @@ AC_SUBST([JITC_PROCESSOR_TYPE])
# Misc Windows Stuff
if test $_os = "WINNT" -a "$WITH_MINGW" != yes; then
find_msvc_dlls
find_msvc_x64_dlls
find_msms
MSVC_DLL_PATH="$msvcdllpath"
MSVC_DLLS="$msvcdlls"
diff --git a/scp2/source/ooo/vc_redist.scp b/scp2/source/ooo/vc_redist.scp
index 283ba9c..82cd0d0 100644
--- a/scp2/source/ooo/vc_redist.scp
+++ b/scp2/source/ooo/vc_redist.scp
@@ -87,26 +87,4 @@ End
#endif
#if defined(WITH_VC100_REDIST)
MergeModule gid_MergeModule_Microsoft_VC100_CRT_x64
Feature = gm_Root;
Name = "Microsoft_VC100_CRT_x64.msm";
RootDir = "TARGETDIR";
ComponentCondition = "(VC_REDIST=1) AND VersionNT64";
End
#endif
#if defined(WITH_VC110_REDIST)
MergeModule gid_MergeModule_Microsoft_VC110_CRT_x64
Feature = gm_Root;
Name = "Microsoft_VC110_CRT_x64.msm";
RootDir = "TARGETDIR";
ComponentCondition = "(VC_REDIST=1) AND VersionNT64";
End
#endif
#endif
diff --git a/scp2/source/winexplorerext/file_winexplorerext.scp b/scp2/source/winexplorerext/file_winexplorerext.scp
index f2a2a89..ce8dc1c 100644
--- a/scp2/source/winexplorerext/file_winexplorerext.scp
+++ b/scp2/source/winexplorerext/file_winexplorerext.scp
@@ -95,3 +95,47 @@ File gid_File_Lib_Shlxtmsi
Dir = SCP2_OOO_BIN_DIR;
Name = "shlxtmsi.dll";
End
#ifdef BUILD_X64
#if defined(WITH_VC100_REDIST)
File gid_File_Lib_Msvcr100
LIB_FILE_BODY;
Styles = (PACKED);
Dir = gid_Dir_Shlxthdl;
Name = "msvcr100.dll";
ComponentCondition = "VersionNT64";
End
File gid_File_Lib_Msvcp100
LIB_FILE_BODY;
Styles = (PACKED);
Dir = gid_Dir_Shlxthdl;
Name = "msvcp100.dll";
ComponentCondition = "VersionNT64";
End
#endif
#if defined(WITH_VC110_REDIST)
File gid_File_Lib_Msvcr110
LIB_FILE_BODY;
Styles = (PACKED);
Dir = gid_Dir_Shlxthdl;
Name = "msvcr110.dll";
ComponentCondition = "VersionNT64";
End
File gid_File_Lib_Msvcp110
LIB_FILE_BODY;
Styles = (PACKED);
Dir = gid_Dir_Shlxthdl;
Name = "msvcp110.dll";
ComponentCondition = "VersionNT64";
End
#endif
#endif
diff --git a/scp2/source/winexplorerext/module_winexplorerext.scp b/scp2/source/winexplorerext/module_winexplorerext.scp
index 3932e4f..6756a30 100644
--- a/scp2/source/winexplorerext/module_winexplorerext.scp
+++ b/scp2/source/winexplorerext/module_winexplorerext.scp
@@ -51,5 +51,9 @@ Module gid_Module_Optional_Winexplorerext_x64
Dirs = (gid_Dir_Shlxthdl);
Files = (gid_File_Lib_Shlxthdl64,
gid_File_Lib_OOoFilt64,
gid_File_Lib_PropertyHdl64);
gid_File_Lib_PropertyHdl64,
gid_File_Lib_Msvcp100,
gid_File_Lib_Msvcr100,
gid_File_Lib_Msvcp110,
gid_File_Lib_Msvcr110);
End