// libiomp.rc.var
// $Revision: 42219 $
// $Date: 2013-03-29 13:36:05 -0500 (Fri, 29 Mar 2013) $

//
////===----------------------------------------------------------------------===//
////
////                     The LLVM Compiler Infrastructure
////
//// This file is dual licensed under the MIT and the University of Illinois Open
//// Source Licenses. See LICENSE.txt for details.
////
////===----------------------------------------------------------------------===//
//

#include "winres.h"

LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US    // English (U.S.) resources
#pragma code_page(1252)

VS_VERSION_INFO VERSIONINFO
    // Parts of FILEVERSION and PRODUCTVERSION are 16-bit fields, entire build date yyyymmdd
    // does not fit into one version part, so we need to split it into yyyy and mmdd:
    FILEVERSION    $KMP_VERSION_MAJOR,$KMP_VERSION_MINOR,${{ our $KMP_VERSION_BUILD; int( $KMP_VERSION_BUILD / 10000 ) . "," . ( $KMP_VERSION_BUILD % 10000 ) }}
    PRODUCTVERSION $KMP_VERSION_MAJOR,$KMP_VERSION_MINOR,${{ our $KMP_VERSION_BUILD; int( $KMP_VERSION_BUILD / 10000 ) . "," . ( $KMP_VERSION_BUILD % 10000 ) }}
    FILEFLAGSMASK  VS_FFI_FILEFLAGSMASK
    FILEFLAGS      0
    #if $KMP_DIAG || $KMP_DEBUG_INFO
        | VS_FF_DEBUG
    #endif
    #if $KMP_VERSION_BUILD == 0
        | VS_FF_PRIVATEBUILD | VS_FF_PRERELEASE
    #endif
    FILEOS          VOS_NT_WINDOWS32    // Windows* Server* 2003, XP*, 2000, or NT*
    FILETYPE        VFT_DLL
    BEGIN
        BLOCK "StringFileInfo"
        BEGIN
            BLOCK "040904b0"            // U.S. English, Unicode (0x04b0 == 1200)
            BEGIN

                // FileDescription and LegalCopyright should be short.
                VALUE "FileDescription",  "Intel(R) OpenMP* Runtime Library${{ our $MESSAGE_CATALOG; $MESSAGE_CATALOG ? " Message Catalog" : "" }}\0"
                VALUE "LegalCopyright",   "Copyright (C) 1997-2013, Intel Corporation. All rights reserved.\0"

                // Following values may be relatively long.
                VALUE "CompanyName",      "Intel Corporation\0"
                // VALUE "LegalTrademarks",  "\0"  // Not used for now.
                VALUE "ProductName",      "Intel(R) OpenMP* Runtime Library\0"
                VALUE "ProductVersion",   "$KMP_VERSION_MAJOR.$KMP_VERSION_MINOR\0"
                VALUE "FileVersion",      "$KMP_VERSION_BUILD\0"
                VALUE "InternalName",     "$KMP_FILE\0"
                VALUE "OriginalFilename", "$KMP_FILE\0"
                VALUE "Comments",
                    "Intel(R) OpenMP* ${{ our ( $MESSAGE_CATALOG, $KMP_TYPE ); $MESSAGE_CATALOG ? "Runtime Library Message Catalog" : "$KMP_TYPE Library" }} "
                    "version $KMP_VERSION_MAJOR.$KMP_VERSION_MINOR.$KMP_VERSION_BUILD "
                    "for $KMP_ARCH architecture built on $KMP_BUILD_DATE.\0"
                #if $KMP_VERSION_BUILD == 0
                    VALUE "PrivateBuild",
                        "This is a development build for internal testing purposes only. "
                        "Do not distribute it outside of Intel.\0"
                #endif
                // VALUE "SpecialBuild",     "\0"    // Not used for now.

            END
        END
        BLOCK "VarFileInfo"
        BEGIN
            VALUE "Translation", ${{ our ( $MESSAGE_CATALOG, $LANGUAGE ); $MESSAGE_CATALOG ? $LANGUAGE : 1033 }}, 1200
            // 1033 -- U.S. English, 1200 -- Unicode
        END
    END

// end of file //
