/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

#include "nsscapi.h"
#include <winver.h>

#define MY_LIBNAME "nsscapi"
#define MY_FILEDESCRIPTION "NSS Access to Microsoft CAPI"

#ifdef _DEBUG
#define MY_DEBUG_STR " (debug)"
#define MY_FILEFLAGS_1 VS_FF_DEBUG
#else
#define MY_DEBUG_STR ""
#define MY_FILEFLAGS_1 0x0L
#endif
#if NSS_BETA
#define MY_FILEFLAGS_2 MY_FILEFLAGS_1|VS_FF_PRERELEASE
#else
#define MY_FILEFLAGS_2 MY_FILEFLAGS_1
#endif

#ifdef WINNT
#define MY_FILEOS VOS_NT_WINDOWS32
#else
#define MY_FILEOS VOS__WINDOWS32
#endif

#define MY_INTERNAL_NAME MY_LIBNAME

/////////////////////////////////////////////////////////////////////////////
//
// Version-information resource
//

VS_VERSION_INFO VERSIONINFO
 FILEVERSION NSS_CKCAPI_LIBRARY_VERSION_MAJOR,NSS_CKCAPI_LIBRARY_VERSION_MINOR,0,0
 PRODUCTVERSION NSS_CKCAPI_LIBRARY_VERSION_MAJOR,NSS_CKCAPI_LIBRARY_VERSION_MINOR,0,0
 FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
 FILEFLAGS MY_FILEFLAGS_2
 FILEOS MY_FILEOS
 FILETYPE VFT_DLL
 FILESUBTYPE 0x0L // not used

BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "040904B0" // Lang=US English, CharSet=Unicode
        BEGIN
            VALUE "CompanyName", "Mozilla Foundation\0"
            VALUE "FileDescription", MY_FILEDESCRIPTION MY_DEBUG_STR "\0"
            VALUE "FileVersion", NSS_CKCAPI_LIBRARY_VERSION "\0"
            VALUE "InternalName", MY_INTERNAL_NAME "\0"
            VALUE "OriginalFilename", MY_INTERNAL_NAME ".dll\0"
            VALUE "ProductName", "Network Security Services\0"
            VALUE "ProductVersion", NSS_CKCAPI_LIBRARY_VERSION "\0"
        END
    END
    BLOCK "VarFileInfo"
    BEGIN
        VALUE "Translation", 0x409, 1200
    END
END
