/*
 * Copyright 2001 Dmitry Timoshkov
 * Copyright 2004 Ivan Leo Puoti
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */

#include "windef.h"
#include "winbase.h"
#include "winver.h"

/*
Assign WINE_FILEVERSION and WINE_FILEVERSION_STR high enough number
to make sure that programs, relying on the version numbers, will
never complain.
*/

#ifndef WINE_FILEVERSION
#define WINE_FILEVERSION 10,0,0,0
#endif

#ifndef WINE_FILEVERSION_STR
#define WINE_FILEVERSION_STR "10.0"
#endif

#ifndef WINE_FILEDESCRIPTION_STR
#define WINE_FILEDESCRIPTION_STR "Wine core dll"
#endif

#ifndef WINE_FILENAME
#define WINE_FILENAME ""
#endif

#ifndef WINE_FILENAME_STR
#define WINE_FILENAME_STR ""
#endif

#ifndef WINE_FILETYPE
#define WINE_FILETYPE VFT_DLL
#endif

#ifndef WINE_FILESUBTYPE
#define WINE_FILESUBTYPE VFT2_UNKNOWN
#endif

#ifndef WINE_PRODUCTVERSION
#define WINE_PRODUCTVERSION 1,0,0,0
#endif

#ifndef WINE_PRODUCTVERSION_STR
#define WINE_PRODUCTVERSION_STR "1.0"
#endif

#ifndef WINE_PRODUCTNAME_STR
#define WINE_PRODUCTNAME_STR "Wine"
#endif

VS_VERSION_INFO VERSIONINFO
FILEVERSION    WINE_FILEVERSION
PRODUCTVERSION WINE_PRODUCTVERSION
FILEFLAGSMASK  63
FILEFLAGS      0
FILEOS         VOS_UNKNOWN
FILETYPE       WINE_FILETYPE
FILESUBTYPE    WINE_FILESUBTYPE
{
    BLOCK "StringFileInfo"
    {
	BLOCK "040904E4" /* LANG_ENGLISH/SUBLANG_DEFAULT, CP 1252 */
	{
	    VALUE "CompanyName", "Microsoft Corporation"  /* GameGuard depends on this */
	    VALUE "FileDescription", WINE_FILEDESCRIPTION_STR
	    VALUE "FileVersion", WINE_FILEVERSION_STR
	    VALUE "InternalName", WINE_FILENAME
	    VALUE "LegalCopyright", "Copyright (c) 1993-2007 the Wine project authors (see the file AUTHORS for a complete list)"
	    VALUE "OriginalFilename", WINE_FILENAME_STR
	    VALUE "ProductName", WINE_PRODUCTNAME_STR
	    VALUE "ProductVersion", WINE_PRODUCTVERSION_STR
#ifdef WINE_OLESELFREGISTER
	    VALUE "OLESelfRegister", ""
#endif
	}
    }
    BLOCK "VarFileInfo"
    {
	VALUE "Translation", 0x0409, 0x04E4 /* LANG_ENGLISH/SUBLANG_DEFAULT, CP 1252 */
    }
}
