summaryrefslogtreecommitdiffstats
path: root/configure.ac
diff options
context:
space:
mode:
authorTor Lillqvist <tlillqvist@suse.com>2012-12-24 01:24:34 +0200
committerTor Lillqvist <tml@iki.fi>2012-12-24 21:11:40 +0200
commitba6c014d9c3e2267cfa08e753ea7ba651a03f2fe (patch)
tree0d01c4e1e93be7af9e6836e73e972a925e2c367a /configure.ac
parentmerge packimages into postprocess (diff)
downloadcore-ba6c014d9c3e2267cfa08e753ea7ba651a03f2fe.tar.gz
core-ba6c014d9c3e2267cfa08e753ea7ba651a03f2fe.zip
Simplify Visual Studio and Windows SDK related configurability
We had too many obscure options for the MSVC build. The configury logic tried to take into consideration Registry keys or file locations that likely never happen with the compilers we suppport (2008, 2010 or 2012) or the Windows SDKs from the same era. Now there is just an option --with-visual-studio that can be used to specify which Visual Studio version to use in case several are installed. It takes as parameter the "year" version, 2008, 2010 or 2012. (There is also --with-windows-sdk that takes the version number like 7.1A or 8.0, but I expect that this option will not be needed.) The code tries hard to use sane defaults in all cases. It is quite likely that there are bugs in the new logic. Those will have to be fixed once noticed. Hopefully the basic idea is sane, though. Change-Id: I0a53acd334d35cbf2cd2fbc76a38d636e0d0123d
Diffstat (limited to 'configure.ac')
-rw-r--r--configure.ac714
1 files changed, 345 insertions, 369 deletions
diff --git a/configure.ac b/configure.ac
index 3ecce6c69f03..e8a5401b8f43 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1745,74 +1745,25 @@ AC_ARG_WITH(
],,
[with_doxygen=yes])
-AC_ARG_WITH(cl-home,
- AS_HELP_STRING([--with-cl-home],
- [For Windows NT users, please supply the path for the Microsoft C/C++
- compiler. Note that this is not the location of the compiler binary but
- the location of the entire distribution.])
+AC_ARG_WITH(visual-studio,
+ AS_HELP_STRING([--with-visual-studio=<2012/2010/2008>],
+ [Specify which Visual Studio version to use in case several are
+ are installed. If not specified, the order of preference is
+ 2012, 2010 and 2008 (including Express editions).])
[
- Usage: --with-cl-home=<absolute path to Microsoft
- C/C++ compiler home>
+ Usage: --with-visual-studio=<2012/2010/2008>
],
,)
-AC_ARG_WITH(mspdb-path,
- AS_HELP_STRING([--with-mspdb-path],
- [For Microsoft C/C++ compiler users, please supply the path pointing to
- the mspdb80.dll (if using Visual Studio 2008) or mspdb100.dll (if using
- Visual Studio 2010).])
+AC_ARG_WITH(windows-sdk,
+ AS_HELP_STRING([--with-windows-sdk=<6.0(A)/7.0(A)/7.1(A)/8.0(A)>],
+ [Specify which Windows SDK, or "Windows Kit", version to use
+ in case the one that came with the selected Visual Studio
+ is not what you want for some reason. Note that not all compiler/SDK
+ combinations are supported. The intent is that this option should not
+ be needed.])
[
- Usage: --with-mspdb-path=<path to
- mspdb80.dll/mspdb100.dll>
- ],
-,)
-
-AC_ARG_WITH(midl-path,
- AS_HELP_STRING([--with-midl-path],
- [For Microsoft compiler users, please supply the path pointing to the midl.exe.])
- [
- Usage: --with-midl-path=<abs. path to midl.exe>
- ],
-,)
-
-AC_ARG_WITH(csc-path,
- AS_HELP_STRING([--with-csc-path],
- [For Windows builds, please supply the path pointing to the csc.exe.
- Usually found automatically when building on Windows.])
- [
- Usage: --with-csc-path=<abs. path to csc.exe>
- ],
-,)
-
-AC_ARG_WITH(dotnet-framework-home,
- AS_HELP_STRING([--with-dotnet-framework-home],
- [For Microsoft compiler users, please supply the path pointing to
- lib/mscoree.lib, usually something like:
- "/cygdrive/c/Program Files/Windows SDKs/Windows/v7.0"])
- [
- Note that in most cases it will be automatically
- found, though.
-
- Usage: --with-dotnet-framework-home=<absolute path to .NET
- Framework>
- ],
-,)
-
-AC_ARG_WITH(windows-sdk-home,
- AS_HELP_STRING([--with-windows-sdk-home],
- [For Windows builds, please supply the path to the Windows SDK.
- Usually found automatically when building on Windows.])
- [
- Usage: --with-windows-sdk-home=<absolute path to Windows SDK>
- ],
-,)
-
-AC_ARG_WITH(directx-home,
- AS_HELP_STRING([--with-directx-home],
- [For Windows users, please supply the path to the Microsoft DirectX SDK.])
- [
- Usage: --with-directx-home=<absolute path to
- Microsoft DirectX SDK>
+ Usage: --with-windows-sdk=6.0(A)/7.0(A)/7.1(A)/8.0(A)>
],
,)
@@ -1999,14 +1950,6 @@ AC_ARG_WITH(compat-oowrappers,
Has effect only with make distro-pack-install]),
,)
-AC_ARG_WITH(asm-home,
- AS_HELP_STRING([--with-asm-home],
- [For Windows, please supply the path for the ml.exe or ml64.exe assembler.])
- [
- Usage: --with-asm-home=<path to assembler directory>
- ],
-,)
-
AC_ARG_WITH(os-version,
AS_HELP_STRING([--with-os-version],
[For FreeBSD users, use this option option to override the detected OSVERSION.])
@@ -2819,6 +2762,7 @@ dnl ===================================================================
reg_get_value()
{
+ # Return value: $regvalue
unset regvalue
_regvalue=`cat "/proc/registry/$1" 2> /dev/null`
@@ -2832,10 +2776,10 @@ if test "$_os" = "WINNT" -a "$WITH_MINGW" != yes; then
AC_MSG_CHECKING([whether to build a 64-bit LibreOffice])
if test "$enable_64_bit" = "" -o "$enable_64_bit" = "no"; then
AC_MSG_RESULT([no])
- SDK_ARCH="x86"
+ WINDOWS_SDK_ARCH="x86"
else
AC_MSG_RESULT([yes])
- SDK_ARCH="x64"
+ WINDOWS_SDK_ARCH="x64"
BITNESS_OVERRIDE=64
fi
@@ -3026,12 +2970,54 @@ fi
AC_SUBST(HAVE_LD_BSYMBOLIC_FUNCTIONS)
dnl ===================================================================
-dnl Check which Microsoft C/C++ or MinGW compiler is used for WINNT
+dnl Check which Visual Studio or MinGW compiler is used
dnl ===================================================================
+
+map_vs_year_to_version()
+{
+ # Return value: $vsversion
+
+ unset vsversion
+
+ case $1 in
+ 2008)
+ vsversion=9.0;;
+ 2010)
+ vsversion=10.0;;
+ 2012)
+ vsversion=11.0;;
+ *)
+ AC_MSG_ERROR([Assertion failure - invalid argument "$1" to map_vs_year_to_version()]);;
+ esac
+}
+
+vs_versions_to_check()
+{
+ # Args: $1 (optional) : versions to check, in the order of preference
+ # Return value: $vsversions
+
+ unset vsversions
+
+ if test -n "$1"; then
+ map_vs_year_to_version "$1"
+ vsversions=$vsversion
+ else
+ # By default we prefer 2012, then 2010, then 2008
+ vsversions="11.0 10.0 9.0"
+ fi
+}
+
find_msvs()
{
- # find Visual Studio 2012/2010/2008
- for ver in 11.0 10.0 9.0; do
+ # Find Visual Studio 2012/2010/2008
+ # Args: $1 (optional) : versions to check, in the order of preference
+ # Return value: $vstest
+
+ unset vstest
+
+ vs_versions_to_check "$1"
+
+ for ver in $vsversions; do
reg_get_value HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/VisualStudio/$ver/Setup/VS/ProductDir
if test -n "$regvalue"; then
vstest=$regvalue
@@ -3047,8 +3033,15 @@ find_msvs()
find_msvc()
{
- # find Visual Studio 2012/2010/2008
- for ver in 11.0 10.0 9.0; do
+ # Find Visual C++ 2012/2010/2008
+ # Args: $1 (optional) : The VS version year
+ # Return values: $vctest, $vcyear, $vcnum, $vcnumwithdot
+
+ unset vctest vcnum vcnumwithdot
+
+ vs_versions_to_check "$1"
+
+ for ver in $vsversions; do
reg_get_value HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/VisualStudio/$ver/Setup/VC/ProductDir
if test -n "$regvalue"; then
vctest=$regvalue
@@ -3060,87 +3053,103 @@ find_msvc()
break
fi
done
+ if test -n "$vctest"; then
+ vcnumwithdot=$ver
+ case "$vcnumwithdot" in
+ 9.0)
+ vcyear=2008
+ vcnum=90
+ ;;
+ 10.0)
+ vcyear=2010
+ vcnum=100
+ ;;
+ 11.0)
+ vcyear=2012
+ vcnum=110
+ ;;
+ esac
+ fi
}
SHOWINCLUDES_PREFIX=
if test "$_os" = "WINNT"; then
if test "$WITH_MINGW" != "yes"; then
- AC_MSG_CHECKING([for a friendly Microsoft C/C++ compiler installation path])
- if test -z "$with_cl_home"; then
- find_msvc
- if test "$BITNESS_OVERRIDE" = ""; then
- if test -x "$vctest/bin/cl.exe"; then
- with_cl_home=$vctest
- fi
+ AC_MSG_CHECKING([Visual C++])
+
+ find_msvc "$with_visual_studio"
+
+ if test -z "$vctest"; then
+ if test -n "$with_visual_studio"; then
+ AC_MSG_ERROR([No Visual Studio $with_visual_studio installation found])
else
- if test -x "$vctest/bin/amd64/cl.exe"; then
- with_cl_home=$vctest
- fi
+ AC_MSG_ERROR([No Visual Studio 2012, 2010 or 2008 installation found])
+ fi
+ fi
+
+ if test "$BITNESS_OVERRIDE" = ""; then
+ if test -f "$vctest/bin/cl.exe"; then
+ VC_PRODUCT_DIR=$vctest
+ else
+ AC_MSG_ERROR([No compiler (cl.exe) in $vctest/bin/cl.exe])
fi
else
- with_cl_home=`cygpath -u "$with_cl_home"`
+ # It makes sense, I think, to restrict 64-bit support to VS2010 or newer
+ if test $vcnum -lt 100; then
+ AC_MSG_ERROR([We have no plans to support building a 64-bit LibreOffice with VS 2008])
+ fi
+
+ if test -f "$vctest/bin/amd64/cl.exe"; then
+ VC_PRODUCT_DIR=$vctest
+ else
+ AC_MSG_ERROR([No compiler (cl.exe) in $vctest/bin/amd64/cl.exe])
+ fi
fi
- with_cl_home=`cygpath -d "$with_cl_home"`
- with_cl_home=`cygpath -u "$with_cl_home"`
- AC_MSG_RESULT([$with_cl_home])
+
+ VC_PRODUCT_DIR=`cygpath -d "$VC_PRODUCT_DIR"`
+ VC_PRODUCT_DIR=`cygpath -u "$VC_PRODUCT_DIR"`
+ AC_MSG_RESULT([$VC_PRODUCT_DIR])
dnl ===========================================================
- dnl Check for mspdb80.dll/mspdb100.dll/mspdb110.dll
+ dnl Check for the corresponding mspdb*.dll
dnl ===========================================================
- dnl MSVS 2008/10/12 Compiler
- if test -n "$with_mspdb_path"; then
- with_mspdb_path=`cygpath -u "$with_mspdb_path"`
- fi
- if test -e "$with_mspdb_path/mspdb80.dll" -o -e "$with_mspdb_path/mspdb100.dll" -o -e "$with_mspdb_path/mspdb110.dll"; then
- MSPDB_PATH="$with_mspdb_path"
- fi
- dnl MSVS 2008 case
- if test -z "$MSPDB_PATH" -a -e "$with_cl_home/../Common7/IDE/mspdb80.dll"; then
- MSPDB_PATH="$with_cl_home/../Common7/IDE"
- fi
- dnl Windows SDK 6.0 case
- if test -z "$MSPDB_PATH" -a -e "$with_cl_home/bin/mspdb80.dll"; then
- MSPDB_PATH="$with_cl_home/bin"
- fi
- dnl MSVS 2010 case
- if test -z "$MSPDB_PATH" -a -e "$with_cl_home/../Common7/IDE/mspdb100.dll"; then
- MSPDB_PATH="$with_cl_home/../Common7/IDE"
- fi
- dnl MSVS 2012 case
- if test -z "$MSPDB_PATH" -a -e "$with_cl_home/../Common7/IDE/mspdb110.dll"; then
- MSPDB_PATH="$with_cl_home/../Common7/IDE"
- fi
- if test -z "$MSPDB_PATH"; then
- dnl AC_PATH_PROG only checks if MSPDB_PATH is still empty
- AC_PATH_PROG(MSPDB_PATH, mspdb80.dll)
- AC_PATH_PROG(MSPDB_PATH, mspdb100.dll)
- AC_PATH_PROG(MSPDB_PATH, mspdb110.dll)
- MSPDB_PATH=`dirname "$MSPDB_PATH"`
+ MSPDB_PATH=
+
+ if test "$BITNESS_OVERRIDE" == ""; then
+ MSPDB_PATH="$VC_PRODUCT_DIR/../Common7/IDE"
+ else
+ MSPDB_PATH="$VC_PRODUCT_DIR/bin/amd64"
fi
- if test -z "$MSPDB_PATH"; then
- AC_MSG_ERROR([You need a mspdb80.dll or mspdb100.dll or mspdb110.dll, make sure it is in the path or use --with-mspdb-path])
+ if test ! -e "$MSPDB_PATH/mspdb${vcnum}.dll"; then
+ AC_MSG_ERROR([No mspdb${vcnum}.dll in $MSPDB_PATH, Visual Studio installation broken?])
fi
+
MSPDB_PATH=`cygpath -d "$MSPDB_PATH"`
MSPDB_PATH=`cygpath -u "$MSPDB_PATH"`
+
dnl The path needs to be added before cl is called
PATH="$MSPDB_PATH:$PATH"
- AC_MSG_CHECKING([the Microsoft C/C++ Compiler])
+ AC_MSG_CHECKING([cl.exe])
+
+ # Is there really ever a need to pass CC explicitly? Surely we can hope to get all the
+ # automagical niceness to work OK? If somebody has some unsupported compiler in some weird
+ # location, isn't it likely that lots of other things needs changes, too, and just setting CC
+ # is not enough?
+
if test -z "$CC"; then
if test "$BITNESS_OVERRIDE" = ""; then
- if test -x "$with_cl_home/bin/cl.exe"; then
- CC="$with_cl_home/bin/cl.exe"
+ if test -f "$VC_PRODUCT_DIR/bin/cl.exe"; then
+ CC="$VC_PRODUCT_DIR/bin/cl.exe"
fi
else
- if test -x "$with_cl_home/bin/amd64/cl.exe"; then
- CC="$with_cl_home/bin/amd64/cl.exe"
+ if test -f "$VC_PRODUCT_DIR/bin/amd64/cl.exe"; then
+ CC="$VC_PRODUCT_DIR/bin/amd64/cl.exe"
fi
fi
- if test -z "$CC"; then
- AC_PATH_PROG(CC, cl.exe)
- fi
+
# This gives us a posix path with 8.3 filename restrictions
CC=`cygpath -d "$CC"`
CC=`cygpath -u "$CC"`
@@ -3148,47 +3157,54 @@ if test "$_os" = "WINNT"; then
if test -n "$CC"; then
# Remove /cl.exe from CC case insensitive
- AC_MSG_RESULT([found ($CC)])
+ AC_MSG_RESULT([found ($CC), Visual C++ $vcyear])
if test "$BITNESS_OVERRIDE" = ""; then
COMPATH=`echo $CC | $SED -e 's@\/[[Bb]][[Ii]][[Nn]]\/[[cC]][[lL]]\.[[eE]][[xX]][[eE]].*@@' -e 's@^.* @@'`
else
- if test -n "$with_cl_home"; then
- COMPATH=`echo $with_cl_home`
+ if test -n "$VC_PRODUCT_DIR"; then
+ # Huh, why not just an assignment?
+ COMPATH=`echo $VC_PRODUCT_DIR`
fi
fi
export INCLUDE=`cygpath -d "$COMPATH/Include"`
- dnl Check which Microsoft C/C++ compiler is found
- AC_MSG_CHECKING([the Version of Microsoft C/C++ Compiler])
- # The following finds Microsoft, matches nn.nn.nnnn then pulls numbers out.
- CCNUMVER=`$CC 2>&1 | $AWK "/Microsoft/ && /..\\...\\...../ {
- x = match( \\\$0, /..\\...\\...../ )
- CCversion = substr( \\\$0, RSTART, RLENGTH)
- tokencount = split (CCversion,vertoken,\".\")
- for ( i = 1 ; i <= tokencount ; i++ ) {
- printf (\"%04d\",vertoken[[i]] )
- }
- }"`
- if test "$CCNUMVER" -ge "001700000000"; then
- COMEX=14
- MSVSVER=2012
- VCVER=110
- elif test "$CCNUMVER" -ge "001600000000"; then
- COMEX=13
- MSVSVER=2010
- VCVER=100
- elif test "$CCNUMVER" -ge "001500000000"; then
- COMEX=12
- MSVSVER=2008
- VCVER=90
- else
- AC_MSG_ERROR([Compiler too old. Use Microsoft Visual Studio 2008 or 2010.])
- fi
+
PathFormat "$COMPATH"
COMPATH="$formatted_path"
- AC_MSG_RESULT([found compiler version $CCNUMVER (MSVS $MSVSVER).])
+ VCVER=$vcnum
+ MSVSVER=$vcyear
+
+ # The WINDOWS_SDK_ACCEPTABLE_VERSIONS is mostly an educated guess... Assuming newer ones
+ # are always "better", we list them in reverse chronological order.
+
+ case $vcnum in
+ 90)
+ COMEX=12
+ WINDOWS_SDK_ACCEPTABLE_VERSIONS="7.1A 7.1 7.0A 6.0A"
+ ;;
+ 100)
+ COMEX=13
+ WINDOWS_SDK_ACCEPTABLE_VERSIONS="7.1A 7.1 7.0A 6.0A"
+ ;;
+ 110)
+ COMEX=14
+ WINDOWS_SDK_ACCEPTABLE_VERSIONS="8.0"
+ ;;
+ esac
+
+ # The expectation is that --with-windows-sdk should not need to be used
+ if test -n "$with_windows_sdk"; then
+ case " $WINDOWS_SDK_ACCEPTABLE_VERSIONS " in
+ *" "$with_windows_sdk" "*)
+ WINDOWS_SDK_ACCEPTABLE_VERSIONS=$with_windows_sdk
+ ;;
+ *)
+ AC_MSG_ERROR([Windows SDK $with_windows_sdk is not known to work witn VS $MSVSVER])
+ ;;
+ esac
+ fi
else
- AC_MSG_ERROR([Microsoft C/C++ Compiler not found. Use --with-cl-home or set path to cl.exe.])
+ AC_MSG_ERROR([Visual C++ not found after all, huh])
fi
dnl We need to guess the prefix of the -showIncludes output, it can be
@@ -3210,7 +3226,7 @@ if test "$_os" = "WINNT"; then
# 64-bit OS. The 64-bit Explorer extension is a feature that
# has been present since long in OOo. Don't confuse it with
# building LibreOffice itself as 64-bit code, which is
- # unfished work and highly experimental.
+ # unfinished work and highly experimental.
BUILD_X64=
CXX_X64_BINARY=
@@ -3219,19 +3235,19 @@ if test "$_os" = "WINNT"; then
if test "$BITNESS_OVERRIDE" = ""; then
AC_MSG_CHECKING([for a x64 compiler and libraries for 64-bit Explorer extensions])
- if test -f "$with_cl_home/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
# the build on a 64-bit OS.
- if "$with_cl_home/bin/amd64/cl.exe" -? </dev/null >/dev/null 2>&1; then
+ if "$VC_PRODUCT_DIR/bin/amd64/cl.exe" -? </dev/null >/dev/null 2>&1; then
BUILD_X64=TRUE
- CXX_X64_BINARY="$with_cl_home/bin/amd64/cl.exe"
- LINK_X64_BINARY="$with_cl_home/bin/amd64/link.exe"
- LIBMGR_X64_BINARY="$with_cl_home/bin/amd64/lib.exe"
- elif "$with_cl_home/bin/x86_amd64/cl.exe" -? </dev/null >/dev/null 2>&1; then
+ CXX_X64_BINARY="$VC_PRODUCT_DIR/bin/amd64/cl.exe"
+ LINK_X64_BINARY="$VC_PRODUCT_DIR/bin/amd64/link.exe"
+ LIBMGR_X64_BINARY="$VC_PRODUCT_DIR/bin/amd64/lib.exe"
+ elif "$VC_PRODUCT_DIR/bin/x86_amd64/cl.exe" -? </dev/null >/dev/null 2>&1; then
BUILD_X64=TRUE
- CXX_X64_BINARY="$with_cl_home/bin/x86_amd64/cl.exe"
- LINK_X64_BINARY="$with_cl_home/bin/x86_amd64/link.exe"
- LIBMGR_X64_BINARY="$with_cl_home/bin/x86_amd64/lib.exe"
+ CXX_X64_BINARY="$VC_PRODUCT_DIR/bin/x86_amd64/cl.exe"
+ LINK_X64_BINARY="$VC_PRODUCT_DIR/bin/x86_amd64/link.exe"
+ LIBMGR_X64_BINARY="$VC_PRODUCT_DIR/bin/x86_amd64/lib.exe"
fi
fi
if test "$BUILD_X64" = TRUE; then
@@ -4750,15 +4766,12 @@ if test $_os = Darwin; then
fi
fi
-dnl ===================================================================
-dnl .NET needs special treatment
-dnl (does the above comment really mean .NET, or is it misusing
-dnl that to mean Visual Studio .NET 2003 ? And does this also
-dnl in fact apply equally to what we actually support, i.e.
-dnl Visual Studio 2008 and 2010?)
-dnl ===================================================================
find_csc()
{
+ # Return value: $csctest
+
+ unset csctest
+
if test $VCVER -eq 90; then
reg_get_value "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/NET Framework Setup/NDP/v3.5/InstallPath"
if test -n "$regvalue"; then
@@ -4768,60 +4781,90 @@ find_csc()
reg_get_value HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/.NETFramework/InstallRoot
if test -n "$regvalue"; then
csctest=${regvalue}"v2.0.50727"
+ return
fi
else
reg_get_value "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/NET Framework Setup/NDP/v4/Client/InstallPath"
if test -n "$regvalue"; then
csctest=$regvalue
- break
+ return
fi
fi
}
find_al()
{
+ # Return value: $altest
+
+ unset altest
+
for x in `ls /proc/registry/HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft\ SDKs/Windows`; do
reg_get_value "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/$x/WinSDK-NetFx40Tools/InstallationFolder"
if test -n "$regvalue" -a \( -f "$regvalue/al.exe" -o -f "$regvalue/bin/al.exe" \); then
altest=$regvalue
- break
+ return
fi
done
}
find_dotnetsdk()
{
+ # Return value: $frametest (that's a silly name...)
+
+ unset frametest
+
for ver in 1.1 2.0; do
reg_get_value HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/.NETFramework/sdkInstallRootv$ver
if test -n "$regvalue"; then
frametest=$regvalue
- break
+ return
fi
done
}
-find_winsdk()
+find_winsdk_version()
{
- reg_get_value "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows Kits/Installed Roots/KitsRoot"
- if test -n "$regvalue"; then
- winsdktest=$regvalue
- return
- fi
- reg_get_value "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/CurrentInstallFolder"
- if test -n "$regvalue"; then
- winsdktest=$regvalue
- return
- fi
- reg_get_value "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/MicrosoftSDK/Directories/Install Dir"
- if test -n "$regvalue"; then
- winsdktest=$regvalue
- return
- fi
- for x in `ls /proc/registry/HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/MicrosoftSDK/InstalledSDKs`; do
- reg_get_value "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/MicrosoftSDK/InstalledSDKs/$x/Install Dir"
+ # Args: $1 : SDK version as in "6.0A", "7.0" etc
+ # Return value: $winsdktest
+
+ unset winsdktest
+
+ # Why we look for them in this particular order I don't know. But OTOH I
+ case "$1" in
+ 6.0*|7.*)
+ reg_get_value "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v${1}/InstallationFolder"
if test -n "$regvalue"; then
winsdktest=$regvalue
- break
+ return
+ fi
+ ;;
+ 8.*)
+ reg_get_value "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows Kits/Installed Roots/KitsRoot"
+ if test -n "$regvalue"; then
+ winsdktest=$regvalue
+ return
+ fi
+ ;;
+ esac
+}
+
+find_winsdk()
+{
+ # Args: $1 (optional) : list of acceptable SDK versions
+ # Return value: $winsdktest
+
+ unset winsdktest
+
+ if test -n "$1"; then
+ sdkversions=$1
+ else
+ sdkversions="$WINDOWS_SDK_ACCEPTABLE_VERSIONS"
+ fi
+
+ for ver in $sdkversions; do
+ find_winsdk_version $ver
+ if test -n "$winsdktest"; then
+ return
fi
done
}
@@ -4868,10 +4911,10 @@ copy_msvc_dlls()
vsarch=amd64
fi
- if test -f $with_cl_home/redist/$vsarch/Microsoft.VC${VCVER}.CRT/msvcp${VCVER}.dll; then
- vsdlldir=$with_cl_home/redist/$vsarch/Microsoft.VC${VCVER}.CRT
+ if test -f $VC_PRODUCT_DIR/redist/$vsarch/Microsoft.VC${VCVER}.CRT/msvcp${VCVER}.dll; then
+ vsdlldir=$VC_PRODUCT_DIR/redist/$vsarch/Microsoft.VC${VCVER}.CRT
else
- AC_MSG_ERROR([can not find VS dll $with_cl_home/redist/$vsarch/Microsoft.VC${VCVER}.CRT/msvcp${VCVER}.dll])
+ AC_MSG_ERROR([can not find VS dll $VC_PRODUCT_DIR/redist/$vsarch/Microsoft.VC${VCVER}.CRT/msvcp${VCVER}.dll])
fi
cp $vsdlldir/msvcp${VCVER}.dll $vsdlldir/msvcr${VCVER}.dll ./external/msvcp${VCVER}
@@ -4904,131 +4947,79 @@ if test "$build_os" = "cygwin"; then
copy_dbghelp_dll
dnl Check midl.exe
- AC_PATH_PROG(MIDL_PATH, midl.exe)
- if test -n "$MIDL_PATH"; then
- MIDL_PATH=`dirname "$MIDL_PATH"`
- else
- AC_MSG_CHECKING([for midl.exe more thoroughly])
- fi
- if test -n "$with_midl_path"; then
- with_midl_path=`cygpath -u "$with_midl_path"`
- fi
- if test -x "$with_midl_path/midl.exe"; then
- MIDL_PATH="$with_midl_path"
- fi
- if test -z "$MIDL_PATH" -a -e "$with_cl_home/../Common7/Tools/Bin/midl.exe"; then
- MIDL_PATH="$with_cl_home/../Common7/Tools/Bin"
- fi
- if test -z "$MIDL_PATH"; then
- find_msvs
- if test -x "$vstest/Common7/Tools/Bin/midl.exe"; then
- MIDL_PATH="$vstest/Common7/Tools/Bin"
- fi
- fi
- if test -z "$MIDL_PATH"; then
- find_winsdk
- if test -x "$winsdktest/Bin/midl.exe"; then
- MIDL_PATH="$winsdktest/Bin"
- elif test -x "$winsdktest/Bin/$SDK_ARCH/midl.exe"; then
- MIDL_PATH="$winsdktest/Bin/$SDK_ARCH"
- fi
+ AC_MSG_CHECKING([for midl.exe])
+
+ find_winsdk
+ if test -f "$winsdktest/Bin/midl.exe"; then
+ MIDL_PATH="$winsdktest/Bin"
+ elif test -f "$winsdktest/Bin/$WINDOWS_SDK_ARCH/midl.exe"; then
+ MIDL_PATH="$winsdktest/Bin/$WINDOWS_SDK_ARCH"
fi
- if test ! -x "$MIDL_PATH/midl.exe"; then
- AC_MSG_ERROR([midl.exe not found. Make sure it's in PATH or use --with-midl-path])
+ if test ! -f "$MIDL_PATH/midl.exe"; then
+ AC_MSG_ERROR([midl.exe not found in $winsdktest/Bin/$WINDOWS_SDK_ARCH, Windows SDK installation broken?])
else
AC_MSG_RESULT([$MIDL_PATH/midl.exe])
fi
+
# Convert to posix path with 8.3 filename restrictions ( No spaces )
MIDL_PATH=`cygpath -d "$MIDL_PATH"`
MIDL_PATH=`cygpath -u "$MIDL_PATH"`
dnl Check csc.exe
- AC_PATH_PROG(CSC_PATH, csc.exe)
- if test -n "$CSC_PATH"; then
- CSC_PATH=`dirname "$CSC_PATH"`
- fi
- if test -n "$with_csc_path"; then
- with_csc_path=`cygpath -u "$with_csc_path"`
- else
- AC_MSG_CHECKING([for csc.exe more thoroughly])
- fi
- if test -x "$with_csc_path/csc.exe"; then
- CSC_PATH="$with_csc_path"
- else
- find_csc
- if test -x "$csctest/csc.exe"; then
- CSC_PATH="$csctest"
- fi
+ AC_MSG_CHECKING([for csc.exe])
+ find_csc
+ if test -f "$csctest/csc.exe"; then
+ CSC_PATH="$csctest"
fi
- if test ! -x "$CSC_PATH/csc.exe"; then
- AC_MSG_ERROR([csc.exe not found. Make sure it's in the path or use --with-csc-path])
+ if test ! -f "$CSC_PATH/csc.exe"; then
+ AC_MSG_ERROR([csc.exe not found as $CSC_PATH/csc.exe])
else
AC_MSG_RESULT([$CSC_PATH/csc.exe])
fi
- # Convert to posix path with 8.3 filename restrictions ( No spaces )
+
CSC_PATH=`cygpath -d "$CSC_PATH"`
CSC_PATH=`cygpath -u "$CSC_PATH"`
dnl Check al.exe
- AC_PATH_PROG(AL_PATH, al.exe)
- if test -n "$AL_PATH"; then
- AL_PATH=`dirname "$AL_PATH"`
- else
- AC_MSG_CHECKING([for al.exe more thoroughly])
- fi
- if test -n "$with_al_path"; then
- with_al_path=`cygpath -u "$with_al_path"`
- fi
- if test -x "$with_al_path/al.exe"; then
- AL_PATH="$with_al_path"
- fi
- if test -z "$AL_PATH"; then
- find_winsdk
- if test -x "$winsdktest/Bin/al.exe"; then
- AL_PATH="$winsdktest/Bin"
- elif test -x "$winsdktest/Bin/$SDK_ARCH/al.exe"; then
- AL_PATH="$winsdktest/Bin/$SDK_ARCH"
- fi
+ AC_MSG_CHECKING([for al.exe])
+ find_winsdk
+ if test -f "$winsdktest/Bin/al.exe"; then
+ AL_PATH="$winsdktest/Bin"
+ elif test -f "$winsdktest/Bin/$WINDOWS_SDK_ARCH/al.exe"; then
+ AL_PATH="$winsdktest/Bin/$WINDOWS_SDK_ARCH"
fi
+
if test -z "$AL_PATH"; then
find_al
- if test -x "$altest/bin/al.exe"; then
+ if test -f "$altest/bin/al.exe"; then
AL_PATH="$altest/bin"
- elif test -x "$altest/al.exe"; then
+ elif test -f "$altest/al.exe"; then
AL_PATH="$altest"
fi
fi
- if test ! -x "$AL_PATH/al.exe"; then
- AC_MSG_ERROR([al.exe not found. Make sure it's in PATH or use --with-al-path])
+ if test ! -f "$AL_PATH/al.exe"; then
+ AC_MSG_ERROR([al.exe not found as $AL_PATH/al.exe])
else
AC_MSG_RESULT([$AL_PATH/al.exe])
fi
- # Convert to posix path with 8.3 filename restrictions ( No spaces )
AL_PATH=`cygpath -d "$AL_PATH"`
AL_PATH=`cygpath -u "$AL_PATH"`
dnl Check mscoree.lib / .NET Framework dir
AC_MSG_CHECKING(.NET Framework)
- if test -n "$with_dotnet_framework_home"; then
- with_dotnet_framework_home=`cygpath -u "$with_dotnet_framework_home"`
- fi
- if test -f "$with_dotnet_framework_home/lib/mscoree.lib"; then
- DOTNET_FRAMEWORK_HOME="$with_dotnet_framework_home"
- fi
- if test -z "$DOTNET_FRAMEWORK_HOME"; then
- find_dotnetsdk
- if test -f "$frametest/lib/mscoree.lib"; then
- DOTNET_FRAMEWORK_HOME="$frametest"
- else
- find_winsdk
- if test -f "$winsdktest/lib/mscoree.lib" -o -f "$winsdktest/lib/win8/um/$SDK_ARCH/mscoree.lib"; then
- DOTNET_FRAMEWORK_HOME="$winsdktest"
- fi
+ find_dotnetsdk
+ if test -f "$frametest/lib/mscoree.lib"; then
+ DOTNET_FRAMEWORK_HOME="$frametest"
+ else
+ find_winsdk
+ if test -f "$winsdktest/lib/mscoree.lib" -o -f "$winsdktest/lib/win8/um/$WINDOWS_SDK_ARCH/mscoree.lib"; then
+ DOTNET_FRAMEWORK_HOME="$winsdktest"
fi
fi
- if test ! -f "$DOTNET_FRAMEWORK_HOME/lib/mscoree.lib" -a ! -f "$DOTNET_FRAMEWORK_HOME/lib/win8/um/$SDK_ARCH/mscoree.lib"; then
- AC_MSG_ERROR([mscoree.lib (.NET Framework) not found. Make sure you use --with-dotnet-framework-home])
+
+ if test ! -f "$DOTNET_FRAMEWORK_HOME/lib/mscoree.lib" -a ! -f "$DOTNET_FRAMEWORK_HOME/lib/win8/um/$WINDOWS_SDK_ARCH/mscoree.lib"; then
+ AC_MSG_ERROR([mscoree.lib (.NET Framework) not found])
fi
AC_MSG_RESULT(found)
@@ -8988,53 +8979,55 @@ dnl and add "-a \( "$WITH_MINGW" != "yes" \)" then
if test "$_os" = "WINNT"; then
AC_MSG_CHECKING([for Windows SDK])
if test "$build_os" = "cygwin"; then
- if test -z "$with_windows_sdk_home"; then
- # This first line will detect a February 2003 Microsoft Platform SDK
- find_winsdk
- WINDOWS_SDK_HOME=$winsdktest
- # But there might be also an April 2005 PSDK, unfortunately MS changed
- # the registry entry. (we prefer the old version!?)
- if test -z "$WINDOWS_SDK_HOME"; then
- WINDOWS_SDK_HOME=`cat /proc/registry/HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/MicrosoftSDK/InstalledSDKs/*/Install\ Dir 2> /dev/null | tr '\000' '\n' | head -n 1`
- fi
- # normalize if found
- if test -n "$WINDOWS_SDK_HOME"; then
- WINDOWS_SDK_HOME=`cygpath -d "$WINDOWS_SDK_HOME"`
- WINDOWS_SDK_HOME=`cygpath -u "$WINDOWS_SDK_HOME"`
-
- # If this sdk is incomplete, lets see if the one
- # recommended to be installed is available.
-
- # This refers to the Windows SDK 8 (as distributed
- # with Visual Studio 2012, or maybe also
- # separately), I assume.
-
- # I wouldn't say that it is "incomplete", it is
- # just structured differtently. We do seem to try
- # to adapt to that structure below (look for the
- # Include/um etc stuff), so rejecting it here is a
- # bit premature... *but* then one notices that
- # compiling with MSVS2008 and trying to use SDK 8
- # leads to horrible errors in ICU at least. Oh
- # well.
-
- if test ! -x "$WINDOWS_SDK_HOME/bin/msiinfo.exe"; then
- WINDOWS_SDK7_HOME=`cat "/proc/registry/HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v7.1/InstallationFolder" 2> /dev/null | tr '\000' '\n' | head -n 1`
- if test -n "$WINDOWS_SDK7_HOME"; then
- WINDOWS_SDK_HOME=`cygpath -d "$WINDOWS_SDK7_HOME"`
- WINDOWS_SDK_HOME=`cygpath -u "$WINDOWS_SDK_HOME"`
- fi
+ # This first line will detect a February 2003 Microsoft Platform SDK
+ find_winsdk
+ WINDOWS_SDK_HOME=$winsdktest
+
+ # But there might be also an April 2005 PSDK, unfortunately MS changed
+ # the registry entry. (we prefer the old version!?)
+ if test -z "$WINDOWS_SDK_HOME"; then
+ WINDOWS_SDK_HOME=`cat /proc/registry/HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/MicrosoftSDK/InstalledSDKs/*/Install\ Dir 2> /dev/null | tr '\000' '\n' | head -n 1`
+ fi
+
+ # normalize if found
+ if test -n "$WINDOWS_SDK_HOME"; then
+ WINDOWS_SDK_HOME=`cygpath -d "$WINDOWS_SDK_HOME"`
+ WINDOWS_SDK_HOME=`cygpath -u "$WINDOWS_SDK_HOME"`
+
+ # If this sdk is incomplete, lets see if the one
+ # recommended to be installed is available.
+
+ # This refers to the Windows SDK 8 (as distributed
+ # with Visual Studio 2012, or maybe also
+ # separately), I assume.
+
+ # I wouldn't say that it is "incomplete", it is
+ # just structured differtently. We do seem to try
+ # to adapt to that structure below (look for the
+ # Include/um etc stuff), so rejecting it here is a
+ # bit premature... *but* then one notices that
+ # compiling with MSVS2008 and trying to use SDK 8
+ # leads to horrible errors in ICU at least. Oh
+ # well.
+
+ if test ! -x "$WINDOWS_SDK_HOME/bin/msiinfo.exe"; then
+ WINDOWS_SDK7_HOME=`cat "/proc/registry/HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v7.1/InstallationFolder" 2> /dev/null | tr '\000' '\n' | head -n 1`
+ if test -n "$WINDOWS_SDK7_HOME"; then
+ WINDOWS_SDK_HOME=`cygpath -d "$WINDOWS_SDK7_HOME"`
+ WINDOWS_SDK_HOME=`cygpath -u "$WINDOWS_SDK_HOME"`
fi
fi
- else
- WINDOWS_SDK_HOME=`cygpath -u "$with_windows_sdk_home"`
fi
fi
+
if test -n "$WINDOWS_SDK_HOME"; then
# Remove a possible trailing backslash
WINDOWS_SDK_HOME=`echo $WINDOWS_SDK_HOME | $SED 's/\/$//'`
# Problem with current PSDK (iz 49865)
- # (What "current" does that mean?)
+
+ # (That "current" refers to something ancient... it hasn't been called the "Platform SDK"
+ # ("PSDK") for ages.
+
if test -f "$WINDOWS_SDK_HOME/Lib/libcp.lib"; then
AC_MSG_ERROR([
Some modules do not build correctly with MS Platform SDK - April 2005
@@ -9056,7 +9049,7 @@ problem can be found in issue 49856.])
fi
if test -f "$WINDOWS_SDK_HOME/lib/user32.lib"; then
HAVE_PSDK_LIB="yes"
- elif test -f "$WINDOWS_SDK_HOME/lib/win8/um/$SDK_ARCH/user32.lib"; then
+ elif test -f "$WINDOWS_SDK_HOME/lib/win8/um/$WINDOWS_SDK_ARCH/user32.lib"; then
HAVE_PSDK_LIB="yes"
else
HAVE_PSDK_LIB="no"
@@ -9136,21 +9129,17 @@ dnl =========================================
if test -n "$ENABLE_DIRECTX" -a "$_os" = "WINNT"; then
AC_MSG_CHECKING([for DirectX SDK])
if test "$build_os" = "cygwin"; then
- if test -z "$with_directx_home"; then
- dnl A standard installation of the DirectX SDK sets $DXSDK_DIR
- if test -n "$DXSDK_DIR"; then
- DIRECTXSDK_HOME=`cygpath -d "$DXSDK_DIR"`
- DIRECTXSDK_HOME=`cygpath -u "$DIRECTXSDK_HOME"`
- fi
- # At this point $DIRECTXSDK_HOME might still be undefined. This will lead to
- # the "DirectX SDK not found" error later
- else
- DIRECTXSDK_HOME=`cygpath -u "$with_directx_home"`
+ dnl A standard installation of the DirectX SDK sets $DXSDK_DIR
+ if test -n "$DXSDK_DIR"; then
+ DIRECTXSDK_HOME=`cygpath -d "$DXSDK_DIR"`
+ DIRECTXSDK_HOME=`cygpath -u "$DIRECTXSDK_HOME"`
fi
+ # At this point $DIRECTXSDK_HOME might still be undefined. This will lead to
+ # the "DirectX SDK not found" error later.
+ # (Where?)
+
# Remove a possible trailing backslash
DIRECTXSDK_HOME=`echo $DIRECTXSDK_HOME | $SED 's/\/$//'`
- elif test -n "$with_directx_home"; then
- DIRECTXSDK_HOME="$with_directx_home"
fi
if test -f "$DIRECTXSDK_HOME/Include/ddraw.h" -o -f "$DIRECTXSDK_HOME/Include/d3d9.h"; then
@@ -9302,30 +9291,17 @@ if test "$_os" = "WINNT" -a "$WITH_MINGW" != "yes"; then
assembler=ml64.exe
assembler_bin=bin/amd64
fi
- if test -n "$with_asm_home"; then
- with_asm_home=`cygpath -u "$with_asm_home"`
- fi
- if test -x "$with_asm_home/$assembler"; then
- AC_MSG_CHECKING([$assembler assembler path])
- AC_MSG_RESULT([$with_asm_home/$assembler])
- ML_EXE="$with_asm_home/$assembler"
+
+ AC_MSG_CHECKING([$VC_PRODUCT_DIR/$assembler_bin/$assembler])
+ if test -f "$VC_PRODUCT_DIR/$assembler_bin/$assembler"; then
+ ASM_HOME=$VC_PRODUCT_DIR/$assembler_bin
+ AC_MSG_RESULT([found])
+ ML_EXE="$VC_PRODUCT_DIR/$assembler_bin/$assembler"
else
- AC_PATH_PROG(ML_EXE, $assembler)
- if test -z "$ML_EXE"; then
- AC_MSG_CHECKING([$with_cl_home/$assembler_bin/$assembler])
- if test -x "$with_cl_home/$assembler_bin/$assembler"; then
- with_asm_home=$with_cl_home/$assembler_bin
- AC_MSG_RESULT([found])
- ML_EXE="$with_cl_home/$assembler_bin/$assembler"
- else
- AC_MSG_ERROR([Configure did not find $assembler assembler.])
- fi
- else
- with_asm_home="ASM_IN_PATH"
- ML_EXE="$assembler"
- fi
+ AC_MSG_ERROR([Configure did not find $assembler assembler.])
fi
- PathFormat "$with_asm_home"
+
+ PathFormat "$ASM_HOME"
ASM_HOME="$formatted_path"
else
ASM_HOME=""