#define VERSION_ONLY

#include "fcgid_conf.h"

#define ASF_LICENSE \
  "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\r\n\r\n" \
  "http://www.apache.org/licenses/LICENSE-2.0\r\n\r\n" \
  "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."

/* macro for Win32 .rc files using numeric csv representation */
#define MODFCGID_REVISION_CSV  MODFCGID_VERSION_MAJOR ##, \
                             ##MODFCGID_VERSION_MINOR ##, \
                             ##MODFCGID_VERSION_SUBVER

1 VERSIONINFO
 FILEVERSION MODFCGID_REVISION_CSV,200
 PRODUCTVERSION MODFCGID_REVISION_CSV,200
 FILEFLAGSMASK 0x3fL
#if defined(_DEBUG)
 FILEFLAGS 0x01L
#else
 FILEFLAGS 0x00L
#endif
 FILEOS 0x40004L
 FILETYPE 0x1L
 FILESUBTYPE 0x0L
BEGIN
  BLOCK "StringFileInfo"
  BEGIN
    BLOCK "040904b0"
    BEGIN
      VALUE "Comments", ASF_LICENSE "\0"
      VALUE "CompanyName", "Apache Software Foundation\0"
      VALUE "FileDescription", "fcgid_module for Apache\0"
      VALUE "FileVersion", MODFCGID_REVISION "\0"
      VALUE "InternalName", "mod_fcgid.so\0"
      VALUE "LegalCopyright", MODFCGID_COPYRIGHT "\0"
      VALUE "OriginalFilename", "mod_fcgid.so\0"
      VALUE "ProductName", "Apache HTTP Server Project\0"
      VALUE "ProductVersion", MODFCGID_REVISION "\0"
    END
  END
  BLOCK "VarFileInfo"
  BEGIN
    VALUE "Translation", 0x409, 1200
  END
END
