/* svn.rc: Resource definitions for Subversion programs
 *
 * ====================================================================
 *    Licensed to the Apache Software Foundation (ASF) under one
 *    or more contributor license agreements.  See the NOTICE file
 *    distributed with this work for additional information
 *    regarding copyright ownership.  The ASF licenses this file
 *    to you under the Apache License, Version 2.0 (the
 *    "License"); you may not use this file except in compliance
 *    with the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *    Unless required by applicable law or agreed to in writing,
 *    software distributed under the License is distributed on an
 *    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 *    KIND, either express or implied.  See the License for the
 *    specific language governing permissions and limitations
 *    under the License.
 * ====================================================================
 */

#ifdef APSTUDIO_INVOKED
#  error This file was not generated by Visual Studio.
#endif

#include <winresrc.h>

#define SVN_WIN32_RESOURCE_COMPILATION
#include "../../subversion/include/svn_version.h"

#ifndef APR_STRINGIFY
/** Properly quote a value as a string in the C preprocessor */
#define APR_STRINGIFY(n) APR_STRINGIFY_HELPER(n)
/** Helper macro for APR_STRINGIFY */
#define APR_STRINGIFY_HELPER(n) #n
#endif

#ifndef _DEBUG
# if SVN_VER_REVISION == 0
#  define SVN_FILEFLAGS VS_FF_PRERELEASE
#  define SVN_SPECIALBUILD SVN_VER_TAG
# else
#  define SVN_FILEFLAGS 0x0L
#  undef  SVN_SPECIALBUILD
# endif
#else  /* _DEBUG */
# if SVN_VER_REVISION == 0
#  define SVN_FILEFLAGS VS_FF_DEBUG|VS_FF_PRERELEASE
#  define SVN_SPECIALBUILD SVN_VER_TAG " (debug)"
# else
#  define SVN_FILEFLAGS VS_FF_DEBUG
#  define SVN_SPECIALBUILD "debug build"
# endif
#endif /* _DEBUG */


1 ICON "svn.ico"

VS_VERSION_INFO VERSIONINFO
  FILEVERSION SVN_VER_MAJOR,SVN_VER_MINOR,SVN_VER_PATCH,SVN_VER_REVISION
  PRODUCTVERSION SVN_VER_MAJOR,SVN_VER_MINOR,SVN_VER_PATCH,SVN_VER_REVISION
  FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
  FILEFLAGS SVN_FILEFLAGS
  FILEOS VOS__WINDOWS32
  FILETYPE VFT_APP
  FILESUBTYPE VFT2_UNKNOWN
BEGIN
  BLOCK "StringFileInfo"
  BEGIN
    BLOCK "040904B0"
    BEGIN
      VALUE "CompanyName", "http://subversion.apache.org/\0"
      VALUE "FileDescription", APR_STRINGIFY(SVN_FILE_DESCRIPTION) "\0"
      VALUE "FileVersion", SVN_VER_NUMBER "\0"
      VALUE "InternalName", "SVN\0"
      VALUE "LegalCopyright", "Copyright (c) The Apache Software Foundation\0"
      VALUE "OriginalFilename", APR_STRINGIFY(SVN_FILE_NAME) "\0"
      VALUE "ProductName", "Subversion\0"
      VALUE "ProductVersion", SVN_VERSION "\0"
#ifdef SVN_SPECIALBUILD
      VALUE "SpecialBuild", SVN_SPECIALBUILD "\0"
#endif
    END
  END
  BLOCK "VarFileInfo"
  BEGIN
     VALUE "Translation", 0x409, 1200
  END
END
