/*
 * 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  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_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  0
FILEFLAGS      0
FILEOS         VOS_UNKNOWN
FILETYPE       WINE_FILETYPE
FILESUBTYPE    VFT2_UNKNOWN
{
    BLOCK "StringFileInfo"
    {
	BLOCK "040904E4" /* LANG_ENGLISH/SUBLANG_DEFAULT, CP 1252 */
	{
	    VALUE "CompanyName", "Wine Team"
	    VALUE "FileDescription", WINE_FILEDESCRIPTION_STR
	    VALUE "FileVersion", WINE_FILEVERSION_STR
	    VALUE "InternalName", WINE_FILENAME
	    VALUE "LegalCopyright", "Copyright (c) 1993-2005 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 */
    }
}
