// Version Resource file for ICU usdtio library.

// Do not edit with Microsoft Developer Studio Resource Editor.
//   It will permanently substitute version numbers that are intended to be
//   picked up by the pre-processor during each build.
//

#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "winresrc.h"

/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS

/////////////////////////////////////////////////////////////////////////////
//

LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
#pragma code_page(1252)

#include "unicode\uversion.h"

/////////////////////////////////////////////////////////////////////////////
//
// Version
//
#define STR(s) #s
#define CommaVersionString(a, b, c, d) STR(a) ", " STR(b) ", " STR(c) ", " STR(d) "\0"

VS_VERSION_INFO VERSIONINFO
 FILEVERSION U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, 0
 PRODUCTVERSION U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, 0
 FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
 FILEFLAGS 0x1L
#else
 FILEFLAGS 0x0L
#endif
 FILEOS VOS__WINDOWS32
 FILETYPE VFT_DLL
 FILESUBTYPE 0x0L
BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "00000000"
        BEGIN
            VALUE "Comments", "http://oss.software.ibm.com/icu/\0"
            VALUE "CompanyName", "IBM Corporation and others\0"
            VALUE "FileDescription", "IBM ICU ustdio DLL\0"
            VALUE "FileVersion",  CommaVersionString(U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, 0)
            VALUE "LegalCopyright", U_COPYRIGHT_STRING "\0"
#ifdef _DEBUG
            VALUE "OriginalFilename", "icuio" U_ICU_VERSION_SHORT "d.dll\0")
#else
            VALUE "OriginalFilename", "icuio" U_ICU_VERSION_SHORT ".dll\0")
#endif

            VALUE "PrivateBuild", "\0"
            VALUE "ProductName", "International Components for Unicode\0"
            VALUE "ProductVersion", CommaVersionString(U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, 0)
            VALUE "SpecialBuild", "\0"
        END
    END
    BLOCK "VarFileInfo"
    BEGIN
        VALUE "Translation", 0x000, 0000
    END
END

/////////////////////////////////////////////////////////////////////////////

