// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include <winresrc.h>

#ifdef IDC_STATIC
#undef IDC_STATIC
#endif
#define IDC_STATIC (-1)

// These marcos are copied from "base/stringize_macros.h" which cannot be
// included directly.
#define STRINGIZE_NO_EXPANSION(x) #x
#define STRINGIZE(x) STRINGIZE_NO_EXPANSION(x)

{% for lang in languages %}
  {% do SelectLanguage(lang) %}

LANGUAGE {{ lang | GetPrimaryLanguage }}, {{ lang | GetSublanguage }}

VS_VERSION_INFO VERSIONINFO
 FILEVERSION {{ MAJOR }},{{ REMOTING_PATCH }},{{ BUILD }},{{ PATCH }}
 PRODUCTVERSION {{ MAJOR }},{{ REMOTING_PATCH }},{{ BUILD }},{{ PATCH }}
 FILEFLAGSMASK 0x17L
#ifdef _DEBUG
 FILEFLAGS 0x1L
#else
 FILEFLAGS 0x0L
#endif
 FILEOS 0x4L
#if (BINARY == BINARY_CORE)
 FILETYPE VFT_DLL
#else
 FILETYPE VFT_APP
#endif
 FILESUBTYPE 0x0L
BEGIN
  BLOCK "StringFileInfo"
  BEGIN
    BLOCK "{{ lang | GetLangId }}{{ lang | GetCodepage }}"
    BEGIN
      VALUE "CompanyName", "{% trans %}COMPANY_NAME{% endtrans %}"
      VALUE "FileVersion", "{{ MAJOR }}.{{ REMOTING_PATCH }}.{{ BUILD }}.{{ PATCH }}"
      VALUE "LegalCopyright", "{% trans %}COPYRIGHT{% endtrans %}"
      VALUE "ProductName", "{% trans %}PRODUCT_NAME{% endtrans %}"
      VALUE "ProductVersion", "{{ MAJOR }}.{{ REMOTING_PATCH }}.{{ BUILD }}.{{ PATCH }}"
      VALUE "LastChange", "{{ LASTCHANGE }}"
      VALUE "Official Build", "{{ official_build }}"
#if (BINARY == BINARY_CORE)
      VALUE "FileDescription", "{% trans %}REMOTING_CORE_DESCRIPTION{% endtrans %}"
      VALUE "InternalName", "remoting_core.dll"
      VALUE "OriginalFilename", "remoting_core.dll"
#elif (BINARY == BINARY_DESKTOP)
      VALUE "FileDescription", "{% trans %}REMOTING_DESKTOP_DESCRIPTION{% endtrans %}"
      VALUE "InternalName", "remoting_desktop.exe"
      VALUE "OriginalFilename", "remoting_desktop.exe"
#elif (BINARY == BINARY_HOST_ME2ME)
      VALUE "FileDescription", "{% trans %}REMOTING_HOST_DESCRIPTION{% endtrans %}"
      VALUE "InternalName", "remoting_host.exe"
      VALUE "OriginalFilename", "remoting_host.exe"
#elif (BINARY == BINARY_NATIVE_MESSAGING_HOST)
      VALUE "FileDescription", "{% trans %}REMOTING_NATIVE_MESSAGING_HOST_DESCRIPTION{% endtrans %}"
      VALUE "InternalName", "remoting_native_messaging_host.exe"
      VALUE "OriginalFilename", "remoting_native_messaging_host.exe"
#elif (BINARY == BINARY_REMOTE_ASSISTANCE_HOST)
      VALUE "FileDescription", "{% trans %}REMOTING_REMOTE_ASSISTANCE_HOST_DESCRIPTION{% endtrans %}"
      VALUE "InternalName", "remote_assistance_host.exe"
      VALUE "OriginalFilename", "remote_assistance_host.exe"
#else
#error BINARY must be set to one of BINARY_XXX values.
#endif
    END
  END
  BLOCK "VarFileInfo"
  BEGIN
    VALUE "Translation", 0x{{ lang | GetLangId }}, {{ lang | GetCodepageDecimal }}
  END
END

{% endfor %}
