//
// $Id$
//
// msvc-7.0.config - configuration file for Microsoft Visual C++ 7.0
//
//////////////////////////////////////////////////////////////////////
//
// Licensed to the Apache Software  Foundation (ASF) under one or more
// contributor  license agreements.  See  the NOTICE  file distributed
// with  this  work  for  additional information  regarding  copyright
// ownership.   The ASF  licenses this  file to  you 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.
// 
//////////////////////////////////////////////////////////////////////

// Version of the used MS VisualStudio:
// 7 for MS VisualStudio .NET
// 7.1 for MS VisualStudio .NET 2003
// 8.0 for MS VisualStudio 2005 and MSVC 2005 Express Edition
// 9.0 for MS VisualStudio 2008
VERSION=7

// Path to the MS VisualStudio IDE executable:
// devenv.exe for MS VisualStudio
// VCExpress.exe for MSVC 2005 Express Edition
// if empty it will be tried to be detected automatically
DEVENV=

// Additional flags for devenv.exe
DEVENVFLAGS=

// Path to the WinDiff utility:
// if empty it will be tried to be detected automatically
WINDIFF=

// Path of the ICProjConvertxx.exe utility:
// if path is empty it will be tried to be detected automatically
ICCCONVERT=

// Convert solution to ICC format
// 0 for all MSVC
// 1 for all ICC
CONVERT=0

// additional flags for the compiler
CPPFLAGS=
// additional flags for the linker
LDFLAGS=
// additional libraries
LIBS=

// CXX, LD, AR used only at configure build step
// CXX - command invoked to compile the test source file
// LD - command invoked to link the test
// AR - command invoked to make library
// AS will be used at solution generation build step
// to initialize Custom Build Rule for compiling .asm files
CXX=cl
LD=cl
AR=lib
AS=ml

// Use singlethreaded or mutlithreaded CRT in 11s, 11d solution configurations
// 0 for MS VisualStudio .NET and MS VisualStudio .NET 2003
// 1 for MS VisualStudio 2005 and MSVC 2005 Express Edition
NOSTCRT=0

// target platform
// Win32 for MS VisualStudio .NET and MS VisualStudio .NET 2003
// and MSVC 2005 Express Edition
// Win32 or x64 for MS VisualStudio 2005
PLATFORM=Win32

// Version of the solution file format:
// 7.00 for MS VisualStudio .NET
// 8.00 for MS VisualStudio .NET 2003
// 9.00 for MS VisualStudio 2005 and MSVC 2005 Express Edition
// 10.00 for MS VisualStudio 2008
SLNVER=7.00

// Comment in produced solution file:
// empty for MS VisualStudio .NET and MS VisualStudio .NET 2003
// Visual Studio 2005 - for MS VisualStudio 2005
// Visual C++ Express 2005 - for MSVC 2005 Express Edition
// Visual Studio 2008 - for MS VisualStudio 2008
SLNCOMMENT=

// Type of produced file buildlog.htm:
// 0 - non-unicode
// 1 - unicode
UNICODELOG=0

// Path to the ICC iclvars.bat
// Should be empty for MSVC
CLVARSBAT=

// Version of the Intel C++
// Should be empty for MSVC
ICCVER=
