/*
 * 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)
#define WINE_VER_HEXPREFIX2(x) 0x ## x
#define WINE_VER_HEXPREFIX(x) WINE_VER_HEXPREFIX2(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

#ifndef WINE_CODEPAGE
#ifdef _WIN32
#define WINE_CODEPAGE 04B0 /* CP1200 (Unicode) */
#else
#define WINE_CODEPAGE 04E4 /* CP1252 for Win16 */
#endif
#endif

#ifndef WINE_CODEPAGE_STR
#define WINE_CODEPAGE_STR WINE_VER_STRINGIZE(WINE_CODEPAGE)
#endif

#ifndef WINE_CODEPAGE_HEX
#define WINE_CODEPAGE_HEX WINE_VER_HEXPREFIX(WINE_CODEPAGE)
#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"
    {
        /* LANG_ENGLISH/SUBLANG_DEFAULT, WINE_CODEPAGE */
	BLOCK "0409" WINE_CODEPAGE_STR
	{
	    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"
    {
        /* LANG_ENGLISH/SUBLANG_DEFAULT, WINE_CODEPAGE */
	VALUE "Translation", 0x0409, WINE_CODEPAGE_HEX
    }
}
