/**************************************************************
 * 
 * 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.
 * 
 *************************************************************/



#if !defined(ENGLISH)
#define LG_D 					// generate always german version
#endif

#define VER_FIRSTYEAR	2009

#include <windows.h>
#include "version.hrc"

// -----------------------------------------------------------------------
// 				version information
// -----------------------------------------------------------------------

VS_VERSION_INFO versioninfo
	fileversion    VERSION, SUBVERSION, VERVARIANT, VER_COUNT
	productversion VERSION, SUBVERSION, VERVARIANT, VER_COUNT
	fileflagsmask 0x3F
	fileflags
#if defined(DEBUG)
	VS_FF_DEBUG |
#endif
#ifdef VER_PREL
	VS_FF_PRERELEASE |
#endif
	0
#ifndef WIN32
	fileos VOS_DOS_WINDOWS16
#else
	fileos VOS_NT_WINDOWS32
#endif
	filetype VFT_APP
	{
		block "StringFileInfo"
		{
#ifdef LG_D
			block "040704E4"
			{
				// German StringTable
				value "CompanyName",		"Apache Software Foundation\0"
				value "FileDescription", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\0"
				value "FileVersion",		PPS(VER_LEVEL) "\0"
				value "ProductVersion",		PPS(VER_LEVEL) "\0"
				value "OriginalFilename",	PPS(RES_APP_NAME) ".exe\0"
				value "InternalName",		PPS(RES_APP_NAME) "\0"
				value "LegalCopyright",		S_CRIGHT " Apache Software Foundation. All rights reserved.\0"
			}
#else
			block "040904E4"
			{
				// International StringTable
				value "CompanyName", 		"Apache Software Foundation\0"
				value "FileDescription",	"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\0"
				value "FileVersion",		PPS(VER_LEVEL) "\0"
				value "ProductVersion",		PPS(VER_LEVEL) "\0"
				value "OriginalFilename",	PPS(RES_APP_NAME) ".exe\0"
				value "InternalName",		PPS(RES_APP_NAME) "\0"
				value "LegalCopyright", 	S_CRIGHT " Apache Software Foundation. All rights reserved.\0"
			}
#endif
		}

		block "VarFileInfo"
		{
#ifdef LG_D
			value "Translation", 0x0407, 1252
#else
			value "Translation", 0x0409, 1252
#endif
		}
	}
