/*
 *  tapctl -- Utility to manipulate TUN/TAP adapters on Windows
 *
 *  Copyright (C) 2018 Simon Rozman <simon@rozman.si>
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2
 *  as published by the Free Software Foundation.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License along
 *  with this program; if not, write to the Free Software Foundation, Inc.,
 *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 */

#ifdef HAVE_CONFIG_H
#include <config.h>
#else
#include <config-msvc-version.h>
#endif
#include <winresrc.h>

#pragma code_page(65001) /* UTF8 */

LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL

VS_VERSION_INFO VERSIONINFO
    FILEVERSION OPENVPN_VERSION_RESOURCE
    PRODUCTVERSION OPENVPN_VERSION_RESOURCE
    FILEFLAGSMASK VS_FF_DEBUG | VS_FF_PRERELEASE | VS_FF_PATCHED | VS_FF_PRIVATEBUILD | VS_FF_SPECIALBUILD
#ifdef _DEBUG
    FILEFLAGS VS_FF_DEBUG
#else
    FILEFLAGS 0x0L
#endif
    FILEOS VOS_NT_WINDOWS32
    FILETYPE VFT_APP
    FILESUBTYPE 0x0L
BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "040904b0"
        BEGIN
            VALUE "CompanyName", "The OpenVPN Project"
            VALUE "FileDescription", "Utility to manipulate TUN/TAP adapters on Windows"
            VALUE "FileVersion", PACKAGE_VERSION ".0"
            VALUE "InternalName", "OpenVPN"
            VALUE "LegalCopyright", "Copyright © The OpenVPN Project"
            VALUE "OriginalFilename", "tapctl.exe"
            VALUE "ProductName", "OpenVPN"
            VALUE "ProductVersion", PACKAGE_VERSION ".0"
        END
    END
    BLOCK "VarFileInfo"
    BEGIN
        VALUE "Translation", 0x409, 1200
    END
END

1 RT_MANIFEST "tapctl.exe.manifest"
