/*
 * 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 "winresrc.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_MAJOR
#define WINE_FILEVERSION_MAJOR 10
#endif

#ifndef WINE_FILEVERSION_MINOR
#define WINE_FILEVERSION_MINOR 0
#endif

#ifndef WINE_FILEVERSION_BUILD
#define WINE_FILEVERSION_BUILD 0
#endif

#ifndef WINE_FILEVERSION_PLATFORMID
#define WINE_FILEVERSION_PLATFORMID 0
#endif

#ifndef WINE_FILEVERSION
#define WINE_FILEVERSION WINE_FILEVERSION_MAJOR,WINE_FILEVERSION_MINOR,\
                         WINE_FILEVERSION_BUILD,WINE_FILEVERSION_PLATFORMID
#endif

#define WINE_VER_STRINGIZE2(x) #x
#define WINE_VER_STRINGIZE(x) WINE_VER_STRINGIZE2(x)

#ifndef WINE_FILEVERSION_STR
#define WINE_FILEVERSION_STR WINE_VER_STRINGIZE(WINE_FILEVERSION_MAJOR.WINE_FILEVERSION_MINOR.WINE_FILEVERSION_BUILD.WINE_FILEVERSION_PLATFORMID)
#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_LEGALCOPYRIGHT
#define WINE_LEGALCOPYRIGHT "Copyright (c) 1993-2017 the Wine project authors (see the file AUTHORS for a complete list)"
#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

#ifndef WINE_EXTRAVALUES
#define WINE_EXTRAVALUES
#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", WINE_LEGALCOPYRIGHT
	    VALUE "OriginalFilename", WINE_FILENAME_STR
	    VALUE "ProductName", WINE_PRODUCTNAME_STR
	    VALUE "ProductVersion", WINE_PRODUCTVERSION_STR
	    WINE_EXTRAVALUES
	}
    }
    BLOCK "VarFileInfo"
    {
	VALUE "Translation", 0x0409, 0x04E4 /* LANG_ENGLISH/SUBLANG_DEFAULT, CP 1252 */
    }
}
