// Copyright 2013 The Chromium Authors
// 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"
#elif (REMOTING_HOST_BINARY == BINARY_REMOTE_OPEN_URL){#
      Some translations have double quotes, which need to be escaped with `""`.
      #}
      VALUE "FileDescription", "{{
          gettext("URL_FORWARDER_DESCRIPTION")|
            format(gettext("PRODUCT_NAME"))|
            replace('"', '""') }}"
      VALUE "InternalName", "remote_open_url.exe"
      VALUE "OriginalFilename", "remote_open_url.exe"
#elif (REMOTING_HOST_BINARY == BINARY_REMOTE_WEBAUTHN)
      VALUE "FileDescription", "{% trans %}REMOTING_REMOTE_WEBAUTHN_DESCRIPTION{% endtrans %}"
      VALUE "InternalName", "remote_webauthn.exe"
      VALUE "OriginalFilename", "remote_webauthn.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 %}
