// 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 (REMOTING_HOST_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 (REMOTING_HOST_BINARY == BINARY_CORE)
      VALUE "FileDescription", "{% trans %}REMOTING_CORE_DESCRIPTION{% endtrans %}"
      VALUE "InternalName", "remoting_core.dll"
      VALUE "OriginalFilename", "remoting_core.dll"
#elif (REMOTING_HOST_BINARY == BINARY_DESKTOP)
      VALUE "FileDescription", "{% trans %}REMOTING_DESKTOP_DESCRIPTION{% endtrans %}"
      VALUE "InternalName", "remoting_desktop.exe"
      VALUE "OriginalFilename", "remoting_desktop.exe"
#elif (REMOTING_HOST_BINARY == BINARY_HOST_ME2ME)
      VALUE "FileDescription", "{% trans %}REMOTING_HOST_DESCRIPTION{% endtrans %}"
      VALUE "InternalName", "remoting_host.exe"
      VALUE "OriginalFilename", "remoting_host.exe"
#elif (REMOTING_HOST_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 (REMOTING_HOST_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"
#elif (REMOTING_HOST_BINARY == BINARY_HOST_IT2ME_UIACCESS)
      // Intentionally reuse the description for 'BINARY_REMOTE_ASSISTANCE_HOST'
      VALUE "FileDescription", "{% trans %}REMOTING_REMOTE_ASSISTANCE_HOST_DESCRIPTION{% endtrans %}"
      VALUE "InternalName", "remote_assistance_host_uiaccess.exe"
      VALUE "OriginalFilename", "remote_assistance_host_uiaccess.exe"
#elif (REMOTING_HOST_BINARY == BINARY_REMOTE_SECURITY_KEY)
      VALUE "FileDescription", "{% trans %}REMOTING_REMOTE_SECURITY_KEY_DESCRIPTION{% endtrans %}"
      VALUE "InternalName", "remote_security_key.exe"
      VALUE "OriginalFilename", "remote_security_key.exe"
#elif (REMOTING_HOST_BINARY == BINARY_REMOTING_START_HOST)
      VALUE "FileDescription", "{% trans %}REMOTING_START_HOST_DESCRIPTION{% endtrans %}"
      VALUE "InternalName", "remoting_start_host.exe"
      VALUE "OriginalFilename", "remoting_start_host.exe"
#else
#error REMOTING_HOST_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 %}
