/* 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 "nssckbi.h"
#include <winver.h>

#define MY_LIBNAME "nssckbi"
#define MY_FILEDESCRIPTION "NSS Builtin Trusted Root CAs"

#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_BUILTINS_LIBRARY_VERSION_MAJOR,NSS_BUILTINS_LIBRARY_VERSION_MINOR,0,0
 PRODUCTVERSION NSS_BUILTINS_LIBRARY_VERSION_MAJOR,NSS_BUILTINS_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_BUILTINS_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_BUILTINS_LIBRARY_VERSION "\0"
        END
    END
    BLOCK "VarFileInfo"
    BEGIN
        VALUE "Translation", 0x409, 1200
    END
END
